diff --git a/base_report_to_printer/README.rst b/base_report_to_printer/README.rst index 51c0e39..8ff2575 100644 --- a/base_report_to_printer/README.rst +++ b/base_report_to_printer/README.rst @@ -5,7 +5,7 @@ This module allows users to send reports to a printer attached to the server. It adds an optional behaviour on reports to send it directly to a printer. -* `Send to Client` is the default behavious providing you a downloadable PDF +* `Send to Client` is the default behaviour providing you a downloadable PDF * `Send to Printer` prints the report on selected printer Report behaviour is defined by settings. @@ -23,13 +23,18 @@ After installing enable the "Printing / Print Operator" option under access rights to give users the ability to view the print menu. -To show all available printers for your server, uses +To show all available printers for your server, use the `Settings/Configuration/Printing/Update Printers from CUPS` wizard. -Then goto the user profile and set the users printing action and default +Then go to the user profile and set the users printing action and default printer. +Caveat +------ + +The notification when a report is sent to a printer will not be +displayed for the deprecated report types (RML, Webkit, ...). Dependencies ------------ diff --git a/base_report_to_printer/__openerp__.py b/base_report_to_printer/__openerp__.py index 511c179..8d95719 100644 --- a/base_report_to_printer/__openerp__.py +++ b/base_report_to_printer/__openerp__.py @@ -35,6 +35,7 @@ 'security/security.xml', 'printing_data.xml', 'printing_view.xml', + 'base_report_to_printer.xml', 'wizard/update_printers.xml', ], 'installable': True, diff --git a/base_report_to_printer/base_report_to_printer.xml b/base_report_to_printer/base_report_to_printer.xml new file mode 100644 index 0000000..c1c0bbc --- /dev/null +++ b/base_report_to_printer/base_report_to_printer.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/base_report_to_printer/i18n/base_report_to_printer.pot b/base_report_to_printer/i18n/base_report_to_printer.pot index 58c55d5..25a506b 100644 --- a/base_report_to_printer/i18n/base_report_to_printer.pot +++ b/base_report_to_printer/i18n/base_report_to_printer.pot @@ -1,16 +1,15 @@ -# Translation of OpenERP Server. +# Translation of Odoo Server. # This file contains the translation of the following modules: -# * base_report_to_printer +# * base_report_to_printer # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" +"Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-05 14:48+0000\n" -"PO-Revision-Date: 2014-11-17 12:50+0000\n" +"POT-Creation-Date: 2015-01-21 14:44+0000\n" +"PO-Revision-Date: 2015-01-21 14:44+0000\n" "Last-Translator: <>\n" "Language-Team: \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -38,16 +37,22 @@ msgid "Cancel" msgstr "" #. module: base_report_to_printer -#: field:printing.action,create_uid:0 field:printing.printer,create_uid:0 -#: field:printing.printer.polling,create_uid:0 +#: code:addons/base_report_to_printer/wizard/update_printers.py:50 +#, python-format +msgid "Could not get the list of printers from the CUPS server (%s:%s)" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.action,create_uid:0 +#: field:printing.printer,create_uid:0 #: field:printing.printer.update.wizard,create_uid:0 #: field:printing.report.xml.action,create_uid:0 msgid "Created by" msgstr "" #. module: base_report_to_printer -#: field:printing.action,create_date:0 field:printing.printer,create_date:0 -#: field:printing.printer.polling,create_date:0 +#: field:printing.action,create_date:0 +#: field:printing.printer,create_date:0 #: field:printing.printer.update.wizard,create_date:0 #: field:printing.report.xml.action,create_date:0 msgid "Created on" @@ -63,40 +68,55 @@ msgstr "" msgid "Default Printer" msgstr "" +#. module: base_report_to_printer +#. openerp-web +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:27 +#, python-format +msgid "Document sent to the printer " +msgstr "" + #. module: base_report_to_printer #: selection:printing.printer,status:0 msgid "Error" msgstr "" #. module: base_report_to_printer -#: field:printing.action,id:0 field:printing.printer,id:0 -#: field:printing.printer.polling,id:0 +#. openerp-web +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:30 +#, python-format +msgid "Error when sending the document to the printer " +msgstr "" + +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/printing.py:140 +#, python-format +msgid "Failed to connect to the CUPS server on %s:%s. Check that the CUPS server is running and that you can reach it from the Odoo server." +msgstr "" + +#. module: base_report_to_printer +#: field:printing.action,id:0 +#: field:printing.printer,id:0 #: field:printing.printer.update.wizard,id:0 #: field:printing.report.xml.action,id:0 msgid "ID" msgstr "" #. module: base_report_to_printer -#: field:printing.action,write_uid:0 field:printing.printer,write_uid:0 -#: field:printing.printer.polling,write_uid:0 +#: field:printing.action,write_uid:0 +#: field:printing.printer,write_uid:0 #: field:printing.printer.update.wizard,write_uid:0 #: field:printing.report.xml.action,write_uid:0 msgid "Last Updated by" msgstr "" #. module: base_report_to_printer -#: field:printing.action,write_date:0 field:printing.printer,write_date:0 -#: field:printing.printer.polling,write_date:0 +#: field:printing.action,write_date:0 +#: field:printing.printer,write_date:0 #: field:printing.printer.update.wizard,write_date:0 #: field:printing.report.xml.action,write_date:0 msgid "Last Updated on" msgstr "" -#. module: base_report_to_printer -#: field:printing.printer.polling,last_update:0 -msgid "Last update" -msgstr "" - #. module: base_report_to_printer #: field:printing.printer,location:0 msgid "Location" @@ -108,10 +128,17 @@ msgid "Model" msgstr "" #. module: base_report_to_printer -#: field:printing.action,name:0 field:printing.printer,name:0 +#: field:printing.action,name:0 +#: field:printing.printer,name:0 msgid "Name" msgstr "" +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/ir_report.py:114 +#, python-format +msgid "No printer configured to print this report." +msgstr "" + #. module: base_report_to_printer #: view:res.users:base_report_to_printer.view_printing_users_form msgid "Preferences" @@ -142,11 +169,6 @@ msgstr "" msgid "Printers" msgstr "" -#. module: base_report_to_printer -#: model:ir.model,name:base_report_to_printer.model_printing_printer_polling -msgid "Printers Polling" -msgstr "" - #. module: base_report_to_printer #: model:ir.ui.menu,name:base_report_to_printer.menu_printing_main #: selection:printing.printer,status:0 @@ -165,8 +187,12 @@ msgid "Printing action" msgstr "" #. module: base_report_to_printer +#. openerp-web +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:26 +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:29 #: model:ir.model,name:base_report_to_printer.model_report #: field:printing.report.xml.action,report_id:0 +#, python-format msgid "Report" msgstr "" @@ -229,9 +255,7 @@ msgstr "" #. module: base_report_to_printer #: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard -msgid "" -"This process will create all the missing printers from the current CUPS " -"server." +msgid "This process will create all missing printers from the current CUPS server." msgstr "" #. module: base_report_to_printer @@ -239,6 +263,11 @@ msgstr "" msgid "Type" msgstr "" +#. module: base_report_to_printer +#: field:printing.printer,uri:0 +msgid "URI" +msgstr "" + #. module: base_report_to_printer #: selection:printing.printer,status:0 msgid "Unavailable" @@ -256,11 +285,6 @@ msgstr "" msgid "Update Printers from CUPS" msgstr "" -#. module: base_report_to_printer -#: field:printing.printer,uri:0 -msgid "URI" -msgstr "" - #. module: base_report_to_printer #: field:printing.report.xml.action,user_id:0 msgid "User" @@ -270,3 +294,9 @@ msgstr "" #: model:ir.model,name:base_report_to_printer.model_res_users msgid "Users" msgstr "" + +#. module: base_report_to_printer +#: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard +msgid "or" +msgstr "" + diff --git a/base_report_to_printer/i18n/fr.po b/base_report_to_printer/i18n/fr.po index 1e06bfa..8c198cd 100644 --- a/base_report_to_printer/i18n/fr.po +++ b/base_report_to_printer/i18n/fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenERP Server 7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-05 14:48+0000\n" +"POT-Creation-Date: 2015-01-21 14:44+0000\n" "PO-Revision-Date: 2014-02-25 15:06+0000\n" "Last-Translator: Guewen Baconnier @ Camptocamp \n" "Language-Team: \n" @@ -38,9 +38,14 @@ msgstr "Disponible" msgid "Cancel" msgstr "Annuler" +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/wizard/update_printers.py:50 +#, python-format +msgid "Could not get the list of printers from the CUPS server (%s:%s)" +msgstr "Impossible d'obtenir la liste des imprimantes depuis le serveur CUPS (%s:%s)" + #. module: base_report_to_printer #: field:printing.action,create_uid:0 field:printing.printer,create_uid:0 -#: field:printing.printer.polling,create_uid:0 #: field:printing.printer.update.wizard,create_uid:0 #: field:printing.report.xml.action,create_uid:0 msgid "Created by" @@ -48,7 +53,6 @@ msgstr "" #. module: base_report_to_printer #: field:printing.action,create_date:0 field:printing.printer,create_date:0 -#: field:printing.printer.polling,create_date:0 #: field:printing.printer.update.wizard,create_date:0 #: field:printing.report.xml.action,create_date:0 msgid "Created on" @@ -64,14 +68,36 @@ msgstr "Par défaut" msgid "Default Printer" msgstr "Imprimante par défaut" +#. module: base_report_to_printer +#. openerp-web +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:27 +#, python-format +msgid "Document sent to the printer " +msgstr "Document envoyé à l'imprimante " + #. module: base_report_to_printer #: selection:printing.printer,status:0 msgid "Error" msgstr "Erreur" +#. module: base_report_to_printer +#. openerp-web +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:30 +#, python-format +msgid "Error when sending the document to the printer " +msgstr "Erreur lors de l'envoi du document à l'imprimante " + +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/printing.py:140 +#, python-format +msgid "" +"Failed to connect to the CUPS server on %s:%s. Check that the CUPS server is " +"running and that you can reach it from the Odoo server." +msgstr "La connexion au serveur CUPS %s:%s a échoué. Veuillez contrôler que le " +"serveur soit démarré et qu'il soit atteignable depuis le serveur Odoo. " + #. module: base_report_to_printer #: field:printing.action,id:0 field:printing.printer,id:0 -#: field:printing.printer.polling,id:0 #: field:printing.printer.update.wizard,id:0 #: field:printing.report.xml.action,id:0 msgid "ID" @@ -79,7 +105,6 @@ msgstr "" #. module: base_report_to_printer #: field:printing.action,write_uid:0 field:printing.printer,write_uid:0 -#: field:printing.printer.polling,write_uid:0 #: field:printing.printer.update.wizard,write_uid:0 #: field:printing.report.xml.action,write_uid:0 msgid "Last Updated by" @@ -87,17 +112,11 @@ msgstr "" #. module: base_report_to_printer #: field:printing.action,write_date:0 field:printing.printer,write_date:0 -#: field:printing.printer.polling,write_date:0 #: field:printing.printer.update.wizard,write_date:0 #: field:printing.report.xml.action,write_date:0 msgid "Last Updated on" msgstr "" -#. module: base_report_to_printer -#: field:printing.printer.polling,last_update:0 -msgid "Last update" -msgstr "" - #. module: base_report_to_printer #: field:printing.printer,location:0 msgid "Location" @@ -113,6 +132,12 @@ msgstr "Modèle" msgid "Name" msgstr "Nom" +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/ir_report.py:114 +#, python-format +msgid "No printer configured to print this report." +msgstr "Pas d'imprimante configurée pour imprimer ce rapport." + #. module: base_report_to_printer #: view:res.users:base_report_to_printer.view_printing_users_form msgid "Preferences" @@ -143,11 +168,6 @@ msgstr "Imprimante" msgid "Printers" msgstr "Imprimantes" -#. module: base_report_to_printer -#: model:ir.model,name:base_report_to_printer.model_printing_printer_polling -msgid "Printers Polling" -msgstr "Recherche d'imprimantes" - #. module: base_report_to_printer #: model:ir.ui.menu,name:base_report_to_printer.menu_printing_main #: selection:printing.printer,status:0 @@ -166,8 +186,12 @@ msgid "Printing action" msgstr "Action d'impression" #. module: base_report_to_printer +#. openerp-web +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:26 +#: code:addons/base_report_to_printer/static/src/js/qwebactionmanager.js:29 #: model:ir.model,name:base_report_to_printer.model_report #: field:printing.report.xml.action,report_id:0 +#, python-format msgid "Report" msgstr "Rapport" @@ -232,8 +256,7 @@ msgstr "" #. module: base_report_to_printer #: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard msgid "" -"This process will create all the missing printers from the current CUPS " -"server." +"This process will create all missing printers from the current CUPS server." msgstr "" "Cette opération va créer les imprimantes manquantes à partir du serveur CUPS " "courant." @@ -243,6 +266,11 @@ msgstr "" msgid "Type" msgstr "Type" +#. module: base_report_to_printer +#: field:printing.printer,uri:0 +msgid "URI" +msgstr "" + #. module: base_report_to_printer #: selection:printing.printer,status:0 msgid "Unavailable" @@ -260,11 +288,6 @@ msgstr "Inconnu" msgid "Update Printers from CUPS" msgstr "Mettre à jour les imprimantes depuis CUPS" -#. module: base_report_to_printer -#: field:printing.printer,uri:0 -msgid "URI" -msgstr "" - #. module: base_report_to_printer #: field:printing.report.xml.action,user_id:0 msgid "User" @@ -274,3 +297,8 @@ msgstr "Utilisateur" #: model:ir.model,name:base_report_to_printer.model_res_users msgid "Users" msgstr "Utilisateurs" + +#. module: base_report_to_printer +#: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard +msgid "or" +msgstr "ou" diff --git a/base_report_to_printer/ir_report.py b/base_report_to_printer/ir_report.py index 4b61054..7238277 100644 --- a/base_report_to_printer/ir_report.py +++ b/base_report_to_printer/ir_report.py @@ -52,6 +52,23 @@ class ReportXml(models.Model): 'user basis' ) + @api.model + def print_action_for_report_name(self, report_name): + """ Returns if the action is a direct print or pdf + + Called from js + """ + report_obj = self.env['report'] + report = report_obj._get_report_from_name(report_name) + if not report: + return {} + result = report.behaviour()[report.id] + serializable_result = { + 'action': result['action'], + 'printer_name': result['printer'].name, + } + return serializable_result + @api.multi def behaviour(self): result = {} diff --git a/base_report_to_printer/report.py b/base_report_to_printer/report.py index 5749e58..77d4d01 100644 --- a/base_report_to_printer/report.py +++ b/base_report_to_printer/report.py @@ -19,21 +19,40 @@ # ############################################################################## -from openerp import models +from openerp import models, exceptions, _ class Report(models.Model): _inherit = 'report' + def print_document(self, cr, uid, ids, report_name, html=None, + data=None, context=None): + """ Print a document, do not return the document file """ + document = super(Report, self).get_pdf(cr, uid, ids, report_name, + html=html, data=data, + context=context) + report = self._get_report_from_name(cr, uid, 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) + def get_pdf(self, cr, uid, ids, report_name, html=None, data=None, context=None): - result = super(Report, self).get_pdf(cr, uid, ids, report_name, - html=html, data=data, - context=context) + """ 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(cr, uid, ids, report_name, + html=html, data=data, + context=context) report = self._get_report_from_name(cr, uid, report_name) - data = report.behaviour()[report.id] - action = data['action'] - printer = data['printer'] - if action != 'client' and result: - printer.print_document(report, result, report.report_type) - return result + behaviour = report.behaviour()[report.id] + printer = behaviour['printer'] + if behaviour['action'] == 'server' and printer and document: + printer.print_document(report, document, report.report_type) + return document diff --git a/base_report_to_printer/static/src/js/qwebactionmanager.js b/base_report_to_printer/static/src/js/qwebactionmanager.js new file mode 100644 index 0000000..987d252 --- /dev/null +++ b/base_report_to_printer/static/src/js/qwebactionmanager.js @@ -0,0 +1,43 @@ +openerp.base_report_to_printer = function(instance) { + + instance.web.ActionManager.include({ + ir_actions_report_xml: function(action, options) { + instance.web.blockUI(); + action = _.clone(action); + var _t = instance.web._t; + var self = this; + var _super = this._super; + + if ('report_type' in action && action.report_type === 'qweb-pdf') { + new instance.web.Model('ir.actions.report.xml') + .call('print_action_for_report_name', [action.report_name]) + .then(function(print_action){ + if (print_action && print_action['action'] === 'server') { + instance.web.unblockUI(); + new instance.web.Model('report') + .call('print_document', + [action.context.active_ids, + action.report_name, + ], + {data: action.data || {}, + context: action.context || {}, + }) + .then(function(result){ + self.do_notify(_t('Report'), + _t('Document sent to the printer ') + print_action.printer_name); + }).fail(function() { + self.do_notify(_t('Report'), + _t('Error when sending the document to the printer ') + print_action.printer_name); + + }); + } else { + return _super.apply(self, [action, options]); + } + }); + } else { + return _super.apply(self, [action, options]); + } + } + }); +}; +