diff --git a/base_report_to_printer/README.rst b/base_report_to_printer/README.rst new file mode 100644 index 00000000000..51c0e390e75 --- /dev/null +++ b/base_report_to_printer/README.rst @@ -0,0 +1,50 @@ +Report to printer +----------------- +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 Printer` prints the report on selected printer + +Report behaviour is defined by settings. + + +Settings can be configured: + +* globaly +* per user +* per report +* per user and report + + +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 +`Settings/Configuration/Printing/Update Printers from CUPS` wizard. + + +Then goto the user profile and set the users printing action and default +printer. + + +Dependencies +------------ + +This module requires pycups +https://pypi.python.org/pypi/pycups + + +Contributors +------------ + +* Ferran Pegueroles +* Albert Cervera i Areny +* Davide Corio +* Lorenzo Battistini +* Yannick Vaucher +* Lionel Sausin +* Guewen Baconnier diff --git a/base_report_to_printer/__init__.py b/base_report_to_printer/__init__.py new file mode 100644 index 00000000000..ddd67e1a648 --- /dev/null +++ b/base_report_to_printer/__init__.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (c) 2007 Ferran Pegueroles +# Copyright (c) 2009 Albert Cervera i Areny +# Copyright (C) 2011 Agile Business Group sagl () +# Copyright (C) 2011 Domsense srl () +# Copyright (C) 2013-2014 Camptocamp () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import printing +from . import report +from . import report_xml_action +from . import report_service +from . import users +from . import ir_report +from . import wizard diff --git a/base_report_to_printer/__openerp__.py b/base_report_to_printer/__openerp__.py new file mode 100644 index 00000000000..511c179086e --- /dev/null +++ b/base_report_to_printer/__openerp__.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (c) 2007 Ferran Pegueroles +# Copyright (c) 2009 Albert Cervera i Areny +# Copyright (C) 2011 Agile Business Group sagl () +# Copyright (C) 2011 Domsense srl () +# Copyright (C) 2013-2014 Camptocamp () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + 'name': "Report to printer", + 'version': '0.1.1', + 'category': 'Generic Modules/Base', + 'author': 'Agile Business Group & Domsense, Pegueroles SCP, NaN', + 'website': 'http://www.agilebg.com', + 'license': 'AGPL-3', + "depends": ['base', + 'report', + ], + 'data': [ + 'security/security.xml', + 'printing_data.xml', + 'printing_view.xml', + 'wizard/update_printers.xml', + ], + 'installable': True, + 'auto_install': False, + 'application': True, + 'external_dependencies': { + 'python': ['cups'] + } +} diff --git a/base_report_to_printer/i18n/base_report_to_printer.pot b/base_report_to_printer/i18n/base_report_to_printer.pot new file mode 100644 index 00000000000..58c55d5f3ff --- /dev/null +++ b/base_report_to_printer/i18n/base_report_to_printer.pot @@ -0,0 +1,272 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * base_report_to_printer +# +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" +"PO-Revision-Date: 2014-11-17 12:50+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" +"Plural-Forms: \n" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,property_printing_action:0 +#: field:printing.report.xml.action,action:0 +msgid "Action" +msgstr "" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,printing_action_ids:0 +msgid "Actions" +msgstr "" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Available" +msgstr "" + +#. module: base_report_to_printer +#: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard +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 +#: 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.printer.update.wizard,create_date:0 +#: field:printing.report.xml.action,create_date:0 +msgid "Created on" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.printer,default:0 +msgid "Default" +msgstr "" + +#. module: base_report_to_printer +#: field:res.users,printing_printer_id:0 +msgid "Default 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 +#: 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.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.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" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.printer,model:0 +msgid "Model" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.action,name:0 field:printing.printer,name:0 +msgid "Name" +msgstr "" + +#. module: base_report_to_printer +#: view:res.users:base_report_to_printer.view_printing_users_form +msgid "Preferences" +msgstr "" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:base_report_to_printer.action_report_xml_form +msgid "Print" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_printing_action +msgid "Print Job Action" +msgstr "" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,printing_printer_id:0 +#: model:ir.model,name:base_report_to_printer.model_printing_printer +#: field:printing.report.xml.action,printer_id:0 +msgid "Printer" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.ui.menu,name:base_report_to_printer.menu_printing_printer_form +#: view:printing.printer:base_report_to_printer.view_printing_printer_form +#: view:printing.printer:base_report_to_printer.view_printing_printer_search +#: view:printing.printer:base_report_to_printer.view_printing_printer_tree +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 +#: view:res.users:base_report_to_printer.view_printing_users_prefs +msgid "Printing" +msgstr "" + +#. module: base_report_to_printer +#: model:res.groups,name:base_report_to_printer.res_groups_printingprintoperator0 +msgid "Printing / Print Operator" +msgstr "" + +#. module: base_report_to_printer +#: field:res.users,printing_action:0 +msgid "Printing action" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_report +#: field:printing.report.xml.action,report_id:0 +msgid "Report" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_printing_report_xml_action +#: view:printing.report.xml.action:base_report_to_printer.printing_report_xml_action_form +#: view:printing.report.xml.action:base_report_to_printer.printing_report_xml_action_tree +msgid "Report Printing Actions" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.ui.menu,name:base_report_to_printer.menu_printing_reports +msgid "Reports" +msgstr "" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:base_report_to_printer.action_report_xml_form +msgid "Security" +msgstr "" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Server Error" +msgstr "" + +#. module: base_report_to_printer +#: view:printing.printer:base_report_to_printer.view_printing_printer_form +msgid "Set Default" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.actions.act_window,name:base_report_to_printer.action_printing_printer_form +msgid "Show Printers" +msgstr "" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:base_report_to_printer.action_report_xml_form +msgid "Specific actions per user" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.printer,status:0 +msgid "Status" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.printer,status_message:0 +msgid "Status message" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.printer,system_name:0 +msgid "System name" +msgstr "" + +#. module: base_report_to_printer +#: help:ir.actions.report.xml,printing_action_ids:0 +msgid "This field allows configuring action and printer on a per user basis" +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." +msgstr "" + +#. module: base_report_to_printer +#: field:printing.action,type:0 +msgid "Type" +msgstr "" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Unavailable" +msgstr "" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Unknown" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.actions.act_window,name:base_report_to_printer.action_printer_update_wizard +#: model:ir.ui.menu,name:base_report_to_printer.menu_printer_update_wizard +#: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard +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" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_res_users +msgid "Users" +msgstr "" diff --git a/base_report_to_printer/i18n/fr.po b/base_report_to_printer/i18n/fr.po new file mode 100644 index 00000000000..1e06bfab045 --- /dev/null +++ b/base_report_to_printer/i18n/fr.po @@ -0,0 +1,276 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * base_report_to_printer +# +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" +"PO-Revision-Date: 2014-02-25 15:06+0000\n" +"Last-Translator: Guewen Baconnier @ Camptocamp \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-05-06 07:28+0000\n" +"X-Generator: Launchpad (build 16996)\n" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,property_printing_action:0 +#: field:printing.report.xml.action,action:0 +msgid "Action" +msgstr "Action" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,printing_action_ids:0 +msgid "Actions" +msgstr "Actions" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Available" +msgstr "Disponible" + +#. module: base_report_to_printer +#: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard +msgid "Cancel" +msgstr "Annuler" + +#. 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" +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" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.printer,default:0 +msgid "Default" +msgstr "Par défaut" + +#. module: base_report_to_printer +#: field:res.users,printing_printer_id:0 +msgid "Default Printer" +msgstr "Imprimante par défaut" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Error" +msgstr "Erreur" + +#. 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" +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" +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" +msgstr "Emplacement" + +#. module: base_report_to_printer +#: field:printing.printer,model:0 +msgid "Model" +msgstr "Modèle" + +#. module: base_report_to_printer +#: field:printing.action,name:0 field:printing.printer,name:0 +msgid "Name" +msgstr "Nom" + +#. module: base_report_to_printer +#: view:res.users:base_report_to_printer.view_printing_users_form +msgid "Preferences" +msgstr "Préférences" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:base_report_to_printer.action_report_xml_form +msgid "Print" +msgstr "Imprimer" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_printing_action +msgid "Print Job Action" +msgstr "Action d'impression" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,printing_printer_id:0 +#: model:ir.model,name:base_report_to_printer.model_printing_printer +#: field:printing.report.xml.action,printer_id:0 +msgid "Printer" +msgstr "Imprimante" + +#. module: base_report_to_printer +#: model:ir.ui.menu,name:base_report_to_printer.menu_printing_printer_form +#: view:printing.printer:base_report_to_printer.view_printing_printer_form +#: view:printing.printer:base_report_to_printer.view_printing_printer_search +#: view:printing.printer:base_report_to_printer.view_printing_printer_tree +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 +#: view:res.users:base_report_to_printer.view_printing_users_prefs +msgid "Printing" +msgstr "Impression en cours" + +#. module: base_report_to_printer +#: model:res.groups,name:base_report_to_printer.res_groups_printingprintoperator0 +msgid "Printing / Print Operator" +msgstr "Opérateur d'impression" + +#. module: base_report_to_printer +#: field:res.users,printing_action:0 +msgid "Printing action" +msgstr "Action d'impression" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_report +#: field:printing.report.xml.action,report_id:0 +msgid "Report" +msgstr "Rapport" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_printing_report_xml_action +#: view:printing.report.xml.action:base_report_to_printer.printing_report_xml_action_form +#: view:printing.report.xml.action:base_report_to_printer.printing_report_xml_action_tree +msgid "Report Printing Actions" +msgstr "Actions d'impression de rapports" + +#. module: base_report_to_printer +#: model:ir.ui.menu,name:base_report_to_printer.menu_printing_reports +msgid "Reports" +msgstr "Rapport" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:base_report_to_printer.action_report_xml_form +msgid "Security" +msgstr "Sécurité" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Server Error" +msgstr "Erreur serveur" + +#. module: base_report_to_printer +#: view:printing.printer:base_report_to_printer.view_printing_printer_form +msgid "Set Default" +msgstr "Définir par défaut" + +#. module: base_report_to_printer +#: model:ir.actions.act_window,name:base_report_to_printer.action_printing_printer_form +msgid "Show Printers" +msgstr "Afficher les imprimantes" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:base_report_to_printer.action_report_xml_form +msgid "Specific actions per user" +msgstr "Action spécifique par utilisateur" + +#. module: base_report_to_printer +#: field:printing.printer,status:0 +msgid "Status" +msgstr "État" + +#. module: base_report_to_printer +#: field:printing.printer,status_message:0 +msgid "Status message" +msgstr "Message d'état" + +#. module: base_report_to_printer +#: field:printing.printer,system_name:0 +msgid "System name" +msgstr "Nom système" + +#. module: base_report_to_printer +#: help:ir.actions.report.xml,printing_action_ids:0 +msgid "This field allows configuring action and printer on a per user basis" +msgstr "" +"Ce champs permet de configurer les actions et les imprimantes par utilisateur" + +#. 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." +msgstr "" +"Cette opération va créer les imprimantes manquantes à partir du serveur CUPS " +"courant." + +#. module: base_report_to_printer +#: field:printing.action,type:0 +msgid "Type" +msgstr "Type" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Unavailable" +msgstr "Non disponible" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Unknown" +msgstr "Inconnu" + +#. module: base_report_to_printer +#: model:ir.actions.act_window,name:base_report_to_printer.action_printer_update_wizard +#: model:ir.ui.menu,name:base_report_to_printer.menu_printer_update_wizard +#: view:printing.printer.update.wizard:base_report_to_printer.printer_update_wizard +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" +msgstr "Utilisateur" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_res_users +msgid "Users" +msgstr "Utilisateurs" diff --git a/base_report_to_printer/i18n/it.po b/base_report_to_printer/i18n/it.po new file mode 100644 index 00000000000..e6f25c67acb --- /dev/null +++ b/base_report_to_printer/i18n/it.po @@ -0,0 +1,230 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * base_report_to_printer +# +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" +"PO-Revision-Date: 2014-02-25 15:09+0000\n" +"Last-Translator: Yannick Vaucher @ Camptocamp \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-05-06 07:28+0000\n" +"X-Generator: Launchpad (build 16996)\n" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Unavailable" +msgstr "Non disponibile" + +#. module: base_report_to_printer +#: view:printing.printer.update.wizard:0 +msgid "" +"This process will create all missing printers from the current CUPS server." +msgstr "" +"Questo processo creerà tutte le stampante mancanti dal server CUPS corrente" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Unknown" +msgstr "Sconosciuto" + +#. module: base_report_to_printer +#: field:printing.printer,system_name:0 +msgid "System Name" +msgstr "Nome di sistema" + +#. module: base_report_to_printer +#: field:printing.printer,location:0 +msgid "Location" +msgstr "Locazione" + +#. module: base_report_to_printer +#: model:ir.actions.act_window,name:base_report_to_printer.action_printing_printer_form +#: model:ir.ui.menu,name:base_report_to_printer.menu_printing_printer_form +#: view:printing.printer:0 +msgid "Printers" +msgstr "Stampanti" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:0 +msgid "Print" +msgstr "" + +#. module: base_report_to_printer +#: field:res.users,printing_action:0 +msgid "Printing Action" +msgstr "Azione di stampa" + +#. module: base_report_to_printer +#: field:printing.action,type:0 +msgid "Type" +msgstr "Tipo" + +#. module: base_report_to_printer +#: field:printing.printer,model:0 +msgid "Model" +msgstr "Model" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Available" +msgstr "Disponibile" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,printing_printer_id:0 +#: model:ir.model,name:base_report_to_printer.model_printing_printer +#: field:printing.report.xml.action,printer_id:0 +msgid "Printer" +msgstr "Stampante" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_res_users +msgid "Users" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_printing_report_xml_action +#: view:printing.report.xml.action:0 +msgid "Report Printing Actions" +msgstr "Azioni di stampa report" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:0 +msgid "Specific actions per user" +msgstr "" + +#. module: base_report_to_printer +#: model:ir.model,name:base_report_to_printer.model_printing_action +msgid "Print Job Action" +msgstr "Azione di stampa" + +#. module: base_report_to_printer +#: field:printing.report.xml.action,user_id:0 +msgid "User" +msgstr "Utente" + +#. module: base_report_to_printer +#: field:printing.report.xml.action,report_id:0 +msgid "Report" +msgstr "Report" + +#. module: base_report_to_printer +#: field:printing.printer,status:0 +msgid "Status" +msgstr "Stato" + +#. module: base_report_to_printer +#: model:ir.actions.act_window,name:base_report_to_printer.action_printing_printer_form +msgid "Show Printers" +msgstr "" + +#. module: base_report_to_printer +#: view:printing.printer.update.wizard:0 +msgid "Ok" +msgstr "Ok" + +#. module: base_report_to_printer +#: field:printing.action,name:0 +#: field:printing.printer,name:0 +msgid "Name" +msgstr "Nome" + +#. module: base_report_to_printer +#: view:printing.printer:0 +msgid "Set Default" +msgstr "Imposta default" + +#. module: base_report_to_printer +#: field:printing.printer,default:0 +#: field:res.users,printing_printer_id:0 +msgid "Default Printer" +msgstr "Stampante di default" + +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/printing.py:189 +#, python-format +msgid "Send to Client" +msgstr "Invia al client" + +#. module: base_report_to_printer +#: field:printing.printer,uri:0 +msgid "URI" +msgstr "URI" + +#. module: base_report_to_printer +#: model:ir.actions.act_window,name:base_report_to_printer.action_printer_update_wizard +#: model:ir.ui.menu,name:base_report_to_printer.menu_printer_update_wizard +#: view:printing.printer.update.wizard:0 +msgid "Update Printers from CUPS" +msgstr "Aggiorna stampanti da CUPS" + +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/printing.py:188 +#, python-format +msgid "Send to Printer" +msgstr "Invia alla stampante" + +#. module: base_report_to_printer +#: model:ir.ui.menu,name:base_report_to_printer.menu_printing_main +#: selection:printing.printer,status:0 +msgid "Printing" +msgstr "Stampa" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Error" +msgstr "Errore" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,property_printing_action:0 +#: field:printing.report.xml.action,action:0 +msgid "Action" +msgstr "Azione" + +#. module: base_report_to_printer +#: view:ir.actions.report.xml:0 +msgid "Security" +msgstr "" + +#. module: base_report_to_printer +#: field:printing.printer,status_message:0 +msgid "Status Message" +msgstr "Messaggio di stato" + +#. module: base_report_to_printer +#: help:ir.actions.report.xml,printing_action_ids:0 +msgid "This field allows configuring action and printer on a per user basis" +msgstr "" +"Questo campo permette di configurare azioni e stampanti sulla base degli " +"utenti" + +#. module: base_report_to_printer +#: selection:printing.printer,status:0 +msgid "Server Error" +msgstr "Errore server" + +#. module: base_report_to_printer +#: field:ir.actions.report.xml,printing_action_ids:0 +msgid "Actions" +msgstr "Azioni" + +#. module: base_report_to_printer +#: view:printing.printer.update.wizard:0 +msgid "Cancel" +msgstr "Annulla" + +#. module: base_report_to_printer +#: model:res.groups,name:base_report_to_printer.res_groups_printingprintoperator0 +msgid "Printing / Print Operator" +msgstr "" + +#. module: base_report_to_printer +#: code:addons/base_report_to_printer/printing.py:190 +#, python-format +msgid "Use user's defaults" +msgstr "Utilizza i default dell'utente" diff --git a/base_report_to_printer/ir_report.py b/base_report_to_printer/ir_report.py new file mode 100644 index 00000000000..4b610547d5e --- /dev/null +++ b/base_report_to_printer/ir_report.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (c) 2007 Ferran Pegueroles +# Copyright (c) 2009 Albert Cervera i Areny +# Copyright (C) 2011 Agile Business Group sagl () +# Copyright (C) 2011 Domsense srl () +# Copyright (C) 2013-2014 Camptocamp () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import logging + +from openerp import models, fields, api + +_logger = logging.getLogger('base_report_to_printer') + + +class ReportXml(models.Model): + """ + Reports + """ + + _inherit = 'ir.actions.report.xml' + + property_printing_action = fields.Many2one( + comodel_name='printing.action', + string='Action', + company_dependent=True, + ) + printing_printer_id = fields.Many2one( + comodel_name='printing.printer', + string='Printer' + ) + printing_action_ids = fields.One2many( + comodel_name='printing.report.xml.action', + inverse_name='report_id', + string='Actions', + help='This field allows configuring action and printer on a per ' + 'user basis' + ) + + @api.multi + def behaviour(self): + result = {} + printer_obj = self.env['printing.printer'] + printing_act_obj = self.env['printing.report.xml.action'] + # Set hardcoded default action + default_action = 'client' + # Retrieve system wide printer + default_printer = printer_obj.get_default() + + # Retrieve user default values + user = self.env.user + if user.printing_action: + default_action = user.printing_action + if user.printing_printer_id: + default_printer = user.printing_printer_id + + for report in self: + action = default_action + printer = default_printer + + # Retrieve report default values + report_action = report.property_printing_action + if report_action and report_action.type != 'user_default': + action = report_action.type + if report.printing_printer_id: + printer = report.printing_printer_id + + # Retrieve report-user specific values + print_action = printing_act_obj.search( + [('report_id', '=', report.id), + ('user_id', '=', self.env.uid), + ('action', '!=', 'user_default')], + limit=1) + if print_action: + user_action = print_action.behaviour() + action = user_action['action'] + if user_action['printer']: + printer = user_action['printer'] + + result[report.id] = {'action': action, + 'printer': printer, + } + return result diff --git a/base_report_to_printer/printing.py b/base_report_to_printer/printing.py new file mode 100644 index 00000000000..0a8b89ff52e --- /dev/null +++ b/base_report_to_printer/printing.py @@ -0,0 +1,172 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (c) 2007 Ferran Pegueroles +# Copyright (c) 2009 Albert Cervera i Areny +# Copyright (C) 2011 Agile Business Group sagl () +# Copyright (C) 2011 Domsense srl () +# Copyright (C) 2013-2014 Camptocamp () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import logging +import os + +from tempfile import mkstemp + +import cups + +from openerp import models, fields, api + +_logger = logging.getLogger(__name__) + + +class PrintingPrinter(models.Model): + """ + Printers + """ + + _name = 'printing.printer' + _description = 'Printer' + _order = 'name' + + name = fields.Char(required=True, select=True) + system_name = fields.Char(required=True, select=True) + default = fields.Boolean(readonly=True) + status = fields.Selection([('unavailable', 'Unavailable'), + ('printing', 'Printing'), + ('unknown', 'Unknown'), + ('available', 'Available'), + ('error', 'Error'), + ('server-error', 'Server Error')], + required=True, + readonly=True, + default='unknown') + status_message = fields.Char(readonly=True) + model = fields.Char(readonly=True) + location = fields.Char(readonly=True) + uri = fields.Char(string='URI', readonly=True) + + @api.model + def update_printers_status(self): + printer_recs = self.search([]) + try: + connection = cups.Connection() + printers = connection.getPrinters() + except: + printer_recs.write({'status': 'server-error'}) + else: + for printer in printer_recs: + cups_printer = printers.get(printer.system_name) + if cups_printer: + printer.update_from_cups(connection, cups_printer) + else: + # not in cups list + printer.status = 'unavailable' + return True + + @api.multi + def _prepare_update_from_cups(self, cups_connection, cups_printer): + mapping = { + 3: 'available', + 4: 'printing', + 5: 'error' + } + vals = { + 'model': cups_printer.get('printer-make-and-model', False), + 'location': cups_printer.get('printer-location', False), + 'uri': cups_printer.get('device-uri', False), + 'status': mapping.get(cups_printer['printer-state'], 'unknown'), + } + return vals + + @api.multi + def update_from_cups(self, cups_connection, cups_printer): + """ Update a printer from the information returned by cups. + + :param cups_connection: connection to CUPS, may be used when the + method is overriden (e.g. in printer_tray) + :param cups_printer: dict of information returned by CUPS for the + current printer + """ + self.ensure_one() + vals = self._prepare_update_from_cups(cups_connection, cups_printer) + if any(self[name] != value for name, value in vals.iteritems()): + self.write(vals) + + @api.multi + def print_options(self, report, format): + """ Hook to set print options """ + options = {} + if format == 'raw': + options['raw'] = True + return options + + @api.multi + def print_document(self, report, content, format): + """ Print a file + + Format could be pdf, qweb-pdf, raw, ... + + """ + self.ensure_one() + fd, file_name = mkstemp() + try: + os.write(fd, content) + finally: + os.close(fd) + connection = cups.Connection() + + options = self.print_options(report, format) + + connection.printFile(self.system_name, + file_name, + file_name, + options=options) + _logger.info("Printing job: '%s'" % file_name) + return True + + @api.multi + def set_default(self): + if not self: + return + self.ensure_one() + default_printers = self.search([('default', '=', True)]) + default_printers.write({'default': False}) + self.write({'default': True}) + return True + + @api.multi + def get_default(self): + return self.search([('default', '=', True)], limit=1) + +# +# Actions +# + + +def _available_action_types(self): + return [('server', 'Send to Printer'), + ('client', 'Send to Client'), + ('user_default', "Use user's defaults"), + ] + + +class PrintingAction(models.Model): + _name = 'printing.action' + _description = 'Print Job Action' + + name = fields.Char(required=True) + type = fields.Selection(_available_action_types, required=True) diff --git a/base_report_to_printer/printing_data.xml b/base_report_to_printer/printing_data.xml new file mode 100644 index 00000000000..5998d14b827 --- /dev/null +++ b/base_report_to_printer/printing_data.xml @@ -0,0 +1,34 @@ + + + + + + Send to Printer + server + + + Send to Client + client + + + + property_printing_action + + + + + + Update Printers Status + + + 1 + minutes + -1 + + + + + + + + diff --git a/base_report_to_printer/printing_view.xml b/base_report_to_printer/printing_view.xml new file mode 100644 index 00000000000..42f4be4f4b3 --- /dev/null +++ b/base_report_to_printer/printing_view.xml @@ -0,0 +1,158 @@ + + + + + + + + printing.printer.form + printing.printer + +
+ +
+

+

+
+ + + + + +