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