diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a06488079f..d96421ab69 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,7 @@ jobs: makepot: "true" services: postgres: - image: postgres:12.0 + image: postgis/postgis:13-3.4 env: POSTGRES_USER: odoo POSTGRES_PASSWORD: odoo diff --git a/README.md b/README.md index 6804e3bef5..d1bfbe73cf 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ addon | version | maintainers | summary [fieldservice_crm](fieldservice_crm/) | 18.0.1.0.0 | patrickrwilson | Create Field Service orders from the CRM [fieldservice_equipment_stock](fieldservice_equipment_stock/) | 18.0.1.0.1 | brian10048 wolfhall max3903 smangukiya | Integrate stock operations with your field service equipments [fieldservice_equipment_warranty](fieldservice_equipment_warranty/) | 18.0.1.0.0 | imlopes | Field Service equipment warranty +[fieldservice_geoengine](fieldservice_geoengine/) | 18.0.1.0.0 | wolfhall max3903 | Display Field Service locations on a map with Open Street Map [fieldservice_kanban_info](fieldservice_kanban_info/) | 18.0.1.0.2 | ppyczko | Display key service information on Field Service Kanban cards. [fieldservice_portal](fieldservice_portal/) | 18.0.1.0.0 | aleuffre renda-dev | Bridge module between fieldservice and portal. [fieldservice_project](fieldservice_project/) | 18.0.1.0.1 | | Create field service orders from a project or project task diff --git a/fieldservice_geoengine/README.rst b/fieldservice_geoengine/README.rst new file mode 100644 index 0000000000..0006d66594 --- /dev/null +++ b/fieldservice_geoengine/README.rst @@ -0,0 +1,161 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +======================= +Field Service Geoengine +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:ac2fa241f18e0a428926dd3bd909cf940ef0d7ba568ecaa0c79b349c4817d2fb + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/license-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_geoengine + :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_geoengine + :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 displays map views on the order and location using the +GeoEngine module and PostGIS. + +**Table of contents** + +.. contents:: + :local: + +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/13.0/base_geoengine + +Configuration +============= + +To configure this module, you need to: + +- Go to Field Service > Configuration > Settings + +You need to add attribute mention below with the tag as base +element. + +- colors (optional): it allows to set certain specific colors if the + expressed condition (JS syntax) is met. +- custom_color (optional): it allows to set custom color for fsm.stages + example custom_color = "true". And there is minor condition to follow + to implement this as. Define any one stage color condition like + colors="#ffffff:stage_id=='New';" + +Usage +===== + +To use this module, you need to: + +- Go to Field Service > Master Data > Locations +- Make sure to provide all the address information to geolocalize + properly +- Check the map tab to display the location as a point on the map +- Go to Field Service > Dashboard +- Select the map view to show the orders on a map with a different + colors based on their stage + +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 +* Pytech SRL + +Contributors +------------ + +- Open Source Integrators + + - Wolfgang Hall + - Maxime Chambreuil + - Steve Campbell + - Bhavesh Odedra + - Michael Allen + - Sandip Mangukiya + - Jevin Dement + +- Murtuza Saleh + +- Sebastiano Picchi + +- [APSL-Nagarro](https://apsl.tech): + + - Antoni Marroig + +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-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 + +Current `maintainers `__: + +|maintainer-wolfhall| |maintainer-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_geoengine/__init__.py b/fieldservice_geoengine/__init__.py new file mode 100644 index 0000000000..bbed747cd6 --- /dev/null +++ b/fieldservice_geoengine/__init__.py @@ -0,0 +1,5 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# Copyright (C) 2023 - TODAY Pytech SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_geoengine/__manifest__.py b/fieldservice_geoengine/__manifest__.py new file mode 100644 index 0000000000..8498b79ee9 --- /dev/null +++ b/fieldservice_geoengine/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# Copyright (C) 2023 - TODAY Pytech SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Field Service Geoengine", + "summary": "Display Field Service locations on a map with Open Street Map", + "license": "AGPL-3", + "version": "18.0.1.0.0", + "category": "Field Service", + "author": "Open Source Integrators, Odoo Community Association (OCA), Pytech SRL", + "website": "https://github.com/OCA/field-service", + "depends": ["base_geoengine", "fieldservice"], + "data": [ + "security/res_groups.xml", + "views/fsm_location.xml", + "views/fsm_team.xml", + "views/fsm_order.xml", + ], + "assets": { + "web.assets_backend": [ + "fieldservice_geoengine/static/src/js/**", + ] + }, + "development_status": "Beta", + "maintainers": ["wolfhall", "max3903"], +} diff --git a/fieldservice_geoengine/i18n/de.po b/fieldservice_geoengine/i18n/de.po new file mode 100644 index 0000000000..ed9041f256 --- /dev/null +++ b/fieldservice_geoengine/i18n/de.po @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-26 14:27+0000\n" +"Last-Translator: Maria Sparenberg \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 3.8\n" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "Field-Service-Ort" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "Field-Service-Auftrag" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "Karte" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +#, python-format +msgid "You need to select a numeric field" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "" diff --git a/fieldservice_geoengine/i18n/es.po b/fieldservice_geoengine/i18n/es.po new file mode 100644 index 0000000000..5b1165cecb --- /dev/null +++ b/fieldservice_geoengine/i18n/es.po @@ -0,0 +1,170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-23 21:34+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_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "Coordinar" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "Punto de Ubicación FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "FSM Ubicación Estado color personalizado" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "Punto de Pedido FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "Estado de Pedido FSM coloreado personalizado" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación de Servicio de Campo" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "Orden de Servicio de Campo" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "Ubicación GeoCode" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "Mapa" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "Mapa de calles abierto" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "Color de Etapa" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "Nombre de Etapa" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "Utilice solo código hexadecimal Ej: - # FFFFFF" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +#, python-format +msgid "You need to select a numeric field" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" + +#~ msgid "Order" +#~ msgstr "Orden" + +#~ msgid "basic" +#~ msgstr "básico" diff --git a/fieldservice_geoengine/i18n/es_AR.po b/fieldservice_geoengine/i18n/es_AR.po new file mode 100644 index 0000000000..d79b004dff --- /dev/null +++ b/fieldservice_geoengine/i18n/es_AR.po @@ -0,0 +1,170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-02-21 00:08+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_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "Coordenada" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "Punto de Ubicación FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "Estado de color personalizado de la Ubicación FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "Punto de Pedido FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "Estado del Pedido FSM coloreado personalizado" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "Pedido de Servicio de Campo" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "Ubicación del GeoCódigo" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "Mapa" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "Open Street Map" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "Color de Etapa" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "Nombre de la Etapa" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "Utilice solo Código Hexadecimal, Ej:-#FFFFFF" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +#, python-format +msgid "You need to select a numeric field" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" + +#~ msgid "Order" +#~ msgstr "Pedido" + +#~ msgid "basic" +#~ msgstr "básico" diff --git a/fieldservice_geoengine/i18n/es_CL.po b/fieldservice_geoengine/i18n/es_CL.po new file mode 100644 index 0000000000..5733858c39 --- /dev/null +++ b/fieldservice_geoengine/i18n/es_CL.po @@ -0,0 +1,158 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-21 20:35+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.8\n" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "Punto de Pedido FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "Estado de Pedido FSM coloreado personalizado" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación de Servicio de Campo" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "Orden de Servicio de Campo" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "Ubicación GeoCode" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "Mapa" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +#, python-format +msgid "You need to select a numeric field" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "" + +#~ msgid "basic" +#~ msgstr "básico" diff --git a/fieldservice_geoengine/i18n/fieldservice_geoengine.pot b/fieldservice_geoengine/i18n/fieldservice_geoengine.pot new file mode 100644 index 0000000000..3bab540dde --- /dev/null +++ b/fieldservice_geoengine/i18n/fieldservice_geoengine.pot @@ -0,0 +1,151 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.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_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +msgid "You need to select a numeric field" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "" diff --git a/fieldservice_geoengine/i18n/fr_FR.po b/fieldservice_geoengine/i18n/fr_FR.po new file mode 100644 index 0000000000..8eddb10c9b --- /dev/null +++ b/fieldservice_geoengine/i18n/fr_FR.po @@ -0,0 +1,158 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-05-20 10:48+0000\n" +"Last-Translator: Sandrine (ACSONE) \n" +"Language-Team: none\n" +"Language: fr_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_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "Coordonner" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "Customisation de la couleur de l'étape du service sur site" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "Lieu du Service sur site" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "Service sur site" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "GeoCode" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "Carte" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "Open Street Map" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +#, python-format +msgid "You need to select a numeric field" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "" + +#~ msgid "basic" +#~ msgstr "Basique" diff --git a/fieldservice_geoengine/i18n/it.po b/fieldservice_geoengine/i18n/it.po new file mode 100644 index 0000000000..393dcefdcf --- /dev/null +++ b/fieldservice_geoengine/i18n/it.po @@ -0,0 +1,170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-07-30 14:25+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.4\n" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "&nbsp;Aggiornare dettagli latitudine e longitudine di conseguenza!" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "Città:" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "Coordinata" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "Nazione:" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "Punto ubicazione FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "Colore stato ubicazione FSM personalizzato" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "Punto ordine FSM" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "Colore personalizzato stato ordine FSM" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "Località assistenza sul campo" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "Ordine assistenza sul campo" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "Ubicazione GeoCode" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "Mappa" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "Cellulare:" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "Nome:" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "Open Street Map" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "Telefono:" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "Colore fase" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "Nome fase" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "Stato:" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "Indirizzo 2:" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "Indirizzo:" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "Usare solo codice esadecimale Ex:-#FFFFFF" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "Livello vettoriale" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +#, python-format +msgid "You need to select a numeric field" +msgstr "Bisogna selezionare un campo numerico" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "CAP:" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + +#~ msgid "Order" +#~ msgstr "Ordine" + +#~ msgid "basic" +#~ msgstr "base" diff --git a/fieldservice_geoengine/i18n/pt_BR.po b/fieldservice_geoengine/i18n/pt_BR.po new file mode 100644 index 0000000000..06ab473f70 --- /dev/null +++ b/fieldservice_geoengine/i18n/pt_BR.po @@ -0,0 +1,159 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_geoengine +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_location_form_view +msgid "&nbsp;Update Latitude and Longitude details accordingly!" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "City:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__shape +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_order__shape +msgid "Coordinate" +msgstr "Coordenada" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Country:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsm0 +msgid "FSM Location Point" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.loc_geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Location State colored custom" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsm0 +msgid "FSM Order Point" +msgstr "Ponto de pedido FSM (Field Service Management)" + +#. module: fieldservice_geoengine +#: model:geoengine.vector.layer,name:fieldservice_geoengine.geoengine_vector_layer_fsmordertatecoloredcustom0 +msgid "FSM Order State colored custom" +msgstr "" +"Estado do pedido colorido personalizado do FSM (Field Service Management)" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_location +msgid "Field Service Location" +msgstr "Local do Serviço de Campo" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_fsm_order +msgid "Field Service Order" +msgstr "Ordem de Serviço de Campo" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "GeoCode Location" +msgstr "Código de Geo-Localização" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.fsm_order_form +msgid "Map" +msgstr "Mapa" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Mobile:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Name:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:geoengine.raster.layer,name:fieldservice_geoengine.geoengine_raster_layer_retailmachineosm +#: model:geoengine.raster.layer,name:fieldservice_geoengine.loc_geoengine_raster_layer_osm +msgid "Open Street Map" +msgstr "Abrir mapa de ruas" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Phone:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Stage Color" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,field_description:fieldservice_geoengine.field_fsm_location__stage_name +msgid "Stage Name" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "State:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street 2:" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "Street:" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model.fields,help:fieldservice_geoengine.field_fsm_location__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "" + +#. module: fieldservice_geoengine +#: model:ir.model,name:fieldservice_geoengine.model_geoengine_vector_layer +msgid "Vector Layer" +msgstr "" + +#. module: fieldservice_geoengine +#. odoo-python +#: code:addons/fieldservice_geoengine/models/vector_layer.py:0 +#, python-format +msgid "You need to select a numeric field" +msgstr "" + +#. module: fieldservice_geoengine +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_location_map +#: model_terms:ir.ui.view,arch_db:fieldservice_geoengine.ir_ui_view_fsm_order_map +msgid "ZIP:" +msgstr "" + +#~ msgid "basic" +#~ msgstr "básico" diff --git a/fieldservice_geoengine/models/__init__.py b/fieldservice_geoengine/models/__init__.py new file mode 100644 index 0000000000..4646197920 --- /dev/null +++ b/fieldservice_geoengine/models/__init__.py @@ -0,0 +1,6 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import fsm_location +from . import fsm_order +from . import vector_layer diff --git a/fieldservice_geoengine/models/fsm_location.py b/fieldservice_geoengine/models/fsm_location.py new file mode 100644 index 0000000000..6b326e219f --- /dev/null +++ b/fieldservice_geoengine/models/fsm_location.py @@ -0,0 +1,37 @@ +# Copyright (C) 2018 Open Source Integrators +# Copyright (C) 2023 - TODAY Pytech SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class FSMLocation(models.Model): + _inherit = "fsm.location" + + # Geometry Field + shape = fields.GeoPoint("Coordinate", compute="_compute_shape", store=True) + stage_name = fields.Char(related="stage_id.name", string="Stage Name") + custom_color = fields.Char(related="stage_id.custom_color", string="Stage Color") + + @api.model_create_multi + def create(self, vals): + res = super().create(vals) + if not res.partner_latitude or not res.partner_longitude: + res.with_context(force_geo_localize=True).geo_localize() + return res + + def geo_localize(self): + self.mapped("partner_id").geo_localize() + + @api.depends("partner_latitude", "partner_longitude") + def _compute_shape(self): + for loc in self: + if loc.partner_latitude or loc.partner_longitude: + point = fields.GeoPoint.from_latlon( + cr=loc.env.cr, + latitude=loc.partner_latitude, + longitude=loc.partner_longitude, + ) + loc.shape = point + else: + loc.shape = False diff --git a/fieldservice_geoengine/models/fsm_order.py b/fieldservice_geoengine/models/fsm_order.py new file mode 100644 index 0000000000..ef1ad46b54 --- /dev/null +++ b/fieldservice_geoengine/models/fsm_order.py @@ -0,0 +1,14 @@ +# Copyright (C) 2018 Open Source Integrators +# Copyright (C) 2023 - TODAY Pytech SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMOrder(models.Model): + _inherit = "fsm.order" + + shape = fields.GeoPoint(related="location_id.shape", string="Coordinate") + + def geo_localize(self): + self.mapped("location_id").geo_localize() diff --git a/fieldservice_geoengine/models/vector_layer.py b/fieldservice_geoengine/models/vector_layer.py new file mode 100644 index 0000000000..b7edeb7297 --- /dev/null +++ b/fieldservice_geoengine/models/vector_layer.py @@ -0,0 +1,33 @@ +# Copyright 2011-2012 Nicolas Bessi (Camptocamp SA) +# Copyright 2016 Yannick Payot (Camptocamp SA) +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, models +from odoo.exceptions import ValidationError + +NUMBER_ATT = ["float", "integer", "integer_big"] + + +class GeoVectorLayer(models.Model): + _inherit = "geoengine.vector.layer" + + @api.constrains("geo_repr", "attribute_field_id") + def _check_geo_repr(self): + for rec in self: + if ( + rec.attribute_field_id + and rec.attribute_field_id.ttype not in NUMBER_ATT + and rec.model_id.name not in ["fsm.order", "fsm.location"] + and rec.geo_field_id.model not in ["fsm.order", "fsm.location"] + ): + if ( + rec.geo_repr == "colored" + and rec.classification != "unique" + or rec.geo_repr == "proportion" + ): + raise ValidationError( + _( + "You need to select a numeric field", + ) + ) diff --git a/fieldservice_geoengine/pyproject.toml b/fieldservice_geoengine/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/fieldservice_geoengine/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/fieldservice_geoengine/readme/CONFIGURE.md b/fieldservice_geoengine/readme/CONFIGURE.md new file mode 100644 index 0000000000..628f7f774d --- /dev/null +++ b/fieldservice_geoengine/readme/CONFIGURE.md @@ -0,0 +1,13 @@ +To configure this module, you need to: + +- Go to Field Service \> Configuration \> Settings + +You need to add attribute mention below with the tag \ as +base element. + +- colors (optional): it allows to set certain specific colors if the + expressed condition (JS syntax) is met. +- custom_color (optional): it allows to set custom color for fsm.stages + example custom_color = "true". And there is minor condition to follow + to implement this as. Define any one stage color condition like + colors="#ffffff:stage_id=='New';" diff --git a/fieldservice_geoengine/readme/CONTRIBUTORS.md b/fieldservice_geoengine/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..3b57dabe99 --- /dev/null +++ b/fieldservice_geoengine/readme/CONTRIBUTORS.md @@ -0,0 +1,16 @@ +- Open Source Integrators + - Wolfgang Hall \<\> + - Maxime Chambreuil \<\> + - Steve Campbell \<\> + - Bhavesh Odedra \<\> + - Michael Allen \<\> + - Sandip Mangukiya \<\> + - Jevin Dement \<\> + +- Murtuza Saleh \<\> + +- Sebastiano Picchi \<\> + +- \[APSL-Nagarro\](): + - Antoni Marroig \<\> + diff --git a/fieldservice_geoengine/readme/CREDITS.md b/fieldservice_geoengine/readme/CREDITS.md new file mode 100644 index 0000000000..7e4827b0a8 --- /dev/null +++ b/fieldservice_geoengine/readme/CREDITS.md @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +- Open Source Integrators \<\> diff --git a/fieldservice_geoengine/readme/DESCRIPTION.md b/fieldservice_geoengine/readme/DESCRIPTION.md new file mode 100644 index 0000000000..501f360fc6 --- /dev/null +++ b/fieldservice_geoengine/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module displays map views on the order and location using the +GeoEngine module and PostGIS. diff --git a/fieldservice_geoengine/readme/INSTALL.md b/fieldservice_geoengine/readme/INSTALL.md new file mode 100644 index 0000000000..263ff64d3a --- /dev/null +++ b/fieldservice_geoengine/readme/INSTALL.md @@ -0,0 +1,5 @@ +To install Field Service and have the mapping features, you need to +install GeoEngine. + +Please refer to the installation instructions available at: + diff --git a/fieldservice_geoengine/readme/ROADMAP.md b/fieldservice_geoengine/readme/ROADMAP.md new file mode 100644 index 0000000000..e14dbdee6f --- /dev/null +++ b/fieldservice_geoengine/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_geoengine/readme/USAGE.md b/fieldservice_geoengine/readme/USAGE.md new file mode 100644 index 0000000000..7b0412dc93 --- /dev/null +++ b/fieldservice_geoengine/readme/USAGE.md @@ -0,0 +1,9 @@ +To use this module, you need to: + +- Go to Field Service \> Master Data \> Locations +- Make sure to provide all the address information to geolocalize + properly +- Check the map tab to display the location as a point on the map +- Go to Field Service \> Dashboard +- Select the map view to show the orders on a map with a different + colors based on their stage diff --git a/fieldservice_geoengine/security/res_groups.xml b/fieldservice_geoengine/security/res_groups.xml new file mode 100644 index 0000000000..b952e6545b --- /dev/null +++ b/fieldservice_geoengine/security/res_groups.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/fieldservice_geoengine/static/description/icon.png b/fieldservice_geoengine/static/description/icon.png new file mode 100644 index 0000000000..955674d8f0 Binary files /dev/null and b/fieldservice_geoengine/static/description/icon.png differ diff --git a/fieldservice_geoengine/static/description/index.html b/fieldservice_geoengine/static/description/index.html new file mode 100644 index 0000000000..648b464fa7 --- /dev/null +++ b/fieldservice_geoengine/static/description/index.html @@ -0,0 +1,502 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Field Service Geoengine

+ +

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

+

This module displays map views on the order and location using the +GeoEngine module and PostGIS.

+

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/13.0/base_geoengine

+
+
+

Configuration

+

To configure this module, you need to:

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

You need to add attribute mention below with the tag <timeline> as base +element.

+
    +
  • colors (optional): it allows to set certain specific colors if the +expressed condition (JS syntax) is met.
  • +
  • custom_color (optional): it allows to set custom color for fsm.stages +example custom_color = “true”. And there is minor condition to follow +to implement this as. Define any one stage color condition like +colors=”#ffffff:stage_id==’New’;”
  • +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  • Go to Field Service > Master Data > Locations
  • +
  • Make sure to provide all the address information to geolocalize +properly
  • +
  • Check the map tab to display the location as a point on the map
  • +
  • Go to Field Service > Dashboard
  • +
  • Select the map view to show the orders on a map with a different +colors based on their stage
  • +
+
+
+

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
  • +
  • Pytech SRL
  • +
+
+
+

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_geoengine/static/src/js/views/geoengine/geoengine_renderer/geoengine_renderer.esm.js b/fieldservice_geoengine/static/src/js/views/geoengine/geoengine_renderer/geoengine_renderer.esm.js new file mode 100644 index 0000000000..808d799f8f --- /dev/null +++ b/fieldservice_geoengine/static/src/js/views/geoengine/geoengine_renderer/geoengine_renderer.esm.js @@ -0,0 +1,139 @@ +/** @odoo-module */ + +/** + * Copyright 2024 APSL-Nagarro + */ + +/* global chroma, geostats */ + +import {GeoengineRenderer} from "@base_geoengine/js/views/geoengine/geoengine_renderer/geoengine_renderer.esm"; +import {patch} from "@web/core/utils/patch"; + +/* CONSTANTS */ +const DEFAULT_BEGIN_COLOR = "#FFFFFF"; +const DEFAULT_END_COLOR = "#000000"; +const LEGEND_MAX_ITEMS = 10; +const DEFAULT_NUM_CLASSES = 5; + +patch(GeoengineRenderer.prototype, { + styleVectorLayerColored(cfg, data) { + var indicator = cfg.attribute_field_id[1]; + var values = this.extractLayerValues(cfg, data); + var nb_class = cfg.nb_class || DEFAULT_NUM_CLASSES; + var opacity = cfg.layer_opacity; + var begin_color_hex = cfg.begin_color || DEFAULT_BEGIN_COLOR; + var end_color_hex = cfg.end_color || DEFAULT_END_COLOR; + var begin_color = chroma(begin_color_hex).alpha(opacity).css(); + var end_color = chroma(end_color_hex).alpha(opacity).css(); + // Function that maps numeric values to a color palette. + // This scale function is only used when geo_repr is basic + var scale = chroma.scale([begin_color, end_color]); + var serie = new geostats(values); + var vals = null; + switch (cfg.classification) { + case "unique": + case "custom": + vals = serie.getClassUniqueValues(); + // "RdYlBu" is a set of colors + scale = chroma.scale("RdYlBu").domain([0, vals.length], vals.length); + break; + case "quantile": + serie.getClassQuantile(nb_class); + vals = serie.getRanges(); + scale = scale.domain([0, vals.length], vals.length); + break; + case "interval": + serie.getClassEqInterval(nb_class); + vals = serie.getRanges(); + scale = scale.domain([0, vals.length], vals.length); + break; + } + let colors = []; + if (cfg.classification === "custom") { + colors = vals + .filter((val) => val) + .map((val) => chroma(val).alpha(opacity).css()); + } else { + colors = scale + .colors(vals.length) + .map((color) => chroma(color).alpha(opacity).css()); + } + const styles_map = this.createStylesWithColors(colors); + let legend = null; + if (vals.length <= LEGEND_MAX_ITEMS) { + legend = serie.getHtmlLegend(colors, cfg.name, 1); + for (let i = 0; i < data.length; i++) { + legend = legend.replace( + data[i]._values[cfg.attribute_field_id[1]], + data[i]._values.stage_name + ); + } + } + return { + style: (feature) => { + const value = feature.get("attributes")[indicator]; + const color_idx = this.getClass(value, vals); + var label_text = feature.values_.attributes.label; + if (label_text === false) { + label_text = ""; + } else if (label_text !== "") { + label_text = feature.values_.attributes.stage_name; + } + styles_map[colors[color_idx]][0].text_.text_ = label_text.toString(); + return styles_map[colors[color_idx]]; + }, + legend, + }; + }, + async onLayerChanged(vector, layer) { + layer.setSource(null); + const element = document.getElementById(`legend-${vector.resId}`); + if (element !== null) { + element.remove(); + } + if (vector.model) { + this.cfg_models.push(vector.model); + const fields_to_read = [vector.geo_field_id[1]]; + if (vector.attribute_field_id) { + fields_to_read.push(vector.attribute_field_id[1]); + } + const data = await this.getModelData(vector, fields_to_read); + this.styleVectorLayerAndLegend(vector, data, layer); + this.useRelatedModel(vector, layer, data); + } else { + const data = []; + for (const record of this.props.data.records) { + if ( + vector.attribute_field_id[1] === "custom_color" && + typeof record.data[vector.attribute_field_id[1]] === "string" + ) { + record.data[vector.attribute_field_id[1]] = parseInt( + record.data[vector.attribute_field_id[1]].split("#")[1], + 16 + ); + } + data.push(record); + } + this.styleVectorLayerAndLegend(vector, data, layer); + this.addSourceToLayer(data, vector, layer); + } + }, + styleVectorLayerAndLegend(cfg, data, lv) { + const aux = []; + for (var i = 0; i < data.length; i++) { + if ( + cfg.attribute_field_id[1] === "custom_color" && + typeof data[i]._values[cfg.attribute_field_id[1]] === "string" + ) { + data[i]._values[cfg.attribute_field_id[1]] = parseInt( + data[i]._values[cfg.attribute_field_id[1]].split("#")[1], + 16 + ); + } + aux.push(data[i]); + } + const styleInfo = this.styleVectorLayer(cfg, aux); + this.initLegend(styleInfo, cfg); + lv.setStyle(styleInfo.style); + }, +}); diff --git a/fieldservice_geoengine/tests/__init__.py b/fieldservice_geoengine/tests/__init__.py new file mode 100644 index 0000000000..9dfe46420d --- /dev/null +++ b/fieldservice_geoengine/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2012 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_fsm_location diff --git a/fieldservice_geoengine/tests/test_fsm_location.py b/fieldservice_geoengine/tests/test_fsm_location.py new file mode 100644 index 0000000000..1c48b0659e --- /dev/null +++ b/fieldservice_geoengine/tests/test_fsm_location.py @@ -0,0 +1,163 @@ +# Copyright (C) 2012 - TODAY, Open Source Integrators +# Copyright (C) 2023 - TODAY Pytech SRL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import requests + +from odoo import fields +from odoo.tests.common import TransactionCase + + +class TestFsmLocation(TransactionCase): + @classmethod + def setUpClass(cls): + cls._super_send = requests.Session.send + super().setUpClass() + cls.FSMLocation = cls.env["fsm.location"] + cls.location_partner_1 = cls.env.ref("fieldservice.location_partner_1") + cls.location_partner_2 = cls.env.ref("fieldservice.location_partner_2") + cls.location_partner_3 = cls.env.ref("fieldservice.location_partner_3") + cls.test_loc_partner = cls.env.ref("fieldservice.test_loc_partner") + # delta value of 0.00001 was chosen according to + # OpenStreetMap's decimal precision table + # https://wiki.openstreetmap.org/wiki/Precision_of_coordinates#Conversion_to_decimal + # 5 decimals are necessary for precision of about a metre + cls.delta = 0.000_01 + + cls.test_location = cls.FSMLocation.create( + { + "name": "Test Location 2", + "phone": "123", + "email": "test@example.com", + "partner_id": cls.location_partner_1.id, + "owner_id": cls.location_partner_2.id, + } + ) + + @classmethod + def _request_handler(cls, s, r, /, **kw): + """Don't block external requests.""" + return cls._super_send(s, r, **kw) + + def test_fsm_location_creation(self): + test_partner = self.env["res.partner"].create( + { + "name": "Test partner", + } + ) + # should not be localized yet + test_partner.write( + { + "street": "Rue des Bourlottes 9", + "zip": "1367", + "city": "Grand-Rosière", + "country_id": self.env.ref("base.be"), + } + ) + self.assertFalse(self.location_partner_1.partner_latitude) + self.assertFalse(self.location_partner_1.partner_longitude) + # should be localized after assigning a partner to the location + test_location_1 = self.FSMLocation.create( + { + "name": "Test Location 2", + "phone": "123", + "email": "test@example.com", + "partner_id": test_partner.id, + "owner_id": self.location_partner_1.id, + } + ) + self.assertTrue(test_location_1.partner_latitude) + self.assertTrue(test_location_1.partner_longitude) + self.assertAlmostEqual( + test_location_1.partner_latitude, 50.629980, delta=0.0002 + ) + self.assertAlmostEqual( + test_location_1.partner_longitude, 4.863370, delta=0.00012 + ) + # direct creation and same exit data + partner_latitude = 1.0 + partner_longitude = 2.0 + test_location_2 = self.FSMLocation.create( + { + "name": "Test Location 2", + "phone": "123", + "email": "test@example.com", + "partner_id": self.location_partner_1.id, + "owner_id": self.location_partner_2.id, + "partner_latitude": partner_latitude, + "partner_longitude": partner_longitude, + } + ) + self.assertTrue(test_location_2.shape) + self.assertAlmostEqual( + test_location_2.partner_latitude, partner_latitude, delta=self.delta + ) + self.assertAlmostEqual( + test_location_2.partner_longitude, partner_longitude, delta=self.delta + ) + + def test_fsm_location_update(self): + # update both coordinates + self.test_location.write( + { + "date_localization": fields.Datetime.today(), + "partner_latitude": 1.00, + "partner_longitude": 2.00, + } + ) + self.assertTrue(self.test_location.partner_latitude) + self.assertTrue(self.test_location.partner_longitude) + self.assertTrue(self.test_location.shape) + # update a single coordinate (latitude) + new_latitude = 1.00 + old_longitude = self.test_location.partner_longitude + self.test_location.write( + { + "partner_latitude": new_latitude, + } + ) + self.assertEqual(self.test_location.partner_latitude, new_latitude) + self.assertEqual(self.test_location.partner_longitude, old_longitude) + # update a single coordinate (longitude) + new_longitude = 7.00 + old_latitude = self.test_location.partner_latitude + self.test_location.write( + { + "partner_longitude": new_longitude, + } + ) + self.assertAlmostEqual( + self.test_location.partner_longitude, new_longitude, delta=self.delta + ) + self.assertEqual(self.test_location.partner_latitude, old_latitude) + + def test_fsm_location_association(self): + test_location = self.FSMLocation.create( + { + "name": "Test Location 2", + "phone": "123", + "email": "test@example.com", + "partner_id": self.location_partner_1.id, + "owner_id": self.location_partner_2.id, + "partner_latitude": 1.0, + "partner_longitude": 2.0, + } + ) + fsm_order = self.env["fsm.order"].create({"location_id": test_location.id}) + self.assertTrue(fsm_order.shape) + self.assertEqual(fsm_order.shape, test_location.shape) + # geolocalize method + fsm_order.geo_localize() + self.assertTrue(fsm_order.location_id) + # fsm_order should point to the same location + test_location.write( + { + "partner_latitude": 4.00, + "partner_longitude": 3.00, + } + ) + self.assertEqual(fsm_order.shape, test_location.shape) + test_location.partner_latitude = False + self.assertTrue(test_location.shape) + test_location.partner_longitude = False + self.assertFalse(test_location.shape) diff --git a/fieldservice_geoengine/views/fsm_location.xml b/fieldservice_geoengine/views/fsm_location.xml new file mode 100644 index 0000000000..581e23a041 --- /dev/null +++ b/fieldservice_geoengine/views/fsm_location.xml @@ -0,0 +1,136 @@ + + + + fsm.location.form + fsm.location + + + + + + + + + + + + + + + ir.ui.view.fsm.location.map + + + + + + + + + + + + + + + + + + + + Name: + +
    + +
  • Phone: +
  • +
    + +
  • Mobile: +
  • +
    + +
  • Street: +
  • +
    + +
  • Street 2: +
  • +
    + +
  • City: +
  • +
    + +
  • State: +
  • +
    + +
  • Country: +
  • +
    + +
  • ZIP: +
  • +
    +
+
+
+
+
+ + fsm.location +
+ + + FSM Location Point + unique + + + colored + True + + #0AFF68 + + + + FSM Location State colored custom + custom + + + colored + + + #FFFFFF + + + osm + Open Street Map + + + +
diff --git a/fieldservice_geoengine/views/fsm_order.xml b/fieldservice_geoengine/views/fsm_order.xml new file mode 100644 index 0000000000..4c543b648f --- /dev/null +++ b/fieldservice_geoengine/views/fsm_order.xml @@ -0,0 +1,141 @@ + + + + fsm.order.form + fsm.order + + + + + +