diff --git a/fieldservice_sale_recurring/README.rst b/fieldservice_sale_recurring/README.rst new file mode 100644 index 0000000000..c5a83ddfe1 --- /dev/null +++ b/fieldservice_sale_recurring/README.rst @@ -0,0 +1,134 @@ +================================= +Field Service - Sales - Recurring +================================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:fd6492192ea76655151a8ddf10f58cda75f9b4c12d2f32d37aa8e0100945b10d + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Ffield--service-lightgray.png?logo=github + :target: https://github.com/OCA/field-service/tree/17.0/fieldservice_sale_recurring + :alt: OCA/field-service +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/field-service-17-0/field-service-17-0-fieldservice_sale_recurring + :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/field-service&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to sell recurring field services. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To setup a product for quoting and selling field service orders: + +- Go to Sales > Catalog > Products + +- Create or select a product + +- Set the Product Type to 'Service' under General Information tab + +- Under Invoicing tab, set the Field Service Tracking option + +- | Select the FSM Order Template that will be used for creating FSM + Orders when + | a Sale Order is confirmed with this product + +Usage +===== + +- Go to Sales +- Create a new Quotation/Sale Order +- Set the FSM Location to be used +- On a Sale Order Line, select a product configured for field service + orders +- Confirm the Sale Order +- Field Service Recurring Orders are generated and linked with sale + order line + +Known issues / Roadmap +====================== + +The roadmap of the Field Service application is documented on +`Github `__. + +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 +------- + +* Open Source Integrators + +Contributors +------------ + +- Open Source Integrators + + - Steve Campbell + - Maxime Chambreuil + - Wolfgang Hall + +- Serpent Consulting Services Pvt. Ltd. +- Brian McMaster +- Raphaël Reverdy +- Italo LOPES + +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-wolfhall| image:: https://github.com/wolfhall.png?size=40px + :target: https://github.com/wolfhall + :alt: wolfhall +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 +.. |maintainer-brian10048| image:: https://github.com/brian10048.png?size=40px + :target: https://github.com/brian10048 + :alt: brian10048 + +Current `maintainers `__: + +|maintainer-wolfhall| |maintainer-max3903| |maintainer-brian10048| + +This module is part of the `OCA/field-service `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fieldservice_sale_recurring/__init__.py b/fieldservice_sale_recurring/__init__.py new file mode 100644 index 0000000000..66ca882fcc --- /dev/null +++ b/fieldservice_sale_recurring/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py new file mode 100644 index 0000000000..949badf70a --- /dev/null +++ b/fieldservice_sale_recurring/__manifest__.py @@ -0,0 +1,31 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Field Service - Sales - Recurring", + "version": "17.0.1.0.0", + "summary": "Sell recurring field services.", + "category": "Field Service", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": [ + "fieldservice_recurring", + "fieldservice_sale", + "fieldservice_account", + ], + "data": [ + "security/ir.model.access.csv", + "views/fsm_recurring.xml", + "views/product_template.xml", + "views/sale_order.xml", + ], + "license": "AGPL-3", + "development_status": "Beta", + "maintainers": [ + "wolfhall", + "max3903", + "brian10048", + ], + "installable": True, + "auto_install": True, +} diff --git a/fieldservice_sale_recurring/i18n/de.po b/fieldservice_sale_recurring/i18n/de.po new file mode 100644 index 0000000000..19002d0807 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/de.po @@ -0,0 +1,174 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-12-03 15:45+0000\n" +"Last-Translator: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT \n" +"Language-Team: none\n" +"Language: de\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.14.1\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Verkaufsaufträge" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "Wiederkehrenden Auftrag erstellen" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" +"Legt fest, was bei Auftragsbestätigung passiert:\n" +" - Nichts: nichts Zusätzliches, Standardverhalten.\n" +" - Pro Verkaufsauftrag: Für den Verkauf wird ein FSM-Auftrag " +"erstellt.\n" +" - Pro Verkaufsauftragszeile: Ein FSM-Auftrag für jede " +"Verkaufsauftragszeile\n" +" wird erstellt." + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Wiederkehrende Service-Aufträge" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Wiederkehrender Field Service-Auftrag, der von der Verkaufsauftragsposition " +"generiert wird" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Vorlage für wiederkehrenden Service-Auftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "" +"Wiederkehrende Field Service Aufträge, die diesem Verkauf zugeordnet sind" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Field Service Verfolgung" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%(product)s): %(name)s\n" +" " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Produktvorlage" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Wiederkehrender Service-Auftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Wiederkehrender Auftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Auftragszeile" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "Verkaufsauftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Auftragszeile" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Verkaufsaufträge" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Wählen Sie eine zu erstellende wiederkehrende Auftragsvorlage für den Field " +"Service aus" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: " +"%(order)s\n" +" (%(product)s)\n" +" " +msgstr "" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created ({}): {}\n" +#~ " " +#~ msgstr "" +#~ "Wiederkehrender Field Service Erstellt ({}): {}\n" +#~ " " + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: {} ({})\n" +#~ " " +#~ msgstr "" +#~ "Diese Wiederholung wurde erstellt aus: {} ({})\n" +#~ " " + +#, fuzzy +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Wiederkehrenden Auftrag erstellen" + +#~ msgid "Sale Order" +#~ msgstr "Verkaufsauftrag" + +#~ msgid "Create a single order" +#~ msgstr "Auftrag erstellen" diff --git a/fieldservice_sale_recurring/i18n/es.po b/fieldservice_sale_recurring/i18n/es.po new file mode 100644 index 0000000000..a906c3f901 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/es.po @@ -0,0 +1,202 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-13 21:36+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: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "Crear un pedido recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" +"Determina qué ocurre en una confirmación de pedido de venta:\n" +" - Nada: nada adicional, comportamiento predeterminado.\n" +" - Por Pedido de Venta: Una Orden de FSMse creará por esta " +"venta.\n" +" - Por línea de Pedido de Venta:Una Orden de FSM por cada " +"línea de pedido\n" +" se creará." + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Pedidos Recurrentes de FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido Recurrente de Servicio de Campo generado por la línea de pedido de " +"venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Plantilla de Servicio de Campor Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Ordenes de Servicio de Campor Recurrente asociadas a esta venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Seguimiento de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%(product)s): %(name)s\n" +" " +msgstr "" +"Servicio de campo recurrente creado (%(product)s): %(name)ss\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Plantilla de Producto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Orden de Servicio de Campo Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Pedido Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Línea de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "Orden de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Seleccione una plantilla de pedido recurrente de servicio de campo para crear" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: " +"%(order)s\n" +" (%(product)s)\n" +" " +msgstr "" +"Este recurrente ha sido creado a partir de: %(order)s\n" +" (%(product)s)\n" +" " + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created ({}): {}\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado ({}) : {}\n" +#~ " " + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: {} ({})\n" +#~ " " +#~ msgstr "" +#~ "Esta recurrencia ha sido creado a partir de: {} ({})\n" +#~ " " + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crear un FSM por pedido de venta" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crear un pedido de FSM por líneas de pedido" + +#~ msgid "Don't create FSM order" +#~ msgstr "No crear pedido de FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venta" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esta recurrencia ha sido creado a partir de: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/es_AR.po b/fieldservice_sale_recurring/i18n/es_AR.po new file mode 100644 index 0000000000..626a8e96e2 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/es_AR.po @@ -0,0 +1,198 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-09 23:52+0000\n" +"Last-Translator: Ignacio Buioli \n" +"Language-Team: none\n" +"Language: es_AR\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: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "Crear un pedido recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" +"Determina qué sucede tras la confirmación del pedido de venta:\n" +" - Ninguno: nada adicional, comportamiento predeterminado.\n" +" - Por orden de venta: se creará un pedido de FSM para la " +"venta.\n" +" - Por línea de orden de venta: un pedido de FSM para cada " +"línea de pedido de venta\n" +" se creará." + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Pedidos FSM Recurrentes" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido Recurrente de Servicio de Campo generado por línea de pedido de venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Plantilla de Servicio de Campo Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Pedidos de Servicio de Campo Recurrente asociados a esta venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Rastreo de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%(product)s): %(name)s\n" +" " +msgstr "" +"Servicio de Campo recurrente Creado (%(product)s): %(name)s\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Plantilla del Producto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Pedido Recurrente de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Pedido Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Línea de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Ventas" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Seleccione una plantilla de servicio de campo recurrente para ser creada" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: " +"%(order)s\n" +" (%(product)s)\n" +" " +msgstr "" +"Esta recurrencia ha sido creada desde: %(order)s\n" +" (%(product)s)\n" +" " + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created ({}): {}\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado ({}): {}\n" +#~ " " + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: {} ({})\n" +#~ " " +#~ msgstr "" +#~ "La recurrencia ha sido creada desde: {} ({})\n" +#~ " " + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado (%s): %s\n" +#~ " " + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esta recurrencia ha sido creada desde: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/es_CL.po b/fieldservice_sale_recurring/i18n/es_CL.po new file mode 100644 index 0000000000..ee33d7ab4d --- /dev/null +++ b/fieldservice_sale_recurring/i18n/es_CL.po @@ -0,0 +1,173 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-12-10 21:04+0000\n" +"Last-Translator: Nelson Ramírez Sánchez \n" +"Language-Team: none\n" +"Language: es_CL\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 3.9.1\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "Crear un pedido recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" +"Determina qué ocurre en una confirmación de pedido de venta:\n" +" - Nada: nada adicional, comportamiento predeterminado.\n" +" - Por Pedido de Venta: Una Orden de FSMse creará por esta " +"venta.\n" +" - Por línea de Pedido de Venta:Una Orden de FSM por cada " +"línea de pedido\n" +" se creará." + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Pedidos Recurrentes de FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido Recurrente de Servicio de Campo generado por la línea de pedido de " +"venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Plantilla de Servicio de Campor Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Ordenes de Servicio de Campor Recurrente asociadas a esta venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Seguimiento de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%(product)s): %(name)s\n" +" " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Plantilla de Producto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Orden de Servicio de Campo Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Pedido Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Línea de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Seleccione una plantilla de pedido recurrente de servicio de campo para crear" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: " +"%(order)s\n" +" (%(product)s)\n" +" " +msgstr "" + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crear un FSM por pedido de venta" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crear un pedido de FSM por líneas de pedido" + +#~ msgid "Don't create FSM order" +#~ msgstr "No crear pedido de FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venta" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esta recurrencia ha sido creado a partir de: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot new file mode 100644 index 0000000000..9b270cc518 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot @@ -0,0 +1,122 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-17 15:03+0000\n" +"PO-Revision-Date: 2024-09-17 15:03+0000\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: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "" + +#. module: fieldservice_sale_recurring +#. odoo-python +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "Field Service recurring Created ({product_name}): " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: fieldservice_sale_recurring +#. odoo-python +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" + +#. module: fieldservice_sale_recurring +#. odoo-python +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "This recurring has been created ({product_name}) from: " +msgstr "" diff --git a/fieldservice_sale_recurring/i18n/fr.po b/fieldservice_sale_recurring/i18n/fr.po new file mode 100644 index 0000000000..ecd2ec0bd0 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/fr.po @@ -0,0 +1,131 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-07-18 17:06+0000\n" +"Last-Translator: Hpar \n" +"Language-Team: none\n" +"Language: fr\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.3.2\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Ventes" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%(product)s): %(name)s\n" +" " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Ligne de vente" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "Vente" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Ligne de vente" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Vente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: " +"%(order)s\n" +" (%(product)s)\n" +" " +msgstr "" diff --git a/fieldservice_sale_recurring/i18n/it.po b/fieldservice_sale_recurring/i18n/it.po new file mode 100644 index 0000000000..7fa918c2b1 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/it.po @@ -0,0 +1,200 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-17 12:36+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: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Ordini di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "Crea un ordine ricorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" +"Determina cosa succede alla conferma di un ordine di vendita:\n" +" - Niente: niente in aggiunta, comportamento predefinito.\n" +" - Per ordine di vendita: verrà creato un ordine FSM per la " +"vendita.\n" +" - Per riga ordine di vendita: verrà creato un ordine FSM per " +"ogni\n" +" riga ordine di vendita." + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Ordini FSM ricorrenti" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Ordinei assistenza sul campo ricorrenti generati da riga ordine di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Modello assistenza sul campo ricorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Ordini assistenza sul campo ricorrenti associati a questa vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Tracciamento assistenza sul campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%(product)s): %(name)s\n" +" " +msgstr "" +"Creata assistenza sul campo ricorrente (%(product)s): %(name)s\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Modello prodotto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Ordine assistenza sul campo ricorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Ordine ricorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Riga di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "Ordine di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Riga ordine di vendita" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Ordini di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "Seleziona un modello ordine assistenza sul camp ricorrente da creare" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: " +"%(order)s\n" +" (%(product)s)\n" +" " +msgstr "" +"Questo ordine ricorrente è stato creato da: %(order)s\n" +" (%(product)s)\n" +" " + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created ({}): {}\n" +#~ " " +#~ msgstr "" +#~ "Creato un servizio sul campo ricorrente ({}): {}\n" +#~ " " + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: {} ({})\n" +#~ " " +#~ msgstr "" +#~ "Questo ordine ricorrente è stato creato da: {} ({})\n" +#~ " " + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crea un ordine FSM per ordine di vendita" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crea un ordine FSM per riga ordine di vendita" + +#~ msgid "Don't create FSM order" +#~ msgstr "Non creare ordine FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Creata assistenza sul campo ricorrente (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Ordine di vendita" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Questo ordine ricorrente è stato creato da: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/pt_BR.po b/fieldservice_sale_recurring/i18n/pt_BR.po new file mode 100644 index 0000000000..162bc9c46b --- /dev/null +++ b/fieldservice_sale_recurring/i18n/pt_BR.po @@ -0,0 +1,172 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-17 22:19+0000\n" +"Last-Translator: Fernando Colus \n" +"Language-Team: none\n" +"Language: pt_BR\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 3.10\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venda" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "Crie uma ordem recorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" +"Determina o que acontece após a confirmação do pedido de venda:\n" +" - Nenhum: nada adicional, comportamento padrão.\n" +" - Por pedido de venda: um pedido FSM será criado para a " +"venda.\n" +" - Por linha de pedido de venda: um pedido FSM será criado " +"para cada linha\n" +" de pedido de venda." + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Ordens Recorrentes do FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido recorrente de serviço de campo gerado pela linha da ordem do cliente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Modelo de Recorrência de Serviço de Campo" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Pedidos recorrentes de Serviço de Campo associados a esta venda" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Rastreamento de Serviços de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%(product)s): %(name)s\n" +" " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Modelo de Produto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Ordem de Serviço de Campo Recorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Ordem Recorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Linha de Venda" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linha de Pedidos de Venda" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Vendas" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Selecione um modelo de ordem de serviço de campo recorrente a ser criado" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: " +"%(order)s\n" +" (%(product)s)\n" +" " +msgstr "" + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crie um pedido FSM por pedido de venda" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crie um Pedido FSM por linha de pedido de venda" + +#~ msgid "Don't create FSM order" +#~ msgstr "Não crie ordem FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Serviço de campo recorrente criado (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venda" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esse recurso recorrente foi criado a partir de: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/models/__init__.py b/fieldservice_sale_recurring/models/__init__.py new file mode 100644 index 0000000000..36728ea16a --- /dev/null +++ b/fieldservice_sale_recurring/models/__init__.py @@ -0,0 +1,10 @@ +# Copyright (C) 2018 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + product_template, + sale_order, + sale_order_line, + fsm_recurring, +) diff --git a/fieldservice_sale_recurring/models/fsm_recurring.py b/fieldservice_sale_recurring/models/fsm_recurring.py new file mode 100644 index 0000000000..1503c69221 --- /dev/null +++ b/fieldservice_sale_recurring/models/fsm_recurring.py @@ -0,0 +1,27 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, fields, models + + +class FSMRecurring(models.Model): + _inherit = "fsm.recurring" + + sale_line_id = fields.Many2one("sale.order.line") + + def action_view_sales(self): + self.ensure_one() + return { + "type": "ir.actions.act_window", + "res_model": "sale.order", + "views": [[False, "form"]], + "res_id": self.sale_line_id.order_id.id, + "context": {"create": False}, + "name": _("Sales Orders"), + } + + def _prepare_order_values(self, date=None): + res = super()._prepare_order_values(date) + res["sale_line_id"] = self.sale_line_id.id + return res diff --git a/fieldservice_sale_recurring/models/product_template.py b/fieldservice_sale_recurring/models/product_template.py new file mode 100644 index 0000000000..210ca24331 --- /dev/null +++ b/fieldservice_sale_recurring/models/product_template.py @@ -0,0 +1,25 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + field_service_tracking = fields.Selection( + selection_add=[("recurring", "Create a recurring order")] + ) + fsm_recurring_template_id = fields.Many2one( + "fsm.recurring.template", + "Field Service Recurring Template", + help="Select a field service recurring order template to be created", + ) + + @api.onchange("field_service_tracking") + def _onchange_field_service_tracking(self): + if self.field_service_tracking != "recurring": + self.fsm_recurring_template_id = False + else: + return super()._onchange_field_service_tracking() diff --git a/fieldservice_sale_recurring/models/sale_order.py b/fieldservice_sale_recurring/models/sale_order.py new file mode 100644 index 0000000000..ab0af77ee8 --- /dev/null +++ b/fieldservice_sale_recurring/models/sale_order.py @@ -0,0 +1,52 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + fsm_recurring_ids = fields.Many2many( + "fsm.recurring", + compute="_compute_fsm_recurring_ids", + string="Field Service Recurring orders associated to this sale", + ) + fsm_recurring_count = fields.Float( + string="FSM Recurring Orders", compute="_compute_fsm_recurring_ids" + ) + + @api.depends("order_line.product_id") + def _compute_fsm_recurring_ids(self): + for order in self: + order.fsm_recurring_ids = self.env["fsm.recurring"].search( + [("sale_line_id", "in", order.order_line.ids)] + ) + order.fsm_recurring_count = len(order.fsm_recurring_ids) + + def action_view_fsm_recurring(self): + fsm_recurrings = self.mapped("fsm_recurring_ids") + action = self.env.ref("fieldservice_recurring.action_fsm_recurring").read()[0] + if len(fsm_recurrings) > 1: + action["domain"] = [("id", "in", fsm_recurrings.ids)] + elif len(fsm_recurrings) == 1: + action["views"] = [ + ( + self.env.ref("fieldservice_recurring.fsm_recurring_form_view").id, + "form", + ) + ] + action["res_id"] = fsm_recurrings.id + else: + action = {"type": "ir.actions.act_window_close"} + return action + + def _action_confirm(self): + """On SO confirmation, some lines generate field service recurrings.""" + result = super()._action_confirm() + self.order_line.filtered( + lambda line: line.product_id.field_service_tracking == "recurring" + and not line.fsm_recurring_id + )._field_create_fsm_recurring() + return result diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py new file mode 100644 index 0000000000..4fc608d10f --- /dev/null +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -0,0 +1,90 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + fsm_recurring_id = fields.Many2one( + "fsm.recurring", + "Recurring Order", + index=True, + copy=False, + help="Field Service Recurring Order generated by the sale order line", + ) + + def _field_create_fsm_recurring_prepare_values(self): + self.ensure_one() + template = self.product_id.fsm_recurring_template_id + product = self.product_id + note = self.name + if template.description: + note += "\n " + template.description + return { + "location_id": self.order_id.fsm_location_id.id, + "start_date": self.order_id.expected_date, + "fsm_recurring_template_id": template.id, + "description": note, + "max_orders": template.max_orders, + "fsm_frequency_set_id": template.fsm_frequency_set_id.id, + "fsm_order_template_id": product.fsm_order_template_id.id + or template.fsm_order_template_id.id, + "sale_line_id": self.id, + "company_id": self.company_id.id, + } + + def _field_create_fsm_recurring(self): + """Generate fsm_recurring for the given so line, and link it. + :return a mapping with the so line id and its linked fsm_recurring + :rtype dict + """ + result = {} + for so_line in self: + # create fsm_recurring + values = so_line._field_create_fsm_recurring_prepare_values() + fsm_recurring = self.env["fsm.recurring"].sudo().create(values) + so_line.write({"fsm_recurring_id": fsm_recurring.id}) + + product_name = so_line.product_id.name + + # post message on SO + msg_body = ( + _("Field Service recurring Created ({product_name}): ").format( + product_name=product_name + ) + + fsm_recurring._get_html_link() + ) + so_line.order_id.message_post(body=msg_body) + + # post message on fsm_recurring + fsm_recurring_msg = ( + _("This recurring has been created ({product_name}) from: ").format( + product_name=product_name + ) + + so_line.order_id._get_html_link() + ) + fsm_recurring.message_post(body=fsm_recurring_msg) + + result[so_line.id] = fsm_recurring + return result + + def _get_invoiceable_fsm_order_domain(self): + """ + add fsm_recurring_id to domain + :return: + """ + dom = super()._get_invoiceable_fsm_order_domain() + if self.fsm_recurring_id: + dom.append(("fsm_recurring_id", "=", self.fsm_recurring_id.id)) + return dom + + def _prepare_invoice_line(self, **optional_values): + res = super()._prepare_invoice_line(**optional_values) + if self.fsm_recurring_id: + fsm_orders = self._get_invoiceable_fsm_order() + if fsm_orders: + res.update({"fsm_order_ids": [(6, 0, fsm_orders.ids)]}) + return res diff --git a/fieldservice_sale_recurring/pyproject.toml b/fieldservice_sale_recurring/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/fieldservice_sale_recurring/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/fieldservice_sale_recurring/readme/CONFIGURE.md b/fieldservice_sale_recurring/readme/CONFIGURE.md new file mode 100644 index 0000000000..be498a47db --- /dev/null +++ b/fieldservice_sale_recurring/readme/CONFIGURE.md @@ -0,0 +1,12 @@ +To setup a product for quoting and selling field service orders: + +- Go to Sales \> Catalog \> Products + +- Create or select a product + +- Set the Product Type to 'Service' under General Information tab + +- Under Invoicing tab, set the Field Service Tracking option + +- Select the FSM Order Template that will be used for creating FSM Orders when + a Sale Order is confirmed with this product diff --git a/fieldservice_sale_recurring/readme/CONTRIBUTORS.md b/fieldservice_sale_recurring/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..d8aaf8bc23 --- /dev/null +++ b/fieldservice_sale_recurring/readme/CONTRIBUTORS.md @@ -0,0 +1,8 @@ +- Open Source Integrators \<\> + - Steve Campbell \<\> + - Maxime Chambreuil \<\> + - Wolfgang Hall \<\> +- Serpent Consulting Services Pvt. Ltd. \<\> +- Brian McMaster \<\> +- Raphaël Reverdy \<\> +- Italo LOPES \<\> diff --git a/fieldservice_sale_recurring/readme/DESCRIPTION.md b/fieldservice_sale_recurring/readme/DESCRIPTION.md new file mode 100644 index 0000000000..51dc3140c5 --- /dev/null +++ b/fieldservice_sale_recurring/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module allows you to sell recurring field services. diff --git a/fieldservice_sale_recurring/readme/ROADMAP.md b/fieldservice_sale_recurring/readme/ROADMAP.md new file mode 100644 index 0000000000..e14dbdee6f --- /dev/null +++ b/fieldservice_sale_recurring/readme/ROADMAP.md @@ -0,0 +1,2 @@ +The roadmap of the Field Service application is documented on +[Github](https://github.com/OCA/field-service/issues/1). diff --git a/fieldservice_sale_recurring/readme/USAGE.md b/fieldservice_sale_recurring/readme/USAGE.md new file mode 100644 index 0000000000..e3f7b8ed3e --- /dev/null +++ b/fieldservice_sale_recurring/readme/USAGE.md @@ -0,0 +1,7 @@ +- Go to Sales +- Create a new Quotation/Sale Order +- Set the FSM Location to be used +- On a Sale Order Line, select a product configured for field service + orders +- Confirm the Sale Order +- Field Service Recurring Orders are generated and linked with sale order line diff --git a/fieldservice_sale_recurring/security/ir.model.access.csv b/fieldservice_sale_recurring/security/ir.model.access.csv new file mode 100644 index 0000000000..890f6a0def --- /dev/null +++ b/fieldservice_sale_recurring/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_fsm_recurring_sale_user,fsm.recurring.sale.user,fieldservice_recurring.model_fsm_recurring,sales_team.group_sale_salesman,1,1,1,0 +access_fsm_recurring_template_sale_user,fsm.recurring.template.sale.user,fieldservice_recurring.model_fsm_recurring_template,sales_team.group_sale_salesman,1,0,0,0 diff --git a/fieldservice_sale_recurring/static/description/description/icon.png b/fieldservice_sale_recurring/static/description/description/icon.png new file mode 100644 index 0000000000..955674d8f0 Binary files /dev/null and b/fieldservice_sale_recurring/static/description/description/icon.png differ diff --git a/fieldservice_sale_recurring/static/description/description/index.html b/fieldservice_sale_recurring/static/description/description/index.html new file mode 100644 index 0000000000..0b3535b24f --- /dev/null +++ b/fieldservice_sale_recurring/static/description/description/index.html @@ -0,0 +1,764 @@ + + + + + + + Field Service + + + +
+

Field Service

+ + +

+ Beta + License: AGPL-3 + OCA/field-service + Translate me on Weblate + Try me on Runbot +

+

This module is the base of the Field Service application in Odoo.

+

Table of contents

+
+ +
+
+

Installation

+

+ To install Field Service and have the mapping features, you need to install + GeoEngine. +

+

+ Please refer to the installation instructions available at: + https://github.com/OCA/geospatial/tree/11.0/base_geoengine +

+
+
+

Configuration

+

To configure this module, you need to:

+
    +
  • Go to Field Service > Configuration > Settings
  • +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  • Go to Field Service
  • +
  • Create or select an order
  • +
  • Follow the process
  • +
+
+
+

Known issues / Roadmap

+

+ The roadmap of the Field Service application is documented on + Github. +

+
+
+

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 smashing it by providing a detailed + and welcomed + feedback. +

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The development of this module has been financially supported by:

+ +
+
+

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 + maintainers: +

+

+ wolfhall + max3903 +

+

+ This module is part of the + OCA/field-service + project on GitHub. +

+

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

+
+
+
+ + diff --git a/fieldservice_sale_recurring/static/description/icon.png b/fieldservice_sale_recurring/static/description/icon.png new file mode 100644 index 0000000000..955674d8f0 Binary files /dev/null and b/fieldservice_sale_recurring/static/description/icon.png differ diff --git a/fieldservice_sale_recurring/static/description/index.html b/fieldservice_sale_recurring/static/description/index.html new file mode 100644 index 0000000000..e12a709995 --- /dev/null +++ b/fieldservice_sale_recurring/static/description/index.html @@ -0,0 +1,472 @@ + + + + + +Field Service - Sales - Recurring + + + +
+

Field Service - Sales - Recurring

+ + +

Beta License: AGPL-3 OCA/field-service Translate me on Weblate Try me on Runboat

+

This module allows you to sell recurring field services.

+

Table of contents

+ +
+

Configuration

+

To setup a product for quoting and selling field service orders:

+
    +
  • Go to Sales > Catalog > Products

    +
  • +
  • Create or select a product

    +
  • +
  • Set the Product Type to ‘Service’ under General Information tab

    +
  • +
  • Under Invoicing tab, set the Field Service Tracking option

    +
  • +
  • +
    Select the FSM Order Template that will be used for creating FSM +Orders when
    +
    a Sale Order is confirmed with this product
    +
    +
  • +
+
+
+

Usage

+
    +
  • Go to Sales
  • +
  • Create a new Quotation/Sale Order
  • +
  • Set the FSM Location to be used
  • +
  • On a Sale Order Line, select a product configured for field service +orders
  • +
  • Confirm the Sale Order
  • +
  • Field Service Recurring Orders are generated and linked with sale +order line
  • +
+
+
+

Known issues / Roadmap

+

The roadmap of the Field Service application is documented on +Github.

+
+
+

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

+
    +
  • Open Source Integrators
  • +
+
+
+

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 maintainers:

+

wolfhall max3903 brian10048

+

This module is part of the OCA/field-service project on GitHub.

+

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

+
+
+
+ + diff --git a/fieldservice_sale_recurring/tests/__init__.py b/fieldservice_sale_recurring/tests/__init__.py new file mode 100644 index 0000000000..377f3a1864 --- /dev/null +++ b/fieldservice_sale_recurring/tests/__init__.py @@ -0,0 +1,6 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + test_fsm_sale_recurring, +) diff --git a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py new file mode 100644 index 0000000000..9ca87c270b --- /dev/null +++ b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py @@ -0,0 +1,172 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +from odoo.addons.fieldservice_sale.tests.test_fsm_sale_order import TestFSMSale + + +class TestFSMSaleRecurring(TestFSMSale): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.test_location = cls.env.ref("fieldservice.test_location") + + # Setup products that when sold will create some FSM orders + cls.setUpFSMProducts() + cls.partner_customer_usd = cls.env["res.partner"].create( + { + "name": "partner_a", + "company_id": False, + } + ) + cls.pricelist_usd = cls.env["product.pricelist"].search( + [("currency_id.name", "=", "USD")], limit=1 + ) + + SaleOrder = cls.env["sale.order"].with_context(tracking_disable=True) + + cls.sale_order_recur = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sale_order_recur2 = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sale_order = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + # Product that creates FSM Recurring Order + cls.product_fsm_recur = cls.env["product.product"].create( + { + "name": "FSM Recurring Order Product", + "categ_id": cls.env.ref("product.product_category_3").id, + "standard_price": 425.0, + "list_price": 500.0, + "type": "service", + "uom_id": cls.env.ref("uom.product_uom_unit").id, + "uom_po_id": cls.env.ref("uom.product_uom_unit").id, + "invoice_policy": "order", + "field_service_tracking": "recurring", + "fsm_recurring_template_id": cls.env.ref( + "fieldservice_recurring.recur_template_weekdays" + ).id, + } + ) + cls.product_fsm_recur2 = cls.env["product.product"].create( + { + "name": "FSM Recurring Order Product Test", + "categ_id": cls.env.ref("product.product_category_3").id, + "standard_price": 425.0, + "list_price": 500.0, + "type": "service", + "uom_id": cls.env.ref("uom.product_uom_unit").id, + "uom_po_id": cls.env.ref("uom.product_uom_unit").id, + "invoice_policy": "order", + "field_service_tracking": "recurring", + "fsm_recurring_template_id": cls.env.ref( + "fieldservice_recurring.recur_template_weekdays" + ).id, + } + ) + cls.product_fsm = cls.env["product.product"].create( + { + "name": "FSM Order Product", + "categ_id": cls.env.ref("product.product_category_3").id, + "standard_price": 425.0, + "list_price": 500.0, + "type": "service", + "uom_id": cls.env.ref("uom.product_uom_unit").id, + "uom_po_id": cls.env.ref("uom.product_uom_unit").id, + "invoice_policy": "order", + "field_service_tracking": "no", + } + ) + cls.sale_line_recurring = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm_recur.name, + "product_id": cls.product_fsm_recur.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm_recur.uom_id.id, + "price_unit": cls.product_fsm_recur.list_price, + "order_id": cls.sale_order_recur.id, + "tax_id": False, + } + ) + cls.sale_line_recurring2 = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm_recur2.name, + "product_id": cls.product_fsm_recur2.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm_recur2.uom_id.id, + "price_unit": cls.product_fsm_recur2.list_price, + "order_id": cls.sale_order_recur2.id, + "tax_id": False, + } + ) + cls.sale_line_recurring3 = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm_recur.name, + "product_id": cls.product_fsm_recur.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm_recur.uom_id.id, + "price_unit": cls.product_fsm_recur.list_price, + "order_id": cls.sale_order_recur2.id, + "tax_id": False, + } + ) + cls.sale_line_recurring4 = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm.name, + "product_id": cls.product_fsm.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm.uom_id.id, + "price_unit": cls.product_fsm.list_price, + "order_id": cls.sale_order.id, + "tax_id": False, + } + ) + + def test_fsm_sale_order_recurring(self): + """Test the flow for a Sale Order that will generate + FSM Recurring Orders. + """ + sol_recur = self.sale_line_recurring + # Confirm the sale order that was setup + self.sale_order_recur.action_confirm() + self.sale_order_recur2.action_confirm() + self.sale_order.action_confirm() + + # FSM Recurring Order linked to Sale Order Line + count_recurring = self.env["fsm.recurring"].search_count( + [("id", "=", sol_recur.fsm_recurring_id.id)] + ) + self.assertEqual( + count_recurring, + 1, + """FSM Sale Recurring: Recurring Order should be linked to the + Sale Order Line""", + ) + sol_recur.fsm_recurring_id.action_view_sales() + self.product_fsm.product_tmpl_id._onchange_field_service_tracking() + self.product_fsm_recur.product_tmpl_id._onchange_field_service_tracking() + self.sale_order_recur.action_view_fsm_recurring() + self.sale_order_recur2.action_view_fsm_recurring() + self.sale_order.action_view_fsm_recurring() + # FSM Recurring Order linked to Sale Order + self.assertEqual( + len(self.sale_order_recur.fsm_recurring_ids.ids), + 1, + """FSM Sale Recurring: Sale Order should create + 1 FSM Recurring Order""", + ) diff --git a/fieldservice_sale_recurring/views/fsm_recurring.xml b/fieldservice_sale_recurring/views/fsm_recurring.xml new file mode 100644 index 0000000000..6ad466cd9f --- /dev/null +++ b/fieldservice_sale_recurring/views/fsm_recurring.xml @@ -0,0 +1,21 @@ + + + + fsm.recurring + + + + + + + + diff --git a/fieldservice_sale_recurring/views/product_template.xml b/fieldservice_sale_recurring/views/product_template.xml new file mode 100644 index 0000000000..bfa2c85cb9 --- /dev/null +++ b/fieldservice_sale_recurring/views/product_template.xml @@ -0,0 +1,18 @@ + + + product.template.fieldservice.form + product.template + + + + + + + + diff --git a/fieldservice_sale_recurring/views/sale_order.xml b/fieldservice_sale_recurring/views/sale_order.xml new file mode 100644 index 0000000000..09bf47dffc --- /dev/null +++ b/fieldservice_sale_recurring/views/sale_order.xml @@ -0,0 +1,25 @@ + + + sale.order.form.sale.fieldservice + sale.order + + + + + + + +