The alteration of the context has no effect

This commit is contained in:
Guewen Baconnier
2015-01-30 16:42:44 +01:00
committed by Carlos Roca
parent 71c3c64866
commit 241f8da60b

View File

@@ -25,28 +25,13 @@ from openerp import models, exceptions, _
class Report(models.Model): class Report(models.Model):
_inherit = 'report' _inherit = 'report'
def _can_send_report(self, cr, uid, ids, behaviour, printer, document,
context=None):
"""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_sent_to_printer` key to True in the context
"""
if context is None:
context = self.pool['res.users'].context_get(cr, uid)
if context.get('must_skip_sent_to_printer'):
return False
if behaviour['action'] == 'server' and printer and document:
return True
return False
def print_document(self, cr, uid, ids, report_name, html=None, def print_document(self, cr, uid, ids, report_name, html=None,
data=None, context=None): data=None, context=None):
""" Print a document, do not return the document file """ """ Print a document, do not return the document file """
if context is None: if context is None:
context = self.pool['res.users'].context_get(cr, uid) context = self.pool['res.users'].context_get(cr, uid)
local_context = dict(context) local_context = context.copy()
local_context['must_skip_sent_to_printer'] = True local_context['must_skip_send_to_printer'] = True
document = self.get_pdf(cr, uid, ids, report_name, document = self.get_pdf(cr, uid, ids, report_name,
html=html, data=data, context=local_context) html=html, data=data, context=local_context)
report = self._get_report_from_name(cr, uid, report_name) report = self._get_report_from_name(cr, uid, report_name)
@@ -58,6 +43,21 @@ class Report(models.Model):
) )
return printer.print_document(report, document, report.report_type) return printer.print_document(report, document, report.report_type)
def _can_print_report(self, cr, uid, ids, behaviour, printer, document,
context=None):
"""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 context is None:
context = self.pool['res.users'].context_get(cr, uid)
if context.get('must_skip_send_to_printer'):
return False
if behaviour['action'] == 'server' and printer and document:
return True
return False
def get_pdf(self, cr, uid, ids, report_name, html=None, def get_pdf(self, cr, uid, ids, report_name, html=None,
data=None, context=None): data=None, context=None):
""" Generate a PDF and returns it. """ Generate a PDF and returns it.
@@ -65,18 +65,15 @@ class Report(models.Model):
If the action configured on the report is server, it prints the If the action configured on the report is server, it prints the
generated document as well. generated document as well.
""" """
if context is None:
context = self.pool['res.users'].context_get(cr, uid)
document = super(Report, self).get_pdf(cr, uid, ids, report_name, document = super(Report, self).get_pdf(cr, uid, ids, report_name,
html=html, data=data, html=html, data=data,
context=context) context=context)
report = self._get_report_from_name(cr, uid, report_name) report = self._get_report_from_name(cr, uid, report_name)
behaviour = report.behaviour()[report.id] behaviour = report.behaviour()[report.id]
printer = behaviour['printer'] printer = behaviour['printer']
can_send_report = self._can_send_report(cr, uid, ids, can_print_report = self._can_print_report(cr, uid, ids,
behaviour, printer, document, behaviour, printer, document,
context=context) context=context)
if can_send_report: if can_print_report:
printer.print_document(report, document, report.report_type) printer.print_document(report, document, report.report_type)
context['must_skip_sent_to_printer'] = True
return document return document