diff --git a/report_label/README.rst b/report_label/README.rst new file mode 100644 index 0000000000..3afa65187d --- /dev/null +++ b/report_label/README.rst @@ -0,0 +1,165 @@ +============= +Report Labels +============= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:8d28b2e1c9d9a476ff84658100da7f8da9d5eb27cc86184e8e2979f476e863ca + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github + :target: https://github.com/OCA/reporting-engine/tree/18.0/report_label + :alt: OCA/reporting-engine +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/reporting-engine-18-0/reporting-engine-18-0-report_label + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to create self-adhesive label printing actions on +any model. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +**Configure your Report Label Paperformat** + +- Go to "Settings > Technical > Reporting > Label Paper Format" +- Create your self-adhesive label paper formats. + +You should reuse or create a Paperformat. + +|conf_image_1| + +**Configure your Server action** + +- Go to "Settings > Technical > Actions > Server Actions" + +Create your label report : + +- In the 'Action to do' field, select 'Print Self-adhesive Labels' +- In the 'Label Paper Format' field, select your label paper format + previously created +- In the 'Label Qweb Template' create or reuse a QWeb template for your + label. + +|conf_image_2| + +**Importante Note** + +`By +design `__, +the variable used in this QWeb template must be named record. + +.. |conf_image_1| image:: https://raw.githubusercontent.com/OCA/reporting-engine/18.0/report_label/static/description/report_paperformat_label_form.png +.. |conf_image_2| image:: https://raw.githubusercontent.com/OCA/reporting-engine/18.0/report_label/static/description/ir_actions_server.png + +Usage +===== + +- In the target model's list view, select the records to print. +- Click *Action* and your label report action name. +- Select the number of labels per record to print, and click Print. + +you can optionaly define an offset + +|usage_image_1| + +The items will be printed in a pdf document. + +|usage_image_2"| + +.. |usage_image_1| image:: https://raw.githubusercontent.com/OCA/reporting-engine/18.0/report_label/static/description/report_label_wizard_form.png +.. |usage_image_2"| image:: https://raw.githubusercontent.com/OCA/reporting-engine/18.0/report_label/static/description/report_result.png + +Known issues / Roadmap +====================== + +Known issues: + +- This module depends on base_automation only because this module + extends ir.actions.server with a new kind of action, and + base.automation inherits from ir.actions.server by delegation in such + a way that the modules cannot be loaded in another order. To do when + migrating in version > 16 : + + 1. remove ``base_automation`` dependency + 2. install ``report_label`` + + 3. install then ``base_automation``. If the installation of + ``base_automation`` works, the dependency can be replaced by ``base``. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Iván Todorovich +* Moka Tourisme + +Contributors +------------ + +- Iván Todorovich + +- `Moka Tourisme `__: + + - Grégory Schreiner + +- Sylvain LE GAL + <`https://twitter.com/legalsylvain\\> >`__ + +- Stefan Rijnhart + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-ivantodorovich| image:: https://github.com/ivantodorovich.png?size=40px + :target: https://github.com/ivantodorovich + :alt: ivantodorovich + +Current `maintainer `__: + +|maintainer-ivantodorovich| + +This module is part of the `OCA/reporting-engine `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/report_label/__init__.py b/report_label/__init__.py new file mode 100644 index 0000000000..aee8895e7a --- /dev/null +++ b/report_label/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/report_label/__manifest__.py b/report_label/__manifest__.py new file mode 100644 index 0000000000..644b85a767 --- /dev/null +++ b/report_label/__manifest__.py @@ -0,0 +1,24 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Report Labels", + "version": "18.0.1.0.0", + "summary": "Print configurable self-adhesive labels reports", + "author": "Iván Todorovich, Moka Tourisme, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/reporting-engine", + "license": "AGPL-3", + "category": "Reporting", + "maintainers": ["ivantodorovich"], + "depends": [ + "base_automation", + ], + "data": [ + "security/ir.model.access.csv", + "views/ir_actions_server.xml", + "views/report_paperformat_label.xml", + "reports/report_label.xml", + "wizards/report_label_wizard.xml", + ], + "demo": [ + "demo/demo.xml", + ], +} diff --git a/report_label/demo/demo.xml b/report_label/demo/demo.xml new file mode 100644 index 0000000000..fbc7b8e0ef --- /dev/null +++ b/report_label/demo/demo.xml @@ -0,0 +1,62 @@ + + + + + + Paperformat for labels (A4: 210mm x 297mm) + A4 + 96 + Portrait + 0 + 0 + 0 + 0 + 0 + + + + + Partner Labels (3 x 6 = 18 labels per sheet) + + + + + + + + + + + + #729fcf + + + + Print Address Labels + report_label + + + + + + + + diff --git a/report_label/i18n/es.po b/report_label/i18n/es.po new file mode 100644 index 0000000000..11ab9512b0 --- /dev/null +++ b/report_label/i18n/es.po @@ -0,0 +1,345 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_label +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-09-02 20:42+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__state +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__state +#: model:ir.model.fields,field_description:report_label.field_ir_cron__state +msgid "Action To Do" +msgstr "Acción a realizar" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Bottom (mm)" +msgstr "Parte inferior (mm)" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__create_uid +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__create_uid +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__create_date +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__create_date +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__display_name +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__display_name +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__id +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_background_color +msgid "Label Background Color" +msgstr "Color de fondo de la etiqueta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_height +msgid "Label Height (mm)" +msgstr "Altura de la etiqueta (mm)" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Margin" +msgstr "Margen de la etiqueta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_bottom +msgid "Label Margin Bottom (mm)" +msgstr "Margen inferior de la etiqueta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_left +msgid "Label Margin Left (mm)" +msgstr "Margen izquierdo de la etiqueta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_right +msgid "Label Margin Right (mm)" +msgstr "Margen derecho de la etiqueta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_top +msgid "Label Margin Top (mm)" +msgstr "Margen superior de la etiqueta (mm)" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Padding" +msgstr "Relleno de etiquetas" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_bottom +msgid "Label Padding Bottom (mm)" +msgstr "Parte inferior del relleno de etiquetas (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_left +msgid "Label Padding Left (mm)" +msgstr "Relleno de la etiqueta a la izquierda (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_right +msgid "Label Padding Right (mm)" +msgstr "Relleno de la etiqueta a la derecha (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_top +msgid "Label Padding Top (mm)" +msgstr "Etiqueta Relleno Superior (mm)" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_paperformat_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_ir_cron__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__label_paperformat_id +msgid "Label Paper Format" +msgstr "Formato de papel para la etiqueta" + +#. module: report_label +#: model:ir.ui.menu,name:report_label.paperformat_label_menu +msgid "Label Paper Formats" +msgstr "Formatos de papel para la etiqueta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_ir_cron__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__label_template_view_id +msgid "Label QWeb Template" +msgstr "Plantilla QWeb de etiqueta" + +#. module: report_label +#: model:ir.actions.report,name:report_label.report_label +msgid "Label Report" +msgstr "Informe sobre la etiqueta" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Settings" +msgstr "Configuración de la etiqueta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_width +msgid "Label Width (mm)" +msgstr "Anchura de la etiqueta (mm)" + +#. module: report_label +#: model:ir.actions.act_window,name:report_label.paperformat_label_action +msgid "Label paper format configuration" +msgstr "Configuración del formato del papel de etiqueta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard____last_update +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line____last_update +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__write_uid +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__write_uid +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__write_date +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__write_date +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__write_date +msgid "Last Updated on" +msgstr "Última Actualización el" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Left (mm)" +msgstr "Izquierda (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__line_ids +msgid "Lines" +msgstr "Líneas" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__model_id +msgid "Model" +msgstr "Modelo" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__name +msgid "Name" +msgstr "Nombre" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_report_label_wizard__offset +msgid "Number of labels to skip when printing" +msgstr "Número de etiquetas que deben omitirse al imprimir" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__offset +msgid "Offset" +msgstr "Desplazamiento" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__paperformat_id +msgid "Paper Format" +msgstr "Formato del papel" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Paper format configuration" +msgstr "Configuración del formato del papel" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Print" +msgstr "Imprimir" + +#. module: report_label +#: model:ir.actions.server,name:report_label.actions_server_label_partner_address +msgid "Print Address Labels" +msgstr "Imprimir etiquetas de dirección" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Print Labels" +msgstr "Imprimir etiquetas" + +#. module: report_label +#: model:ir.model.fields.selection,name:report_label.selection__ir_actions_server__state__report_label +msgid "Print self-adhesive labels" +msgstr "Imprimir etiquetas autoadhesivas" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__quantity +msgid "Quantity" +msgstr "Cantidad" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Record" +msgstr "Registro" + +#. module: report_label +#: model:ir.model,name:report_label.model_ir_actions_report +msgid "Report Action" +msgstr "Informar Acción" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_label_wizard +msgid "Report Label Wizard" +msgstr "Asistente para etiquetas de informes" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_label_wizard_line +msgid "Report Label Wizard Line" +msgstr "Línea del Asistente para etiquetas de informes" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__res_name +msgid "Res Name" +msgstr "Nombre del Recurso" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__res_id +msgid "Resource ID" +msgstr "ID del Recurso" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Right (mm)" +msgstr "Derecha (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: report_label +#: model:ir.model,name:report_label.model_ir_actions_server +msgid "Server Action" +msgstr "Acción de Servidor" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Settings" +msgstr "Configuraciones" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_base_automation__label_template_view_id +#: model:ir.model.fields,help:report_label.field_ir_actions_server__label_template_view_id +#: model:ir.model.fields,help:report_label.field_ir_cron__label_template_view_id +msgid "The QWeb template key to render the labels" +msgstr "La clave de la plantilla QWeb para representar las etiquetas" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Top (mm)" +msgstr "Superior (mm)" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_base_automation__state +#: model:ir.model.fields,help:report_label.field_ir_actions_server__state +#: model:ir.model.fields,help:report_label.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Execute Python Code': a block of python code that will be executed\n" +"- 'Create a new Record': create a new record with new values\n" +"- 'Update a Record': update the values of a record\n" +"- 'Execute several actions': define an action that triggers several other " +"server actions\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Add Followers': add followers to a record (Discuss)\n" +"- 'Create Next Activity': create an activity (Discuss)\n" +"- 'Send SMS Text Message': send SMS, log them on documents (SMS)" +msgstr "" +"Tipo de acción del servidor. Están disponibles los siguientes valores:\n" +"- 'Ejecutar código Python': un bloque de código Python que se ejecutará\n" +"- 'Crear un nuevo registro': crea un nuevo registro con nuevos valores\n" +"- 'Actualizar un registro': actualiza los valores de un registro\n" +"- 'Ejecutar varias acciones': define una acción que desencadena varias otras " +"acciones del servidor\n" +"- 'Enviar correo electrónico': publicar un mensaje, una nota o enviar un " +"correo electrónico (Discuss)\n" +"- 'Agregar seguidores': agrega seguidores a un registro (Discuss)\n" +"- 'Crear siguiente actividad': crea una actividad (Discuss)\n" +"- 'Enviar mensaje de texto SMS': envíe SMS, regístrelos en documentos (SMS)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__wizard_id +msgid "Wizard" +msgstr "Asistente" diff --git a/report_label/i18n/it.po b/report_label/i18n/it.po new file mode 100644 index 0000000000..cb7d2f1f4f --- /dev/null +++ b/report_label/i18n/it.po @@ -0,0 +1,344 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_label +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-18 09:34+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__state +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__state +#: model:ir.model.fields,field_description:report_label.field_ir_cron__state +msgid "Action To Do" +msgstr "Azione da compiere" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Bottom (mm)" +msgstr "Inferiore (mm)" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Cancel" +msgstr "Annulla" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__create_uid +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__create_uid +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__create_date +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__create_date +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__display_name +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__display_name +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__id +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__id +msgid "ID" +msgstr "ID" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_background_color +msgid "Label Background Color" +msgstr "Colore etichetta sfondo" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_height +msgid "Label Height (mm)" +msgstr "Altezza etichetta (mm)" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Margin" +msgstr "Margini etichetta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_bottom +msgid "Label Margin Bottom (mm)" +msgstr "Margine inferiore etichetta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_left +msgid "Label Margin Left (mm)" +msgstr "Margine sinistro etichetta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_right +msgid "Label Margin Right (mm)" +msgstr "Margine destro etichetta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_top +msgid "Label Margin Top (mm)" +msgstr "Margine superiore etichetta (mm)" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Padding" +msgstr "Imbottitura etichetta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_bottom +msgid "Label Padding Bottom (mm)" +msgstr "Imbottitura inferiore etichetta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_left +msgid "Label Padding Left (mm)" +msgstr "Imbottitura sinistra etichetta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_right +msgid "Label Padding Right (mm)" +msgstr "Imbottitura destra etichetta (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_top +msgid "Label Padding Top (mm)" +msgstr "Imbottitura superiore etichetta (mm)" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_paperformat_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_ir_cron__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__label_paperformat_id +msgid "Label Paper Format" +msgstr "Formato carta etichetta" + +#. module: report_label +#: model:ir.ui.menu,name:report_label.paperformat_label_menu +msgid "Label Paper Formats" +msgstr "Formati carta etichetta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_ir_cron__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__label_template_view_id +msgid "Label QWeb Template" +msgstr "Modello QWeb etichetta" + +#. module: report_label +#: model:ir.actions.report,name:report_label.report_label +msgid "Label Report" +msgstr "Resoconto etichetta" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Settings" +msgstr "Impostazioni etichetta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_width +msgid "Label Width (mm)" +msgstr "Larghezza etichetta (mm)" + +#. module: report_label +#: model:ir.actions.act_window,name:report_label.paperformat_label_action +msgid "Label paper format configuration" +msgstr "Configurazione formato carta etichetta" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard____last_update +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line____last_update +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__write_uid +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__write_uid +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__write_date +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__write_date +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Left (mm)" +msgstr "Sinistra (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__line_ids +msgid "Lines" +msgstr "Righe" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__model_id +msgid "Model" +msgstr "Modello" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__name +msgid "Name" +msgstr "Nome" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_report_label_wizard__offset +msgid "Number of labels to skip when printing" +msgstr "Numero di etichette da saltare quando si stampa" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__offset +msgid "Offset" +msgstr "Offset" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__paperformat_id +msgid "Paper Format" +msgstr "Formato carta" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Paper format configuration" +msgstr "Configurazione formato carta" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Print" +msgstr "Stampa" + +#. module: report_label +#: model:ir.actions.server,name:report_label.actions_server_label_partner_address +msgid "Print Address Labels" +msgstr "Stampa etichette indiizzo" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Print Labels" +msgstr "Stampa etichette" + +#. module: report_label +#: model:ir.model.fields.selection,name:report_label.selection__ir_actions_server__state__report_label +msgid "Print self-adhesive labels" +msgstr "Stampa etichette adesive" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__quantity +msgid "Quantity" +msgstr "Quantità" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Record" +msgstr "Record" + +#. module: report_label +#: model:ir.model,name:report_label.model_ir_actions_report +msgid "Report Action" +msgstr "Azione resoconto" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_label_wizard +msgid "Report Label Wizard" +msgstr "Procedura guidata etichetta resoconto" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_label_wizard_line +msgid "Report Label Wizard Line" +msgstr "Riga procedura guidata etichetta resoconto" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__res_name +msgid "Res Name" +msgstr "Nome risorsa" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__res_id +msgid "Resource ID" +msgstr "ID risorsa" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Right (mm)" +msgstr "Destra (mm)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: report_label +#: model:ir.model,name:report_label.model_ir_actions_server +msgid "Server Action" +msgstr "Azione server" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Settings" +msgstr "Impostazioni" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_base_automation__label_template_view_id +#: model:ir.model.fields,help:report_label.field_ir_actions_server__label_template_view_id +#: model:ir.model.fields,help:report_label.field_ir_cron__label_template_view_id +msgid "The QWeb template key to render the labels" +msgstr "Chiave modello QWeb per realizzare le etchette" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Top (mm)" +msgstr "Superiore (mm)" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_base_automation__state +#: model:ir.model.fields,help:report_label.field_ir_actions_server__state +#: model:ir.model.fields,help:report_label.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Execute Python Code': a block of python code that will be executed\n" +"- 'Create a new Record': create a new record with new values\n" +"- 'Update a Record': update the values of a record\n" +"- 'Execute several actions': define an action that triggers several other server actions\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Add Followers': add followers to a record (Discuss)\n" +"- 'Create Next Activity': create an activity (Discuss)\n" +"- 'Send SMS Text Message': send SMS, log them on documents (SMS)" +msgstr "" +"Tipo di azione server. Sono disponibili i seguenti valori:\n" +"- 'Esegue codice Python': un blocco di codice Python che verrà eseguito\n" +"- 'Crea un nuovo record': crea un nuovo record con nuovi valori\n" +"- 'Aggiorna un record': aggiorna i valori di un record\n" +"- 'Esegue diverse azioni': definisce un'azione che attiva diverse altre " +"azioni\n" +"- 'Invia e-mail': inva un messagio, una nota o inviauna e-mail (Discussione)" +"\n" +"- 'Aggiunge chi segue': aggiunge chi segue ad un record (Discussione)\n" +"- 'Crea attività successiva': crea un'attività (Discussione)\n" +"- 'Invia SMS': invia SMS, registrandoli nei documenti (SMS)" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__wizard_id +msgid "Wizard" +msgstr "Procedura guidata" diff --git a/report_label/i18n/report_label.pot b/report_label/i18n/report_label.pot new file mode 100644 index 0000000000..74525020d9 --- /dev/null +++ b/report_label/i18n/report_label.pot @@ -0,0 +1,330 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_label +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__state +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__state +#: model:ir.model.fields,field_description:report_label.field_ir_cron__state +msgid "Action To Do" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Bottom (mm)" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Cancel" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__create_uid +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__create_uid +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__create_uid +msgid "Created by" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__create_date +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__create_date +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__create_date +msgid "Created on" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__display_name +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__display_name +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__display_name +msgid "Display Name" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__id +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__id +msgid "ID" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_background_color +msgid "Label Background Color" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_height +msgid "Label Height (mm)" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Margin" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_bottom +msgid "Label Margin Bottom (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_left +msgid "Label Margin Left (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_right +msgid "Label Margin Right (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_margin_top +msgid "Label Margin Top (mm)" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Padding" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_bottom +msgid "Label Padding Bottom (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_left +msgid "Label Padding Left (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_right +msgid "Label Padding Right (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_padding_top +msgid "Label Padding Top (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_paperformat_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_ir_cron__label_paperformat_id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__label_paperformat_id +msgid "Label Paper Format" +msgstr "" + +#. module: report_label +#: model:ir.ui.menu,name:report_label.paperformat_label_menu +msgid "Label Paper Formats" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_base_automation__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_ir_actions_server__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_ir_cron__label_template_view_id +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__label_template_view_id +msgid "Label QWeb Template" +msgstr "" + +#. module: report_label +#: model:ir.actions.report,name:report_label.report_label +msgid "Label Report" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Label Settings" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__label_width +msgid "Label Width (mm)" +msgstr "" + +#. module: report_label +#: model:ir.actions.act_window,name:report_label.paperformat_label_action +msgid "Label paper format configuration" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard____last_update +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line____last_update +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label____last_update +msgid "Last Modified on" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__write_uid +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__write_uid +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__write_date +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__write_date +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__write_date +msgid "Last Updated on" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Left (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__line_ids +msgid "Lines" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__model_id +msgid "Model" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__name +msgid "Name" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_report_label_wizard__offset +msgid "Number of labels to skip when printing" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard__offset +msgid "Offset" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_paperformat_label__paperformat_id +msgid "Paper Format" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Paper format configuration" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Print" +msgstr "" + +#. module: report_label +#: model:ir.actions.server,name:report_label.actions_server_label_partner_address +msgid "Print Address Labels" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Print Labels" +msgstr "" + +#. module: report_label +#: model:ir.model.fields.selection,name:report_label.selection__ir_actions_server__state__report_label +msgid "Print self-adhesive labels" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__quantity +msgid "Quantity" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Record" +msgstr "" + +#. module: report_label +#: model:ir.model,name:report_label.model_ir_actions_report +msgid "Report Action" +msgstr "" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_label_wizard +msgid "Report Label Wizard" +msgstr "" + +#. module: report_label +#: model:ir.model,name:report_label.model_report_label_wizard_line +msgid "Report Label Wizard Line" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__res_name +msgid "Res Name" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__res_id +msgid "Resource ID" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Right (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__sequence +msgid "Sequence" +msgstr "" + +#. module: report_label +#: model:ir.model,name:report_label.model_ir_actions_server +msgid "Server Action" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.report_label_wizard_view_form +msgid "Settings" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_base_automation__label_template_view_id +#: model:ir.model.fields,help:report_label.field_ir_actions_server__label_template_view_id +#: model:ir.model.fields,help:report_label.field_ir_cron__label_template_view_id +msgid "The QWeb template key to render the labels" +msgstr "" + +#. module: report_label +#: model_terms:ir.ui.view,arch_db:report_label.view_paperformat_label_view_form +msgid "Top (mm)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,help:report_label.field_base_automation__state +#: model:ir.model.fields,help:report_label.field_ir_actions_server__state +#: model:ir.model.fields,help:report_label.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Execute Python Code': a block of python code that will be executed\n" +"- 'Create a new Record': create a new record with new values\n" +"- 'Update a Record': update the values of a record\n" +"- 'Execute several actions': define an action that triggers several other server actions\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Add Followers': add followers to a record (Discuss)\n" +"- 'Create Next Activity': create an activity (Discuss)\n" +"- 'Send SMS Text Message': send SMS, log them on documents (SMS)" +msgstr "" + +#. module: report_label +#: model:ir.model.fields,field_description:report_label.field_report_label_wizard_line__wizard_id +msgid "Wizard" +msgstr "" diff --git a/report_label/models/__init__.py b/report_label/models/__init__.py new file mode 100644 index 0000000000..2536ea8227 --- /dev/null +++ b/report_label/models/__init__.py @@ -0,0 +1,3 @@ +from . import report_paperformat_label +from . import ir_actions_server +from . import ir_actions_report diff --git a/report_label/models/ir_actions_report.py b/report_label/models/ir_actions_report.py new file mode 100644 index 0000000000..c4241de2e9 --- /dev/null +++ b/report_label/models/ir_actions_report.py @@ -0,0 +1,15 @@ +from odoo import api, models + + +class IrActionsReport(models.Model): + _inherit = "ir.actions.report" + + @api.model + def get_paperformat(self): + # Allow to define paperformat via context + res = super().get_paperformat() + if self.env.context.get("paperformat_id"): + res = self.env["report.paperformat"].browse( + self.env.context.get("paperformat_id") + ) + return res diff --git a/report_label/models/ir_actions_server.py b/report_label/models/ir_actions_server.py new file mode 100644 index 0000000000..cf54200fc8 --- /dev/null +++ b/report_label/models/ir_actions_server.py @@ -0,0 +1,40 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class IrActionsServer(models.Model): + _inherit = "ir.actions.server" + + state = fields.Selection( + selection_add=[("report_label", "Print self-adhesive labels")], + ondelete={"report_label": "cascade"}, + ) + label_template_view_id = fields.Many2one( + string="Label QWeb Template", + comodel_name="ir.ui.view", + domain=[("type", "=", "qweb")], + help="The QWeb template key to render the labels", + ) + label_paperformat_id = fields.Many2one( + "report.paperformat.label", + "Label Paper Format", + ) + + def _run_action_report_label_multi(self, eval_context=None): + """Show report label wizard""" + context = dict(self.env.context) + context.update( + { + "label_template_view_id": self.label_template_view_id.id, + "label_paperformat_id": self.label_paperformat_id.id, + "res_model_id": self.model_id.id, + } + ) + return { + "name": self.name, + "type": "ir.actions.act_window", + "res_model": "report.label.wizard", + "context": context, + "view_mode": "form", + "target": "new", + } diff --git a/report_label/models/report_paperformat_label.py b/report_label/models/report_paperformat_label.py new file mode 100644 index 0000000000..f5c118d1be --- /dev/null +++ b/report_label/models/report_paperformat_label.py @@ -0,0 +1,34 @@ +from odoo import fields, models + + +class ReportPaperformatLabel(models.Model): + _name = "report.paperformat.label" + _description = "Label Paper Format" + + name = fields.Char(required=True) + + paperformat_id = fields.Many2one( + "report.paperformat", + string="Paper Format", + required=True, + ondelete="cascade", + ) + label_width = fields.Float( + "Label Width (mm)", + default=60, + required=True, + ) + label_height = fields.Float( + "Label Height (mm)", + default=42.3, + required=True, + ) + label_background_color = fields.Char(default="#FFFFFF") + label_padding_top = fields.Float("Label Padding Top (mm)", default=2) + label_padding_right = fields.Float("Label Padding Right (mm)", default=2) + label_padding_bottom = fields.Float("Label Padding Bottom (mm)", default=2) + label_padding_left = fields.Float("Label Padding Left (mm)", default=2) + label_margin_top = fields.Float("Label Margin Top (mm)", default=2) + label_margin_right = fields.Float("Label Margin Right (mm)", default=2) + label_margin_bottom = fields.Float("Label Margin Bottom (mm)", default=2) + label_margin_left = fields.Float("Label Margin Left (mm)", default=2) diff --git a/report_label/pyproject.toml b/report_label/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/report_label/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/report_label/readme/CONFIGURE.md b/report_label/readme/CONFIGURE.md new file mode 100644 index 0000000000..6c95e7ffca --- /dev/null +++ b/report_label/readme/CONFIGURE.md @@ -0,0 +1,28 @@ +**Configure your Report Label Paperformat** + +- Go to "Settings \> Technical \> Reporting \> Label Paper Format" +- Create your self-adhesive label paper formats. + +You should reuse or create a Paperformat. + +![conf_image_1](../static/description/report_paperformat_label_form.png) + +**Configure your Server action** + +- Go to "Settings \> Technical \> Actions \> Server Actions" + +Create your label report : + +- In the 'Action to do' field, select 'Print Self-adhesive Labels' +- In the 'Label Paper Format' field, select your label paper format + previously created +- In the 'Label Qweb Template' create or reuse a QWeb template for your + label. + +![conf_image_2](../static/description/ir_actions_server.png) + +**Importante Note** + +[By +design](https://github.com/OCA/reporting-engine/blob/14.0/report_label/reports/report_label.xml#L34), +the variable used in this QWeb template must be named record. diff --git a/report_label/readme/CONTRIBUTORS.md b/report_label/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..66292c4685 --- /dev/null +++ b/report_label/readme/CONTRIBUTORS.md @@ -0,0 +1,9 @@ +- Iván Todorovich \ + +- [Moka Tourisme](https://www.mokatourisme.fr): + + > - Grégory Schreiner + +- Sylvain LE GAL \ + +- Stefan Rijnhart \ diff --git a/report_label/readme/DESCRIPTION.md b/report_label/readme/DESCRIPTION.md new file mode 100644 index 0000000000..96811340cf --- /dev/null +++ b/report_label/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module allows you to create self-adhesive label printing actions on +any model. diff --git a/report_label/readme/ROADMAP.md b/report_label/readme/ROADMAP.md new file mode 100644 index 0000000000..0d50153cba --- /dev/null +++ b/report_label/readme/ROADMAP.md @@ -0,0 +1,12 @@ +Known issues: + +- This module depends on base_automation only because this module + extends ir.actions.server with a new kind of action, and + base.automation inherits from ir.actions.server by delegation in such + a way that the modules cannot be loaded in another order. To do when + migrating in version \> 16 : + 1. remove `base_automation` dependency + 2. install `report_label` + + 3\. install then `base_automation`. If the installation of + `base_automation` works, the dependency can be replaced by `base`. diff --git a/report_label/readme/USAGE.md b/report_label/readme/USAGE.md new file mode 100644 index 0000000000..743cdfb0e9 --- /dev/null +++ b/report_label/readme/USAGE.md @@ -0,0 +1,11 @@ +- In the target model's list view, select the records to print. +- Click *Action* and your label report action name. +- Select the number of labels per record to print, and click Print. + +you can optionaly define an offset + +![usage_image_1](../static/description/report_label_wizard_form.png) + +The items will be printed in a pdf document. + +![usage_image_2"](../static/description/report_result.png) diff --git a/report_label/reports/report_label.xml b/report_label/reports/report_label.xml new file mode 100644 index 0000000000..e8c80d8583 --- /dev/null +++ b/report_label/reports/report_label.xml @@ -0,0 +1,57 @@ + + + + + + Label Report + report.label.wizard + qweb-pdf + report_label.report_label_template + report_label.report_label_template + + diff --git a/report_label/security/ir.model.access.csv b/report_label/security/ir.model.access.csv new file mode 100644 index 0000000000..d63204cff0 --- /dev/null +++ b/report_label/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_report_paperformat_label_all,report.paperformat.label all,model_report_paperformat_label,base.group_user,1,0,0,0 +access_report_label_layout_admin,report.paperformat.label admin,model_report_paperformat_label,base.group_system,1,1,1,1 +access_report_label_wizard,report.label.wizard,model_report_label_wizard,base.group_user,1,1,1,1 +access_report_label_wizard_line,report.label.wizard.line,model_report_label_wizard_line,base.group_user,1,1,1,1 diff --git a/report_label/static/description/icon.png b/report_label/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/report_label/static/description/icon.png differ diff --git a/report_label/static/description/index.html b/report_label/static/description/index.html new file mode 100644 index 0000000000..ba8b2a8af5 --- /dev/null +++ b/report_label/static/description/index.html @@ -0,0 +1,500 @@ + + + + + +Report Labels + + + +
+

Report Labels

+ + +

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

+

This module allows you to create self-adhesive label printing actions on +any model.

+

Table of contents

+ +
+

Configuration

+

Configure your Report Label Paperformat

+
    +
  • Go to “Settings > Technical > Reporting > Label Paper Format”
  • +
  • Create your self-adhesive label paper formats.
  • +
+

You should reuse or create a Paperformat.

+

conf_image_1

+

Configure your Server action

+
    +
  • Go to “Settings > Technical > Actions > Server Actions”
  • +
+

Create your label report :

+
    +
  • In the ‘Action to do’ field, select ‘Print Self-adhesive Labels’
  • +
  • In the ‘Label Paper Format’ field, select your label paper format +previously created
  • +
  • In the ‘Label Qweb Template’ create or reuse a QWeb template for your +label.
  • +
+

conf_image_2

+

Importante Note

+

By +design, +the variable used in this QWeb template must be named record.

+
+
+

Usage

+
    +
  • In the target model’s list view, select the records to print.
  • +
  • Click Action and your label report action name.
  • +
  • Select the number of labels per record to print, and click Print.
  • +
+

you can optionaly define an offset

+

usage_image_1

+

The items will be printed in a pdf document.

+

usage_image_2"

+
+
+

Known issues / Roadmap

+

Known issues:

+
    +
  • This module depends on base_automation only because this module +extends ir.actions.server with a new kind of action, and +base.automation inherits from ir.actions.server by delegation in such +a way that the modules cannot be loaded in another order. To do when +migrating in version > 16 :

    +
      +
    1. remove base_automation dependency
    2. +
    3. install report_label
    4. +
    +

    3. install then base_automation. If the installation of +base_automation works, the dependency can be replaced by base.

    +
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Iván Todorovich
  • +
  • Moka Tourisme
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

ivantodorovich

+

This module is part of the OCA/reporting-engine project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/report_label/static/description/ir_actions_server_form.png b/report_label/static/description/ir_actions_server_form.png new file mode 100644 index 0000000000..c2d6afed3f Binary files /dev/null and b/report_label/static/description/ir_actions_server_form.png differ diff --git a/report_label/static/description/report_label_wizard_form.png b/report_label/static/description/report_label_wizard_form.png new file mode 100644 index 0000000000..1fa9e7300f Binary files /dev/null and b/report_label/static/description/report_label_wizard_form.png differ diff --git a/report_label/static/description/report_paperformat_label_form.png b/report_label/static/description/report_paperformat_label_form.png new file mode 100644 index 0000000000..87d4610afc Binary files /dev/null and b/report_label/static/description/report_paperformat_label_form.png differ diff --git a/report_label/static/description/report_result.png b/report_label/static/description/report_result.png new file mode 100644 index 0000000000..43fa8a40a5 Binary files /dev/null and b/report_label/static/description/report_result.png differ diff --git a/report_label/tests/__init__.py b/report_label/tests/__init__.py new file mode 100644 index 0000000000..255f7911af --- /dev/null +++ b/report_label/tests/__init__.py @@ -0,0 +1 @@ +from . import test_report_label diff --git a/report_label/tests/test_report_label.py b/report_label/tests/test_report_label.py new file mode 100644 index 0000000000..48fdfc8494 --- /dev/null +++ b/report_label/tests/test_report_label.py @@ -0,0 +1,27 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import common + + +class TestReportLabel(common.TransactionCase): + def setUp(self): + super().setUp() + self.partner_label = self.env.ref( + "report_label.actions_server_label_partner_address" + ) + + def test_01_print_partner_label(self): + self.partner_label.create_action() + action = self.partner_label.run() + model = action["res_model"] + context = action["context"] + context.update( + { + "active_model": "res.partner", + "active_ids": self.env["res.partner"].search([]).ids, + "discard_logo_check": True, + } + ) + wizard = self.env[model].with_context(**context).create({}) + report_action = wizard.print_report() + self.assertEqual(report_action["type"], "ir.actions.report") diff --git a/report_label/views/ir_actions_server.xml b/report_label/views/ir_actions_server.xml new file mode 100644 index 0000000000..934734a0c5 --- /dev/null +++ b/report_label/views/ir_actions_server.xml @@ -0,0 +1,23 @@ + + + + ir.actions.server + + + + + + + + + + + diff --git a/report_label/views/report_paperformat_label.xml b/report_label/views/report_paperformat_label.xml new file mode 100644 index 0000000000..02826bd444 --- /dev/null +++ b/report_label/views/report_paperformat_label.xml @@ -0,0 +1,67 @@ + + + + report.paperformat.label + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + report.paperformat.label + + + + + + + + + + + + Label paper format configuration + report.paperformat.label + list,form + [] + {} + + + +
diff --git a/report_label/wizards/__init__.py b/report_label/wizards/__init__.py new file mode 100644 index 0000000000..622f188143 --- /dev/null +++ b/report_label/wizards/__init__.py @@ -0,0 +1,2 @@ +from . import report_label_wizard +from . import report_label_wizard_line diff --git a/report_label/wizards/report_label_wizard.py b/report_label/wizards/report_label_wizard.py new file mode 100644 index 0000000000..fcea242ede --- /dev/null +++ b/report_label/wizards/report_label_wizard.py @@ -0,0 +1,83 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class ReportLabelWizard(models.TransientModel): + _name = "report.label.wizard" + _description = "Report Label Wizard" + + @api.model + def _default_line_ids(self): + """Compute line_ids based on context""" + active_model = self.env.context.get("active_model") + active_ids = self.env.context.get("active_ids", []) + if not active_model or not active_ids: + return False + return [ + ( + 0, + 0, + { + "res_id": res_id, + "quantity": 1, + }, + ) + for res_id in active_ids + ] + + model_id = fields.Many2one( + "ir.model", + "Model", + required=True, + default=lambda self: self.env.context.get("res_model_id"), + ) + label_paperformat_id = fields.Many2one( + "report.paperformat.label", + "Label Paper Format", + readonly=True, + required=True, + default=lambda self: self.env.context.get("label_paperformat_id"), + ) + + label_template_view_id = fields.Many2one( + string="Label QWeb Template", + comodel_name="ir.ui.view", + readonly=True, + required=True, + default=lambda self: self.env.context.get("label_template_view_id"), + ) + offset = fields.Integer( + help="Number of labels to skip when printing", + ) + line_ids = fields.One2many( + "report.label.wizard.line", + "wizard_id", + "Lines", + default=_default_line_ids, + required=True, + ) + + def _prepare_report_data(self): + self.ensure_one() + return { + "label_format": self.label_paperformat_id.read()[0], + "label_template": self.label_template_view_id.sudo().key, + "offset": self.offset, + "res_model": self.model_id.sudo().model, + "lines": [ + { + "res_id": line.res_id, + "quantity": line.quantity, + } + for line in self.line_ids + ], + } + + def print_report(self): + self.ensure_one() + report = self.env.ref("report_label.report_label") + action = report.report_action(self, data=self._prepare_report_data()) + action["context"] = { + "paperformat_id": self.label_paperformat_id.paperformat_id.id, + } + return action diff --git a/report_label/wizards/report_label_wizard.xml b/report_label/wizards/report_label_wizard.xml new file mode 100644 index 0000000000..e5964b1738 --- /dev/null +++ b/report_label/wizards/report_label_wizard.xml @@ -0,0 +1,37 @@ + + + + report.label.wizard + +
+ + + + + + + + + + + + + + + + + + +
+
+
+
diff --git a/report_label/wizards/report_label_wizard_line.py b/report_label/wizards/report_label_wizard_line.py new file mode 100644 index 0000000000..741110e024 --- /dev/null +++ b/report_label/wizards/report_label_wizard_line.py @@ -0,0 +1,30 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class ReportLabelWizardLine(models.TransientModel): + _name = "report.label.wizard.line" + _description = "Report Label Wizard Line" + _order = "sequence" + + wizard_id = fields.Many2one( + "report.label.wizard", + "Wizard", + required=True, + ondelete="cascade", + ) + sequence = fields.Integer(default=10) + res_id = fields.Integer("Resource ID", required=True) + res_name = fields.Char(compute="_compute_res_name") + quantity = fields.Integer(default=1, required=True) + + @api.depends("wizard_id.model_id", "res_id") + def _compute_res_name(self): + wizard = self.mapped("wizard_id") + wizard.ensure_one() + res_model = wizard.model_id.sudo().model + res_ids = self.mapped("res_id") + records = self.env[res_model].browse(res_ids) + names_map = {r.id: r.display_name for r in records} + for rec in self: + rec.res_name = names_map.get(rec.res_id)