mirror of
https://github.com/OCA/report-print-send.git
synced 2025-02-16 07:11:31 +02:00
* Set api.multi for action called as `object` on view * Merge syleam printers module into base_report_to_printer (#60) * [IMP] Updated unit tests * [FIX] Fixed renamed attributes * [FIX] Remove deleted fields * [IMP] Add printing.server and printing.job models * [IMP] Allow to cancel all jobs, enable, and disable printers * [IMP] Split the cups part of print_document into a new print_file method * [IMP] Updated cron job to run the action_update_jobs method * [ADD] Add a migration script to create a printing server from configuration * [MIG] Migrate base_report_to_printer to v10.0 Removed deprecated methods on printing.printer (replaced by methods on printing.server) * [IMP] Add wkhtmltopdf in travis configuration file * [FIX] base_report_to_printer: Fix Update Job Cron * Fix API issue with Update Job Cron ** Forward Port from 9.0 * [FIX] Fixed the res.users view The string attribute should not be used as a selector, because it is translatable. * [FIX] Fixed the print_document method of report The new API migration was made to @api.multi because of the "cr, uid, ids" signature, but "ids" was the ids of the records to print here, not the report's ids. Also, the new API version of "get_pdf" get directly the ids of the records to print in the standard module, not a recordset. * [FIX] UI is now (un)blocked only when using qweb-pdf reports in standard addons
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright (c) 2014 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import models, exceptions, _, api
|
|
|
|
|
|
class Report(models.Model):
|
|
_inherit = 'report'
|
|
|
|
@api.model
|
|
def print_document(self, record_ids, report_name, html=None, data=None):
|
|
""" Print a document, do not return the document file """
|
|
document = self.with_context(must_skip_send_to_printer=True).get_pdf(
|
|
record_ids, report_name, html=html, data=data)
|
|
report = self._get_report_from_name(report_name)
|
|
behaviour = report.behaviour()[report.id]
|
|
printer = behaviour['printer']
|
|
if not printer:
|
|
raise exceptions.Warning(
|
|
_('No printer configured to print this report.')
|
|
)
|
|
return printer.print_document(report, document, report.report_type)
|
|
|
|
@api.multi
|
|
def _can_print_report(self, behaviour, printer, document):
|
|
"""Predicate that decide if report can be sent to printer
|
|
|
|
If you want to prevent `get_pdf` to send report you can set
|
|
the `must_skip_send_to_printer` key to True in the context
|
|
"""
|
|
if self.env.context.get('must_skip_send_to_printer'):
|
|
return False
|
|
if behaviour['action'] == 'server' and printer and document:
|
|
return True
|
|
return False
|
|
|
|
@api.model
|
|
def get_pdf(self, docids, report_name, html=None, data=None):
|
|
""" Generate a PDF and returns it.
|
|
|
|
If the action configured on the report is server, it prints the
|
|
generated document as well.
|
|
"""
|
|
document = super(Report, self).get_pdf(
|
|
docids, report_name, html=html, data=data)
|
|
|
|
report = self._get_report_from_name(report_name)
|
|
behaviour = report.behaviour()[report.id]
|
|
printer = behaviour['printer']
|
|
can_print_report = self._can_print_report(behaviour, printer, document)
|
|
|
|
if can_print_report:
|
|
printer.print_document(report, document, report.report_type)
|
|
|
|
return document
|