mirror of
https://github.com/OCA/report-print-send.git
synced 2025-02-16 07:11:31 +02:00
@@ -4,8 +4,10 @@
|
|||||||
# Copyright (C) 2011 Domsense srl (<http://www.domsense.com>)
|
# Copyright (C) 2011 Domsense srl (<http://www.domsense.com>)
|
||||||
# Copyright (C) 2013-2014 Camptocamp (<http://www.camptocamp.com>)
|
# Copyright (C) 2013-2014 Camptocamp (<http://www.camptocamp.com>)
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
import time
|
||||||
|
|
||||||
from odoo import _, api, exceptions, fields, models
|
from odoo import _, api, exceptions, fields, models
|
||||||
|
from odoo.tools import safe_eval
|
||||||
|
|
||||||
|
|
||||||
class IrActionsReport(models.Model):
|
class IrActionsReport(models.Model):
|
||||||
@@ -106,6 +108,17 @@ class IrActionsReport(models.Model):
|
|||||||
|
|
||||||
if not printer:
|
if not printer:
|
||||||
raise exceptions.Warning(_("No printer configured to print this report."))
|
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
|
# TODO should we use doc_format instead of report_type
|
||||||
return printer.print_document(
|
return printer.print_document(
|
||||||
self, document, doc_format=self.report_type, **behaviour
|
self, document, doc_format=self.report_type, **behaviour
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ class PrintingPrinter(models.Model):
|
|||||||
def print_file(self, file_name, report=None, **print_opts):
|
def print_file(self, file_name, report=None, **print_opts):
|
||||||
""" Print a file """
|
""" Print a file """
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
|
title = print_opts.pop("title", file_name)
|
||||||
connection = self.server_id._open_connection(raise_on_error=True)
|
connection = self.server_id._open_connection(raise_on_error=True)
|
||||||
options = self.print_options(report=report, **print_opts)
|
options = self.print_options(report=report, **print_opts)
|
||||||
|
|
||||||
@@ -182,10 +183,14 @@ class PrintingPrinter(models.Model):
|
|||||||
"Sending job to CUPS printer %s on %s with options %s"
|
"Sending job to CUPS printer %s on %s with options %s"
|
||||||
% (self.system_name, self.server_id.address, options)
|
% (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(
|
_logger.info(
|
||||||
"Printing job: '{}' on {}".format(file_name, self.server_id.address)
|
"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
|
return True
|
||||||
|
|
||||||
def set_default(self):
|
def set_default(self):
|
||||||
|
|||||||
@@ -2,3 +2,11 @@ To configure this module, you need to:
|
|||||||
|
|
||||||
#. Enable the "Printing / Print User" option under access
|
#. Enable the "Printing / Print User" option under access
|
||||||
rights to give users the ability to view the print menu.
|
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)
|
||||||
|
<https://www.cups.org/doc/man-cupsd.conf.html>` for details.
|
||||||
|
|||||||
@@ -10,3 +10,4 @@
|
|||||||
* Jairo Llopis <jairo.llopis@tecnativa.com>
|
* Jairo Llopis <jairo.llopis@tecnativa.com>
|
||||||
* Graeme Gellatly <graeme@o4sb.com>
|
* Graeme Gellatly <graeme@o4sb.com>
|
||||||
* Rod Schouteden <rod@schout-it.be>
|
* Rod Schouteden <rod@schout-it.be>
|
||||||
|
* Alexandre Fayolle <alexandre.fayolle@camptocamp.com>
|
||||||
|
|||||||
Reference in New Issue
Block a user