From 6c3c7f3d1b0aaccf95eb76598921fd94c64e7f00 Mon Sep 17 00:00:00 2001 From: Alexandre Fayolle Date: Tue, 9 Nov 2021 11:47:44 +0100 Subject: [PATCH] [IMP] 14.0 base_report_to_printer: improve job title instead of sending a temporary random file name as the title of the job, use the report file name. Since this is not displayed by default by cups, document how to configure the CUPS server so that the information can be displayed. Clean up the temporary file after printing to avoid cluttering the server in the long run. --- base_report_to_printer/models/ir_actions_report.py | 13 +++++++++++++ base_report_to_printer/models/printing_printer.py | 7 ++++++- base_report_to_printer/readme/CONFIGURE.rst | 8 ++++++++ base_report_to_printer/readme/CONTRIBUTORS.rst | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/base_report_to_printer/models/ir_actions_report.py b/base_report_to_printer/models/ir_actions_report.py index ef4de0a7de6..a36f315ffc9 100644 --- a/base_report_to_printer/models/ir_actions_report.py +++ b/base_report_to_printer/models/ir_actions_report.py @@ -4,8 +4,10 @@ # Copyright (C) 2011 Domsense srl () # Copyright (C) 2013-2014 Camptocamp () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import time from odoo import _, api, exceptions, fields, models +from odoo.tools import safe_eval class IrActionsReport(models.Model): @@ -106,6 +108,17 @@ def print_document(self, record_ids, data=None): if not printer: raise exceptions.Warning(_("No printer configured to print this report.")) + if self.print_report_name: + report_file_names = [ + safe_eval(self.print_report_name, {"object": obj, "time": time}) + for obj in self.env[self.model].browse(record_ids) + ] + title = " ".join(report_file_names) + if len(title) > 80: + title = title[:80] + "…" + else: + title = self.report_name + behaviour["title"] = title # TODO should we use doc_format instead of report_type return printer.print_document( self, document, doc_format=self.report_type, **behaviour diff --git a/base_report_to_printer/models/printing_printer.py b/base_report_to_printer/models/printing_printer.py index d29813c83ca..2dcea195354 100644 --- a/base_report_to_printer/models/printing_printer.py +++ b/base_report_to_printer/models/printing_printer.py @@ -175,6 +175,7 @@ def print_options(self, report=None, **print_opts): def print_file(self, file_name, report=None, **print_opts): """ Print a file """ self.ensure_one() + title = print_opts.pop("title", file_name) connection = self.server_id._open_connection(raise_on_error=True) options = self.print_options(report=report, **print_opts) @@ -182,10 +183,14 @@ def print_file(self, file_name, report=None, **print_opts): "Sending job to CUPS printer %s on %s with options %s" % (self.system_name, self.server_id.address, options) ) - connection.printFile(self.system_name, file_name, file_name, options=options) + connection.printFile(self.system_name, file_name, title, options=options) _logger.info( "Printing job: '{}' on {}".format(file_name, self.server_id.address) ) + try: + os.remove(file_name) + except OSError as exc: + _logger.warning("Unable to remove temporary file %s: %s", file_name, exc) return True def set_default(self): diff --git a/base_report_to_printer/readme/CONFIGURE.rst b/base_report_to_printer/readme/CONFIGURE.rst index 8bd851d5e84..0b12368dff5 100644 --- a/base_report_to_printer/readme/CONFIGURE.rst +++ b/base_report_to_printer/readme/CONFIGURE.rst @@ -2,3 +2,11 @@ To configure this module, you need to: #. Enable the "Printing / Print User" option under access rights to give users the ability to view the print menu. + + +The jobs will be sent to the printer with a name matching the print_report_name +of the report (truncated at 80 characters). By default this will not be +displayed by CUPS web interface or in Odoo. To see this information, you need +to change the configuration of your CUPS server and set the JobPrivateValue +directive to "job-name", and reload the server. See `cupsd.conf(5) +` for details. diff --git a/base_report_to_printer/readme/CONTRIBUTORS.rst b/base_report_to_printer/readme/CONTRIBUTORS.rst index ad2517c90aa..75647ea0a06 100644 --- a/base_report_to_printer/readme/CONTRIBUTORS.rst +++ b/base_report_to_printer/readme/CONTRIBUTORS.rst @@ -10,3 +10,4 @@ * Jairo Llopis * Graeme Gellatly * Rod Schouteden +* Alexandre Fayolle