diff --git a/fieldservice_account_analytic/README.rst b/fieldservice_account_analytic/README.rst new file mode 100644 index 0000000000..c7a23f0f2c --- /dev/null +++ b/fieldservice_account_analytic/README.rst @@ -0,0 +1,132 @@ +=================================== +Field Service - Analytic Accounting +=================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:9d32962343cbed558fe228310b786a728ae8c21dabeab9bb2cc2abc976aa3bfc + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/18.0/fieldservice_account_analytic + :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-18-0/field-service-18-0-fieldservice_account_analytic + :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=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the ability to track your analytic accounts on field +service orders. It also adds the option to track the billing partner for +field service locations and orders. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +No special installation instructions + +Configuration +============= + +To configure this module, you need to: + +- Go to Field Service > Master Data > Locations +- Create or select a location and set their analytic account + +Usage +===== + +- Go to Field Service > Master Data > Locations +- Create or select a location +- Go to the Accounting tab and select a new or existing analytic account +- Go to Field Service > Operations > All Orders +- Create or select an order and select the location + +Timesheets and invoice lines linked to the order are assigned the +analytic account of the order's location. + +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 +------------ + +- Michael Allen +- Serpent Consulting Services Pvt. Ltd. +- Brian McMaster +- Freni Patel +- `APSL `__: + + - Antoni Marroig + +- Jimmy SC94 jimmysolizcejas1994@gmail.com + +Other credits +------------- + +The development of this module has been financially supported by: + +- Open Source Integrators + +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-osimallen| image:: https://github.com/osimallen.png?size=40px + :target: https://github.com/osimallen + :alt: osimallen +.. |maintainer-brian10048| image:: https://github.com/brian10048.png?size=40px + :target: https://github.com/brian10048 + :alt: brian10048 +.. |maintainer-bodedra| image:: https://github.com/bodedra.png?size=40px + :target: https://github.com/bodedra + :alt: bodedra + +Current `maintainers `__: + +|maintainer-osimallen| |maintainer-brian10048| |maintainer-bodedra| + +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_account_analytic/__init__.py b/fieldservice_account_analytic/__init__.py new file mode 100644 index 0000000000..a60aec2546 --- /dev/null +++ b/fieldservice_account_analytic/__init__.py @@ -0,0 +1,6 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models +from . import wizard +from .init_hook import pre_init_hook diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py new file mode 100644 index 0000000000..bd3fdf04d9 --- /dev/null +++ b/fieldservice_account_analytic/__manifest__.py @@ -0,0 +1,36 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Field Service - Analytic Accounting", + "summary": """Track analytic accounts on Field Service locations + and orders""", + "version": "18.0.1.0.0", + "category": "Field Service", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": [ + "fieldservice_account", + "analytic", + "product", + ], + "data": [ + "security/ir.model.access.csv", + "security/ir_rule.xml", + "report/fsm_order_report_template.xml", + "views/fsm_location.xml", + "views/fsm_order.xml", + "views/res_config_settings.xml", + ], + "demo": [ + "demo/fsm_location.xml", + ], + "pre_init_hook": "pre_init_hook", + "license": "AGPL-3", + "development_status": "Beta", + "maintainers": [ + "osimallen", + "brian10048", + "bodedra", + ], +} diff --git a/fieldservice_account_analytic/demo/fsm_location.xml b/fieldservice_account_analytic/demo/fsm_location.xml new file mode 100644 index 0000000000..57776fb8fb --- /dev/null +++ b/fieldservice_account_analytic/demo/fsm_location.xml @@ -0,0 +1,44 @@ + + + + FSM-TEST + FSM Test Location + + + + + + + + + + + FSM-LOC1 + FSM Test Location 1 + + + + + + + + + FSM-LOC2 + FSM Test Location 2 + + + + + + + + + FSM-LOC3 + FSM Test Location 3 + + + + + + + diff --git a/fieldservice_account_analytic/i18n/es.po b/fieldservice_account_analytic/i18n/es.po new file mode 100644 index 0000000000..ab1097a560 --- /dev/null +++ b/fieldservice_account_analytic/i18n/es.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-04-13 10:45+0000\n" +"Last-Translator: Ed-Spain \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 5.15.2\n" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "Contabilidad" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "Cuenta Analítica" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "Linea Analitica" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "Contacto de Facturación" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "Dirección de Facturación" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "Facturar a" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "Facturado a Cliente" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "Configurar Ajustes" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "Contacto" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "Cliente" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "Pedido FSM" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversión de Registro FSM" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "Ubicación de prueba FSM" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "Orden de Servicio de Campo" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "Filtrar contactos por Localización" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "Filtrar la ubicación en un pedido FSM por el Contacto" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "Artículo Diario" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "No hay una cuenta analítica establecida en la ubicación del pedido." + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "Tipo de Tiempo" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "Coste Total" + +#~ msgid "Bill to" +#~ msgstr "Facturar a" + +#~ msgid "Invoice Line" +#~ msgstr "Línea de factura" + +#~ msgid "Field Service Location Person Info" +#~ msgstr "Servicio de campo Ubicación Información de la persona" diff --git a/fieldservice_account_analytic/i18n/es_AR.po b/fieldservice_account_analytic/i18n/es_AR.po new file mode 100644 index 0000000000..7bf8c5dc3e --- /dev/null +++ b/fieldservice_account_analytic/i18n/es_AR.po @@ -0,0 +1,163 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-11-12 04:46+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.14.1\n" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "Contabilidad" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "Cuenta Analítica" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "Línea Analítica" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "Factura de Contacto" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "Ubicación de Factura" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "Facturar A" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "Cliente Facturado" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "Configurar Ajustes" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "Contacto" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "Cliente" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "Pedido FSM" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversión a Registro FSM" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "Pedido de Servicio de Campo" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "Filtrar Contactos con Ubicación" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "Filtrar la Ubicación por Contacto en un Pedido FSM" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "Apunte Contable" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "No hay una cuenta analítica establecida en la Ubicación del pedido." + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "Tipo de Tiempo" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "Costo Total" + +#~ msgid "Bill to" +#~ msgstr "Facturar a" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" + +#~ msgid "Order" +#~ msgstr "Pedido" + +#~ msgid "Invoice Line" +#~ msgstr "Línea de Factura" diff --git a/fieldservice_account_analytic/i18n/es_CL.po b/fieldservice_account_analytic/i18n/es_CL.po new file mode 100644 index 0000000000..de4a510a66 --- /dev/null +++ b/fieldservice_account_analytic/i18n/es_CL.po @@ -0,0 +1,145 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-01-15 06:13+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.10\n" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "Contabilidad" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "Cuenta Analítica" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "" diff --git a/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot b/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot new file mode 100644 index 0000000000..4d19fd2160 --- /dev/null +++ b/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot @@ -0,0 +1,142 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.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: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "" diff --git a/fieldservice_account_analytic/i18n/it.po b/fieldservice_account_analytic/i18n/it.po new file mode 100644 index 0000000000..0e540a6c1d --- /dev/null +++ b/fieldservice_account_analytic/i18n/it.po @@ -0,0 +1,145 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-03-06 13:06+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 5.10.2\n" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "Contabilità" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "Conto analitico" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "Riga analitica" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "Contatto fattura" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "Località fattura" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "Fatturare a" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "Cliente fatturato" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "Contatto" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "Cliente" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "Ordine FSM" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversione record FSM" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "Ubicazione test FSM" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "Ubicazione 1 test FSM" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "Ubicazione 3 test FSM" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "Località assistenza sul campo" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "Ordine assistenza sul campo" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "Filtra contatti con la località" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "Filtra la località in un ordine FSM dal contatto" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "Movimento contabile" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "Nessun conto analitico impostato nella località dell'ordine." + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "Tipo orario" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "Costo totale" diff --git a/fieldservice_account_analytic/i18n/pt_BR.po b/fieldservice_account_analytic/i18n/pt_BR.po new file mode 100644 index 0000000000..64ad962a07 --- /dev/null +++ b/fieldservice_account_analytic/i18n/pt_BR.po @@ -0,0 +1,164 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-05 12:35+0000\n" +"Last-Translator: Adriano Prado \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 4.17\n" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "Contabilidade" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "Conta Analítica" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "Linha Analitica" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "Conta do Contato" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "Localização de Conta" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "Faturar para" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "Cliente Faturado" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "Definições de configuração" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "Contato" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "Cliente" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "Ordem FSM (Field Service Management)" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversão do Registro FSM" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "Localização do Serviço de Campo" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "Ordem de Serviço de Campo" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "Filtrar contatos de acordo com o Local" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "" +"Filtrar por contato o local em um pedido do FSM (Field Services Management)" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "Item de Diário" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "Nenhuma conta analítica definida na Localização do ordem." + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "Tipo de Tempo" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "Custo Total" + +#~ msgid "Bill to" +#~ msgstr "Conta para" + +#~ msgid "Display Name" +#~ msgstr "Nome exibido" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificação em" + +#~ msgid "Order" +#~ msgstr "Pedido" + +#~ msgid "Invoice Line" +#~ msgstr "Linha de Fatura" diff --git a/fieldservice_account_analytic/i18n/pt_PT.po b/fieldservice_account_analytic/i18n/pt_PT.po new file mode 100644 index 0000000000..2882c1c481 --- /dev/null +++ b/fieldservice_account_analytic/i18n/pt_PT.po @@ -0,0 +1,145 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-21 10:19+0000\n" +"Last-Translator: Daniel Reis \n" +"Language-Team: none\n" +"Language: pt_PT\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_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "Local do Serviço de Campo" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "Ordem de Serviço" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "" diff --git a/fieldservice_account_analytic/i18n/tr.po b/fieldservice_account_analytic/i18n/tr.po new file mode 100644 index 0000000000..0525b61464 --- /dev/null +++ b/fieldservice_account_analytic/i18n/tr.po @@ -0,0 +1,157 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account_analytic +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-09 21:48+0000\n" +"Last-Translator: Ediz Duman \n" +"Language-Team: none\n" +"Language: tr\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_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_form_view_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_order_form_analytic +msgid "Accounting" +msgstr "Muhasebe" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__analytic_account_id +msgid "Analytic Account" +msgstr "Analitik Hesap" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line +msgid "Analytic Line" +msgstr "Analitik Satır" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__contact +msgid "Bill Contact" +msgstr "Fatura Kontak" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields.selection,name:fieldservice_account_analytic.selection__fsm_order__bill_to__location +msgid "Bill Location" +msgstr "Fatura Konum" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to +msgid "Bill To" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_company +msgid "Companies" +msgstr "Şirketler" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings +msgid "Config Settings" +msgstr "Yapılandırma Ayarları" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_res_partner +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id +msgid "Contact" +msgstr "Kontak" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic +msgid "Customer" +msgstr "Müşteri" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id +msgid "FSM Order" +msgstr "FSM Siparişi" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "FSM Kayıt Dönüştürme" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_test_location +msgid "FSM Test Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_1 +msgid "FSM Test Location 1" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_2 +#: model:account.analytic.account,name:fieldservice_account_analytic.analytic_account_location_3 +msgid "FSM Test Location 3" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location +msgid "Field Service Location" +msgstr "Saha Servis Konumu" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_fsm_order +msgid "Field Service Order" +msgstr "Saha Servis Siparişi" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__fsm_filter_location_by_contact +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__fsm_filter_location_by_contact +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter Contacts with Location" +msgstr "" + +#. module: fieldservice_account_analytic +#: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.res_config_settings_view_form_filter +msgid "Filter the Location on an FSM Order by the Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "Yevmiye Öğesi" + +#. module: fieldservice_account_analytic +#. odoo-python +#: code:addons/fieldservice_account_analytic/models/account_move.py:0 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:0 +#, python-format +msgid "No analytic account set on the order's Location." +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id +msgid "Time Type" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost +msgid "Total Cost" +msgstr "Toplam Tutar" + +#~ msgid "Display Name" +#~ msgstr "Görünüm Adı" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Son Düzenlenme" + +#~ msgid "Order" +#~ msgstr "Sipariş" diff --git a/fieldservice_account_analytic/init_hook.py b/fieldservice_account_analytic/init_hook.py new file mode 100644 index 0000000000..11dcaed476 --- /dev/null +++ b/fieldservice_account_analytic/init_hook.py @@ -0,0 +1,10 @@ +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def pre_init_hook(env): + env.cr.execute("""ALTER TABLE "fsm_location" ADD "customer_id" INT;""") + env.cr.execute( + """UPDATE "fsm_location" SET customer_id = owner_id + WHERE customer_id IS NULL;""" + ) diff --git a/fieldservice_account_analytic/models/__init__.py b/fieldservice_account_analytic/models/__init__.py new file mode 100644 index 0000000000..cc23f8252f --- /dev/null +++ b/fieldservice_account_analytic/models/__init__.py @@ -0,0 +1,11 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + account_analytic_line, + account_move_line, + fsm_location, + fsm_order, + res_company, + res_config_settings, + res_partner, +) diff --git a/fieldservice_account_analytic/models/account_analytic_line.py b/fieldservice_account_analytic/models/account_analytic_line.py new file mode 100644 index 0000000000..10dcef79a1 --- /dev/null +++ b/fieldservice_account_analytic/models/account_analytic_line.py @@ -0,0 +1,25 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models +from odoo.exceptions import ValidationError + + +class AccountAnalyticLine(models.Model): + _inherit = "account.analytic.line" + + fsm_order_id = fields.Many2one("fsm.order", string="FSM Order") + product_id = fields.Many2one("product.product", string="Time Type") + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if vals.get("fsm_order_id"): + order = self.env["fsm.order"].browse(vals["fsm_order_id"]) + if order.location_id.analytic_account_id: + vals["account_id"] = order.location_id.analytic_account_id.id + else: + raise ValidationError( + self.env._("No analytic account set on the order's Location.") + ) + return super().create(vals_list) diff --git a/fieldservice_account_analytic/models/account_move_line.py b/fieldservice_account_analytic/models/account_move_line.py new file mode 100644 index 0000000000..1ddd879f37 --- /dev/null +++ b/fieldservice_account_analytic/models/account_move_line.py @@ -0,0 +1,40 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models +from odoo.exceptions import ValidationError + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + @api.depends("fsm_order_ids") + def _compute_analytic_distribution(self): + res = super()._compute_analytic_distribution() + for line in self: + analytic_account = line._get_fsm_analytic_account() + if analytic_account: + line.analytic_distribution = {str(analytic_account.id): 100} + return res + + def _get_fsm_analytic_account(self): + """Return the analytic account to apply on the move line, + based on the location of the linked Field Service orders. + + Kept as a separate method to ease overrides in other modules. + """ + self.ensure_one() + analytic_account = self.env["account.analytic.account"] + for order in self.fsm_order_ids: + if order.location_id.analytic_account_id: + analytic_account = order.location_id.analytic_account_id + return analytic_account + + @api.constrains("fsm_order_ids") + def _check_fsm_order_analytic_account(self): + for line in self: + for order in line.fsm_order_ids: + if not order.location_id.analytic_account_id: + raise ValidationError( + self.env._("No analytic account set on the order's Location.") + ) diff --git a/fieldservice_account_analytic/models/fsm_location.py b/fieldservice_account_analytic/models/fsm_location.py new file mode 100644 index 0000000000..2c7e007db9 --- /dev/null +++ b/fieldservice_account_analytic/models/fsm_location.py @@ -0,0 +1,46 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models +from odoo.osv import expression + + +class FSMLocation(models.Model): + _inherit = "fsm.location" + + analytic_account_id = fields.Many2one( + "account.analytic.account", string="Analytic Account", company_dependent=True + ) + customer_id = fields.Many2one( + "res.partner", + string="Billed Customer", + compute="_compute_customer_id", + store=True, + readonly=False, + precompute=True, + required=True, + ondelete="restrict", + auto_join=True, + tracking=True, + ) + + @api.depends("fsm_parent_id", "owner_id") + def _compute_customer_id(self): + """Default the billed customer to the one of the parent location, + or to the location owner. A customer explicitly set by the user + is only overridden when the parent location provides one.""" + for location in self: + location.customer_id = ( + location.fsm_parent_id.customer_id + or location.customer_id + or location.owner_id + ) + + @api.model + def _search(self, domain, offset=0, limit=None, order=None): + domain = domain or [] + if self.env.context.get("customer_id"): + domain = expression.AND( + [domain, [("partner_id", "=", self.env.context["customer_id"])]] + ) + return super()._search(domain, offset=offset, limit=limit, order=order) diff --git a/fieldservice_account_analytic/models/fsm_order.py b/fieldservice_account_analytic/models/fsm_order.py new file mode 100644 index 0000000000..dbcab41ef3 --- /dev/null +++ b/fieldservice_account_analytic/models/fsm_order.py @@ -0,0 +1,40 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class FSMOrder(models.Model): + _inherit = "fsm.order" + + total_cost = fields.Float(compute="_compute_total_cost") + bill_to = fields.Selection( + [("location", "Bill Location"), ("contact", "Bill Contact")], + required=True, + default="location", + ) + customer_id = fields.Many2one( + "res.partner", + string="Contact", + change_default=True, + index="btree", + tracking=True, + ) + + def _compute_total_cost(self): + """To be overridden as needed from other modules""" + for order in self: + order.total_cost = 0.0 + + @api.onchange("customer_id") + def _onchange_customer_id_location(self): + self.location_id = ( + self.customer_id.service_location_id if self.customer_id else False + ) + + def write(self, vals): + res = super().write(vals) + for order in self: + if "customer_id" not in vals and not order.customer_id: + order.customer_id = order.location_id.customer_id.id + return res diff --git a/fieldservice_account_analytic/models/res_company.py b/fieldservice_account_analytic/models/res_company.py new file mode 100644 index 0000000000..5ddb6b8f8d --- /dev/null +++ b/fieldservice_account_analytic/models/res_company.py @@ -0,0 +1,12 @@ +# Copyright (C) 2020 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + fsm_filter_location_by_contact = fields.Boolean( + string="Filter Contacts with Location" + ) diff --git a/fieldservice_account_analytic/models/res_config_settings.py b/fieldservice_account_analytic/models/res_config_settings.py new file mode 100644 index 0000000000..8d37084ce9 --- /dev/null +++ b/fieldservice_account_analytic/models/res_config_settings.py @@ -0,0 +1,14 @@ +# Copyright (C) 2020, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + fsm_filter_location_by_contact = fields.Boolean( + string="Filter Contacts with Location", + related="company_id.fsm_filter_location_by_contact", + readonly=False, + ) diff --git a/fieldservice_account_analytic/models/res_partner.py b/fieldservice_account_analytic/models/res_partner.py new file mode 100644 index 0000000000..600d70d2c5 --- /dev/null +++ b/fieldservice_account_analytic/models/res_partner.py @@ -0,0 +1,24 @@ +# Copyright (C) 2022 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models +from odoo.osv import expression + + +class ResPartner(models.Model): + _inherit = "res.partner" + + @api.model + def _search(self, domain, offset=0, limit=None, order=None): + domain = domain or [] + if ( + self.env.context.get("location_id") + and self.env.company.fsm_filter_location_by_contact + ): + domain = expression.AND( + [ + domain, + [("service_location_id", "=", self.env.context["location_id"])], + ] + ) + return super()._search(domain, offset=offset, limit=limit, order=order) diff --git a/fieldservice_account_analytic/pyproject.toml b/fieldservice_account_analytic/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/fieldservice_account_analytic/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/fieldservice_account_analytic/readme/CONFIGURE.md b/fieldservice_account_analytic/readme/CONFIGURE.md new file mode 100644 index 0000000000..5cdbd33906 --- /dev/null +++ b/fieldservice_account_analytic/readme/CONFIGURE.md @@ -0,0 +1,4 @@ +To configure this module, you need to: + +- Go to Field Service \> Master Data \> Locations +- Create or select a location and set their analytic account diff --git a/fieldservice_account_analytic/readme/CONTRIBUTORS.md b/fieldservice_account_analytic/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..343d7085d9 --- /dev/null +++ b/fieldservice_account_analytic/readme/CONTRIBUTORS.md @@ -0,0 +1,7 @@ +- Michael Allen \<\> +- Serpent Consulting Services Pvt. Ltd. \<\> +- Brian McMaster \<\> +- Freni Patel \<\> +- [APSL](https://apsl.tech): + - Antoni Marroig \<\> +- Jimmy SC94 diff --git a/fieldservice_account_analytic/readme/CREDITS.md b/fieldservice_account_analytic/readme/CREDITS.md new file mode 100644 index 0000000000..7e4827b0a8 --- /dev/null +++ b/fieldservice_account_analytic/readme/CREDITS.md @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +- Open Source Integrators \<\> diff --git a/fieldservice_account_analytic/readme/DESCRIPTION.md b/fieldservice_account_analytic/readme/DESCRIPTION.md new file mode 100644 index 0000000000..004a1c52e9 --- /dev/null +++ b/fieldservice_account_analytic/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This module adds the ability to track your analytic accounts on field +service orders. It also adds the option to track the billing partner for +field service locations and orders. diff --git a/fieldservice_account_analytic/readme/INSTALL.md b/fieldservice_account_analytic/readme/INSTALL.md new file mode 100644 index 0000000000..54fea7becb --- /dev/null +++ b/fieldservice_account_analytic/readme/INSTALL.md @@ -0,0 +1 @@ +No special installation instructions diff --git a/fieldservice_account_analytic/readme/USAGE.md b/fieldservice_account_analytic/readme/USAGE.md new file mode 100644 index 0000000000..a8b14c69a0 --- /dev/null +++ b/fieldservice_account_analytic/readme/USAGE.md @@ -0,0 +1,8 @@ +- Go to Field Service \> Master Data \> Locations +- Create or select a location +- Go to the Accounting tab and select a new or existing analytic account +- Go to Field Service \> Operations \> All Orders +- Create or select an order and select the location + +Timesheets and invoice lines linked to the order are assigned the +analytic account of the order's location. diff --git a/fieldservice_account_analytic/report/fsm_order_report_template.xml b/fieldservice_account_analytic/report/fsm_order_report_template.xml new file mode 100644 index 0000000000..701c934f27 --- /dev/null +++ b/fieldservice_account_analytic/report/fsm_order_report_template.xml @@ -0,0 +1,19 @@ + + + diff --git a/fieldservice_account_analytic/security/ir.model.access.csv b/fieldservice_account_analytic/security/ir.model.access.csv new file mode 100644 index 0000000000..5062fc08cc --- /dev/null +++ b/fieldservice_account_analytic/security/ir.model.access.csv @@ -0,0 +1,7 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_analytic_line_fsm_user,account.analytic.line.fsm.user,model_account_analytic_line,fieldservice.group_fsm_user,1,1,1,0 +access_account_analytic_line_fsm_dispatcher,account.analytic.line.dispatcher,model_account_analytic_line,fieldservice.group_fsm_dispatcher,1,0,0,0 +access_account_analytic_line_fsm_manager,account.analytic.line.manager,model_account_analytic_line,fieldservice.group_fsm_manager,1,1,1,1 +access_analytic_account_fsm_user,account.analytic.account.fsm.user,analytic.model_account_analytic_account,fieldservice.group_fsm_user,1,0,0,0 +access_analytic_account_fsm_dispatcher,account.analytic.account.dispatcher,analytic.model_account_analytic_account,fieldservice.group_fsm_dispatcher,1,0,0,0 +access_analytic_account_fsm_manager,account.analytic.account.manager,analytic.model_account_analytic_account,fieldservice.group_fsm_manager,1,1,1,1 diff --git a/fieldservice_account_analytic/security/ir_rule.xml b/fieldservice_account_analytic/security/ir_rule.xml new file mode 100644 index 0000000000..933091d641 --- /dev/null +++ b/fieldservice_account_analytic/security/ir_rule.xml @@ -0,0 +1,39 @@ + + + account.analytic.line.fsm.manager + + [('fsm_order_id', '!=', False)] + + + + + + + + account.analytic.line.fsm.dispatcher + + [('fsm_order_id', '!=', False)] + + + + + + + + account.analytic.line.fsm.user + + [('fsm_order_id', '!=', False), ('user_id', '=', user.id)] + + + diff --git a/fieldservice_account_analytic/static/description/icon.png b/fieldservice_account_analytic/static/description/icon.png new file mode 100644 index 0000000000..955674d8f0 Binary files /dev/null and b/fieldservice_account_analytic/static/description/icon.png differ diff --git a/fieldservice_account_analytic/static/description/index.html b/fieldservice_account_analytic/static/description/index.html new file mode 100644 index 0000000000..e32e927368 --- /dev/null +++ b/fieldservice_account_analytic/static/description/index.html @@ -0,0 +1,470 @@ + + + + + +Field Service - Analytic Accounting + + + +
+

Field Service - Analytic Accounting

+ + +

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

+

This module adds the ability to track your analytic accounts on field +service orders. It also adds the option to track the billing partner for +field service locations and orders.

+

Table of contents

+ +
+

Installation

+

No special installation instructions

+
+
+

Configuration

+

To configure this module, you need to:

+
    +
  • Go to Field Service > Master Data > Locations
  • +
  • Create or select a location and set their analytic account
  • +
+
+
+

Usage

+
    +
  • Go to Field Service > Master Data > Locations
  • +
  • Create or select a location
  • +
  • Go to the Accounting tab and select a new or existing analytic account
  • +
  • Go to Field Service > Operations > All Orders
  • +
  • Create or select an order and select the location
  • +
+

Timesheets and invoice lines linked to the order are assigned the +analytic account of the order’s location.

+
+
+

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

+ +
+
+

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:

+

osimallen brian10048 bodedra

+

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_account_analytic/tests/__init__.py b/fieldservice_account_analytic/tests/__init__.py new file mode 100644 index 0000000000..1da8f166be --- /dev/null +++ b/fieldservice_account_analytic/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2019 Brian McMaster +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import test_fsm_account_analytic diff --git a/fieldservice_account_analytic/tests/test_fsm_account_analytic.py b/fieldservice_account_analytic/tests/test_fsm_account_analytic.py new file mode 100644 index 0000000000..1f5f913f71 --- /dev/null +++ b/fieldservice_account_analytic/tests/test_fsm_account_analytic.py @@ -0,0 +1,212 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from datetime import timedelta + +from odoo import fields +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class FSMAccountAnalyticCase(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.Wizard = cls.env["fsm.wizard"] + cls.WorkOrder = cls.env["fsm.order"] + cls.AccountMoveLine = cls.env["account.move.line"] + cls.AnalyticLine = cls.env["account.analytic.line"] + # create a Res Partner + cls.test_partner = cls.env["res.partner"].create( + {"name": "Test Partner", "phone": "123", "email": "tp@email.com"} + ) + # create Res Partners to be linked to FSM Locations + cls.test_loc_partner = cls.env["res.partner"].create( + {"name": "Test Loc Partner", "phone": "ABC", "email": "tlp@email.com"} + ) + cls.test_loc_partner2 = cls.env["res.partner"].create( + {"name": "Test Loc Partner 2", "phone": "123", "email": "tlp@example.com"} + ) + # location without analytic account nor explicit customer + cls.test_location = cls.env["fsm.location"].create( + { + "name": "Test Location", + "phone": "123", + "email": "tp@email.com", + "partner_id": cls.test_loc_partner.id, + "owner_id": cls.test_loc_partner.id, + } + ) + cls.location = cls.env["fsm.location"].create( + { + "name": "Location 1", + "phone": "123", + "email": "tp@email.com", + "partner_id": cls.test_loc_partner.id, + "owner_id": cls.test_loc_partner.id, + } + ) + cls.test_analytic_plan = cls.env["account.analytic.plan"].create( + {"name": "test_analytic_plan"} + ) + cls.test_analytic_account = cls.env["account.analytic.account"].create( + { + "name": "test_analytic_account", + "plan_id": cls.test_analytic_plan.id, + } + ) + # child location with an analytic account, customer computed from parent + cls.test_location2 = cls.env["fsm.location"].create( + { + "name": "Test Location 2", + "phone": "123", + "email": "tp@email.com", + "partner_id": cls.test_loc_partner2.id, + "owner_id": cls.test_loc_partner2.id, + "fsm_parent_id": cls.test_location.id, + "analytic_account_id": cls.test_analytic_account.id, + } + ) + cls.default_account_revenue = cls.env["account.account"].search( + [("account_type", "=", "income")], + limit=1, + ) + cls.general_journal = cls.env["account.journal"].search( + [ + ("company_id", "=", cls.env.company.id), + ("type", "=", "general"), + ], + limit=1, + ) + cls.product1 = cls.env["product.product"].create( + { + "name": "Product A", + "type": "consu", + } + ) + + @classmethod + def _create_order(cls, location): + date_start = fields.Datetime.today() + return cls.WorkOrder.create( + { + "location_id": location.id, + "date_start": date_start, + "date_end": date_start + timedelta(hours=2), + "request_early": date_start, + } + ) + + def test_customer_id_computation(self): + """The billed customer defaults to the owner, and to the parent + location's customer for child locations.""" + self.assertEqual(self.test_location.customer_id, self.test_loc_partner) + # child location: parent's customer wins over its own owner + self.assertEqual(self.test_location2.customer_id, self.test_loc_partner) + # an explicit value is kept when there is no parent customer + location = self.env["fsm.location"].create( + { + "name": "Location Explicit", + "partner_id": self.test_loc_partner2.id, + "owner_id": self.test_loc_partner2.id, + "customer_id": self.test_partner.id, + } + ) + self.assertEqual(location.customer_id, self.test_partner) + + def test_convert_contact_to_fsm_loc(self): + """Converting a contact to a location must set the customer_id + and owner_id correctly.""" + self.Wizard.action_convert_location(self.test_partner) + wiz_location = self.env["fsm.location"].search( + [("partner_id", "=", self.test_partner.id)] + ) + self.assertEqual(len(wiz_location), 1) + self.assertEqual(wiz_location.customer_id, self.test_partner) + self.assertEqual(wiz_location.owner_id, self.test_partner) + + def test_move_line_analytic_distribution(self): + """Move lines linked to FSM orders get the analytic account of the + order's location in their analytic distribution.""" + order = self._create_order(self.test_location2) + move = self.env["account.move"].create({"journal_id": self.general_journal.id}) + line = self.AccountMoveLine.create( + { + "account_id": self.default_account_revenue.id, + "fsm_order_ids": [fields.Command.set(order.ids)], + "move_id": move.id, + } + ) + self.assertEqual( + line.analytic_distribution, + {str(self.test_analytic_account.id): 100}, + ) + + def test_move_line_missing_analytic_account(self): + """Linking a move line to an order whose location has no analytic + account raises an error.""" + order = self._create_order(self.test_location) + move = self.env["account.move"].create({"journal_id": self.general_journal.id}) + with self.assertRaises(ValidationError): + self.AccountMoveLine.create( + { + "account_id": self.default_account_revenue.id, + "fsm_order_ids": [fields.Command.set(order.ids)], + "move_id": move.id, + } + ) + + def test_analytic_line(self): + """Analytic lines linked to FSM orders get the analytic account of + the order's location.""" + order = self._create_order(self.test_location2) + analytic_line = self.AnalyticLine.create( + { + "fsm_order_id": order.id, + "name": "Test01", + "product_id": self.product1.id, + } + ) + self.assertEqual(analytic_line.account_id, self.test_analytic_account) + order2 = self._create_order(self.test_location) + with self.assertRaises(ValidationError): + self.AnalyticLine.create( + { + "fsm_order_id": order2.id, + "name": "Test02", + } + ) + + def test_order_customer(self): + """The order's customer is taken from the location when not set, + and the location follows the customer's service location.""" + order = self._create_order(self.test_location2) + self.assertFalse(order.customer_id) + order.write({"description": "Test description"}) + self.assertEqual(order.customer_id, self.test_location2.customer_id) + order._compute_total_cost() + self.assertEqual(order.total_cost, 0.0) + # onchange: the location follows the customer's service location + self.test_partner.service_location_id = self.test_location2 + order.customer_id = self.test_partner + order._onchange_customer_id_location() + self.assertEqual(order.location_id, self.test_location2) + + def test_filtered_searches(self): + """Contextual filters on partners and locations.""" + self.env.company.fsm_filter_location_by_contact = True + self.test_partner.service_location_id = self.test_location2 + partners = ( + self.env["res.partner"] + .with_context(location_id=self.test_location2.id) + .search([("id", "in", (self.test_partner | self.test_loc_partner).ids)]) + ) + self.assertEqual(partners, self.test_partner) + locations = ( + self.env["fsm.location"] + .with_context(customer_id=self.test_loc_partner.id) + .search([]) + ) + self.assertIn(self.test_location, locations) + self.assertNotIn(self.test_location2, locations) diff --git a/fieldservice_account_analytic/views/fsm_location.xml b/fieldservice_account_analytic/views/fsm_location.xml new file mode 100644 index 0000000000..264a6d4248 --- /dev/null +++ b/fieldservice_account_analytic/views/fsm_location.xml @@ -0,0 +1,52 @@ + + + + fsm.location.list.accounting + fsm.location + + + + + + + + + + fsm.location.form.accounting + fsm.location + + + + + + + + + + + + + + + + + + + fsm.location.search + fsm.location + + + + + + + + + + + diff --git a/fieldservice_account_analytic/views/fsm_order.xml b/fieldservice_account_analytic/views/fsm_order.xml new file mode 100644 index 0000000000..1388b62198 --- /dev/null +++ b/fieldservice_account_analytic/views/fsm_order.xml @@ -0,0 +1,64 @@ + + + fsm.order.form.account + fsm.order + + + + + + + + + + + + + + {"customer_id": customer_id} + + + + + fsm.order.list + fsm.order + + + + + + + + + + fsm.order.kanban + fsm.order + + + + + + +
+ + + +
+
+
+
+ + Orders + fsm.order + + + + + + + +
diff --git a/fieldservice_account_analytic/views/res_config_settings.xml b/fieldservice_account_analytic/views/res_config_settings.xml new file mode 100644 index 0000000000..1f1e36e874 --- /dev/null +++ b/fieldservice_account_analytic/views/res_config_settings.xml @@ -0,0 +1,18 @@ + + + res.config.settings.view.form.fsm.filter + res.config.settings + + + + + + + + + + + diff --git a/fieldservice_account_analytic/wizard/__init__.py b/fieldservice_account_analytic/wizard/__init__.py new file mode 100644 index 0000000000..c013f4b7c3 --- /dev/null +++ b/fieldservice_account_analytic/wizard/__init__.py @@ -0,0 +1 @@ +from . import fsm_wizard diff --git a/fieldservice_account_analytic/wizard/fsm_wizard.py b/fieldservice_account_analytic/wizard/fsm_wizard.py new file mode 100644 index 0000000000..3954afaf51 --- /dev/null +++ b/fieldservice_account_analytic/wizard/fsm_wizard.py @@ -0,0 +1,12 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import models + + +class FSMWizard(models.TransientModel): + _inherit = "fsm.wizard" + + def _prepare_fsm_location(self, partner): + res = super()._prepare_fsm_location(partner) + res["customer_id"] = partner.id + return res diff --git a/fieldservice_subcontracting/tests/test_subcontracting_common.py b/fieldservice_subcontracting/tests/test_subcontracting_common.py index 06fd204ea8..58e186d22d 100644 --- a/fieldservice_subcontracting/tests/test_subcontracting_common.py +++ b/fieldservice_subcontracting/tests/test_subcontracting_common.py @@ -32,6 +32,16 @@ def _setup_subcontracting_data( .id, } ) + if "analytic_account_id" in cls.location._fields: + # fieldservice_account_analytic (optional in the addons graph) + # requires the order's location to carry an analytic account + # before analytic lines can be linked to its orders. + plan = cls.env["account.analytic.plan"].create({"name": "FSM Test Plan"}) + cls.location.analytic_account_id = ( + cls.env["account.analytic.account"] + .create({"name": "FSM Test Analytic", "plan_id": plan.id}) + .id + ) cls.service_product = cls.env["product.product"].create( { "name": "Subcontracted Service",