From e291ba4cffe2a87486507c263bc17485f7784e66 Mon Sep 17 00:00:00 2001 From: hparfr Date: Mon, 22 Feb 2021 22:53:19 +0100 Subject: [PATCH 001/631] fieldservice_calendar: add module --- fieldservice_calendar/README.rst | 87 ++++ fieldservice_calendar/__init__.py | 1 + fieldservice_calendar/__manifest__.py | 24 + fieldservice_calendar/models/__init__.py | 3 + fieldservice_calendar/models/calendar.py | 52 +++ fieldservice_calendar/models/fsm_order.py | 116 +++++ fieldservice_calendar/models/fsm_team.py | 14 + fieldservice_calendar/readme/CONFIGURE.rst | 2 + fieldservice_calendar/readme/CONTRIBUTORS.rst | 1 + fieldservice_calendar/readme/DESCRIPTION.rst | 1 + .../static/description/index.html | 427 ++++++++++++++++++ fieldservice_calendar/tests/__init__.py | 1 + .../tests/test_fsm_calendar.py | 93 ++++ fieldservice_calendar/views/fsm_order.xml | 12 + fieldservice_calendar/views/fsm_team.xml | 13 + .../odoo/addons/fieldservice_calendar | 1 + setup/fieldservice_calendar/setup.py | 6 + 17 files changed, 854 insertions(+) create mode 100644 fieldservice_calendar/README.rst create mode 100644 fieldservice_calendar/__init__.py create mode 100644 fieldservice_calendar/__manifest__.py create mode 100644 fieldservice_calendar/models/__init__.py create mode 100644 fieldservice_calendar/models/calendar.py create mode 100644 fieldservice_calendar/models/fsm_order.py create mode 100644 fieldservice_calendar/models/fsm_team.py create mode 100644 fieldservice_calendar/readme/CONFIGURE.rst create mode 100644 fieldservice_calendar/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_calendar/readme/DESCRIPTION.rst create mode 100644 fieldservice_calendar/static/description/index.html create mode 100644 fieldservice_calendar/tests/__init__.py create mode 100644 fieldservice_calendar/tests/test_fsm_calendar.py create mode 100644 fieldservice_calendar/views/fsm_order.xml create mode 100644 fieldservice_calendar/views/fsm_team.xml create mode 120000 setup/fieldservice_calendar/odoo/addons/fieldservice_calendar create mode 100644 setup/fieldservice_calendar/setup.py diff --git a/fieldservice_calendar/README.rst b/fieldservice_calendar/README.rst new file mode 100644 index 0000000000..3c27e3c8d2 --- /dev/null +++ b/fieldservice_calendar/README.rst @@ -0,0 +1,87 @@ +======================== +Field Service - Calendar +======================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/14.0/fieldservice_calendar + :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-14-0/field-service-14-0-fieldservice_calendar + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This modules creates calendar event from FSM Orders. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +A "calendar" user should be set on FSM Team. Events will be added to his calendar. +Then the FSM Order' person_id (worker) will be an attendee of the calendar's event (Meeting). + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Akretion + +Contributors +~~~~~~~~~~~~ + +* Raphaël Reverdy + +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-hparfr| image:: https://github.com/hparfr.png?size=40px + :target: https://github.com/hparfr + :alt: hparfr + +Current `maintainer `__: + +|maintainer-hparfr| + +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_calendar/__init__.py b/fieldservice_calendar/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/fieldservice_calendar/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/fieldservice_calendar/__manifest__.py b/fieldservice_calendar/__manifest__.py new file mode 100644 index 0000000000..f8f40033a4 --- /dev/null +++ b/fieldservice_calendar/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright (C) 2021 Raphaël Reverdy +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Field Service - Calendar", + "summary": "Add calendar to FSM Orders", + "author": "Akretion, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "category": "Field Service", + "license": "AGPL-3", + "version": "14.0.1.0.0", + "depends": [ + "calendar", + "fieldservice", + ], + "data": [ + "views/fsm_order.xml", + "views/fsm_team.xml", + ], + "installable": True, + "development_status": "Beta", + "maintainers": [ + "hparfr", + ], +} diff --git a/fieldservice_calendar/models/__init__.py b/fieldservice_calendar/models/__init__.py new file mode 100644 index 0000000000..8ba83cde4d --- /dev/null +++ b/fieldservice_calendar/models/__init__.py @@ -0,0 +1,3 @@ +from . import calendar +from . import fsm_order +from . import fsm_team diff --git a/fieldservice_calendar/models/calendar.py b/fieldservice_calendar/models/calendar.py new file mode 100644 index 0000000000..ec7d2866d9 --- /dev/null +++ b/fieldservice_calendar/models/calendar.py @@ -0,0 +1,52 @@ +# Copyright (C) 2021 Raphaël Reverdy +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class Meeting(models.Model): + _inherit = "calendar.event" + + fsm_order_id = fields.One2many( + string="Order id", + comodel_name="fsm.order", + inverse_name="calendar_event_id", + ) + + def _update_fsm_order_date(self): + self.ensure_one() + if self._context.get("recurse_order_calendar"): + # avoid recursion + return + to_apply = {} + to_apply["scheduled_date_start"] = self.start + to_apply["scheduled_duration"] = self.duration + self.fsm_order_id.with_context(recurse_order_calendar=True).write(to_apply) + + def _update_fsm_assigned(self): + # update back fsm_order when an attenndee is member of a team + self.ensure_one() + if self._context.get("recurse_order_calendar"): + # avoid recursion + return + person_id = None + for partner in self.partner_ids: + if partner.fsm_person: + person_id = ( + self.env["fsm.person"] + .search([["partner_id", "=", partner.id]], limit=1) + .id + ) + break + self.fsm_order_id.with_context(recurse_order_calendar=True).write( + {"person_id": person_id} + ) + + def write(self, values): + res = super().write(values) + if self.fsm_order_id: + if "start" in values or "duration" in values: + self._update_fsm_order_date() + if "partner_ids" in values: + self._update_fsm_assigned() + return res diff --git a/fieldservice_calendar/models/fsm_order.py b/fieldservice_calendar/models/fsm_order.py new file mode 100644 index 0000000000..6ec6c9f74c --- /dev/null +++ b/fieldservice_calendar/models/fsm_order.py @@ -0,0 +1,116 @@ +# Copyright (C) 2021 Raphaël Reverdy +# 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" + + calendar_event_id = fields.Many2one( + "calendar.event", + string="Meeting", + readonly=True, + ) + + @api.model_create_multi + def create(self, vals_list): + res = super().create(vals_list) + res._create_calendar_event() + return res + + def _create_calendar_event(self): + """ Create entry in calendar of the team""" + for order in self._should_have_calendar_event(): + order.calendar_event_id = ( + self.env["calendar.event"] + .with_context(no_mail_to_attendees=True) + .create(order._prepare_calendar_event()) + ) + + def _should_have_calendar_event(self): + return self.filtered("team_id.calendar_user_id").filtered( + "scheduled_date_start" + ) + + def _prepare_calendar_event(self): + model_id = self.env.ref("fieldservice.model_fsm_order").id + vals = { + "name": self.name, + "description": self.description, + "start": self.scheduled_date_start, + "stop": self.scheduled_date_end, + "allday": False, + "res_model_id": model_id, # link back with "Document" button + "res_id": self.id, # link back with "Document" button + "location": self._serialize_location(), + "user_id": self.team_id.calendar_user_id.id, + } + vals["partner_ids"] = [(4, self.team_id.calendar_user_id.partner_id.id, False)] + # we let calendar_user has a partner_ids in order + # to have the meeting in the team's calendar + return vals + + def write(self, vals): + old_persons = {} + for rec in self: + old_persons[rec.id] = rec.person_id + res = super().write(vals) + to_update = self.create_or_delete_calendar() + with_calendar = to_update.filtered("calendar_event_id") + if "scheduled_date_start" in vals or "scheduled_date_end" in vals: + with_calendar.update_calendar_date(vals) + if "location_id" in vals: + with_calendar.update_calendar_location() + if "person_id" in vals: + with_calendar.update_calendar_person(old_persons) + return res + + def unlink(self): + self._rm_calendar_event() + return super().unlink() + + def create_or_delete_calendar(self): + to_update = self._should_have_calendar_event() + to_rm = self - to_update + to_create = to_update.filtered(lambda x: x.calendar_event_id.id is False) + to_create._create_calendar_event() + to_rm._rm_calendar_event() + return to_update + + def _rm_calendar_event(self): + # it can be archived instead if desired + self.calendar_event_id.unlink() + + def update_calendar_date(self, vals): + if self._context.get("recurse_order_calendar"): + # avoid recursion + return + to_apply = {} + to_apply["start"] = self.scheduled_date_start + to_apply["stop"] = self.scheduled_date_end + # always write start and stop in order to calc duration + self.mapped("calendar_event_id").with_context( + recurse_order_calendar=True + ).write(to_apply) + + def update_calendar_location(self): + for rec in self: + rec.calendar_event_id.location = rec._serialize_location() + + def _serialize_location(self): + partner_id = self.location_id.partner_id + return f"{partner_id.name} {partner_id._display_address()}" + + def update_calendar_person(self, old_persons): + if self._context.get("recurse_order_calendar"): + # avoid recursion + return + for rec in self: + with_ctx = rec.calendar_event_id.with_context(recurse_order_calendar=True) + if old_persons.get(rec.id): + # remove buddy + with_ctx.partner_ids = [(3, old_persons[rec.id].partner_id.id, False)] + if rec.person_id: + # add the new one + with_ctx.partner_ids = [(4, rec.person_id.partner_id.id, False)] diff --git a/fieldservice_calendar/models/fsm_team.py b/fieldservice_calendar/models/fsm_team.py new file mode 100644 index 0000000000..7099726a29 --- /dev/null +++ b/fieldservice_calendar/models/fsm_team.py @@ -0,0 +1,14 @@ +# Copyright (C) 2021 Raphaël Reverdy +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMTeam(models.Model): + _inherit = "fsm.team" + + calendar_user_id = fields.Many2one( + "res.users", + string="Team's calendar", + help="Responsible for orders's calendar", + ) diff --git a/fieldservice_calendar/readme/CONFIGURE.rst b/fieldservice_calendar/readme/CONFIGURE.rst new file mode 100644 index 0000000000..035a718f5e --- /dev/null +++ b/fieldservice_calendar/readme/CONFIGURE.rst @@ -0,0 +1,2 @@ +A "calendar" user should be set on FSM Team. Events will be added to his calendar. +Then the FSM Order' person_id (worker) will be an attendee of the calendar's event (Meeting). diff --git a/fieldservice_calendar/readme/CONTRIBUTORS.rst b/fieldservice_calendar/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..dc3bfce89c --- /dev/null +++ b/fieldservice_calendar/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Raphaël Reverdy diff --git a/fieldservice_calendar/readme/DESCRIPTION.rst b/fieldservice_calendar/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..20114c8d1e --- /dev/null +++ b/fieldservice_calendar/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This modules creates calendar event from FSM Orders. diff --git a/fieldservice_calendar/static/description/index.html b/fieldservice_calendar/static/description/index.html new file mode 100644 index 0000000000..90a439b14c --- /dev/null +++ b/fieldservice_calendar/static/description/index.html @@ -0,0 +1,427 @@ + + + + + + +Field Service - Calendar + + + +
+

Field Service - Calendar

+ + +

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

+

This modules creates calendar event from FSM Orders.

+

Table of contents

+ +
+

Configuration

+

A “calendar” user should be set on FSM Team. Events will be added to his calendar. +Then the FSM Order’ person_id (worker) will be an attendee of the calendar’s event (Meeting).

+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

hparfr

+

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_calendar/tests/__init__.py b/fieldservice_calendar/tests/__init__.py new file mode 100644 index 0000000000..2c306eb150 --- /dev/null +++ b/fieldservice_calendar/tests/__init__.py @@ -0,0 +1 @@ +from . import test_fsm_calendar diff --git a/fieldservice_calendar/tests/test_fsm_calendar.py b/fieldservice_calendar/tests/test_fsm_calendar.py new file mode 100644 index 0000000000..f848c1a8cc --- /dev/null +++ b/fieldservice_calendar/tests/test_fsm_calendar.py @@ -0,0 +1,93 @@ +# Copyright (C) 2021 Raphaël Reverdy +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields +from odoo.tests.common import TransactionCase + + +class TestFSMOrder(TransactionCase): + def setUp(self): + super(TestFSMOrder, self).setUp() + self.Order = self.env["fsm.order"] + self.test_location = self.env.ref("fieldservice.test_location") + self.team = self.Order._default_team_id() + self.team.calendar_user_id = self.env.ref("base.partner_root").id + self.person_id = self.env.ref("fieldservice.person_2") + self.person_id3 = self.env.ref("fieldservice.person_3") + + def test_fsm_order_no_duration(self): + new = self.Order.create( + { + "location_id": self.test_location.id, + # no duration = no calendar + } + ) + evt = new.calendar_event_id + self.assertFalse(evt.exists()) + + def test_fsm_order_no_calendar_user(self): + self.team.calendar_user_id = False + # no calendar user_id = no calendar event + new = self.Order.create( + { + "location_id": self.test_location.id, + "scheduled_date_start": fields.Datetime.today(), + "scheduled_duration": 2, + } + ) + evt = new.calendar_event_id + self.assertFalse(evt.exists()) + self.team.calendar_user_id = self.env.ref("base.partner_root").id + + # update order + new.scheduled_duration = 3 + evt = new.calendar_event_id + self.assertTrue(evt.exists()) + + # ensure deletion + new.scheduled_date_start = False + evt = new.calendar_event_id + self.assertFalse(evt.exists()) + + def test_fsm_order_unlink(self): + # Create an Orders + new = self.Order.create( + { + "location_id": self.test_location.id, + "scheduled_date_start": fields.Datetime.today(), + "scheduled_duration": 2, + } + ) + evt = new.calendar_event_id + self.assertTrue(evt.exists()) + + # delete the order + new.unlink() + # ensure the evt is deleted + # this test may fail if another module + # archive instead of unlink (like gcalendar) + self.assertFalse(evt.exists()) + + def test_fsm_order_ensure_attendee(self): + # Create an Orders + new = self.Order.create( + { + "location_id": self.test_location.id, + "scheduled_date_start": fields.Datetime.today(), + "scheduled_duration": 2, + } + ) + evt = new.calendar_event_id + + self.assertTrue( + len(evt.partner_ids) == 1, + "There should be no other attendees" " because there is no one assigned", + ) + # organiser is attendee + new.person_id = self.person_id + self.assertTrue(self.person_id.partner_id in evt.partner_ids) + new.person_id = self.person_id3 + self.assertTrue(self.person_id3.partner_id in evt.partner_ids) + self.assertTrue( + len(evt.partner_ids) == 2, "Not workers should be removed from attendees" + ) diff --git a/fieldservice_calendar/views/fsm_order.xml b/fieldservice_calendar/views/fsm_order.xml new file mode 100644 index 0000000000..4246e7cb71 --- /dev/null +++ b/fieldservice_calendar/views/fsm_order.xml @@ -0,0 +1,12 @@ + + + + fsm.order + + + + + + + + diff --git a/fieldservice_calendar/views/fsm_team.xml b/fieldservice_calendar/views/fsm_team.xml new file mode 100644 index 0000000000..30a14d6bfe --- /dev/null +++ b/fieldservice_calendar/views/fsm_team.xml @@ -0,0 +1,13 @@ + + + + fsm.team.form + fsm.team + + + + + + + + diff --git a/setup/fieldservice_calendar/odoo/addons/fieldservice_calendar b/setup/fieldservice_calendar/odoo/addons/fieldservice_calendar new file mode 120000 index 0000000000..62fb20b43a --- /dev/null +++ b/setup/fieldservice_calendar/odoo/addons/fieldservice_calendar @@ -0,0 +1 @@ +../../../../fieldservice_calendar \ No newline at end of file diff --git a/setup/fieldservice_calendar/setup.py b/setup/fieldservice_calendar/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/fieldservice_calendar/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 381e46e742e93791a44476f6cd3bd82d4c7297b1 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 24 May 2019 07:38:29 -0700 Subject: [PATCH 002/631] [WIP][ADD] fsm_server_action [ADD] Templates [WIP] Testing [IMP] FSM Emails [ADD] FSM Stage Server Action [IMP] ir.server.action in pavlov_media [IMP] Remove dependency conflict [IMP] Cite OCA manifest [IMP] Remove Dependency [IMP] Auto Config for User [IMP] Small changes [FIX] fieldservice (PM #515 and #577) (#230) [IMP] fieldservice: Add notes on location (PM #596) (#231) [FIX] fieldservice_agreement (#232) [ADD] fieldservice_stage_server_action --- fieldservice_stage_server_action/README.rst | 120 +++++ fieldservice_stage_server_action/__init__.py | 4 + .../__manifest__.py | 29 ++ .../data/base_automation.xml | 20 + .../data/fsm_stage.xml | 27 + .../data/ir_server_action.xml | 39 ++ .../models/__init__.py | 6 + .../models/fsm_stage.py | 10 + .../static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 460 ++++++++++++++++++ .../views/fsm_stage.xml | 14 + 11 files changed, 729 insertions(+) create mode 100644 fieldservice_stage_server_action/README.rst create mode 100644 fieldservice_stage_server_action/__init__.py create mode 100644 fieldservice_stage_server_action/__manifest__.py create mode 100644 fieldservice_stage_server_action/data/base_automation.xml create mode 100644 fieldservice_stage_server_action/data/fsm_stage.xml create mode 100644 fieldservice_stage_server_action/data/ir_server_action.xml create mode 100644 fieldservice_stage_server_action/models/__init__.py create mode 100644 fieldservice_stage_server_action/models/fsm_stage.py create mode 100644 fieldservice_stage_server_action/static/description/icon.png create mode 100644 fieldservice_stage_server_action/static/description/index.html create mode 100644 fieldservice_stage_server_action/views/fsm_stage.xml diff --git a/fieldservice_stage_server_action/README.rst b/fieldservice_stage_server_action/README.rst new file mode 100644 index 0000000000..d309294d67 --- /dev/null +++ b/fieldservice_stage_server_action/README.rst @@ -0,0 +1,120 @@ +=================================== +Field Service - Stage Server Action +=================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/12.0/fieldservice_skill + :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-12-0/field-service-12-0-fieldservice_skill + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + + + +**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/12.0/base_geoengine + +Configuration +============= + +To configure this module, you need to: + + + +Usage +===== + +To use this module, you need to: + + +Known issues / Roadmap +====================== + +The roadmap of the Field Service application is documented on +`Github `_. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* Wolfgang Hall +* Maxime Chambreuil +* Steve Campbell + +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-osi-scampbell| image:: https://github.com/osi-scampbell.png?size=40px + :target: https://github.com/osi-scampbell + :alt: osi-scampbell +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 + +Current `maintainers `__: + +|maintainer-osi-scampbell| |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_stage_server_action/__init__.py b/fieldservice_stage_server_action/__init__.py new file mode 100644 index 0000000000..b634044c7c --- /dev/null +++ b/fieldservice_stage_server_action/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_stage_server_action/__manifest__.py b/fieldservice_stage_server_action/__manifest__.py new file mode 100644 index 0000000000..929c710007 --- /dev/null +++ b/fieldservice_stage_server_action/__manifest__.py @@ -0,0 +1,29 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +{ + 'name': 'FSM Stage Server Action', + 'summary': 'Add Server Actions based on FSM Stage', + 'version': '12.0.1.0.0', + 'category': 'Field Service', + 'author': 'Open Source Integrators, Odoo Community Association (OCA)', + 'website': 'https://github.com/ursais/osi-addons', + 'depends': [ + 'fieldservice', + 'fieldservice_substatus', + 'base_automation' + ], + 'data': [ + 'data/ir_server_action.xml', + 'data/fsm_stage.xml', + 'data/base_automation.xml', + 'views/fsm_stage.xml' + ], + 'installable': True, + 'license': 'AGPL-3', + 'development_status': 'Beta', + 'maintainers': [ + 'wolfhall', + 'max3903', + 'osi-scampbell' + ] +} diff --git a/fieldservice_stage_server_action/data/base_automation.xml b/fieldservice_stage_server_action/data/base_automation.xml new file mode 100644 index 0000000000..58998f02ae --- /dev/null +++ b/fieldservice_stage_server_action/data/base_automation.xml @@ -0,0 +1,20 @@ + + + + FSM Order Email Sender + + on_create_or_write + + multi + + + + diff --git a/fieldservice_stage_server_action/data/fsm_stage.xml b/fieldservice_stage_server_action/data/fsm_stage.xml new file mode 100644 index 0000000000..6c745412f5 --- /dev/null +++ b/fieldservice_stage_server_action/data/fsm_stage.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fieldservice_stage_server_action/data/ir_server_action.xml b/fieldservice_stage_server_action/data/ir_server_action.xml new file mode 100644 index 0000000000..4f7383509d --- /dev/null +++ b/fieldservice_stage_server_action/data/ir_server_action.xml @@ -0,0 +1,39 @@ + + + + FSM Order Confirmed Parent + + multi + + + + FSM Order Requested Parent + + multi + + + + FSM Order Assigned Parent + + multi + + + + FSM Order Scheduled Parent + + multi + + + + FSM Order Completed Parent + + multi + + + + FSM Order Canceled Parent + + multi + + + diff --git a/fieldservice_stage_server_action/models/__init__.py b/fieldservice_stage_server_action/models/__init__.py new file mode 100644 index 0000000000..8d9c373b90 --- /dev/null +++ b/fieldservice_stage_server_action/models/__init__.py @@ -0,0 +1,6 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + fsm_stage, +) diff --git a/fieldservice_stage_server_action/models/fsm_stage.py b/fieldservice_stage_server_action/models/fsm_stage.py new file mode 100644 index 0000000000..8a8ba601ba --- /dev/null +++ b/fieldservice_stage_server_action/models/fsm_stage.py @@ -0,0 +1,10 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMStage(models.Model): + _inherit = 'fsm.stage' + + action_id = fields.Many2one('ir.actions.server', string="Server Action") diff --git a/fieldservice_stage_server_action/static/description/icon.png b/fieldservice_stage_server_action/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 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 literal 0 HcmV?d00001 diff --git a/fieldservice_stage_server_action/static/description/index.html b/fieldservice_stage_server_action/static/description/index.html new file mode 100644 index 0000000000..23490becee --- /dev/null +++ b/fieldservice_stage_server_action/static/description/index.html @@ -0,0 +1,460 @@ + + + + + + +Field Service - Sales + + + +
+

Field Service - Sales

+ + +

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

+

The module integrate the field service application with the sales one.

+

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

+
+
+

Configuration

+

To use this module, you need to:

+
    +
  • Go to Field Service > Master Data > Locations
  • +
  • Create or select a location
  • +
  • Go to the Sales tab and select the sales territory
  • +
+
+
+

Usage

+

Coming soon???

+
+
+

Known issues / Roadmap

+

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

+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The development of this module has been financially supported by:

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainers:

+

wolfhall max3903

+

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

+

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

+
+
+
+ + diff --git a/fieldservice_stage_server_action/views/fsm_stage.xml b/fieldservice_stage_server_action/views/fsm_stage.xml new file mode 100644 index 0000000000..86a1832cee --- /dev/null +++ b/fieldservice_stage_server_action/views/fsm_stage.xml @@ -0,0 +1,14 @@ + + + + + fsm.server.action.stage.form + fsm.stage + + + + + + + + From 869144fd1e9642de8a9d030b9e829bdcf32b3993 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 21 Jun 2019 14:48:27 -0700 Subject: [PATCH 003/631] [IMP] Remove data tags --- fieldservice_stage_server_action/data/base_automation.xml | 2 -- fieldservice_stage_server_action/data/fsm_stage.xml | 2 -- fieldservice_stage_server_action/data/ir_server_action.xml | 2 -- 3 files changed, 6 deletions(-) diff --git a/fieldservice_stage_server_action/data/base_automation.xml b/fieldservice_stage_server_action/data/base_automation.xml index 58998f02ae..2960e73b52 100644 --- a/fieldservice_stage_server_action/data/base_automation.xml +++ b/fieldservice_stage_server_action/data/base_automation.xml @@ -1,5 +1,4 @@ - FSM Order Email Sender @@ -16,5 +15,4 @@ ref('fsm_order_parent_canceled')]) ]"/> - diff --git a/fieldservice_stage_server_action/data/fsm_stage.xml b/fieldservice_stage_server_action/data/fsm_stage.xml index 6c745412f5..e83abca6e1 100644 --- a/fieldservice_stage_server_action/data/fsm_stage.xml +++ b/fieldservice_stage_server_action/data/fsm_stage.xml @@ -1,5 +1,4 @@ - @@ -23,5 +22,4 @@ - diff --git a/fieldservice_stage_server_action/data/ir_server_action.xml b/fieldservice_stage_server_action/data/ir_server_action.xml index 4f7383509d..6e42e26d90 100644 --- a/fieldservice_stage_server_action/data/ir_server_action.xml +++ b/fieldservice_stage_server_action/data/ir_server_action.xml @@ -1,5 +1,4 @@ - FSM Order Confirmed Parent @@ -35,5 +34,4 @@ multi - From 652849acf20762932843cdb8de5c910b0e830abc Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 10 Oct 2019 14:00:21 -0500 Subject: [PATCH 004/631] [FIX] fieldservice_stage_server_action --- fieldservice_stage_server_action/README.rst | 67 ++++++-------- .../__manifest__.py | 2 +- .../data/base_automation.xml | 4 - .../data/fsm_stage.xml | 16 ---- .../data/ir_server_action.xml | 24 ----- .../readme/CONFIGURE.rst | 3 + .../readme/CONTRIBUTORS.rst | 5 ++ .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 4 + .../static/description/index.html | 88 ++++++++----------- 10 files changed, 79 insertions(+), 136 deletions(-) create mode 100644 fieldservice_stage_server_action/readme/CONFIGURE.rst create mode 100644 fieldservice_stage_server_action/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_stage_server_action/readme/DESCRIPTION.rst create mode 100644 fieldservice_stage_server_action/readme/USAGE.rst diff --git a/fieldservice_stage_server_action/README.rst b/fieldservice_stage_server_action/README.rst index d309294d67..7a66a7a54f 100644 --- a/fieldservice_stage_server_action/README.rst +++ b/fieldservice_stage_server_action/README.rst @@ -1,6 +1,6 @@ -=================================== -Field Service - Stage Server Action -=================================== +======================= +FSM Stage Server Action +======================= .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! @@ -14,10 +14,10 @@ Field Service - Stage Server Action :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/12.0/fieldservice_skill + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_stage_server_action :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-12-0/field-service-12-0-fieldservice_skill + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stage_server_action :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/264/12.0 @@ -25,39 +25,28 @@ Field Service - Stage Server Action |badge1| |badge2| |badge3| |badge4| |badge5| - +This module allows you to execute server actions when a FSM orders enters a +specific stage. **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/12.0/base_geoengine - Configuration ============= -To configure this module, you need to: - - +* Go to Field Service > Configuration > Stages +* Create or select a stage +* Select or create a server action Usage ===== -To use this module, you need to: - - -Known issues / Roadmap -====================== - -The roadmap of the Field Service application is documented on -`Github `_. +* Go to Field Service +* Select or create a FSM orders +* Move it to the stage configured before to trigger the execution of the + server action Bug Tracker =========== @@ -65,7 +54,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -80,16 +69,11 @@ Authors Contributors ~~~~~~~~~~~~ -* Wolfgang Hall -* Maxime Chambreuil -* Steve Campbell +* Open Source Integrators -Other credits -~~~~~~~~~~~~~ - -The development of this module has been financially supported by: - -* Open Source Integrators + * Wolfgang Hall + * Maxime Chambreuil + * Steve Campbell Maintainers ~~~~~~~~~~~ @@ -104,17 +88,20 @@ 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-osi-scampbell| image:: https://github.com/osi-scampbell.png?size=40px - :target: https://github.com/osi-scampbell - :alt: osi-scampbell +.. |maintainer-wolfhall| image:: https://github.com/wolfhall.png?size=40px + :target: https://github.com/wolfhall + :alt: wolfhall .. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px :target: https://github.com/max3903 :alt: max3903 +.. |maintainer-osi-scampbell| image:: https://github.com/osi-scampbell.png?size=40px + :target: https://github.com/osi-scampbell + :alt: osi-scampbell Current `maintainers `__: -|maintainer-osi-scampbell| |maintainer-max3903| +|maintainer-wolfhall| |maintainer-max3903| |maintainer-osi-scampbell| -This module is part of the `OCA/field-service `_ project on GitHub. +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_stage_server_action/__manifest__.py b/fieldservice_stage_server_action/__manifest__.py index 929c710007..5d24ee0128 100644 --- a/fieldservice_stage_server_action/__manifest__.py +++ b/fieldservice_stage_server_action/__manifest__.py @@ -1,4 +1,4 @@ -# Copyright (C) 2019 - TODAY, Open Source Integrators +# Copyright (C) 2019 Open Source Integrators # # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). { 'name': 'FSM Stage Server Action', diff --git a/fieldservice_stage_server_action/data/base_automation.xml b/fieldservice_stage_server_action/data/base_automation.xml index 2960e73b52..29fcac1eb4 100644 --- a/fieldservice_stage_server_action/data/base_automation.xml +++ b/fieldservice_stage_server_action/data/base_automation.xml @@ -7,10 +7,6 @@ multi diff --git a/fieldservice_stage_server_action/data/fsm_stage.xml b/fieldservice_stage_server_action/data/fsm_stage.xml index e83abca6e1..a666ef79f5 100644 --- a/fieldservice_stage_server_action/data/fsm_stage.xml +++ b/fieldservice_stage_server_action/data/fsm_stage.xml @@ -1,20 +1,4 @@ - - - - - - - - - - - - - - - - diff --git a/fieldservice_stage_server_action/data/ir_server_action.xml b/fieldservice_stage_server_action/data/ir_server_action.xml index 6e42e26d90..42a9d299eb 100644 --- a/fieldservice_stage_server_action/data/ir_server_action.xml +++ b/fieldservice_stage_server_action/data/ir_server_action.xml @@ -1,28 +1,4 @@ - - FSM Order Confirmed Parent - - multi - - - - FSM Order Requested Parent - - multi - - - - FSM Order Assigned Parent - - multi - - - - FSM Order Scheduled Parent - - multi - - FSM Order Completed Parent diff --git a/fieldservice_stage_server_action/readme/CONFIGURE.rst b/fieldservice_stage_server_action/readme/CONFIGURE.rst new file mode 100644 index 0000000000..c851f5f506 --- /dev/null +++ b/fieldservice_stage_server_action/readme/CONFIGURE.rst @@ -0,0 +1,3 @@ +* Go to Field Service > Configuration > Stages +* Create or select a stage +* Select or create a server action diff --git a/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst b/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..f9cb0d612f --- /dev/null +++ b/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Open Source Integrators + + * Wolfgang Hall + * Maxime Chambreuil + * Steve Campbell diff --git a/fieldservice_stage_server_action/readme/DESCRIPTION.rst b/fieldservice_stage_server_action/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..15318d3572 --- /dev/null +++ b/fieldservice_stage_server_action/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows you to execute server actions when a FSM orders enters a +specific stage. \ No newline at end of file diff --git a/fieldservice_stage_server_action/readme/USAGE.rst b/fieldservice_stage_server_action/readme/USAGE.rst new file mode 100644 index 0000000000..fac3244b28 --- /dev/null +++ b/fieldservice_stage_server_action/readme/USAGE.rst @@ -0,0 +1,4 @@ +* Go to Field Service +* Select or create a FSM orders +* Move it to the stage configured before to trigger the execution of the + server action diff --git a/fieldservice_stage_server_action/static/description/index.html b/fieldservice_stage_server_action/static/description/index.html index 23490becee..54b44e4343 100644 --- a/fieldservice_stage_server_action/static/description/index.html +++ b/fieldservice_stage_server_action/static/description/index.html @@ -3,8 +3,8 @@ - -Field Service - Sales + +FSM Stage Server Action -
-

Field Service - Sales

+
+

FSM Stage Server Action

-

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

-

The module integrate the field service application with the sales one.

+

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

+

This module allows you to execute server actions when a FSM orders enters a +specific stage.

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

-
-

Configuration

-

To use this module, you need to:

+

Configuration

    -
  • Go to Field Service > Master Data > Locations
  • -
  • Create or select a location
  • -
  • Go to the Sales tab and select the sales territory
  • +
  • Go to Field Service > Configuration > Stages
  • +
  • Create or select a stage
  • +
  • Select or create a server action
-

Usage

-

Coming soon???

-
-
-

Known issues / Roadmap

-

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

+

Usage

+
    +
  • Go to Field Service
  • +
  • Select or create a FSM orders
  • +
  • Move it to the stage configured before to trigger the execution of the +server action
  • +
-

Bug Tracker

+

Bug Tracker

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

+feedback.

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Open Source Integrators
-

Contributors

+

Contributors

-
-

Other credits

-

The development of this module has been financially supported by:

-
-

Maintainers

+

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.

+

wolfhall max3903 osi-scampbell

+

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.

From 91f71bf2b6812d0f8c1b04cef964313c540eaa94 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 11 Oct 2019 12:33:21 -0500 Subject: [PATCH 005/631] [IMP] fieldservice_stage_server_action --- .../__manifest__.py | 2 +- .../i18n/fieldservice_stage_server_action.pot | 41 +++++++++++++++++++ .../readme/DESCRIPTION.rst | 2 +- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot diff --git a/fieldservice_stage_server_action/__manifest__.py b/fieldservice_stage_server_action/__manifest__.py index 5d24ee0128..08ac286481 100644 --- a/fieldservice_stage_server_action/__manifest__.py +++ b/fieldservice_stage_server_action/__manifest__.py @@ -2,7 +2,7 @@ # # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). { 'name': 'FSM Stage Server Action', - 'summary': 'Add Server Actions based on FSM Stage', + 'summary': 'Execute server actions when reaching a Field Service stage', 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', diff --git a/fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot b/fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot new file mode 100644 index 0000000000..dd6a6f4a59 --- /dev/null +++ b/fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stage_server_action +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled +msgid "FSM Order Canceled Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_completed +msgid "FSM Order Completed Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:base.automation,name:fieldservice_stage_server_action.fsm_order_email_sender +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_email_sender_ir_actions_server +msgid "FSM Order Email Sender" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage +msgid "Field Service Stage" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id +msgid "Server Action" +msgstr "" + diff --git a/fieldservice_stage_server_action/readme/DESCRIPTION.rst b/fieldservice_stage_server_action/readme/DESCRIPTION.rst index 15318d3572..d790577097 100644 --- a/fieldservice_stage_server_action/readme/DESCRIPTION.rst +++ b/fieldservice_stage_server_action/readme/DESCRIPTION.rst @@ -1,2 +1,2 @@ This module allows you to execute server actions when a FSM orders enters a -specific stage. \ No newline at end of file +specific stage. From 46fe5c773252d391608c03c4c31b87f16adb7d98 Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Fri, 22 Nov 2019 13:20:39 +0000 Subject: [PATCH 006/631] Added translation using Weblate (German) --- fieldservice_stage_server_action/i18n/de.po | 41 +++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 fieldservice_stage_server_action/i18n/de.po diff --git a/fieldservice_stage_server_action/i18n/de.po b/fieldservice_stage_server_action/i18n/de.po new file mode 100644 index 0000000000..db36bf626d --- /dev/null +++ b/fieldservice_stage_server_action/i18n/de.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stage_server_action +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled +msgid "FSM Order Canceled Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_completed +msgid "FSM Order Completed Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:base.automation,name:fieldservice_stage_server_action.fsm_order_email_sender +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_email_sender_ir_actions_server +msgid "FSM Order Email Sender" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage +msgid "Field Service Stage" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id +msgid "Server Action" +msgstr "" From 00983aec0737d64c1772473c2b6b225dfaa8bd4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nelson=20Ram=C3=ADrez=20S=C3=A1nchez?= Date: Tue, 10 Dec 2019 18:57:05 +0000 Subject: [PATCH 007/631] Added translation using Weblate (Spanish (Chile)) --- .../i18n/es_CL.po | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 fieldservice_stage_server_action/i18n/es_CL.po diff --git a/fieldservice_stage_server_action/i18n/es_CL.po b/fieldservice_stage_server_action/i18n/es_CL.po new file mode 100644 index 0000000000..dae4e38cb0 --- /dev/null +++ b/fieldservice_stage_server_action/i18n/es_CL.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stage_server_action +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled +msgid "FSM Order Canceled Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_completed +msgid "FSM Order Completed Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:base.automation,name:fieldservice_stage_server_action.fsm_order_email_sender +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_email_sender_ir_actions_server +msgid "FSM Order Email Sender" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage +msgid "Field Service Stage" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id +msgid "Server Action" +msgstr "" From 60ae1f2cdba5a40b0684bf18a83707c331ad2c1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nelson=20Ram=C3=ADrez=20S=C3=A1nchez?= Date: Tue, 10 Dec 2019 18:57:22 +0000 Subject: [PATCH 008/631] Translated using Weblate (Spanish (Chile)) Currently translated at 100.0% (5 of 5 strings) Translation: field-service-12.0/field-service-12.0-fieldservice_stage_server_action Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stage_server_action/es_CL/ --- fieldservice_stage_server_action/i18n/es_CL.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fieldservice_stage_server_action/i18n/es_CL.po b/fieldservice_stage_server_action/i18n/es_CL.po index dae4e38cb0..e97ce3d880 100644 --- a/fieldservice_stage_server_action/i18n/es_CL.po +++ b/fieldservice_stage_server_action/i18n/es_CL.po @@ -6,36 +6,38 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2019-12-10 21:04+0000\n" +"Last-Translator: Nelson Ram??rez S??nchez \n" "Language-Team: none\n" "Language: es_CL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.9.1\n" #. module: fieldservice_stage_server_action #: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled msgid "FSM Order Canceled Parent" -msgstr "" +msgstr "Pedido FSM cancelado padre" #. module: fieldservice_stage_server_action #: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_completed msgid "FSM Order Completed Parent" -msgstr "" +msgstr "Pedido FSM Padre Completado" #. module: fieldservice_stage_server_action #: model:base.automation,name:fieldservice_stage_server_action.fsm_order_email_sender #: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_email_sender_ir_actions_server msgid "FSM Order Email Sender" -msgstr "" +msgstr "Remitente de Correo de Pedido FSM" #. module: fieldservice_stage_server_action #: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage msgid "Field Service Stage" -msgstr "" +msgstr "Etapa de Servicio de Campo" #. module: fieldservice_stage_server_action #: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id msgid "Server Action" -msgstr "" +msgstr "Acci??n de Servidor" From 6a50d72b93608b70d502d44c5b182c6afd113536 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Thu, 16 Jan 2020 06:22:10 +0000 Subject: [PATCH 009/631] Added translation using Weblate (Portuguese (Brazil)) --- .../i18n/pt_BR.po | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 fieldservice_stage_server_action/i18n/pt_BR.po diff --git a/fieldservice_stage_server_action/i18n/pt_BR.po b/fieldservice_stage_server_action/i18n/pt_BR.po new file mode 100644 index 0000000000..542166afeb --- /dev/null +++ b/fieldservice_stage_server_action/i18n/pt_BR.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stage_server_action +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled +msgid "FSM Order Canceled Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_completed +msgid "FSM Order Completed Parent" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:base.automation,name:fieldservice_stage_server_action.fsm_order_email_sender +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_email_sender_ir_actions_server +msgid "FSM Order Email Sender" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage +msgid "Field Service Stage" +msgstr "" + +#. module: fieldservice_stage_server_action +#: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id +msgid "Server Action" +msgstr "" From 273d13563b0022334483ce3626f60b6fca6b2f0f Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 16 Jan 2020 11:39:15 -0600 Subject: [PATCH 010/631] [ADD] Spanish (es) translation --- fieldservice_stage_server_action/i18n/es.po | 43 +++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 fieldservice_stage_server_action/i18n/es.po diff --git a/fieldservice_stage_server_action/i18n/es.po b/fieldservice_stage_server_action/i18n/es.po new file mode 100644 index 0000000000..28371f0cf3 --- /dev/null +++ b/fieldservice_stage_server_action/i18n/es.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stage_server_action +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-12-10 21:04+0000\n" +"Last-Translator: Nelson Ram??rez S??nchez \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.9.1\n" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled +msgid "FSM Order Canceled Parent" +msgstr "Pedido FSM cancelado padre" + +#. module: fieldservice_stage_server_action +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_completed +msgid "FSM Order Completed Parent" +msgstr "Pedido FSM Padre Completado" + +#. module: fieldservice_stage_server_action +#: model:base.automation,name:fieldservice_stage_server_action.fsm_order_email_sender +#: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_email_sender_ir_actions_server +msgid "FSM Order Email Sender" +msgstr "Remitente de Correo de Pedido FSM" + +#. module: fieldservice_stage_server_action +#: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage +msgid "Field Service Stage" +msgstr "Etapa de Servicio de Campo" + +#. module: fieldservice_stage_server_action +#: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id +msgid "Server Action" +msgstr "Acci??n de Servidor" From a3f186bc3ba64f31477910576bb4b854133f7708 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Wed, 5 Feb 2020 08:25:27 +0000 Subject: [PATCH 011/631] Translated using Weblate (Portuguese (Brazil)) Currently translated at 20.0% (1 of 5 strings) Translation: field-service-12.0/field-service-12.0-fieldservice_stage_server_action Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stage_server_action/pt_BR/ --- fieldservice_stage_server_action/i18n/pt_BR.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fieldservice_stage_server_action/i18n/pt_BR.po b/fieldservice_stage_server_action/i18n/pt_BR.po index 542166afeb..84528bd892 100644 --- a/fieldservice_stage_server_action/i18n/pt_BR.po +++ b/fieldservice_stage_server_action/i18n/pt_BR.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-02-05 11:13+0000\n" +"Last-Translator: Marcel Savegnago \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_stage_server_action #: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled @@ -33,7 +35,7 @@ msgstr "" #. module: fieldservice_stage_server_action #: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage msgid "Field Service Stage" -msgstr "" +msgstr "Est??gio de Servi??o de Campo" #. module: fieldservice_stage_server_action #: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id From 716049a328988464b9db7f2ccf1fc8e30c5c6145 Mon Sep 17 00:00:00 2001 From: Fernando Colus Date: Wed, 17 Jun 2020 13:57:07 +0000 Subject: [PATCH 012/631] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (5 of 5 strings) Translation: field-service-12.0/field-service-12.0-fieldservice_stage_server_action Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stage_server_action/pt_BR/ --- fieldservice_stage_server_action/i18n/pt_BR.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fieldservice_stage_server_action/i18n/pt_BR.po b/fieldservice_stage_server_action/i18n/pt_BR.po index 84528bd892..29876a7551 100644 --- a/fieldservice_stage_server_action/i18n/pt_BR.po +++ b/fieldservice_stage_server_action/i18n/pt_BR.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-02-05 11:13+0000\n" -"Last-Translator: Marcel Savegnago \n" +"PO-Revision-Date: 2020-06-17 16:19+0000\n" +"Last-Translator: Fernando Colus \n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" @@ -19,18 +19,18 @@ msgstr "" #. module: fieldservice_stage_server_action #: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_canceled msgid "FSM Order Canceled Parent" -msgstr "" +msgstr "Pai do pedido cancelado" #. module: fieldservice_stage_server_action #: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_parent_completed msgid "FSM Order Completed Parent" -msgstr "" +msgstr "Pai do pedido completado" #. module: fieldservice_stage_server_action #: model:base.automation,name:fieldservice_stage_server_action.fsm_order_email_sender #: model:ir.actions.server,name:fieldservice_stage_server_action.fsm_order_email_sender_ir_actions_server msgid "FSM Order Email Sender" -msgstr "" +msgstr "Remetente do email do pedido" #. module: fieldservice_stage_server_action #: model:ir.model,name:fieldservice_stage_server_action.model_fsm_stage @@ -40,4 +40,4 @@ msgstr "Est??gio de Servi??o de Campo" #. module: fieldservice_stage_server_action #: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id msgid "Server Action" -msgstr "" +msgstr "A????o do Servidor" From 7542da4242368eec77ed683e5275d16333ba43f0 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Tue, 21 Jul 2020 00:44:52 -0400 Subject: [PATCH 013/631] [IMP] fieldservice_stage_migration: black, isort, prettier --- .../__manifest__.py | 40 +- .../data/base_automation.xml | 22 +- .../data/fsm_stage.xml | 13 +- .../data/ir_server_action.xml | 21 +- .../models/__init__.py | 4 +- .../models/fsm_stage.py | 4 +- .../static/description/index.html | 1105 ++++++++++------- .../views/fsm_stage.xml | 5 +- 8 files changed, 739 insertions(+), 475 deletions(-) diff --git a/fieldservice_stage_server_action/__manifest__.py b/fieldservice_stage_server_action/__manifest__.py index 08ac286481..6a66f14613 100644 --- a/fieldservice_stage_server_action/__manifest__.py +++ b/fieldservice_stage_server_action/__manifest__.py @@ -1,29 +1,21 @@ # Copyright (C) 2019 Open Source Integrators # # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). { - 'name': 'FSM Stage Server Action', - 'summary': 'Execute server actions when reaching a Field Service stage', - 'version': '12.0.1.0.0', - 'category': 'Field Service', - 'author': 'Open Source Integrators, Odoo Community Association (OCA)', - 'website': 'https://github.com/ursais/osi-addons', - 'depends': [ - 'fieldservice', - 'fieldservice_substatus', - 'base_automation' + "name": "FSM Stage Server Action", + "summary": "Execute server actions when reaching a Field Service stage", + "version": "12.0.1.0.0", + "category": "Field Service", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "website": "https://github.com/ursais/osi-addons", + "depends": ["fieldservice", "fieldservice_substatus", "base_automation"], + "data": [ + "data/ir_server_action.xml", + "data/fsm_stage.xml", + "data/base_automation.xml", + "views/fsm_stage.xml", ], - 'data': [ - 'data/ir_server_action.xml', - 'data/fsm_stage.xml', - 'data/base_automation.xml', - 'views/fsm_stage.xml' - ], - 'installable': True, - 'license': 'AGPL-3', - 'development_status': 'Beta', - 'maintainers': [ - 'wolfhall', - 'max3903', - 'osi-scampbell' - ] + "installable": True, + "license": "AGPL-3", + "development_status": "Beta", + "maintainers": ["wolfhall", "max3903", "osi-scampbell"], } diff --git a/fieldservice_stage_server_action/data/base_automation.xml b/fieldservice_stage_server_action/data/base_automation.xml index 29fcac1eb4..6333aa630a 100644 --- a/fieldservice_stage_server_action/data/base_automation.xml +++ b/fieldservice_stage_server_action/data/base_automation.xml @@ -1,14 +1,16 @@ - - FSM Order Email Sender - - on_create_or_write - - multi - + FSM Order Email Sender + + on_create_or_write + + multi + - + ]" + /> + diff --git a/fieldservice_stage_server_action/data/fsm_stage.xml b/fieldservice_stage_server_action/data/fsm_stage.xml index a666ef79f5..8805f3519b 100644 --- a/fieldservice_stage_server_action/data/fsm_stage.xml +++ b/fieldservice_stage_server_action/data/fsm_stage.xml @@ -1,9 +1,8 @@ - - - - - - - + + + + + + diff --git a/fieldservice_stage_server_action/data/ir_server_action.xml b/fieldservice_stage_server_action/data/ir_server_action.xml index 42a9d299eb..5deff9eedb 100644 --- a/fieldservice_stage_server_action/data/ir_server_action.xml +++ b/fieldservice_stage_server_action/data/ir_server_action.xml @@ -1,13 +1,12 @@ - - FSM Order Completed Parent - - multi - - - - FSM Order Canceled Parent - - multi - + + FSM Order Completed Parent + + multi + + + FSM Order Canceled Parent + + multi + diff --git a/fieldservice_stage_server_action/models/__init__.py b/fieldservice_stage_server_action/models/__init__.py index 8d9c373b90..2f4caa0741 100644 --- a/fieldservice_stage_server_action/models/__init__.py +++ b/fieldservice_stage_server_action/models/__init__.py @@ -1,6 +1,4 @@ # Copyright (C) 2019 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import ( - fsm_stage, -) +from . import fsm_stage diff --git a/fieldservice_stage_server_action/models/fsm_stage.py b/fieldservice_stage_server_action/models/fsm_stage.py index 8a8ba601ba..2b309dad07 100644 --- a/fieldservice_stage_server_action/models/fsm_stage.py +++ b/fieldservice_stage_server_action/models/fsm_stage.py @@ -5,6 +5,6 @@ class FSMStage(models.Model): - _inherit = 'fsm.stage' + _inherit = "fsm.stage" - action_id = fields.Many2one('ir.actions.server', string="Server Action") + action_id = fields.Many2one("ir.actions.server", string="Server Action") diff --git a/fieldservice_stage_server_action/static/description/index.html b/fieldservice_stage_server_action/static/description/index.html index 54b44e4343..144349b9f6 100644 --- a/fieldservice_stage_server_action/static/description/index.html +++ b/fieldservice_stage_server_action/static/description/index.html @@ -1,13 +1,15 @@ - - - -FSM Stage Server Action - - - -
-

FSM Stage Server Action

- - -

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

-

This module allows you to execute server actions when a FSM orders enters a -specific stage.

-

Table of contents

- -
-

Configuration

-
    -
  • Go to Field Service > Configuration > Stages
  • -
  • Create or select a stage
  • -
  • Select or create a server action
  • -
-
-
-

Usage

-
    -
  • Go to Field Service
  • -
  • Select or create a FSM orders
  • -
  • Move it to the stage configured before to trigger the execution of the -server action
  • -
-
-
-

Bug Tracker

-

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

-

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

-
-
-

Credits

-
-

Authors

-
    -
  • Open Source Integrators
  • -
-
- -
-

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 osi-scampbell

-

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.

-
-
-
- +

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

+

+ This module allows you to execute server actions when a FSM orders enters a + specific stage. +

+

Table of contents

+
+ +
+
+

Configuration

+
    +
  • Go to Field Service > Configuration > Stages
  • +
  • Create or select a stage
  • +
  • Select or create a server action
  • +
+
+
+

Usage

+
    +
  • Go to Field Service
  • +
  • Select or create a FSM orders
  • +
  • + Move it to the stage configured before to trigger the execution of the + server action +
  • +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+
+

Contributors

+ +
+
+

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 + osi-scampbell +

+

+ 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_stage_server_action/views/fsm_stage.xml b/fieldservice_stage_server_action/views/fsm_stage.xml index 86a1832cee..54f96100e7 100644 --- a/fieldservice_stage_server_action/views/fsm_stage.xml +++ b/fieldservice_stage_server_action/views/fsm_stage.xml @@ -1,13 +1,12 @@ - fsm.server.action.stage.form fsm.stage - + - + From bf3386b5c33c589c22e1f2690a64d28fae17cd2f Mon Sep 17 00:00:00 2001 From: brian10048 Date: Tue, 21 Jul 2020 00:47:15 -0400 Subject: [PATCH 014/631] [MIG] fieldservice_stage_server_action: Migration to 13.0 --- fieldservice_stage_server_action/__init__.py | 2 +- fieldservice_stage_server_action/__manifest__.py | 4 ++-- fieldservice_stage_server_action/models/__init__.py | 2 +- fieldservice_stage_server_action/models/fsm_stage.py | 2 +- fieldservice_stage_server_action/readme/CONTRIBUTORS.rst | 2 ++ 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fieldservice_stage_server_action/__init__.py b/fieldservice_stage_server_action/__init__.py index b634044c7c..a0d2c6cd29 100644 --- a/fieldservice_stage_server_action/__init__.py +++ b/fieldservice_stage_server_action/__init__.py @@ -1,4 +1,4 @@ -# Copyright (C) 2019 - TODAY, Open Source Integrators +# Copyright (C) 2019, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models diff --git a/fieldservice_stage_server_action/__manifest__.py b/fieldservice_stage_server_action/__manifest__.py index 6a66f14613..f36f9d946c 100644 --- a/fieldservice_stage_server_action/__manifest__.py +++ b/fieldservice_stage_server_action/__manifest__.py @@ -1,9 +1,9 @@ -# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019, Open Source Integrators # # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). { "name": "FSM Stage Server Action", "summary": "Execute server actions when reaching a Field Service stage", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", "website": "https://github.com/ursais/osi-addons", diff --git a/fieldservice_stage_server_action/models/__init__.py b/fieldservice_stage_server_action/models/__init__.py index 2f4caa0741..bf6468a89e 100644 --- a/fieldservice_stage_server_action/models/__init__.py +++ b/fieldservice_stage_server_action/models/__init__.py @@ -1,4 +1,4 @@ -# Copyright (C) 2019 - TODAY, Open Source Integrators +# Copyright (C) 2019, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import fsm_stage diff --git a/fieldservice_stage_server_action/models/fsm_stage.py b/fieldservice_stage_server_action/models/fsm_stage.py index 2b309dad07..6bc8f63fa0 100644 --- a/fieldservice_stage_server_action/models/fsm_stage.py +++ b/fieldservice_stage_server_action/models/fsm_stage.py @@ -1,4 +1,4 @@ -# Copyright (C) 2019 - TODAY, Open Source Integrators +# Copyright (C) 2019, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import fields, models diff --git a/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst b/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst index f9cb0d612f..43c8618660 100644 --- a/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst +++ b/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst @@ -3,3 +3,5 @@ * Wolfgang Hall * Maxime Chambreuil * Steve Campbell + +* Brian McMaster From 937582392e5bef84f7f27dda8804aa100bdb8cbf Mon Sep 17 00:00:00 2001 From: brian10048 Date: Thu, 15 Oct 2020 21:19:15 -0400 Subject: [PATCH 015/631] [IMP] fieldservice_stage_server_action: Remove dependency --- fieldservice_stage_server_action/__manifest__.py | 2 +- fieldservice_stage_server_action/views/fsm_stage.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_stage_server_action/__manifest__.py b/fieldservice_stage_server_action/__manifest__.py index f36f9d946c..3a8285af0f 100644 --- a/fieldservice_stage_server_action/__manifest__.py +++ b/fieldservice_stage_server_action/__manifest__.py @@ -7,7 +7,7 @@ "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", "website": "https://github.com/ursais/osi-addons", - "depends": ["fieldservice", "fieldservice_substatus", "base_automation"], + "depends": ["fieldservice", "base_automation"], "data": [ "data/ir_server_action.xml", "data/fsm_stage.xml", diff --git a/fieldservice_stage_server_action/views/fsm_stage.xml b/fieldservice_stage_server_action/views/fsm_stage.xml index 54f96100e7..4e5b1e5574 100644 --- a/fieldservice_stage_server_action/views/fsm_stage.xml +++ b/fieldservice_stage_server_action/views/fsm_stage.xml @@ -5,7 +5,7 @@ fsm.stage - + From 676872098fcab8c7ec5d93ce2a5b8b80ea0b39ad Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sat, 28 Nov 2020 21:35:04 +0000 Subject: [PATCH 016/631] [UPD] Update fieldservice_stage_server_action.pot --- .../i18n/fieldservice_stage_server_action.pot | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot b/fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot index dd6a6f4a59..2cb6fdcca8 100644 --- a/fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot +++ b/fieldservice_stage_server_action/i18n/fieldservice_stage_server_action.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_stage_server_action +# * fieldservice_stage_server_action # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,4 +38,3 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_stage_server_action.field_fsm_stage__action_id msgid "Server Action" msgstr "" - From 0e8498f1c594c93bd147fb005ba742ebdbc34e59 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 28 Nov 2020 21:41:24 +0000 Subject: [PATCH 017/631] [UPD] README.rst --- fieldservice_stage_server_action/README.rst | 12 +- .../static/description/index.html | 1106 +++++++---------- 2 files changed, 423 insertions(+), 695 deletions(-) diff --git a/fieldservice_stage_server_action/README.rst b/fieldservice_stage_server_action/README.rst index 7a66a7a54f..e54f396364 100644 --- a/fieldservice_stage_server_action/README.rst +++ b/fieldservice_stage_server_action/README.rst @@ -14,13 +14,13 @@ FSM Stage Server Action :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/12.0/fieldservice_stage_server_action + :target: https://github.com/OCA/field-service/tree/13.0/fieldservice_stage_server_action :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-12-0/field-service-12-0-fieldservice_stage_server_action + :target: https://translation.odoo-community.org/projects/field-service-13-0/field-service-13-0-fieldservice_stage_server_action :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/12.0 + :target: https://runbot.odoo-community.org/runbot/264/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -54,7 +54,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -75,6 +75,8 @@ Contributors * Maxime Chambreuil * Steve Campbell +* Brian McMaster + Maintainers ~~~~~~~~~~~ @@ -102,6 +104,6 @@ Current `maintainers `__: |maintainer-wolfhall| |maintainer-max3903| |maintainer-osi-scampbell| -This module is part of the `OCA/field-service `_ project on GitHub. +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_stage_server_action/static/description/index.html b/fieldservice_stage_server_action/static/description/index.html index 144349b9f6..1088c41c2b 100644 --- a/fieldservice_stage_server_action/static/description/index.html +++ b/fieldservice_stage_server_action/static/description/index.html @@ -1,15 +1,13 @@ - - - - FSM Stage Server Action - - - -
-

FSM Stage Server Action

- - -

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

-

- This module allows you to execute server actions when a FSM orders enters a - specific stage. -

-

Table of contents

-
- -
-
-

Configuration

-
    -
  • Go to Field Service > Configuration > Stages
  • -
  • Create or select a stage
  • -
  • Select or create a server action
  • -
-
-
-

Usage

-
    -
  • Go to Field Service
  • -
  • Select or create a FSM orders
  • -
  • - Move it to the stage configured before to trigger the execution of the - server action -
  • -
-
-
-

Bug Tracker

-

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

-

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

-
-
-

Credits

-
-

Authors

-
    -
  • Open Source Integrators
  • -
-
-
-

Contributors

- -
-
-

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 - osi-scampbell -

-

- 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. -

-
-
-
- +

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

+

This module allows you to execute server actions when a FSM orders enters a +specific stage.

+

Table of contents

+ +
+

Configuration

+
    +
  • Go to Field Service > Configuration > Stages
  • +
  • Create or select a stage
  • +
  • Select or create a server action
  • +
+
+
+

Usage

+
    +
  • Go to Field Service
  • +
  • Select or create a FSM orders
  • +
  • Move it to the stage configured before to trigger the execution of the +server action
  • +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+
+

Contributors

+ +
+
+

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 osi-scampbell

+

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.

+
+
+
+ From 5e11a21397022fe6e81db3ef8b9ee1392480b822 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 19 Apr 2021 17:05:51 +0530 Subject: [PATCH 018/631] [14.0][MIG]fieldservice_stage_server_action --- fieldservice_stage_server_action/README.rst | 11 ++++++----- fieldservice_stage_server_action/__manifest__.py | 4 ++-- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 9 +++++---- .../odoo/addons/fieldservice_stage_server_action | 1 + setup/fieldservice_stage_server_action/setup.py | 6 ++++++ 6 files changed, 21 insertions(+), 11 deletions(-) create mode 120000 setup/fieldservice_stage_server_action/odoo/addons/fieldservice_stage_server_action create mode 100644 setup/fieldservice_stage_server_action/setup.py diff --git a/fieldservice_stage_server_action/README.rst b/fieldservice_stage_server_action/README.rst index e54f396364..9467285b0a 100644 --- a/fieldservice_stage_server_action/README.rst +++ b/fieldservice_stage_server_action/README.rst @@ -14,13 +14,13 @@ FSM Stage Server Action :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/13.0/fieldservice_stage_server_action + :target: https://github.com/OCA/field-service/tree/14.0/fieldservice_stage_server_action :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-13-0/field-service-13-0-fieldservice_stage_server_action + :target: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_stage_server_action :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/13.0 + :target: https://runbot.odoo-community.org/runbot/264/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -54,7 +54,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -74,6 +74,7 @@ Contributors * Wolfgang Hall * Maxime Chambreuil * Steve Campbell + * Mohammad Khalid * Brian McMaster @@ -104,6 +105,6 @@ Current `maintainers `__: |maintainer-wolfhall| |maintainer-max3903| |maintainer-osi-scampbell| -This module is part of the `OCA/field-service `_ project on GitHub. +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_stage_server_action/__manifest__.py b/fieldservice_stage_server_action/__manifest__.py index 3a8285af0f..f65d8a4420 100644 --- a/fieldservice_stage_server_action/__manifest__.py +++ b/fieldservice_stage_server_action/__manifest__.py @@ -3,10 +3,10 @@ { "name": "FSM Stage Server Action", "summary": "Execute server actions when reaching a Field Service stage", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", - "website": "https://github.com/ursais/osi-addons", + "website": "https://github.com/OCA/field-service", "depends": ["fieldservice", "base_automation"], "data": [ "data/ir_server_action.xml", diff --git a/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst b/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst index 43c8618660..a60b9eba43 100644 --- a/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst +++ b/fieldservice_stage_server_action/readme/CONTRIBUTORS.rst @@ -3,5 +3,6 @@ * Wolfgang Hall * Maxime Chambreuil * Steve Campbell + * Mohammad Khalid * Brian McMaster diff --git a/fieldservice_stage_server_action/static/description/index.html b/fieldservice_stage_server_action/static/description/index.html index 1088c41c2b..1064aa5ebd 100644 --- a/fieldservice_stage_server_action/static/description/index.html +++ b/fieldservice_stage_server_action/static/description/index.html @@ -3,7 +3,7 @@ - + FSM Stage Server Action + + +
+

FSM Agreements

+ + +

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

+

Odoo Agreement App does not provide an easy way to access field service orders +related to an agreement. Some organizations needs to have a quick access to +field service orders to track the performance of an agreement.

+

This module allows you to link a field service order to an agreement and adds a +smart button on the agreement to look at the list of related field service +orders.

+

Table of contents

+ +
+

Usage

+

To use this module:

+
    +
  • Go to Field Service > Operations > Orders
  • +
  • Select or create a field service order and set the agreement
  • +
  • Go to Agreement > Agreements
  • +
  • Open the previous agreement
  • +
  • Click on the smart button “Service Orders” to see the list of related field +service orders
  • +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+ +
+

Other credits

+

The development of this module has been financially supported by:

+
    +
  • Open Source Integrators
  • +
+
+
+

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:

+

max3903 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_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml new file mode 100644 index 0000000000..5ae94d69f0 --- /dev/null +++ b/fieldservice_agreement/views/agreement_view.xml @@ -0,0 +1,19 @@ + + + + + + + agreement.form.fsm.order.view + agreement + + +
+ +
+
+
+
diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml new file mode 100644 index 0000000000..b6fe7d95a2 --- /dev/null +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -0,0 +1,17 @@ + + + + + + + fsm.order.agreement.form + fsm.order + + + + + + + + From 70c975bb96ded53d4001816ae907422454dee5e1 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 13 Dec 2018 12:37:10 -0600 Subject: [PATCH 020/631] [IMP] Various improvements --- fieldservice_agreement/__manifest__.py | 8 +++++--- .../static/description/icon.png | Bin 9455 -> 17808 bytes .../views/fsm_order_view.xml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 9ff2a7c0e7..31c919f483 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - "name": "FSM Agreements", + "name": "Field Service - Agreements", "summary": "Manage FSM Agreements", "author": "Open Source Integrators, " "Odoo Community Association (OCA)", @@ -18,7 +18,9 @@ "views/agreement_view.xml", "views/fsm_order_view.xml", ], - "application": True, "development_status": "Beta", - "maintainers": ["max3903", "bodedra"], + "maintainers": [ + "max3903", + "bodedra", + ], } diff --git a/fieldservice_agreement/static/description/icon.png b/fieldservice_agreement/static/description/icon.png index 3a0328b516c4980e8e44cdb63fd945757ddd132d..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 100644 GIT binary patch literal 17808 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 literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index b6fe7d95a2..15ec36a8de 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -9,7 +9,7 @@ fsm.order - + From 023c1be6b0f8d31a4cda973052924a2072118ed1 Mon Sep 17 00:00:00 2001 From: osi-scampbell Date: Tue, 4 Dec 2018 14:51:49 -0700 Subject: [PATCH 021/631] [ADD] fieldservice_skill [UPD] README.rst --- fieldservice_agreement/README.rst | 6 +++--- fieldservice_agreement/static/description/index.html | 6 +++--- fieldservice_agreement/views/agreement_view.xml | 3 ++- fieldservice_agreement/views/fsm_order_view.xml | 3 ++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/fieldservice_agreement/README.rst b/fieldservice_agreement/README.rst index 1c1acd5c5d..e11cd580b9 100644 --- a/fieldservice_agreement/README.rst +++ b/fieldservice_agreement/README.rst @@ -1,6 +1,6 @@ -============== -FSM Agreements -============== +========================== +Field Service - Agreements +========================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index 5da62f8b38..43f04c8751 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -4,7 +4,7 @@ -FSM Agreements +Field Service - Agreements -
-

FSM Agreements

+
+

Field Service - Agreements

- + agreement.form.fsm.order.view agreement @@ -16,4 +16,5 @@
+ diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index 15ec36a8de..566474759d 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -4,7 +4,7 @@ License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). --> - + fsm.order.agreement.form fsm.order @@ -14,4 +14,5 @@ + From 50b40a33de5e27c34dda2038c463e56a5736b9c1 Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Thu, 27 Dec 2018 20:22:51 +0530 Subject: [PATCH 022/631] 11.0 imp fieldservice_agreement (#76) * [IMP] fieldservice_agreement [UPD] README.rst --- fieldservice_agreement/README.rst | 9 ++++++--- fieldservice_agreement/__manifest__.py | 1 + fieldservice_agreement/models/fsm_order.py | 2 ++ fieldservice_agreement/readme/CONTRIBUTORS.rst | 1 + fieldservice_agreement/readme/USAGE.rst | 3 +-- .../static/description/index.html | 6 +++--- fieldservice_agreement/views/agreement_view.xml | 7 +++++-- fieldservice_agreement/views/fsm_order_view.xml | 15 +++++++++++++++ 8 files changed, 34 insertions(+), 10 deletions(-) diff --git a/fieldservice_agreement/README.rst b/fieldservice_agreement/README.rst index e11cd580b9..07e81e061c 100644 --- a/fieldservice_agreement/README.rst +++ b/fieldservice_agreement/README.rst @@ -47,8 +47,7 @@ To use this module: * Select or create a field service order and set the agreement * Go to Agreement > Agreements * Open the previous agreement -* Click on the smart button "Service Orders" to see the list of related field - service orders +* Click on the smart button "Service Orders" to see the list of related field service orders Bug Tracker =========== @@ -72,6 +71,7 @@ Contributors ~~~~~~~~~~~~ * Bhavesh Odedra +* Sandip Mangukiya Other credits ~~~~~~~~~~~~~ @@ -99,10 +99,13 @@ promote its widespread use. .. |maintainer-bodedra| image:: https://github.com/bodedra.png?size=40px :target: https://github.com/bodedra :alt: bodedra +.. |maintainer-smangukiya| image:: https://github.com/smangukiya.png?size=40px + :target: https://github.com/smangukiya + :alt: smangukiya Current `maintainers `__: -|maintainer-max3903| |maintainer-bodedra| +|maintainer-max3903| |maintainer-bodedra| |maintainer-smangukiya| This module is part of the `OCA/field-service `_ project on GitHub. diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 31c919f483..7ec7aa3d22 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -22,5 +22,6 @@ "maintainers": [ "max3903", "bodedra", + "smangukiya", ], } diff --git a/fieldservice_agreement/models/fsm_order.py b/fieldservice_agreement/models/fsm_order.py index 88c923cd1b..a0013547fb 100644 --- a/fieldservice_agreement/models/fsm_order.py +++ b/fieldservice_agreement/models/fsm_order.py @@ -10,3 +10,5 @@ class FSMOrder(geo_model.GeoModel): _inherit = 'fsm.order' agreement_id = fields.Many2one('agreement', string='Agreement') + serviceprofile_id = fields.Many2one('agreement.serviceprofile', + 'Service Profile') diff --git a/fieldservice_agreement/readme/CONTRIBUTORS.rst b/fieldservice_agreement/readme/CONTRIBUTORS.rst index 567f85bd69..c59d5bd42c 100644 --- a/fieldservice_agreement/readme/CONTRIBUTORS.rst +++ b/fieldservice_agreement/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Bhavesh Odedra +* Sandip Mangukiya diff --git a/fieldservice_agreement/readme/USAGE.rst b/fieldservice_agreement/readme/USAGE.rst index 66cebd33d1..13f061ff60 100644 --- a/fieldservice_agreement/readme/USAGE.rst +++ b/fieldservice_agreement/readme/USAGE.rst @@ -4,5 +4,4 @@ To use this module: * Select or create a field service order and set the agreement * Go to Agreement > Agreements * Open the previous agreement -* Click on the smart button "Service Orders" to see the list of related field - service orders +* Click on the smart button "Service Orders" to see the list of related field service orders diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index 43f04c8751..d867d6160d 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -396,8 +396,7 @@

Usage

  • Select or create a field service order and set the agreement
  • Go to Agreement > Agreements
  • Open the previous agreement
  • -
  • Click on the smart button “Service Orders” to see the list of related field -service orders
  • +
  • Click on the smart button “Service Orders” to see the list of related field service orders
  • @@ -420,6 +419,7 @@

    Authors

    Contributors

    @@ -437,7 +437,7 @@

    Maintainers

    mission is to support the collaborative development of Odoo features and promote its widespread use.

    Current maintainers:

    -

    max3903 bodedra

    +

    max3903 bodedra smangukiya

    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_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index eaa5b7c3c4..c8842d4368 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -10,8 +10,11 @@
    -
    diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index 566474759d..c103b5ab16 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -11,8 +11,23 @@ +
    + + + fsm.order.select.agreement + fsm.order + + + + + + + +
    From 1e2e51e817b1c33326f564ff751c9bdbeb0cc276 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 27 Dec 2018 17:12:29 -0600 Subject: [PATCH 023/631] [IMP] Icon --- fieldservice_agreement/views/agreement_view.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index c8842d4368..973956b574 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -1,7 +1,5 @@ - @@ -11,7 +9,7 @@
    diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index c103b5ab16..e948512ac6 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -9,11 +9,11 @@ fsm.order - + - + From cde2edbf60db647bfd3c3fce690750cc39d1e128 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 3 Jan 2019 17:37:46 -0600 Subject: [PATCH 025/631] [IMP] Filtering --- fieldservice_agreement/views/fsm_order_view.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index e948512ac6..f6cd16558c 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -1,7 +1,5 @@ - @@ -10,7 +8,8 @@ - + @@ -25,7 +24,7 @@ + context="{'group_by': 'serviceprofile_id'}"/> From bf42e5bebd93b8dc56ee267ea64a7ea2cfd8fc7b Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 31 Jan 2019 17:17:54 -0600 Subject: [PATCH 026/631] [IMP] fieldservice_agreement --- fieldservice_agreement/views/fsm_order_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_agreement/views/fsm_order_view.xml b/fieldservice_agreement/views/fsm_order_view.xml index f6cd16558c..60f94a8314 100644 --- a/fieldservice_agreement/views/fsm_order_view.xml +++ b/fieldservice_agreement/views/fsm_order_view.xml @@ -7,12 +7,12 @@ fsm.order - + - + From 6fe98033be1230830836585b71796a6809e77e31 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 8 Feb 2019 00:10:04 -0600 Subject: [PATCH 027/631] [ADD] Merge fieldservice_equipment_agreement --- fieldservice_agreement/__manifest__.py | 39 ++++++++-------- fieldservice_agreement/models/__init__.py | 7 ++- fieldservice_agreement/models/agreement.py | 33 +++++++++++++- .../models/fsm_equipment.py | 12 +++++ .../views/agreement_view.xml | 34 ++++++++++++-- .../views/fsm_equipment_view.xml | 45 +++++++++++++++++++ 6 files changed, 145 insertions(+), 25 deletions(-) create mode 100644 fieldservice_agreement/models/fsm_equipment.py create mode 100644 fieldservice_agreement/views/fsm_equipment_view.xml diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 7ec7aa3d22..538e914a0b 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -2,26 +2,27 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - "name": "Field Service - Agreements", - "summary": "Manage FSM Agreements", - "author": "Open Source Integrators, " - "Odoo Community Association (OCA)", - "website": "https://github.com/OCA/field-service", - "category": "Field Service", - "license": "AGPL-3", - "version": "11.0.1.0.0", - "depends": [ - "fieldservice", - "agreement", + 'name': 'Field Service - Agreements', + 'summary': 'Manage FSM Agreements', + 'author': 'Open Source Integrators, ' + 'Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/field-service', + 'category': 'Field Service', + 'license': 'AGPL-3', + 'version': '11.0.1.0.0', + 'depends': [ + 'fieldservice', + 'agreement', ], - "data": [ - "views/agreement_view.xml", - "views/fsm_order_view.xml", + 'data': [ + 'views/fsm_order_view.xml', + 'views/fsm_equipment_view.xml', + 'views/agreement_view.xml', ], - "development_status": "Beta", - "maintainers": [ - "max3903", - "bodedra", - "smangukiya", + 'development_status': 'Beta', + 'maintainers': [ + 'max3903', + 'bodedra', + 'smangukiya', ], } diff --git a/fieldservice_agreement/models/__init__.py b/fieldservice_agreement/models/__init__.py index a8787cb0a8..07d228d784 100644 --- a/fieldservice_agreement/models/__init__.py +++ b/fieldservice_agreement/models/__init__.py @@ -1,4 +1,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import fsm_order -from . import agreement +from . import ( + agreement, + fsm_equipment, + fsm_order, +) diff --git a/fieldservice_agreement/models/agreement.py b/fieldservice_agreement/models/agreement.py index 2cbd621673..308edb96d2 100644 --- a/fieldservice_agreement/models/agreement.py +++ b/fieldservice_agreement/models/agreement.py @@ -11,6 +11,9 @@ class Agreement(models.Model): compute='_compute_service_order_count', string='# Service Orders' ) + equipment_count = fields.Integer('# Equipments', + compute='_compute_equipment_count') + fsm_location_id = fields.Many2one('fsm.location', string="FSM Location") @api.multi def _compute_service_order_count(self): @@ -26,7 +29,7 @@ def action_view_service_order(self): [('agreement_id', '=', agreement.id)]) action = self.env.ref( 'fieldservice.action_fsm_operation_order').read()[0] - if len(fsm_order_ids) > 1: + if len(fsm_order_ids) == 0 or len(fsm_order_ids) > 1: action['domain'] = [('id', 'in', fsm_order_ids.ids)] elif len(fsm_order_ids) == 1: action['views'] = [( @@ -36,3 +39,31 @@ def action_view_service_order(self): else: action = {'type': 'ir.actions.act_window_close'} return action + + @api.multi + def _compute_equipment_count(self): + data = self.env['fsm.equipment'].read_group( + [('agreement_id', 'in', self.ids)], + ['agreement_id'], ['agreement_id']) + count_data = dict((item['agreement_id'][0], + item['agreement_id_count']) for item in data) + for agreement in self: + agreement.equipment_count = count_data.get(agreement.id, 0) + + @api.multi + def action_view_fsm_equipment(self): + for agreement in self: + equipment_ids = self.env['fsm.equipment'].search( + [('agreement_id', '=', agreement.id)]) + action = self.env.ref( + 'fieldservice.action_fsm_equipment').read()[0] + if len(equipment_ids) == 0 or len(equipment_ids) > 1: + action['domain'] = [('id', 'in', equipment_ids.ids)] + elif len(equipment_ids) == 1: + action['views'] = [( + self.env.ref('fieldservice.fsm_equipment_form').id, + 'form')] + action['res_id'] = equipment_ids.ids[0] + else: + action = {'type': 'ir.actions.act_window_close'} + return action diff --git a/fieldservice_agreement/models/fsm_equipment.py b/fieldservice_agreement/models/fsm_equipment.py new file mode 100644 index 0000000000..235b538ab1 --- /dev/null +++ b/fieldservice_agreement/models/fsm_equipment.py @@ -0,0 +1,12 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMEquipment(models.Model): + _inherit = 'fsm.equipment' + + agreement_id = fields.Many2one('agreement', string='Agreement') + serviceprofile_id = fields.Many2one('agreement.serviceprofile', + 'Service Profile') diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 01b8210b3e..b997790a76 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -8,12 +8,40 @@
    - +
    + + + + + + + + + +
    diff --git a/fieldservice_agreement/views/fsm_equipment_view.xml b/fieldservice_agreement/views/fsm_equipment_view.xml new file mode 100644 index 0000000000..f52daa0171 --- /dev/null +++ b/fieldservice_agreement/views/fsm_equipment_view.xml @@ -0,0 +1,45 @@ + + + + + + fsm.equipment.agreement.form + fsm.equipment + + + + + + + + + + + + + + + + + + + fsm.equipment.select.agreement + fsm.equipment + + + + + + + + + + {'default_location_id': context.get('location_id', False), + 'default_agreement_id': context.get('agreement_id', False)} + + + From 2fa8a4261915d422aefee19bcb5999ff915a5cef Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 22 Feb 2019 09:37:03 -0800 Subject: [PATCH 028/631] [IMP] Change Kanban Date --- .../views/agreement_view.xml | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index b997790a76..de799b206e 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -1,6 +1,5 @@ - agreement.form.fsm.order.view @@ -45,4 +44,34 @@
    + + agreement.search.fields + agreement + search + + + + + + + + + + + + + + agreement.end.date.kanban + agreement + + + + + + + oe_kanban_text_red + + + +
    From d52034d0a6aa5587e2f1542262903aeb60d036c2 Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Mon, 25 Feb 2019 01:18:03 -0800 Subject: [PATCH 029/631] [FIX]1. message_follower_ids needs to be inherited in object first 2. move views to agreement module 3. improve location heirarchy name construction --- .../views/agreement_view.xml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index de799b206e..8401be21ab 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -51,27 +51,9 @@ - - - - - - agreement.end.date.kanban - agreement - - - - - - - oe_kanban_text_red - - - - From bb26237b39a0923de9e1e6e690367422bf4782c4 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 8 Mar 2019 13:18:05 -0800 Subject: [PATCH 030/631] [IMP] Fieldservice Account Bug Fix --- .../views/agreement_view.xml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 8401be21ab..634223b00f 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -56,4 +56,24 @@ + + agreement.form.context.fix + agreement + form + + + + + + + + + + + + + + + + From 99cc9065a7e2bd80466becd7614af4a46b4dbed8 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Thu, 4 Apr 2019 16:26:14 +0530 Subject: [PATCH 031/631] [MIG][WIP][12.0] fieldservice_agreement [UPD] README.rst --- fieldservice_agreement/README.rst | 11 ++++---- fieldservice_agreement/__manifest__.py | 5 ++-- fieldservice_agreement/models/agreement.py | 27 +++++++------------ fieldservice_agreement/models/fsm_order.py | 6 ++--- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 ++--- .../views/agreement_view.xml | 8 +++--- .../views/fsm_equipment_view.xml | 4 +-- .../views/fsm_order_view.xml | 6 ++--- 9 files changed, 34 insertions(+), 41 deletions(-) diff --git a/fieldservice_agreement/README.rst b/fieldservice_agreement/README.rst index 07e81e061c..792764660e 100644 --- a/fieldservice_agreement/README.rst +++ b/fieldservice_agreement/README.rst @@ -14,13 +14,13 @@ Field Service - Agreements :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/11.0/fieldservice_agreement + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_agreement :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-11-0/field-service-11-0-fieldservice_agreement + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_agreement :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -55,7 +55,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -72,6 +72,7 @@ Contributors * Bhavesh Odedra * Sandip Mangukiya +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -107,6 +108,6 @@ Current `maintainers `__: |maintainer-max3903| |maintainer-bodedra| |maintainer-smangukiya| -This module is part of the `OCA/field-service `_ project on GitHub. +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_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 538e914a0b..ab8687d569 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -9,16 +9,17 @@ 'website': 'https://github.com/OCA/field-service', 'category': 'Field Service', 'license': 'AGPL-3', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'depends': [ 'fieldservice', - 'agreement', + 'agreement_serviceprofile', ], 'data': [ 'views/fsm_order_view.xml', 'views/fsm_equipment_view.xml', 'views/agreement_view.xml', ], + 'installable': True, 'development_status': 'Beta', 'maintainers': [ 'max3903', diff --git a/fieldservice_agreement/models/agreement.py b/fieldservice_agreement/models/agreement.py index 308edb96d2..7aef78f9d6 100644 --- a/fieldservice_agreement/models/agreement.py +++ b/fieldservice_agreement/models/agreement.py @@ -1,7 +1,7 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models, api +from odoo import api, fields, models class Agreement(models.Model): @@ -18,9 +18,8 @@ class Agreement(models.Model): @api.multi def _compute_service_order_count(self): for agreement in self: - res = self.env['fsm.order'].search_count( + agreement.service_order_count = self.env['fsm.order'].search_count( [('agreement_id', '=', agreement.id)]) - agreement.service_order_count = res or 0 @api.multi def action_view_service_order(self): @@ -29,26 +28,20 @@ def action_view_service_order(self): [('agreement_id', '=', agreement.id)]) action = self.env.ref( 'fieldservice.action_fsm_operation_order').read()[0] - if len(fsm_order_ids) == 0 or len(fsm_order_ids) > 1: - action['domain'] = [('id', 'in', fsm_order_ids.ids)] - elif len(fsm_order_ids) == 1: + if len(fsm_order_ids) == 1: action['views'] = [( self.env.ref('fieldservice.fsm_order_form').id, 'form')] action['res_id'] = fsm_order_ids.ids[0] else: - action = {'type': 'ir.actions.act_window_close'} + action['domain'] = [('id', 'in', fsm_order_ids.ids)] return action @api.multi def _compute_equipment_count(self): - data = self.env['fsm.equipment'].read_group( - [('agreement_id', 'in', self.ids)], - ['agreement_id'], ['agreement_id']) - count_data = dict((item['agreement_id'][0], - item['agreement_id_count']) for item in data) for agreement in self: - agreement.equipment_count = count_data.get(agreement.id, 0) + agreement.equipment_count = self.env['fsm.equipment'].search_count( + [('agreement_id', 'in', agreement.ids)]) @api.multi def action_view_fsm_equipment(self): @@ -57,13 +50,11 @@ def action_view_fsm_equipment(self): [('agreement_id', '=', agreement.id)]) action = self.env.ref( 'fieldservice.action_fsm_equipment').read()[0] - if len(equipment_ids) == 0 or len(equipment_ids) > 1: - action['domain'] = [('id', 'in', equipment_ids.ids)] - elif len(equipment_ids) == 1: + if len(equipment_ids) == 1: action['views'] = [( - self.env.ref('fieldservice.fsm_equipment_form').id, + self.env.ref('fieldservice.fsm_equipment_form_view').id, 'form')] action['res_id'] = equipment_ids.ids[0] else: - action = {'type': 'ir.actions.act_window_close'} + action['domain'] = [('id', 'in', equipment_ids.ids)] return action diff --git a/fieldservice_agreement/models/fsm_order.py b/fieldservice_agreement/models/fsm_order.py index a0013547fb..20d5f22470 100644 --- a/fieldservice_agreement/models/fsm_order.py +++ b/fieldservice_agreement/models/fsm_order.py @@ -1,12 +1,10 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields +from odoo import fields, models -from odoo.addons.base_geoengine import geo_model - -class FSMOrder(geo_model.GeoModel): +class FSMOrder(models.Model): _inherit = 'fsm.order' agreement_id = fields.Many2one('agreement', string='Agreement') diff --git a/fieldservice_agreement/readme/CONTRIBUTORS.rst b/fieldservice_agreement/readme/CONTRIBUTORS.rst index c59d5bd42c..ffd570ce46 100644 --- a/fieldservice_agreement/readme/CONTRIBUTORS.rst +++ b/fieldservice_agreement/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Bhavesh Odedra * Sandip Mangukiya +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index d867d6160d..a4a15bde43 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Agreements

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    Odoo Agreement App does not provide an easy way to access field service orders related to an agreement. Some organizations needs to have a quick access to field service orders to track the performance of an agreement.

    @@ -404,7 +404,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -420,6 +420,7 @@

    Contributors

    @@ -438,7 +439,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    max3903 bodedra smangukiya

    -

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

    +

    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_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 634223b00f..8c878bbafe 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -1,10 +1,10 @@ - + agreement.form.fsm.order.view agreement - +
    diff --git a/fieldservice_agreement/views/fsm_person.xml b/fieldservice_agreement/views/fsm_person.xml new file mode 100644 index 0000000000..8e44da2a6b --- /dev/null +++ b/fieldservice_agreement/views/fsm_person.xml @@ -0,0 +1,22 @@ + + + + + fsm.person.form + fsm.person + + +
    + +
    +
    +
    + +
    From 1efb944ed27ac1e1dac8da953916a435a88cec79 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 24 May 2019 18:42:50 -0500 Subject: [PATCH 034/631] [IMP] fieldservice_agreement --- fieldservice_agreement/views/agreement_view.xml | 2 +- fieldservice_agreement/views/fsm_equipment_view.xml | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 8c878bbafe..09f7ff1813 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -19,7 +19,7 @@ type="object" class="oe_stat_button" icon="fa-laptop" - context="{'agreement_id': active_id}" + context="{'default_agreement_id': active_id}" groups="fieldservice.group_fsm_equipment">
    diff --git a/fieldservice_agreement/views/fsm_equipment_view.xml b/fieldservice_agreement/views/fsm_equipment_view.xml index b26169246e..ac3f1ecf09 100644 --- a/fieldservice_agreement/views/fsm_equipment_view.xml +++ b/fieldservice_agreement/views/fsm_equipment_view.xml @@ -31,15 +31,9 @@ + context="{'group_by': 'serviceprofile_id'}"/> - - {'default_location_id': context.get('location_id', False), - 'default_agreement_id': context.get('agreement_id', False)} - - From dc335303d8ca873288fa873d5f2ea439abcabd4f Mon Sep 17 00:00:00 2001 From: Steve Campbell Date: Tue, 11 Jun 2019 06:01:56 -0700 Subject: [PATCH 035/631] [FIX] fieldservice_agreement (#232) --- fieldservice_agreement/__manifest__.py | 3 ++- fieldservice_agreement/models/__init__.py | 3 ++- fieldservice_agreement/models/fsm_location.py | 26 +++++++++++++++++++ fieldservice_agreement/views/fsm_location.xml | 24 +++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 fieldservice_agreement/models/fsm_location.py create mode 100644 fieldservice_agreement/views/fsm_location.xml diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 71ec3aa804..9fa96e4f9d 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -18,7 +18,8 @@ 'views/fsm_order_view.xml', 'views/fsm_equipment_view.xml', 'views/agreement_view.xml', - 'views/fsm_person.xml' + 'views/fsm_person.xml', + 'views/fsm_location.xml' ], 'installable': True, 'development_status': 'Beta', diff --git a/fieldservice_agreement/models/__init__.py b/fieldservice_agreement/models/__init__.py index fe35aa88a5..98a54f21cc 100644 --- a/fieldservice_agreement/models/__init__.py +++ b/fieldservice_agreement/models/__init__.py @@ -3,6 +3,7 @@ from . import ( agreement, fsm_equipment, + fsm_location, fsm_order, - fsm_person + fsm_person, ) diff --git a/fieldservice_agreement/models/fsm_location.py b/fieldservice_agreement/models/fsm_location.py new file mode 100644 index 0000000000..d8127c93f4 --- /dev/null +++ b/fieldservice_agreement/models/fsm_location.py @@ -0,0 +1,26 @@ +# 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 FSMLocation(models.Model): + _inherit = 'fsm.location' + + serviceprofile_ids = fields.Many2many('agreement.serviceprofile', + string="Service Profiles", + compute='_compute_service_ids') + + @api.multi + def _compute_service_ids(self): + for loc in self: + agreements = self.env['agreement'].\ + search([('fsm_location_id', '=', self.name)]) + ids = [] + for agree in agreements: + servpros = self.env['agreement.serviceprofile'].\ + search([('agreement_id', '=', agree.id)]) + for ser in servpros: + if ser.id not in ids: + ids.append(ser.id) + self.serviceprofile_ids = ids diff --git a/fieldservice_agreement/views/fsm_location.xml b/fieldservice_agreement/views/fsm_location.xml new file mode 100644 index 0000000000..e657aa1033 --- /dev/null +++ b/fieldservice_agreement/views/fsm_location.xml @@ -0,0 +1,24 @@ + + + + + fsm.location.agreement.serviceprofile + fsm.location + + + + + + + + + + + + + + + + + From 266f1ec326de64e8627c5c2ee85e1e11bb782e26 Mon Sep 17 00:00:00 2001 From: Steve Campbell Date: Tue, 18 Jun 2019 06:18:51 -0700 Subject: [PATCH 036/631] [FIX] fieldservice_agreement: FSM Location Agreement Bug (#237) [UPD] README.rst --- fieldservice_agreement/models/fsm_location.py | 4 ++-- fieldservice_agreement/static/description/index.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fieldservice_agreement/models/fsm_location.py b/fieldservice_agreement/models/fsm_location.py index d8127c93f4..7e7c258fe5 100644 --- a/fieldservice_agreement/models/fsm_location.py +++ b/fieldservice_agreement/models/fsm_location.py @@ -15,7 +15,7 @@ class FSMLocation(models.Model): def _compute_service_ids(self): for loc in self: agreements = self.env['agreement'].\ - search([('fsm_location_id', '=', self.name)]) + search([('fsm_location_id', '=', loc.id)]) ids = [] for agree in agreements: servpros = self.env['agreement.serviceprofile'].\ @@ -23,4 +23,4 @@ def _compute_service_ids(self): for ser in servpros: if ser.id not in ids: ids.append(ser.id) - self.serviceprofile_ids = ids + loc.serviceprofile_ids = ids diff --git a/fieldservice_agreement/static/description/index.html b/fieldservice_agreement/static/description/index.html index 5ee30cb9cc..0debdbe71e 100644 --- a/fieldservice_agreement/static/description/index.html +++ b/fieldservice_agreement/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Agreements + + +
    +

    Field Service Stock add-on

    + + +

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

    +

    This module is an add-on for the Field Service application in Odoo. +It provides inventory and stock operations.

    +

    Table of contents

    + +
    +

    Installation

    +

    You will first need to install:

    +
      +
    • fieldservice
    • +
    +

    Then go to Field Service > Configuration > Settings +Enable the ‘Use Odoo Stock Logistics’ option under Integrations

    +
    +
    +

    Configuration

    +

    To configure this module, you need to:

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

    Usage

    +

    To use this module, you need to:

    +
      +
    • Set Inventory Locations for FSM Locations and FSM Vehicles
    • +
    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    • Brian McMaster
    • +
    +
    +
    +

    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:

    +

    brian10048 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.

    +
    +
    +
    + + From 1b2d4b5dd94ecf0a55ef8c0b5f16203487f8ae2b Mon Sep 17 00:00:00 2001 From: brian10048 Date: Wed, 12 Dec 2018 12:25:54 -0500 Subject: [PATCH 063/631] [ADD] field service stock 0.0.2 (#49) * [ADD] field service stock 0.0.2 [UPD] README.rst --- fieldservice_stock/README.rst | 9 +- fieldservice_stock/__manifest__.py | 6 +- fieldservice_stock/data/fsm_stock_data.xml | 46 ++-- fieldservice_stock/models/__init__.py | 4 +- fieldservice_stock/models/fsm_order.py | 204 ++++++++++++++++++ fieldservice_stock/models/stock.py | 53 +++++ fieldservice_stock/readme/CONFIGURE.rst | 3 +- fieldservice_stock/readme/USAGE.rst | 6 +- .../static/description/index.html | 9 +- fieldservice_stock/views/fsm_order.xml | 42 ++++ fieldservice_stock/views/inventory.xml | 7 + 11 files changed, 358 insertions(+), 31 deletions(-) create mode 100644 fieldservice_stock/models/fsm_order.py create mode 100644 fieldservice_stock/models/stock.py create mode 100644 fieldservice_stock/views/fsm_order.xml create mode 100644 fieldservice_stock/views/inventory.xml diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 17fa4c5cb7..6e47c9a11b 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -48,14 +48,19 @@ Configuration To configure this module, you need to: -* Go to Field Service > Configuration > Settings +* Set Inventory Locations for FSM Locations and FSM Vehicles +* Verify procurement routes Usage ===== To use this module, you need to: -* Set Inventory Locations for FSM Locations and FSM Vehicles +* Create a new field service order +* Under the Materials tab, add products with quantity +* Confirm an order to create stock moves +* Validate stock moves in the Inventory app +* Quantities Delivered on FSM Order Line will be updated based on move Known issues / Roadmap ====================== diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index bc6f3d9756..09da289177 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,15 +4,13 @@ { 'name': 'Field Service Stock add-on', 'summary': 'Inventory and Stock operations for Field Service', - 'version': '11.0.0.0.1', + 'version': '11.0.0.0.2', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " "Odoo Community Association (OCA)", 'website': 'https://github.com/OCA/field-service', 'depends': [ - 'base_geolocalize', - 'mail', 'fieldservice', 'stock', ], @@ -20,6 +18,8 @@ 'data/fsm_stock_data.xml', 'views/fsm_location.xml', 'views/fsm_vehicle.xml', + 'views/fsm_order.xml', + 'views/inventory.xml', ], 'installable': True, 'license': 'AGPL-3', diff --git a/fieldservice_stock/data/fsm_stock_data.xml b/fieldservice_stock/data/fsm_stock_data.xml index 4c3750e2c8..94456fe978 100644 --- a/fieldservice_stock/data/fsm_stock_data.xml +++ b/fieldservice_stock/data/fsm_stock_data.xml @@ -1,6 +1,7 @@ + Field view @@ -12,9 +13,18 @@ view + + + Storage + internal + + + + + Vehicle Loading @@ -32,22 +42,6 @@ - - Output to Vehicle - 3 - - - - - Warehouse → Vehicle - move - - - make_to_stock - - - - Location Delivery @@ -64,8 +58,8 @@ - - Vehicle to Location + + Stock to Vehicle to Location 3 @@ -74,12 +68,22 @@ Vehicle → Location move - - make_to_stock - + + make_to_order + + + Warehouse → Vehicle + move + + + make_to_stock + + + + Location Return diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index 4f639d9629..beae0f7109 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -3,5 +3,7 @@ from . import ( fsm_location, - fsm_vehicle + fsm_vehicle, + fsm_order, + stock, ) diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py new file mode 100644 index 0000000000..0bb0849dac --- /dev/null +++ b/fieldservice_stock/models/fsm_order.py @@ -0,0 +1,204 @@ +# Copyright (C) 2018 - TODAY, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import datetime, timedelta + +from odoo import api, fields, models + +from odoo.tools import (DEFAULT_SERVER_DATETIME_FORMAT, + float_is_zero, float_compare) +from odoo.addons import decimal_precision as dp +from odoo.exceptions import UserError + +from odoo.addons.base_geoengine import geo_model + + +class FSMOrder(geo_model.GeoModel): + _inherit = 'fsm.order' + + line_ids = fields.One2many( + 'fsm.order.line', 'order_id', string="Order Lines",) + picking_ids = fields.One2many('stock.picking', 'fsm_order_id', + string='Transfers') + procurement_group_id = fields.Many2one( + 'procurement.group', 'Procurement Group', copy=False) + + def action_confirm(self): + self.line_ids._confirm_picking() + return super(FSMOrder, self).action_confirm() + + +class FSMOrderLine(models.Model): + _name = 'fsm.order.line' + _description = "FSM Order Lines" + _order = 'order_id, sequence, id' + + order_id = fields.Many2one( + 'fsm.order', string="FSM Order", required=True, + ondelete='cascade', index=True, copy=False, + readonly=True, states={'draft': [('readonly', False)]}) + name = fields.Char(string='Description', required=True, + readonly=True, states={'draft': [('readonly', False)]}) + sequence = fields.Integer(string='Sequence', default=10, readonly=True, + states={'draft': [('readonly', False)]}) + product_id = fields.Many2one( + 'product.product', string="Product", required=True, + domain=[('type', '=', 'product')], ondelete='restrict', + readonly=True, states={'draft': [('readonly', False)]}) + product_uom_id = fields.Many2one( + 'product.uom', string='Unit of Measure', required=True, + readonly=True, states={'draft': [('readonly', False)]}) + qty_ordered = fields.Float( + string='Quantity Requested', readonly=True, + states={'draft': [('readonly', False)]}, + digits=dp.get_precision('Product Unit of Measure')) + qty_delivered = fields.Float( + string='Quantity Delivered', readonly=True, copy=False, + digits=dp.get_precision('Product Unit of Measure')) + state = fields.Selection([ + ('draft', 'Draft'), + ('confirmed', 'Confirmed'), + ('partial', 'Partially Shipped'), + ('done', 'Done')], + string='State', compute='_compute_state', copy=False, index=True, + readonly=True, store=True) + move_ids = fields.One2many( + 'stock.move', 'fsm_order_line_id', string='Stock Moves', + readonly=True, states={'draft': [('readonly', False)]}) + + @api.depends('move_ids', 'qty_ordered', 'qty_delivered') + def _compute_state(self): + precision = self.env['decimal.precision'].precision_get( + 'Product Unit of Measure') + for line in self: + if line.move_ids and not float_is_zero(line.qty_delivered, + precision_digits=precision): + if float_compare(line.qty_delivered, line.qty_ordered, + precision_digits=precision) == -1: + line.state = 'partial' + elif float_compare(line.qty_delivered, line.qty_ordered, + precision_digits=precision) >= 0: + line.state = 'done' + elif line.move_ids: + line.state = 'confirmed' + else: + line.state = 'draft' + + @api.multi + @api.onchange('product_id') + def onchange_product_id(self): + if not self.product_id: + return {'domain': {'product_uom': []}} + + vals = {} + domain = {'product_uom': [('category_id', '=', + self.product_id.uom_id.category_id.id)]} + + if (not self.product_uom_id + or (self.product_id.uom_id.id != self.product_uom_id.id)): + vals['product_uom_id'] = self.product_id.uom_id + vals['qty_ordered'] = 1.0 + + product = self.product_id.with_context( + quantity=vals.get('qty_ordered') or self.qty_ordered, + uom=self.product_uom_id.id, + ) + + result = {'domain': domain} + + name = product.name_get()[0][1] + if product.description_sale: + name += '\n' + product.description_sale + vals['name'] = name + + self.update(vals) + return result + + @api.multi + def _prepare_procurement_values(self, group_id=False): + self.ensure_one() + values = {} + date_planned = (self.order_id.scheduled_date_start + or self.order_id.requested_date + or (datetime.now() + timedelta(days=1)).strftime( + DEFAULT_SERVER_DATETIME_FORMAT)) + values.update({ + 'group_id': group_id, + 'fsm_order_line_id': self.id, + 'date_planned': date_planned, + 'route_ids': self.env.ref( + 'fieldservice_stock.route_stock_to_vehicle_to_location'), + 'partner_dest_id': self.order_id.customer_id + }) + return values + + def _get_procurement_qty(self): + self.ensure_one() + qty = 0.0 + for move in self.move_ids.filtered(lambda r: r.state != 'cancel'): + if move.picking_code == 'outgoing': + qty += move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id, + rounding_method='HALF-UP') + elif move.picking_code == 'incoming': + qty -= move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id, + rounding_method='HALF-UP') + return qty + + @api.multi + def _confirm_picking(self): + precision = self.env['decimal.precision'].precision_get( + 'Product Unit of Measure') + errors = [] + for line in self: + qty_procured = line._get_procurement_qty() + if float_compare(qty_procured, line.qty_ordered, + precision_digits=precision) >= 0: + continue + group_id = line.order_id.procurement_group_id + if not group_id: + group_id = self.env['procurement.group'].create({ + 'name': line.order_id.name, + 'move_type': 'direct', + 'fsm_order_id': line.order_id.id, + 'partner_id': line.order_id.customer_id.id, + }) + line.order_id.procurement_group_id = group_id + values = line._prepare_procurement_values(group_id=group_id) + qty_needed = line.qty_ordered - qty_procured + procurement_uom = line.product_uom_id + quant_uom = line.product_id.uom_id + get_param = self.env['ir.config_parameter'].sudo().get_param + if (procurement_uom.id != quant_uom.id + and get_param('stock.propagate_uom') != '1'): + qty_needed = line.product_uom_id._compute_quantity( + qty_needed, quant_uom, rounding_method='HALF-UP') + procurement_uom = quant_uom + try: + self.env['procurement.group'].run( + line.product_id, qty_needed, procurement_uom, + line.order_id.fsm_location_id.inventory_location, + line.name, line.order_id.name, values) + except UserError as error: + errors.append(error.name) + if errors: + raise UserError('\n'.join(errors)) + return True + + @api.multi + def _get_delivered_qty(self): + self.ensure_one() + qty = 0.0 + for move in self.move_ids.filtered(lambda r: r.state == 'done' + and not r.scrapped): + if move.location_dest_id.usage == "customer": + if (not move.origin_returned_move_id + or (move.origin_returned_move_id and move.to_refund)): + qty += move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id) + elif (move.location_dest_id.usage != "customer" + and move.to_refund): + qty -= move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id) + return qty diff --git a/fieldservice_stock/models/stock.py b/fieldservice_stock/models/stock.py new file mode 100644 index 0000000000..e2ccc4f590 --- /dev/null +++ b/fieldservice_stock/models/stock.py @@ -0,0 +1,53 @@ +# Copyright (C) 2018 - TODAY, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class StockMove(models.Model): + _inherit = "stock.move" + + fsm_order_line_id = fields.Many2one('fsm.order.line', 'FSM Order Line') + + def _action_done(self): + result = super(StockMove, self)._action_done() + for line in result.mapped('fsm_order_line_id').sudo(): + line.qty_delivered = line._get_delivered_qty() + return result + + @api.multi + def write(self, vals): + res = super(StockMove, self).write(vals) + if 'product_uom_qty' in vals: + for move in self: + if move.state == 'done': + for line in res.mapped('fsm_order_line_id').sudo(): + line.qty_delivered = line._get_delivered_qty() + return res + + +class ProcurementGroup(models.Model): + _inherit = 'procurement.group' + + fsm_order_id = fields.Many2one('fsm.order', 'Field Service Order') + + +class ProcurementRule(models.Model): + _inherit = 'procurement.rule' + + def _get_stock_move_values(self, product_id, product_qty, product_uom, + location_id, name, origin, values, group_id): + result = super(ProcurementRule, self)._get_stock_move_values( + product_id, product_qty, product_uom, + location_id, name, origin, values, group_id) + if values.get('fsm_order_line_id', False): + result['fsm_order_line_id'] = values['fsm_order_line_id'] + return result + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + fsm_order_id = fields.Many2one( + related="group_id.fsm_order_id", string="Field Service Order", + store=True) diff --git a/fieldservice_stock/readme/CONFIGURE.rst b/fieldservice_stock/readme/CONFIGURE.rst index eff3513290..6b50a28919 100644 --- a/fieldservice_stock/readme/CONFIGURE.rst +++ b/fieldservice_stock/readme/CONFIGURE.rst @@ -1,3 +1,4 @@ To configure this module, you need to: -* Go to Field Service > Configuration > Settings +* Set Inventory Locations for FSM Locations and FSM Vehicles +* Verify procurement routes diff --git a/fieldservice_stock/readme/USAGE.rst b/fieldservice_stock/readme/USAGE.rst index fc3d1987aa..2934857b2b 100644 --- a/fieldservice_stock/readme/USAGE.rst +++ b/fieldservice_stock/readme/USAGE.rst @@ -1,3 +1,7 @@ To use this module, you need to: -* Set Inventory Locations for FSM Locations and FSM Vehicles +* Create a new field service order +* Under the Materials tab, add products with quantity +* Confirm an order to create stock moves +* Validate stock moves in the Inventory app +* Quantities Delivered on FSM Order Line will be updated based on move diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 39ee16f80a..0f2fd33746 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -400,14 +400,19 @@

    Installation

    Configuration

    To configure this module, you need to:

      -
    • Go to Field Service > Configuration > Settings
    • +
    • Set Inventory Locations for FSM Locations and FSM Vehicles
    • +
    • Verify procurement routes

    Usage

    To use this module, you need to:

      -
    • Set Inventory Locations for FSM Locations and FSM Vehicles
    • +
    • Create a new field service order
    • +
    • Under the Materials tab, add products with quantity
    • +
    • Confirm an order to create stock moves
    • +
    • Validate stock moves in the Inventory app
    • +
    • Quantities Delivered on FSM Order Line will be updated based on move
    diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml new file mode 100644 index 0000000000..a165b4f6e2 --- /dev/null +++ b/fieldservice_stock/views/fsm_order.xml @@ -0,0 +1,42 @@ + + + + + fsm.order.form.stock + fsm.order + + + + + + + + + + + + + + + + + + + + + diff --git a/fieldservice_stock/views/inventory.xml b/fieldservice_stock/views/inventory.xml new file mode 100644 index 0000000000..5061f5c410 --- /dev/null +++ b/fieldservice_stock/views/inventory.xml @@ -0,0 +1,7 @@ + + + + + + From ba765781c8c7f6d96529e2d92f4c48979ce03361 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 13 Dec 2018 12:37:10 -0600 Subject: [PATCH 064/631] [IMP] Various improvements [UPD] README.rst --- fieldservice_stock/README.rst | 6 +++--- fieldservice_stock/__manifest__.py | 6 +++--- fieldservice_stock/static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 6 +++--- fieldservice_stock/views/inventory.xml | 7 ------- fieldservice_stock/views/stock.xml | 10 ++++++++++ 6 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 fieldservice_stock/static/description/icon.png delete mode 100644 fieldservice_stock/views/inventory.xml create mode 100644 fieldservice_stock/views/stock.xml diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 6e47c9a11b..3510cd588b 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -1,6 +1,6 @@ -========================== -Field Service Stock add-on -========================== +===================== +Field Service - Stock +===================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 09da289177..b5c819bc34 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -2,8 +2,8 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service Stock add-on', - 'summary': 'Inventory and Stock operations for Field Service', + 'name': 'Field Service - Stock', + 'summary': 'Inventory and Stock Operations for Field Service', 'version': '11.0.0.0.2', 'category': 'Field Service', 'author': "Open Source Integrators, " @@ -19,7 +19,7 @@ 'views/fsm_location.xml', 'views/fsm_vehicle.xml', 'views/fsm_order.xml', - 'views/inventory.xml', + 'views/stock.xml', ], 'installable': True, 'license': 'AGPL-3', diff --git a/fieldservice_stock/static/description/icon.png b/fieldservice_stock/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 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 literal 0 HcmV?d00001 diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 0f2fd33746..7cf0406b5e 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -4,7 +4,7 @@ -Field Service Stock add-on +Field Service - Stock -
    -

    Field Service Stock add-on

    +
    +

    Field Service - Stock

    - - Vehicle Loading - VL - 5 - - - - - Vehicle Loading - - internal - - - - - - - - Location Delivery - LD - 5 - - - - - Location Delivery - - outgoing - - - - - - Stock to Vehicle to Location - 3 - - - - - Vehicle → Location - move - - - make_to_order - - - - - - Warehouse → Vehicle - move - - - make_to_stock - - - - - - - Location Return - 3 - - - - - - Location Pickup - LP - 5 - - - - - Location Pickup - - internal - - - - - - Warehouse → Vehicle - move - - - make_to_stock - - - - - - - - Vehicle Returns - VR - 5 - - - - - Vehicle Returns - - internal - - - - - - - Vehicle → Warehouse - - - manual - - - - - diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index beae0f7109..bacddd4307 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -3,7 +3,6 @@ from . import ( fsm_location, - fsm_vehicle, fsm_order, stock, ) diff --git a/fieldservice_stock/models/fsm_location.py b/fieldservice_stock/models/fsm_location.py index e11989ba5b..bfe38d6d09 100644 --- a/fieldservice_stock/models/fsm_location.py +++ b/fieldservice_stock/models/fsm_location.py @@ -1,10 +1,11 @@ # Copyright (C) 2018 - TODAY, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import fields +from odoo.addons.base_geoengine import geo_model -class FSMLocation(models.Model): +class FSMLocation(geo_model.GeoModel): _inherit = 'fsm.location' inventory_location = fields.Many2one('stock.location', diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 0bb0849dac..efc930d188 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -3,7 +3,7 @@ from datetime import datetime, timedelta -from odoo import api, fields, models +from odoo import api, fields, models, _ from odoo.tools import (DEFAULT_SERVER_DATETIME_FORMAT, float_is_zero, float_compare) @@ -20,13 +20,42 @@ class FSMOrder(geo_model.GeoModel): 'fsm.order.line', 'order_id', string="Order Lines",) picking_ids = fields.One2many('stock.picking', 'fsm_order_id', string='Transfers') + delivery_count = fields.Integer(string='Delivery Orders', + compute='_compute_picking_ids') procurement_group_id = fields.Many2one( 'procurement.group', 'Procurement Group', copy=False) + warehouse_id = fields.Many2one('stock.warehouse', string='Warehouse', + help="Warehouse used to ship the materials") + + @api.depends('picking_ids') + def _compute_picking_ids(self): + for order in self: + order.delivery_count = len(order.picking_ids) def action_confirm(self): - self.line_ids._confirm_picking() - return super(FSMOrder, self).action_confirm() + if self.location_id and self.line_ids and self.warehouse_id: + self.line_ids._confirm_picking() + return super(FSMOrder, self).action_confirm() + else: + raise UserError(_('Please select the location, a warehouse and a' + ' product.')) + @api.multi + def action_view_delivery(self): + ''' + This function returns an action that display existing delivery orders + of given fsm order ids. It can either be a in a list or in a form + view, if there is only one delivery order to show. + ''' + action = self.env.ref('stock.action_picking_tree_all').read()[0] + + pickings = self.mapped('picking_ids') + if len(pickings) > 1: + action['domain'] = [('id', 'in', pickings.ids)] + elif pickings: + action['views'] = [(self.env.ref('stock.view_picking_form').id, 'form')] + action['res_id'] = pickings.id + return action class FSMOrderLine(models.Model): _name = 'fsm.order.line' @@ -42,7 +71,7 @@ class FSMOrderLine(models.Model): sequence = fields.Integer(string='Sequence', default=10, readonly=True, states={'draft': [('readonly', False)]}) product_id = fields.Many2one( - 'product.product', string="Product", required=True, + 'product.product', string="Product", domain=[('type', '=', 'product')], ondelete='restrict', readonly=True, states={'draft': [('readonly', False)]}) product_uom_id = fields.Many2one( @@ -119,15 +148,15 @@ def _prepare_procurement_values(self, group_id=False): self.ensure_one() values = {} date_planned = (self.order_id.scheduled_date_start - or self.order_id.requested_date + or self.order_id.request_early + or self.order_id.request_late or (datetime.now() + timedelta(days=1)).strftime( DEFAULT_SERVER_DATETIME_FORMAT)) values.update({ 'group_id': group_id, 'fsm_order_line_id': self.id, 'date_planned': date_planned, - 'route_ids': self.env.ref( - 'fieldservice_stock.route_stock_to_vehicle_to_location'), + 'route_ids': self.order_id.warehouse_id.delivery_route_id, 'partner_dest_id': self.order_id.customer_id }) return values @@ -170,6 +199,7 @@ def _confirm_picking(self): procurement_uom = line.product_uom_id quant_uom = line.product_id.uom_id get_param = self.env['ir.config_parameter'].sudo().get_param + import pdb;pdb.set_trace() if (procurement_uom.id != quant_uom.id and get_param('stock.propagate_uom') != '1'): qty_needed = line.product_uom_id._compute_quantity( @@ -178,7 +208,7 @@ def _confirm_picking(self): try: self.env['procurement.group'].run( line.product_id, qty_needed, procurement_uom, - line.order_id.fsm_location_id.inventory_location, + line.order_id.location_id.inventory_location, line.name, line.order_id.name, values) except UserError as error: errors.append(error.name) diff --git a/fieldservice_stock/models/fsm_vehicle.py b/fieldservice_stock/models/fsm_vehicle.py deleted file mode 100644 index 06d78920d9..0000000000 --- a/fieldservice_stock/models/fsm_vehicle.py +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (C) 2018 - TODAY, Brian McMaster -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class FSMVehicle(models.Model): - _inherit = 'fsm.vehicle' - - inventory_location = fields.Many2one('stock.location', - 'Inventory Location') diff --git a/fieldservice_stock/readme/CONFIGURE.rst b/fieldservice_stock/readme/CONFIGURE.rst index 6b50a28919..59e8366bd3 100644 --- a/fieldservice_stock/readme/CONFIGURE.rst +++ b/fieldservice_stock/readme/CONFIGURE.rst @@ -1,4 +1,4 @@ To configure this module, you need to: -* Set Inventory Locations for FSM Locations and FSM Vehicles -* Verify procurement routes +* Go to Field Service > Master Data > Locations +* Create or select a location and set the inventory location diff --git a/fieldservice_stock/readme/INSTALL.rst b/fieldservice_stock/readme/INSTALL.rst index a7c9f727b2..c010f8f6a2 100644 --- a/fieldservice_stock/readme/INSTALL.rst +++ b/fieldservice_stock/readme/INSTALL.rst @@ -1,6 +1,4 @@ -You will first need to install: +To install Field Service and have the mapping features, you need to install GeoEngine. -* fieldservice - -Then go to Field Service > Configuration > Settings -Enable the 'Use Odoo Stock Logistics' option under Integrations +Please refer to the installation instructions available at: +https://github.com/OCA/geospatial/tree/11.0/base_geoengine diff --git a/fieldservice_stock/readme/USAGE.rst b/fieldservice_stock/readme/USAGE.rst index 2934857b2b..a9332d58c5 100644 --- a/fieldservice_stock/readme/USAGE.rst +++ b/fieldservice_stock/readme/USAGE.rst @@ -1,7 +1,7 @@ To use this module, you need to: -* Create a new field service order -* Under the Materials tab, add products with quantity -* Confirm an order to create stock moves -* Validate stock moves in the Inventory app -* Quantities Delivered on FSM Order Line will be updated based on move +* Create a new service order +* Under the Inventory tab, select the warehouse and add products with quantity +* Confirm the order to create the delivery orders +* Validate the transfers in the Inventory app. Quantities delivered on FSM + Order Line will be updated. diff --git a/fieldservice_stock/views/fsm_location.xml b/fieldservice_stock/views/fsm_location.xml index 54d7738445..a255bd9bcb 100644 --- a/fieldservice_stock/views/fsm_location.xml +++ b/fieldservice_stock/views/fsm_location.xml @@ -6,7 +6,8 @@ - + diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index a165b4f6e2..8e422a26c7 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -6,31 +6,46 @@ fsm.order +
    + + +
    - - - + + + + + + + + + - + + attrs="{'readonly': [('state', 'in', ('sale', 'done', 'cancel'))]}" + options='{"no_open": True, "no_create": True}' + groups="product.group_uom"/> diff --git a/fieldservice_stock/views/fsm_vehicle.xml b/fieldservice_stock/views/fsm_vehicle.xml deleted file mode 100644 index 84b559e8f0..0000000000 --- a/fieldservice_stock/views/fsm_vehicle.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - fsm.vehicle - - - - - - - - - diff --git a/fieldservice_stock/views/stock.xml b/fieldservice_stock/views/stock.xml index 07dd7c5408..375d38977b 100644 --- a/fieldservice_stock/views/stock.xml +++ b/fieldservice_stock/views/stock.xml @@ -1,6 +1,12 @@ + + Date: Thu, 13 Dec 2018 19:48:34 -0600 Subject: [PATCH 066/631] [ADD] Security [UPD] README.rst --- fieldservice_stock/README.rst | 22 ++++++++---------- fieldservice_stock/__manifest__.py | 1 + fieldservice_stock/models/fsm_order.py | 5 ++-- .../security/ir.model.access.csv | 3 +++ .../static/description/index.html | 23 ++++++++----------- fieldservice_stock/views/fsm_order.xml | 2 +- 6 files changed, 28 insertions(+), 28 deletions(-) create mode 100644 fieldservice_stock/security/ir.model.access.csv diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 3510cd588b..8ab3047909 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -36,31 +36,29 @@ It provides inventory and stock operations. Installation ============ -You will first need to install: +To install Field Service and have the mapping features, you need to install GeoEngine. -* fieldservice - -Then go to Field Service > Configuration > Settings -Enable the 'Use Odoo Stock Logistics' option under Integrations +Please refer to the installation instructions available at: +https://github.com/OCA/geospatial/tree/11.0/base_geoengine Configuration ============= To configure this module, you need to: -* Set Inventory Locations for FSM Locations and FSM Vehicles -* Verify procurement routes +* Go to Field Service > Master Data > Locations +* Create or select a location and set the inventory location Usage ===== To use this module, you need to: -* Create a new field service order -* Under the Materials tab, add products with quantity -* Confirm an order to create stock moves -* Validate stock moves in the Inventory app -* Quantities Delivered on FSM Order Line will be updated based on move +* Create a new service order +* Under the Inventory tab, select the warehouse and add products with quantity +* Confirm the order to create the delivery orders +* Validate the transfers in the Inventory app. Quantities delivered on FSM + Order Line will be updated. Known issues / Roadmap ====================== diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 266983cc0a..43f953f45c 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -15,6 +15,7 @@ 'stock', ], 'data': [ + 'security/ir.model.access.csv', 'data/fsm_stock_data.xml', 'views/fsm_location.xml', 'views/fsm_order.xml', diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index efc930d188..94272b5a05 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -53,10 +53,12 @@ def action_view_delivery(self): if len(pickings) > 1: action['domain'] = [('id', 'in', pickings.ids)] elif pickings: - action['views'] = [(self.env.ref('stock.view_picking_form').id, 'form')] + action['views'] = [(self.env.ref('stock.view_picking_form').id, + 'form')] action['res_id'] = pickings.id return action + class FSMOrderLine(models.Model): _name = 'fsm.order.line' _description = "FSM Order Lines" @@ -199,7 +201,6 @@ def _confirm_picking(self): procurement_uom = line.product_uom_id quant_uom = line.product_id.uom_id get_param = self.env['ir.config_parameter'].sudo().get_param - import pdb;pdb.set_trace() if (procurement_uom.id != quant_uom.id and get_param('stock.propagate_uom') != '1'): qty_needed = line.product_uom_id._compute_quantity( diff --git a/fieldservice_stock/security/ir.model.access.csv b/fieldservice_stock/security/ir.model.access.csv new file mode 100644 index 0000000000..0db565d3d6 --- /dev/null +++ b/fieldservice_stock/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_fsm_order_line_fsm_user,fsm.order.line.user,model_fsm_order_line,fieldservice.group_fsm_user,1,0,0,0 +access_fsm_order_line_fsm_dispatcher,fsm.order.line.dispatcher,model_fsm_order_line,fieldservice.group_fsm_dispatcher,1,1,1,1 diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 7cf0406b5e..76dc661c21 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -389,30 +389,27 @@

    Field Service - Stock

    Installation

    -

    You will first need to install:

    -
      -
    • fieldservice
    • -
    -

    Then go to Field Service > Configuration > Settings -Enable the ‘Use Odoo Stock Logistics’ option under Integrations

    +

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

    +

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

    Configuration

    To configure this module, you need to:

      -
    • Set Inventory Locations for FSM Locations and FSM Vehicles
    • -
    • Verify procurement routes
    • +
    • Go to Field Service > Master Data > Locations
    • +
    • Create or select a location and set the inventory location

    Usage

    To use this module, you need to:

      -
    • Create a new field service order
    • -
    • Under the Materials tab, add products with quantity
    • -
    • Confirm an order to create stock moves
    • -
    • Validate stock moves in the Inventory app
    • -
    • Quantities Delivered on FSM Order Line will be updated based on move
    • +
    • Create a new service order
    • +
    • Under the Inventory tab, select the warehouse and add products with quantity
    • +
    • Confirm the order to create the delivery orders
    • +
    • Validate the transfers in the Inventory app. Quantities delivered on FSM +Order Line will be updated.
    diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index 8e422a26c7..bf7e07f684 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -20,7 +20,7 @@ - + From 9125177f8a48985c8a69fc31b5edb66cc3dcaef2 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 14 Dec 2018 17:16:23 -0600 Subject: [PATCH 067/631] [IMP] fieldservice_stock --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/models/fsm_order.py | 15 +++- fieldservice_stock/models/stock.py | 6 ++ fieldservice_stock/views/fsm_order.xml | 107 ++++++++++++++++++++++++- fieldservice_stock/views/stock.xml | 18 +++++ 5 files changed, 142 insertions(+), 6 deletions(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 43f953f45c..31d548633d 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Inventory and Stock Operations for Field Services', - 'version': '11.0.0.0.2', + 'version': '11.0.0.1.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 94272b5a05..77a8670c2a 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -16,6 +16,13 @@ class FSMOrder(geo_model.GeoModel): _inherit = 'fsm.order' + @api.model + def _default_warehouse_id(self): + company = self.env.user.company_id.id + warehouse_ids = self.env['stock.warehouse'].search( + [('company_id', '=', company)], limit=1) + return warehouse_ids + line_ids = fields.One2many( 'fsm.order.line', 'order_id', string="Order Lines",) picking_ids = fields.One2many('stock.picking', 'fsm_order_id', @@ -25,6 +32,8 @@ class FSMOrder(geo_model.GeoModel): procurement_group_id = fields.Many2one( 'procurement.group', 'Procurement Group', copy=False) warehouse_id = fields.Many2one('stock.warehouse', string='Warehouse', + required=True, readonly=True, + default=_default_warehouse_id, help="Warehouse used to ship the materials") @api.depends('picking_ids') @@ -96,6 +105,9 @@ class FSMOrderLine(models.Model): move_ids = fields.One2many( 'stock.move', 'fsm_order_line_id', string='Stock Moves', readonly=True, states={'draft': [('readonly', False)]}) + route_id = fields.Many2one('stock.location.route', string='Route', + domain=[('fsm_selectable', '=', True)], + ondelete='restrict') @api.depends('move_ids', 'qty_ordered', 'qty_delivered') def _compute_state(self): @@ -158,7 +170,8 @@ def _prepare_procurement_values(self, group_id=False): 'group_id': group_id, 'fsm_order_line_id': self.id, 'date_planned': date_planned, - 'route_ids': self.order_id.warehouse_id.delivery_route_id, + 'route_ids': + self.route_id or self.order_id.warehouse_id.delivery_route_id, 'partner_dest_id': self.order_id.customer_id }) return values diff --git a/fieldservice_stock/models/stock.py b/fieldservice_stock/models/stock.py index e2ccc4f590..88995103f6 100644 --- a/fieldservice_stock/models/stock.py +++ b/fieldservice_stock/models/stock.py @@ -51,3 +51,9 @@ class StockPicking(models.Model): fsm_order_id = fields.Many2one( related="group_id.fsm_order_id", string="Field Service Order", store=True) + + +class StockLocationRoute(models.Model): + _inherit = 'stock.location.route' + + fsm_selectable = fields.Boolean(string="Field Service Order Lines") diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index bf7e07f684..6ad1bd6372 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -18,11 +18,12 @@
    - - - + + + - + @@ -34,6 +35,7 @@ }" /> + + fsm.order.form + fsm.order + +
    +
    +
    + +
    +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    +
    +
    + + + + fsm.order.tree + fsm.order + + + + + + + + + + + FSM Orders + fsm.order + form + tree,form + + + +

    + No Field Service Orders to confirm. +

    +
    +
    + diff --git a/fieldservice_stock/views/stock.xml b/fieldservice_stock/views/stock.xml index 375d38977b..9f03d5a4dd 100644 --- a/fieldservice_stock/views/stock.xml +++ b/fieldservice_stock/views/stock.xml @@ -1,6 +1,17 @@ + + stock.location.route.form + stock.location.route + + + + + + + + + + + From 0108b0e4ba4a1321f90d65756e23844a167f15e2 Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Mon, 31 Dec 2018 02:54:31 -0800 Subject: [PATCH 068/631] [IMP] fieldservice_stock [UPD] README.rst --- fieldservice_stock/README.rst | 6 +- fieldservice_stock/__manifest__.py | 2 + fieldservice_stock/models/__init__.py | 1 + fieldservice_stock/models/fsm_equipment.py | 28 +++ fieldservice_stock/models/fsm_order.py | 234 +++++++++++++++++- fieldservice_stock/models/stock.py | 9 + fieldservice_stock/readme/CONTRIBUTORS.rst | 1 + .../security/ir.model.access.csv | 2 + .../static/description/index.html | 3 +- fieldservice_stock/views/fsm_equipment.xml | 24 ++ fieldservice_stock/views/fsm_order.xml | 61 +++++ fieldservice_stock/views/stock.xml | 2 + 12 files changed, 363 insertions(+), 10 deletions(-) create mode 100644 fieldservice_stock/models/fsm_equipment.py create mode 100644 fieldservice_stock/views/fsm_equipment.xml diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 8ab3047909..152727d3ac 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -89,6 +89,7 @@ Contributors ~~~~~~~~~~~~ * Brian McMaster +* Sandip Mangukiya Other credits ~~~~~~~~~~~~~ @@ -119,10 +120,13 @@ promote its widespread use. .. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px :target: https://github.com/max3903 :alt: max3903 +.. |maintainer-smangukiya| image:: https://github.com/smangukiya.png?size=40px + :target: https://github.com/smangukiya + :alt: smangukiya Current `maintainers `__: -|maintainer-brian10048| |maintainer-wolfhall| |maintainer-max3903| +|maintainer-brian10048| |maintainer-wolfhall| |maintainer-max3903| |maintainer-smangukiya| This module is part of the `OCA/field-service `_ project on GitHub. diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 31d548633d..642b44845b 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -20,6 +20,7 @@ 'views/fsm_location.xml', 'views/fsm_order.xml', 'views/stock.xml', + 'views/fsm_equipment.xml', ], 'installable': True, 'license': 'AGPL-3', @@ -28,5 +29,6 @@ 'brian10048', 'wolfhall', 'max3903', + 'smangukiya', ], } diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index bacddd4307..0a2022e17b 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -5,4 +5,5 @@ fsm_location, fsm_order, stock, + fsm_equipment, ) diff --git a/fieldservice_stock/models/fsm_equipment.py b/fieldservice_stock/models/fsm_equipment.py new file mode 100644 index 0000000000..103790dee2 --- /dev/null +++ b/fieldservice_stock/models/fsm_equipment.py @@ -0,0 +1,28 @@ +# 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 FSMEquipment(models.Model): + _inherit = 'fsm.equipment' + _description = "FSM Equipment Inherits" + + product_id = fields.Many2one( + 'product.product', string='Product', required=True) + lot_id = fields.Many2one( + 'stock.production.lot', string='Serial #', required=True) + current_stock_location_id = fields.Many2one( + 'stock.location', string='Current Inventory Location', + compute='_compute_current_stock_loc_id') + + @api.multi + def _compute_current_stock_loc_id(self): + for equipment in self: + quants = self.env['stock.quant'].search( + [('lot_id', '=', self.lot_id.id)], order="id desc") + if quants: + equipment.current_stock_location_id = \ + quants[0].location_id.id or False + else: + equipment.current_stock_location_id = False diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 77a8670c2a..75dc76b912 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -24,7 +24,7 @@ def _default_warehouse_id(self): return warehouse_ids line_ids = fields.One2many( - 'fsm.order.line', 'order_id', string="Order Lines",) + 'fsm.order.line', 'order_id', string="Order Lines", ) picking_ids = fields.One2many('stock.picking', 'fsm_order_id', string='Transfers') delivery_count = fields.Integer(string='Delivery Orders', @@ -35,15 +35,33 @@ def _default_warehouse_id(self): required=True, readonly=True, default=_default_warehouse_id, help="Warehouse used to ship the materials") + # FSM Order return + return_ids = fields.One2many('fsm.order.return', 'order_id', + string="Return Lines") + return_count = fields.Integer(string='Return Orders', + compute='_compute_picking_ids') @api.depends('picking_ids') def _compute_picking_ids(self): for order in self: - order.delivery_count = len(order.picking_ids) + order.delivery_count = len( + [picking for picking in order.picking_ids if + picking.picking_type_id.code == 'outgoing']) + order.return_count = len( + [picking for picking in order.picking_ids if + picking.picking_type_id.code == 'incoming']) def action_confirm(self): - if self.location_id and self.line_ids and self.warehouse_id: - self.line_ids._confirm_picking() + if self.location_id and (self.line_ids or self.return_ids) and\ + self.warehouse_id: + if self.line_ids: + line_ids = self.mapped('line_ids').filtered( + lambda l: l.state == 'draft') + line_ids._confirm_picking() + if self.return_ids: + return_ids = self.mapped('return_ids').filtered( + lambda l: l.state == 'draft') + return_ids._confirm_picking() return super(FSMOrder, self).action_confirm() else: raise UserError(_('Please select the location, a warehouse and a' @@ -57,10 +75,30 @@ def action_view_delivery(self): view, if there is only one delivery order to show. ''' action = self.env.ref('stock.action_picking_tree_all').read()[0] + pickings = self.mapped('picking_ids') + delivery_ids = [picking.id for picking in pickings if + picking.picking_type_id.code == 'outgoing'] + if len(pickings) > 1: + action['domain'] = [('id', 'in', delivery_ids)] + elif pickings: + action['views'] = [(self.env.ref('stock.view_picking_form').id, + 'form')] + action['res_id'] = pickings.id + return action + @api.multi + def action_view_returns(self): + ''' + This function returns an action that display existing return orders + of given fsm order ids. It can either be a in a list or in a form + view, if there is only one return order to show. + ''' + action = self.env.ref('stock.action_picking_tree_all').read()[0] pickings = self.mapped('picking_ids') + receipt_ids = [picking.id for picking in pickings if + picking.picking_type_id.code == 'incoming'] if len(pickings) > 1: - action['domain'] = [('id', 'in', pickings.ids)] + action['domain'] = [('id', 'in', receipt_ids)] elif pickings: action['views'] = [(self.env.ref('stock.view_picking_form').id, 'form')] @@ -234,15 +272,195 @@ def _confirm_picking(self): def _get_delivered_qty(self): self.ensure_one() qty = 0.0 - for move in self.move_ids.filtered(lambda r: r.state == 'done' - and not r.scrapped): + for move in self.move_ids.filtered( + lambda r: r.state == 'done' and not r.scrapped): if move.location_dest_id.usage == "customer": if (not move.origin_returned_move_id or (move.origin_returned_move_id and move.to_refund)): qty += move.product_uom._compute_quantity( move.product_uom_qty, self.product_uom_id) elif (move.location_dest_id.usage != "customer" - and move.to_refund): + and move.to_refund): + qty -= move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id) + return qty + + +class FSMOrderReturn(models.Model): + _name = 'fsm.order.return' + _description = "FSM Order Return" + _order = 'order_id, sequence, id' + + order_id = fields.Many2one( + 'fsm.order', string="FSM Order", required=True, + ondelete='cascade', index=True, copy=False, + readonly=True, states={'draft': [('readonly', False)]}) + name = fields.Char(string='Description', required=True, + readonly=True, states={'draft': [('readonly', False)]}) + sequence = fields.Integer(string='Sequence', default=10, readonly=True, + states={'draft': [('readonly', False)]}) + product_id = fields.Many2one( + 'product.product', string="Product", + domain=[('type', '=', 'product')], ondelete='restrict', + readonly=True, states={'draft': [('readonly', False)]}) + product_uom_id = fields.Many2one( + 'product.uom', string='Unit of Measure', required=True, + readonly=True, states={'draft': [('readonly', False)]}) + qty_returned = fields.Float( + string='Quantity Returned', readonly=True, + states={'draft': [('readonly', False)]}, + digits=dp.get_precision('Product Unit of Measure')) + qty_received = fields.Float( + string='Quantity Received', readonly=True, copy=False, + digits=dp.get_precision('Product Unit of Measure')) + state = fields.Selection([ + ('draft', 'Draft'), + ('confirmed', 'Confirmed'), + ('partial', 'Partially Shipped'), + ('done', 'Done')], + string='State', compute='_compute_state', copy=False, index=True, + readonly=True, store=True) + move_ids = fields.One2many( + 'stock.move', 'fsm_order_return_line_id', string='Stock Moves', + readonly=True, states={'draft': [('readonly', False)]}) + route_id = fields.Many2one('stock.location.route', string='Route', + domain=[('fsm_return_selectable', '=', True)], + ondelete='restrict') + + @api.depends('move_ids', 'qty_returned', 'qty_received') + def _compute_state(self): + precision = self.env['decimal.precision'].precision_get( + 'Product Unit of Measure') + for line in self: + if line.move_ids and not float_is_zero(line.qty_received, + precision_digits=precision): + if float_compare(line.qty_received, line.qty_returned, + precision_digits=precision) == -1: + line.state = 'partial' + elif float_compare(line.qty_received, line.qty_returned, + precision_digits=precision) >= 0: + line.state = 'done' + elif line.move_ids: + line.state = 'confirmed' + else: + line.state = 'draft' + + @api.multi + @api.onchange('product_id') + def onchange_product_id(self): + if not self.product_id: + return {'domain': {'product_uom': []}} + + vals = {} + domain = {'product_uom': [('category_id', '=', + self.product_id.uom_id.category_id.id)]} + + if (not self.product_uom_id + or (self.product_id.uom_id.id != self.product_uom_id.id)): + vals['product_uom_id'] = self.product_id.uom_id + vals['qty_returned'] = 1.0 + + product = self.product_id.with_context( + quantity=vals.get('qty_returned') or self.qty_returned, + uom=self.product_uom_id.id, + ) + + result = {'domain': domain} + + name = product.name_get()[0][1] + if product.description_sale: + name += '\n' + product.description_sale + vals['name'] = name + + self.update(vals) + return result + + @api.multi + def _prepare_procurement_values(self, group_id=False): + self.ensure_one() + values = {} + date_planned = (self.order_id.scheduled_date_start + or self.order_id.request_early + or self.order_id.request_late + or (datetime.now() + timedelta(days=1)).strftime( + DEFAULT_SERVER_DATETIME_FORMAT)) + values.update({ + 'group_id': group_id, + 'fsm_order_return_line_id': self.id, + 'date_planned': date_planned, + 'route_ids': + self.route_id or self.order_id.warehouse_id.reception_route_id, + 'partner_dest_id': self.order_id.warehouse_id + }) + return values + + def _get_procurement_qty(self): + self.ensure_one() + qty = 0.0 + for move in self.move_ids.filtered(lambda r: r.state != 'cancel'): + if move.picking_code == 'incoming': + qty += move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id, + rounding_method='HALF-UP') + elif move.picking_code == 'outoging': + qty -= move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id, + rounding_method='HALF-UP') + return qty + + @api.multi + def _confirm_picking(self): + precision = self.env['decimal.precision'].precision_get( + 'Product Unit of Measure') + errors = [] + for line in self: + qty_procured = line._get_procurement_qty() + if float_compare(qty_procured, line.qty_returned, + precision_digits=precision) >= 0: + continue + group_id = line.order_id.procurement_group_id + if not group_id: + group_id = self.env['procurement.group'].create({ + 'name': line.order_id.name, + 'move_type': 'direct', + 'fsm_order_id': line.order_id.id, + 'partner_id': line.order_id.customer_id.id, + }) + line.order_id.procurement_group_id = group_id + values = line._prepare_procurement_values(group_id=group_id) + qty_needed = line.qty_returned - qty_procured + procurement_uom = line.product_uom_id + quant_uom = line.product_id.uom_id + get_param = self.env['ir.config_parameter'].sudo().get_param + if (procurement_uom.id != quant_uom.id + and get_param('stock.propagate_uom') != '1'): + qty_needed = line.product_uom_id._compute_quantity( + qty_needed, quant_uom, rounding_method='HALF-UP') + procurement_uom = quant_uom + try: + self.env['procurement.group'].run( + line.product_id, qty_needed, procurement_uom, + line.order_id.location_id.inventory_location, + line.name, line.order_id.name, values) + except UserError as error: + errors.append(error.name) + if errors: + raise UserError('\n'.join(errors)) + return True + + @api.multi + def _get_received_qty(self): + self.ensure_one() + qty = 0.0 + for move in self.move_ids.filtered( + lambda r: r.state == 'done' and not r.scrapped): + if move.location_dest_id.usage != "customer": + if (not move.origin_returned_move_id + or (move.origin_returned_move_id and move.to_refund)): + qty += move.product_uom._compute_quantity( + move.product_uom_qty, self.product_uom_id) + elif (move.location_dest_id.usage == "customer" + and move.to_refund): qty -= move.product_uom._compute_quantity( move.product_uom_qty, self.product_uom_id) return qty diff --git a/fieldservice_stock/models/stock.py b/fieldservice_stock/models/stock.py index 88995103f6..cec0467504 100644 --- a/fieldservice_stock/models/stock.py +++ b/fieldservice_stock/models/stock.py @@ -8,11 +8,15 @@ class StockMove(models.Model): _inherit = "stock.move" fsm_order_line_id = fields.Many2one('fsm.order.line', 'FSM Order Line') + fsm_order_return_line_id = fields.Many2one( + 'fsm.order.return', 'FSM Order Return Line') def _action_done(self): result = super(StockMove, self)._action_done() for line in result.mapped('fsm_order_line_id').sudo(): line.qty_delivered = line._get_delivered_qty() + for line in result.mapped('fsm_order_return_line_id').sudo(): + line.qty_received = line._get_received_qty() return result @api.multi @@ -42,6 +46,9 @@ def _get_stock_move_values(self, product_id, product_qty, product_uom, location_id, name, origin, values, group_id) if values.get('fsm_order_line_id', False): result['fsm_order_line_id'] = values['fsm_order_line_id'] + if values.get('fsm_order_return_line_id', False): + result['fsm_order_return_line_id'] = \ + values['fsm_order_return_line_id'] return result @@ -57,3 +64,5 @@ class StockLocationRoute(models.Model): _inherit = 'stock.location.route' fsm_selectable = fields.Boolean(string="Field Service Order Lines") + fsm_return_selectable = fields.Boolean( + string="Field Service Return Order Lines") diff --git a/fieldservice_stock/readme/CONTRIBUTORS.rst b/fieldservice_stock/readme/CONTRIBUTORS.rst index 39ef3fa3d7..a3606b15df 100644 --- a/fieldservice_stock/readme/CONTRIBUTORS.rst +++ b/fieldservice_stock/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Brian McMaster +* Sandip Mangukiya diff --git a/fieldservice_stock/security/ir.model.access.csv b/fieldservice_stock/security/ir.model.access.csv index 0db565d3d6..f7bbd49d5d 100644 --- a/fieldservice_stock/security/ir.model.access.csv +++ b/fieldservice_stock/security/ir.model.access.csv @@ -1,3 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_fsm_order_line_fsm_user,fsm.order.line.user,model_fsm_order_line,fieldservice.group_fsm_user,1,0,0,0 access_fsm_order_line_fsm_dispatcher,fsm.order.line.dispatcher,model_fsm_order_line,fieldservice.group_fsm_dispatcher,1,1,1,1 +access_fsm_order_return_fsm_user,fsm.order.return.user,model_fsm_order_return,fieldservice.group_fsm_user,1,0,0,0 +access_fsm_order_return_fsm_dispatcher,fsm.order.return.dispatcher,model_fsm_order_return,fieldservice.group_fsm_dispatcher,1,1,1,1 diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 76dc661c21..7b4547acab 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -438,6 +438,7 @@

    Authors

    Contributors

    @@ -455,7 +456,7 @@

    Maintainers

    mission is to support the collaborative development of Odoo features and promote its widespread use.

    Current maintainers:

    -

    brian10048 wolfhall max3903

    +

    brian10048 wolfhall max3903 smangukiya

    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_stock/views/fsm_equipment.xml b/fieldservice_stock/views/fsm_equipment.xml new file mode 100644 index 0000000000..64e485b287 --- /dev/null +++ b/fieldservice_stock/views/fsm_equipment.xml @@ -0,0 +1,24 @@ + + + + + fsm.equipment.form.stock + fsm.equipment + + + + + + + + + + + + + + + + + + diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index 6ad1bd6372..00fed00649 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -15,6 +15,13 @@ attrs="{'invisible': [('delivery_count', '=', 0)]}" groups="base.group_user"> +
    @@ -25,6 +32,7 @@ + @@ -51,6 +59,33 @@ + + + + + + + + + + + + +
    @@ -111,6 +146,32 @@ + + + + + + + + + + + +
    diff --git a/fieldservice_stock/views/stock.xml b/fieldservice_stock/views/stock.xml index 9f03d5a4dd..9b6636bc1a 100644 --- a/fieldservice_stock/views/stock.xml +++ b/fieldservice_stock/views/stock.xml @@ -8,6 +8,8 @@ + From 288f08fb2ca434cea2c0b1aaa8a640975a425533 Mon Sep 17 00:00:00 2001 From: Michael Allen Date: Wed, 2 Jan 2019 10:52:21 -0700 Subject: [PATCH 069/631] [IMP] fieldservice_stock [UPD] README.rst --- fieldservice_stock/README.rst | 16 +++ fieldservice_stock/data/fsm_stock_data.xml | 1 + fieldservice_stock/models/fsm_location.py | 5 +- fieldservice_stock/models/fsm_order.py | 116 +++++++++++++----- fieldservice_stock/models/stock.py | 37 +++++- fieldservice_stock/readme/CONFIGURE.rst | 16 +++ .../static/description/index.html | 16 +++ fieldservice_stock/views/fsm_location.xml | 2 +- fieldservice_stock/views/fsm_order.xml | 98 ++++++++++----- fieldservice_stock/views/stock.xml | 23 ++++ 10 files changed, 260 insertions(+), 70 deletions(-) diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 152727d3ac..7205cf40a3 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -48,6 +48,22 @@ To configure this module, you need to: * Go to Field Service > Master Data > Locations * Create or select a location and set the inventory location +* Go to Inventory > Configuration > Routes +* Select the routes that you want to use from a FSM order +* Check the box 'FSM Order Line' for outbound transfer +* Check the box 'FSM Return Line' for inbound transfer + +The route 'Receipt in 1 step' has no procurement rule so if you want items to be +returned from the service location to your warehouse, you need to create a new +procurement rule for that route: + +* Name: YourCompany: Return +* Action: Move From Another Location +* Procurement Location: WH/Stock +* Served Warehouse: YourCompany +* Source Location: Partner Locations/Customers +* Move Supply Method: Take From Stock +* Operation Type: YourCompany: Receipts Usage ===== diff --git a/fieldservice_stock/data/fsm_stock_data.xml b/fieldservice_stock/data/fsm_stock_data.xml index c74036dae3..290cd237e7 100644 --- a/fieldservice_stock/data/fsm_stock_data.xml +++ b/fieldservice_stock/data/fsm_stock_data.xml @@ -1,6 +1,7 @@ + Field view diff --git a/fieldservice_stock/models/fsm_location.py b/fieldservice_stock/models/fsm_location.py index bfe38d6d09..2ffc4aa075 100644 --- a/fieldservice_stock/models/fsm_location.py +++ b/fieldservice_stock/models/fsm_location.py @@ -8,5 +8,6 @@ class FSMLocation(geo_model.GeoModel): _inherit = 'fsm.location' - inventory_location = fields.Many2one('stock.location', - 'Inventory Location') + inventory_location_id = fields.Many2one('stock.location', + string='Inventory Location', + required=True) diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 75dc76b912..34cc5f28c5 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -12,6 +12,13 @@ from odoo.addons.base_geoengine import geo_model +STOCK_STAGES = [('draft', 'Draft'), + ('requested', 'Requested'), + ('confirmed', 'Confirmed'), + ('partial', 'Partially Shipped'), + ('done', 'Done'), + ('cancelled', 'Cancelled')] + class FSMOrder(geo_model.GeoModel): _inherit = 'fsm.order' @@ -23,14 +30,16 @@ def _default_warehouse_id(self): [('company_id', '=', company)], limit=1) return warehouse_ids - line_ids = fields.One2many( - 'fsm.order.line', 'order_id', string="Order Lines", ) + line_ids = fields.One2many('fsm.order.line', 'order_id', + string="Order Lines") picking_ids = fields.One2many('stock.picking', 'fsm_order_id', string='Transfers') delivery_count = fields.Integer(string='Delivery Orders', compute='_compute_picking_ids') procurement_group_id = fields.Many2one( 'procurement.group', 'Procurement Group', copy=False) + inventory_location_id = fields.Many2one( + related='location_id.inventory_location_id', readonly=True) warehouse_id = fields.Many2one('stock.warehouse', string='Warehouse', required=True, readonly=True, default=_default_warehouse_id, @@ -40,6 +49,9 @@ def _default_warehouse_id(self): string="Return Lines") return_count = fields.Integer(string='Return Orders', compute='_compute_picking_ids') + inventory_stage = fields.Selection(STOCK_STAGES, string='State', + default='draft', required=True, + readonly=True, store=True) @api.depends('picking_ids') def _compute_picking_ids(self): @@ -51,21 +63,63 @@ def _compute_picking_ids(self): [picking for picking in order.picking_ids if picking.picking_type_id.code == 'incoming']) - def action_confirm(self): + def action_request_inventory(self): + if self.location_id and (self.line_ids or self.return_ids) and\ + self.warehouse_id: + for line in self.line_ids: + if line.state == 'draft': + line.state = 'requested' + line.qty_ordered = line.qty_requested + for line in self.return_ids: + if line.state == 'draft': + line.state = 'requested' + line.qty_ordered = line.qty_requested + self.inventory_stage = 'requested' + else: + raise UserError( + _('Please select the location, a warehouse and a product.')) + + def action_confirm_inventory(self): if self.location_id and (self.line_ids or self.return_ids) and\ self.warehouse_id: if self.line_ids: line_ids = self.mapped('line_ids').filtered( - lambda l: l.state == 'draft') + lambda l: l.state == 'requested') line_ids._confirm_picking() if self.return_ids: return_ids = self.mapped('return_ids').filtered( - lambda l: l.state == 'draft') + lambda l: l.state == 'requested') return_ids._confirm_picking() - return super(FSMOrder, self).action_confirm() + self.inventory_stage = 'confirmed' else: - raise UserError(_('Please select the location, a warehouse and a' - ' product.')) + raise UserError( + _('Please select the location, a warehouse and a product.')) + + def action_cancel_inventory(self): + if self.line_ids: + line_ids = self.mapped('line_ids').filtered( + lambda l: l.state == 'requested') + for line in line_ids: + line.state = 'cancelled' + if self.return_ids: + return_ids = self.mapped('return_ids').filtered( + lambda l: l.state == 'requested') + for line in return_ids: + line.state = 'cancelled' + self.inventory_stage = 'cancelled' + + def action_reset_inventory(self): + if self.line_ids: + line_ids = self.mapped('line_ids').filtered( + lambda l: l.state == 'cancelled') + for line in line_ids: + line.state = 'draft' + if self.return_ids: + return_ids = self.mapped('return_ids').filtered( + lambda l: l.state == 'cancelled') + for line in return_ids: + line.state = 'draft' + self.inventory_stage = 'draft' @api.multi def action_view_delivery(self): @@ -126,20 +180,20 @@ class FSMOrderLine(models.Model): product_uom_id = fields.Many2one( 'product.uom', string='Unit of Measure', required=True, readonly=True, states={'draft': [('readonly', False)]}) - qty_ordered = fields.Float( + qty_requested = fields.Float( string='Quantity Requested', readonly=True, states={'draft': [('readonly', False)]}, digits=dp.get_precision('Product Unit of Measure')) + qty_ordered = fields.Float( + string='Quantity Ordered', readonly=True, + states={'requested': [('readonly', False)]}, + digits=dp.get_precision('Product Unit of Measure')) qty_delivered = fields.Float( string='Quantity Delivered', readonly=True, copy=False, digits=dp.get_precision('Product Unit of Measure')) - state = fields.Selection([ - ('draft', 'Draft'), - ('confirmed', 'Confirmed'), - ('partial', 'Partially Shipped'), - ('done', 'Done')], - string='State', compute='_compute_state', copy=False, index=True, - readonly=True, store=True) + state = fields.Selection(STOCK_STAGES, string='State', required=True, + compute='_compute_state', default='draft', + copy=False, index=True, readonly=True, store=True) move_ids = fields.One2many( 'stock.move', 'fsm_order_line_id', string='Stock Moves', readonly=True, states={'draft': [('readonly', False)]}) @@ -163,7 +217,10 @@ def _compute_state(self): elif line.move_ids: line.state = 'confirmed' else: - line.state = 'draft' + if line.state == 'requested': + break + else: + line.state = 'draft' @api.multi @api.onchange('product_id') @@ -260,7 +317,7 @@ def _confirm_picking(self): try: self.env['procurement.group'].run( line.product_id, qty_needed, procurement_uom, - line.order_id.location_id.inventory_location, + line.order_id.inventory_location_id, line.name, line.order_id.name, values) except UserError as error: errors.append(error.name) @@ -306,20 +363,20 @@ class FSMOrderReturn(models.Model): product_uom_id = fields.Many2one( 'product.uom', string='Unit of Measure', required=True, readonly=True, states={'draft': [('readonly', False)]}) + qty_requested = fields.Float( + string='Quantity Requested', readonly=True, + states={'draft': [('readonly', False)]}, + digits=dp.get_precision('Product Unit of Measure')) qty_returned = fields.Float( string='Quantity Returned', readonly=True, - states={'draft': [('readonly', False)]}, + states={'requested': [('readonly', False)]}, digits=dp.get_precision('Product Unit of Measure')) qty_received = fields.Float( string='Quantity Received', readonly=True, copy=False, digits=dp.get_precision('Product Unit of Measure')) - state = fields.Selection([ - ('draft', 'Draft'), - ('confirmed', 'Confirmed'), - ('partial', 'Partially Shipped'), - ('done', 'Done')], - string='State', compute='_compute_state', copy=False, index=True, - readonly=True, store=True) + state = fields.Selection(STOCK_STAGES, string='State', required=True, + compute='_compute_state', default='draft', + copy=False, index=True, readonly=True, store=True) move_ids = fields.One2many( 'stock.move', 'fsm_order_return_line_id', string='Stock Moves', readonly=True, states={'draft': [('readonly', False)]}) @@ -364,14 +421,11 @@ def onchange_product_id(self): quantity=vals.get('qty_returned') or self.qty_returned, uom=self.product_uom_id.id, ) - result = {'domain': domain} - name = product.name_get()[0][1] if product.description_sale: name += '\n' + product.description_sale vals['name'] = name - self.update(vals) return result @@ -402,7 +456,7 @@ def _get_procurement_qty(self): qty += move.product_uom._compute_quantity( move.product_uom_qty, self.product_uom_id, rounding_method='HALF-UP') - elif move.picking_code == 'outoging': + elif move.picking_code == 'outgoing': qty -= move.product_uom._compute_quantity( move.product_uom_qty, self.product_uom_id, rounding_method='HALF-UP') @@ -440,7 +494,7 @@ def _confirm_picking(self): try: self.env['procurement.group'].run( line.product_id, qty_needed, procurement_uom, - line.order_id.location_id.inventory_location, + line.order_id.warehouse_id.lot_stock_id, line.name, line.order_id.name, values) except UserError as error: errors.append(error.name) diff --git a/fieldservice_stock/models/stock.py b/fieldservice_stock/models/stock.py index cec0467504..0707722424 100644 --- a/fieldservice_stock/models/stock.py +++ b/fieldservice_stock/models/stock.py @@ -64,5 +64,38 @@ class StockLocationRoute(models.Model): _inherit = 'stock.location.route' fsm_selectable = fields.Boolean(string="Field Service Order Lines") - fsm_return_selectable = fields.Boolean( - string="Field Service Return Order Lines") + fsm_return_selectable = fields.Boolean(string="Field Service Return Lines") + + +class StockPickingType(models.Model): + _inherit = 'stock.picking.type' + + count_fsm_requests = fields.Integer(compute='_compute_fsm_request') + + def _compute_fsm_request(self): + for ptype in self: + if ptype.code == 'outgoing': + res = self.env['fsm.order'].search([('warehouse_id', + '=', + ptype.warehouse_id.id), + ('inventory_stage', '=', + 'requested')]) + for order in res: + for line in order.line_ids: + if line.state == 'requested': + ptype.count_fsm_requests += 1 + break + if ptype.code == 'incoming': + res = self.env['fsm.order'].search([('warehouse_id', + '=', + ptype.warehouse_id.id), + ('inventory_stage', '=', + 'requested')]) + for order in res: + for line in order.return_ids: + if line.state == 'requested': + ptype.count_fsm_requests += 1 + break + + def get_action_fsm_requests(self): + return self._get_action('fieldservice_stock.action_stock_fsm_order') diff --git a/fieldservice_stock/readme/CONFIGURE.rst b/fieldservice_stock/readme/CONFIGURE.rst index 59e8366bd3..60a1a510d9 100644 --- a/fieldservice_stock/readme/CONFIGURE.rst +++ b/fieldservice_stock/readme/CONFIGURE.rst @@ -2,3 +2,19 @@ To configure this module, you need to: * Go to Field Service > Master Data > Locations * Create or select a location and set the inventory location +* Go to Inventory > Configuration > Routes +* Select the routes that you want to use from a FSM order +* Check the box 'FSM Order Line' for outbound transfer +* Check the box 'FSM Return Line' for inbound transfer + +The route 'Receipt in 1 step' has no procurement rule so if you want items to be +returned from the service location to your warehouse, you need to create a new +procurement rule for that route: + +* Name: YourCompany: Return +* Action: Move From Another Location +* Procurement Location: WH/Stock +* Served Warehouse: YourCompany +* Source Location: Partner Locations/Customers +* Move Supply Method: Take From Stock +* Operation Type: YourCompany: Receipts diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 7b4547acab..c8e6fcf34b 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -399,6 +399,22 @@

    Configuration

    • Go to Field Service > Master Data > Locations
    • Create or select a location and set the inventory location
    • +
    • Go to Inventory > Configuration > Routes
    • +
    • Select the routes that you want to use from a FSM order
    • +
    • Check the box ‘FSM Order Line’ for outbound transfer
    • +
    • Check the box ‘FSM Return Line’ for inbound transfer
    • +
    +

    The route ‘Receipt in 1 step’ has no procurement rule so if you want items to be +returned from the service location to your warehouse, you need to create a new +procurement rule for that route:

    +
      +
    • Name: YourCompany: Return
    • +
    • Action: Move From Another Location
    • +
    • Procurement Location: WH/Stock
    • +
    • Served Warehouse: YourCompany
    • +
    • Source Location: Partner Locations/Customers
    • +
    • Move Supply Method: Take From Stock
    • +
    • Operation Type: YourCompany: Receipts
    diff --git a/fieldservice_stock/views/fsm_location.xml b/fieldservice_stock/views/fsm_location.xml index a255bd9bcb..658e2758bf 100644 --- a/fieldservice_stock/views/fsm_location.xml +++ b/fieldservice_stock/views/fsm_location.xml @@ -6,7 +6,7 @@ - diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index 00fed00649..750ef3e3e4 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -13,7 +13,7 @@ class="oe_stat_button" icon="fa-truck" attrs="{'invisible': [('delivery_count', '=', 0)]}" groups="base.group_user"> - +
    +
    +
    - - - - + + [('stage_id', 'in', + (%(fieldservice.fsm_stage_new)d, + %(fieldservice_isp_flow.fsm_stage_confirmed)d, + %(fieldservice_isp_flow.fsm_stage_requested)d, + %(fieldservice_isp_flow.fsm_stage_assigned)d))] + + + + [('stage_id', 'in', + (%(fieldservice_isp_flow.fsm_stage_scheduled)d, + %(fieldservice_isp_flow.fsm_stage_enroute)d, + %(fieldservice_isp_flow.fsm_stage_started)d, + %(fieldservice.fsm_stage_completed)d))] + +
    +
    + + + fsm.order.tree + fsm.order + + + + stage_id in ( + %(fieldservice.fsm_stage_new)d, + %(fieldservice_isp_flow.fsm_stage_confirmed)d, + %(fieldservice_isp_flow.fsm_stage_requested)d, + %(fieldservice_isp_flow.fsm_stage_assigned)d) + + stage_id in ( + %(fieldservice_isp_flow.fsm_stage_scheduled)d, + %(fieldservice_isp_flow.fsm_stage_enroute)d, + %(fieldservice_isp_flow.fsm_stage_started)d, + %(fieldservice.fsm_stage_completed)d) + + + + + + + + fsm.order.search + fsm.order + + + + + + + + + + + + + + + +
    From c8335a13b0d253ecd81d8e36d285eb6fefc2e569 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 9 Oct 2019 09:45:52 -0500 Subject: [PATCH 122/631] [FIX] fieldservice_isp_flow: Add maintainers --- fieldservice_isp_flow/__init__.py | 2 +- fieldservice_isp_flow/__manifest__.py | 7 ++++--- fieldservice_isp_flow/models/__init__.py | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/fieldservice_isp_flow/__init__.py b/fieldservice_isp_flow/__init__.py index 9a7e03eded..0650744f6b 100644 --- a/fieldservice_isp_flow/__init__.py +++ b/fieldservice_isp_flow/__init__.py @@ -1 +1 @@ -from . import models \ No newline at end of file +from . import models diff --git a/fieldservice_isp_flow/__manifest__.py b/fieldservice_isp_flow/__manifest__.py index a1ec087293..60e7abfbca 100644 --- a/fieldservice_isp_flow/__manifest__.py +++ b/fieldservice_isp_flow/__manifest__.py @@ -4,11 +4,11 @@ { 'name': 'Field Service - Flow for ISP', 'summary': 'FSM Stages for Internet Service Providers', - 'version': '12.0.1.2.0', + 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': - 'Open Source Integrators,' - ' Akretion, Odoo Community Association (OCA)', + 'Open Source Integrators, ' + 'Akretion, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', 'depends': [ 'fieldservice', @@ -20,4 +20,5 @@ 'application': False, 'license': 'AGPL-3', 'development_status': 'Beta', + 'maintainers': ['osi-scampbell'], } diff --git a/fieldservice_isp_flow/models/__init__.py b/fieldservice_isp_flow/models/__init__.py index f10b49a918..ed384d514e 100644 --- a/fieldservice_isp_flow/models/__init__.py +++ b/fieldservice_isp_flow/models/__init__.py @@ -1 +1 @@ -from . import fsm_order \ No newline at end of file +from . import fsm_order From 387dcc13299790364b599d38c48f4957e03eb4a6 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Tue, 26 Nov 2019 16:59:14 -0500 Subject: [PATCH 123/631] [IMP] fieldservice_account: Simplify module - This change removes most of the invoicing logic from fieldservice_account and puts it into its own module --- fieldservice_account_analytic/README.rst | 121 +++++ fieldservice_account_analytic/__init__.py | 4 + fieldservice_account_analytic/__manifest__.py | 25 + .../data/ir_rule.xml | 28 ++ .../models/account_invoice_line.py | 21 + .../models/analytic_account.py | 28 ++ .../models/fsm_location.py | 11 + .../readme/CONFIGURE.rst | 4 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/CREDITS.rst | 3 + .../readme/DESCRIPTION.rst | 2 + .../readme/INSTALL.rst | 1 + .../readme/USAGE.rst | 1 + .../security/ir.model.access.csv | 5 + .../static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 460 ++++++++++++++++++ .../views/fsm_location.xml | 20 + 17 files changed, 737 insertions(+) create mode 100644 fieldservice_account_analytic/README.rst create mode 100644 fieldservice_account_analytic/__init__.py create mode 100644 fieldservice_account_analytic/__manifest__.py create mode 100644 fieldservice_account_analytic/data/ir_rule.xml create mode 100644 fieldservice_account_analytic/models/account_invoice_line.py create mode 100644 fieldservice_account_analytic/models/analytic_account.py create mode 100644 fieldservice_account_analytic/models/fsm_location.py create mode 100644 fieldservice_account_analytic/readme/CONFIGURE.rst create mode 100644 fieldservice_account_analytic/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_account_analytic/readme/CREDITS.rst create mode 100644 fieldservice_account_analytic/readme/DESCRIPTION.rst create mode 100644 fieldservice_account_analytic/readme/INSTALL.rst create mode 100644 fieldservice_account_analytic/readme/USAGE.rst create mode 100644 fieldservice_account_analytic/security/ir.model.access.csv create mode 100644 fieldservice_account_analytic/static/description/icon.png create mode 100644 fieldservice_account_analytic/static/description/index.html create mode 100644 fieldservice_account_analytic/views/fsm_location.xml diff --git a/fieldservice_account_analytic/README.rst b/fieldservice_account_analytic/README.rst new file mode 100644 index 0000000000..278e295c55 --- /dev/null +++ b/fieldservice_account_analytic/README.rst @@ -0,0 +1,121 @@ +========================== +Field Service - Accounting +========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/12.0/fieldservice_account + :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-12-0/field-service-12-0-fieldservice_account + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the ability to track employee time and contractor +costs for Field Service Orders. It also adds functionality to create +a customer invoice and a vendor bill when a Field Service Order is +completed. + +**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 +===== + +To use the module: + +On a field service order, open the "Accounting" tab. Depending on +whether the logged in user or an employee or not, they will see +either a place to enter timesheet records or contractor costs. + +The total cost of the order is calculated based on the entries in +the employee timesheet entries and contractor costs. + +When an order is completed, a customer invoice will be generated for +the employee time and the contractor costs. A vendor bill will be +created for the contractor costs. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* Michael Allen +* Serpent Consulting Services Pvt. Ltd. + +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 + +Current `maintainer `__: + +|maintainer-osimallen| + +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..66ca882fcc --- /dev/null +++ b/fieldservice_account_analytic/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py new file mode 100644 index 0000000000..88cbae6efc --- /dev/null +++ b/fieldservice_account_analytic/__manifest__.py @@ -0,0 +1,25 @@ +# 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': '12.0.2.0.1', + 'category': 'Field Service', + 'author': 'Open Source Integrators, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/field-service', + 'depends': [ + 'fieldservice_account', + 'analytic', + 'product', + ], + 'data': [ + 'data/ir_rule.xml', + 'security/ir.model.access.csv', + 'views/fsm_location.xml', + ], + 'license': 'AGPL-3', + 'development_status': 'Beta', + 'maintainers': ['osimallen'], +} diff --git a/fieldservice_account_analytic/data/ir_rule.xml b/fieldservice_account_analytic/data/ir_rule.xml new file mode 100644 index 0000000000..622bca4ee7 --- /dev/null +++ b/fieldservice_account_analytic/data/ir_rule.xml @@ -0,0 +1,28 @@ + + + + + account.analytic.line.fsm.manager + + + [(1, '=', 1)] + + + + + + + + + account.analytic.line.fsm.dispatcher + + + [(1, '=', 1)] + + + + + + + + diff --git a/fieldservice_account_analytic/models/account_invoice_line.py b/fieldservice_account_analytic/models/account_invoice_line.py new file mode 100644 index 0000000000..ca90dab2b1 --- /dev/null +++ b/fieldservice_account_analytic/models/account_invoice_line.py @@ -0,0 +1,21 @@ +# 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 AccountInvoiceLine(models.Model): + _inherit = "account.invoice.line" + + @api.model + def create(self, vals): + order = self.env['fsm.order'].browse(vals.get('fsm_order_id')) + if order: + if order.location_id.analytic_account_id: + vals['account_analytic_id'] = order.location_id.\ + analytic_account_id.id + else: + raise ValidationError(_("No analytic account " + "set on the order's Location.")) + return super(AccountInvoiceLine, self).create(vals) diff --git a/fieldservice_account_analytic/models/analytic_account.py b/fieldservice_account_analytic/models/analytic_account.py new file mode 100644 index 0000000000..62bb9c12a7 --- /dev/null +++ b/fieldservice_account_analytic/models/analytic_account.py @@ -0,0 +1,28 @@ +# 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 + def create(self, vals): + order = self.env['fsm.order'].browse(vals.get('fsm_order_id')) + if order: + if order.location_id.analytic_account_id: + vals['account_id'] = order.location_id.analytic_account_id.id + else: + raise ValidationError(_("No analytic account set " + "on the order's Location.")) + return super(AccountAnalyticLine, self).create(vals) + + @api.onchange('product_id') + def onchange_product_id(self): + if self.product_id: + self.name = self.product_id.name diff --git a/fieldservice_account_analytic/models/fsm_location.py b/fieldservice_account_analytic/models/fsm_location.py new file mode 100644 index 0000000000..07d4f5c450 --- /dev/null +++ b/fieldservice_account_analytic/models/fsm_location.py @@ -0,0 +1,11 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMLocation(models.Model): + _inherit = 'fsm.location' + + analytic_account_id = fields.Many2one('account.analytic.account', + string='Analytic Account') diff --git a/fieldservice_account_analytic/readme/CONFIGURE.rst b/fieldservice_account_analytic/readme/CONFIGURE.rst new file mode 100644 index 0000000000..ecc5d5f7a7 --- /dev/null +++ b/fieldservice_account_analytic/readme/CONFIGURE.rst @@ -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.rst b/fieldservice_account_analytic/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..e9143c46f2 --- /dev/null +++ b/fieldservice_account_analytic/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Michael Allen +* Serpent Consulting Services Pvt. Ltd. +* Brian McMaster diff --git a/fieldservice_account_analytic/readme/CREDITS.rst b/fieldservice_account_analytic/readme/CREDITS.rst new file mode 100644 index 0000000000..0eff0acf4e --- /dev/null +++ b/fieldservice_account_analytic/readme/CREDITS.rst @@ -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.rst b/fieldservice_account_analytic/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..67dffec1b1 --- /dev/null +++ b/fieldservice_account_analytic/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module adds the ability to track your analytic accounts on field +service orders. diff --git a/fieldservice_account_analytic/readme/INSTALL.rst b/fieldservice_account_analytic/readme/INSTALL.rst new file mode 100644 index 0000000000..54fea7becb --- /dev/null +++ b/fieldservice_account_analytic/readme/INSTALL.rst @@ -0,0 +1 @@ +No special installation instructions diff --git a/fieldservice_account_analytic/readme/USAGE.rst b/fieldservice_account_analytic/readme/USAGE.rst new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/fieldservice_account_analytic/readme/USAGE.rst @@ -0,0 +1 @@ + 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..07c8b38ef7 --- /dev/null +++ b/fieldservice_account_analytic/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_analytic_line_fsm_manager,account.analytic.line.manager,model_account_analytic_line,fieldservice.group_fsm_manager,1,1,1,1 +access_account_analytic_line_fsm_dispatcher,account.analytic.line.dispatcher,model_account_analytic_line,fieldservice.group_fsm_dispatcher,1,1,1,0 +access_analytic_account_fsm_manager,account.analytic.account.manager,analytic.model_account_analytic_account,fieldservice.group_fsm_manager,1,1,1,1 +access_analytic_account_fsm_dispatcher,account.analytic.account.dispatcher,analytic.model_account_analytic_account,fieldservice.group_fsm_dispatcher,1,1,1,0 diff --git a/fieldservice_account_analytic/static/description/icon.png b/fieldservice_account_analytic/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 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 literal 0 HcmV?d00001 diff --git a/fieldservice_account_analytic/static/description/index.html b/fieldservice_account_analytic/static/description/index.html new file mode 100644 index 0000000000..be45db7518 --- /dev/null +++ b/fieldservice_account_analytic/static/description/index.html @@ -0,0 +1,460 @@ + + + + + + +Field Service - Accounting + + + +
    +

    Field Service - Accounting

    + + +

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

    +

    This module adds the ability to track employee time and contractor +costs for Field Service Orders. It also adds functionality to create +a customer invoice and a vendor bill when a Field Service Order is +completed.

    +

    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

    +

    To use the module:

    +

    On a field service order, open the “Accounting” tab. Depending on +whether the logged in user or an employee or not, they will see +either a place to enter timesheet records or contractor costs.

    +

    The total cost of the order is calculated based on the entries in +the employee timesheet entries and contractor costs.

    +

    When an order is completed, a customer invoice will be generated for +the employee time and the contractor costs. A vendor bill will be +created for the contractor costs.

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Other credits

    +

    The development of this module has been financially supported by:

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

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

    +

    Current maintainer:

    +

    osimallen

    +

    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/views/fsm_location.xml b/fieldservice_account_analytic/views/fsm_location.xml new file mode 100644 index 0000000000..80477e2838 --- /dev/null +++ b/fieldservice_account_analytic/views/fsm_location.xml @@ -0,0 +1,20 @@ + + + + + fsm.location.form.analytic + fsm.location + + + + + + + + + + + + + From 7381a2c94b7e4bd096de4b0db638eadd2038b3b2 Mon Sep 17 00:00:00 2001 From: hparfr Date: Wed, 27 Nov 2019 15:30:48 +0100 Subject: [PATCH 124/631] Clean up customer_id (billing), cost and change link between account_invoice* and fsm_order --- fieldservice_account_analytic/__init__.py | 1 + fieldservice_account_analytic/__manifest__.py | 8 +++ .../demo/fsm_location.xml | 20 ++++++ .../migrations/12.0.2.0.0/post-migration.py | 10 +++ .../models/fsm_location.py | 10 ++- .../models/fsm_location_person.py | 13 ++++ .../models/fsm_order.py | 47 ++++++++++++++ .../readme/DESCRIPTION.rst | 2 + .../report/fsm_order_report_template.xml | 16 +++++ .../views/fsm_location.xml | 46 +++++++++++--- .../views/fsm_order.xml | 62 +++++++++++++++++++ .../views/fsm_person.xml | 26 ++++++++ .../views/fsm_route.xml | 14 +++++ .../wizard/__init__.py | 1 + .../wizard/fsm_wizard.py | 13 ++++ 15 files changed, 281 insertions(+), 8 deletions(-) create mode 100644 fieldservice_account_analytic/demo/fsm_location.xml create mode 100644 fieldservice_account_analytic/migrations/12.0.2.0.0/post-migration.py create mode 100644 fieldservice_account_analytic/models/fsm_location_person.py create mode 100644 fieldservice_account_analytic/models/fsm_order.py create mode 100644 fieldservice_account_analytic/report/fsm_order_report_template.xml create mode 100644 fieldservice_account_analytic/views/fsm_order.xml create mode 100644 fieldservice_account_analytic/views/fsm_person.xml create mode 100644 fieldservice_account_analytic/views/fsm_route.xml create mode 100644 fieldservice_account_analytic/wizard/__init__.py create mode 100644 fieldservice_account_analytic/wizard/fsm_wizard.py diff --git a/fieldservice_account_analytic/__init__.py b/fieldservice_account_analytic/__init__.py index 66ca882fcc..f272a247d4 100644 --- a/fieldservice_account_analytic/__init__.py +++ b/fieldservice_account_analytic/__init__.py @@ -2,3 +2,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models +from . import wizard \ No newline at end of file diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index 88cbae6efc..4d93f31191 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -17,8 +17,16 @@ 'data': [ 'data/ir_rule.xml', 'security/ir.model.access.csv', + 'report/fsm_order_report_template.xml', 'views/fsm_location.xml', + 'views/fsm_order.xml', + 'views/fsm_person.xml', + 'views/fsm_route.xml', ], + 'demo': [ + 'demo/fsm_location.xml', + ], + 'pre_init_hook': 'pre_init_hook', 'license': 'AGPL-3', 'development_status': 'Beta', 'maintainers': ['osimallen'], diff --git a/fieldservice_account_analytic/demo/fsm_location.xml b/fieldservice_account_analytic/demo/fsm_location.xml new file mode 100644 index 0000000000..fc3a0e6201 --- /dev/null +++ b/fieldservice_account_analytic/demo/fsm_location.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/fieldservice_account_analytic/migrations/12.0.2.0.0/post-migration.py b/fieldservice_account_analytic/migrations/12.0.2.0.0/post-migration.py new file mode 100644 index 0000000000..7218f7ce5e --- /dev/null +++ b/fieldservice_account_analytic/migrations/12.0.2.0.0/post-migration.py @@ -0,0 +1,10 @@ +# Copyright (C) 2019, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def migrate(env, version): + if not version: + return + + env.execute("UPDATE fsm_order SET bill_to = 'location' " + "WHERE bill_to IS NULL;") diff --git a/fieldservice_account_analytic/models/fsm_location.py b/fieldservice_account_analytic/models/fsm_location.py index 07d4f5c450..92611bcbc0 100644 --- a/fieldservice_account_analytic/models/fsm_location.py +++ b/fieldservice_account_analytic/models/fsm_location.py @@ -1,7 +1,7 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import fields, models, api class FSMLocation(models.Model): @@ -9,3 +9,11 @@ class FSMLocation(models.Model): analytic_account_id = fields.Many2one('account.analytic.account', string='Analytic Account') + + customer_id = fields.Many2one( + 'res.partner', string='Billed Customer', required=True, + ondelete='restrict', auto_join=True, track_visibility='onchange') + + @api.onchange('fsm_parent_id') + def _onchange_fsm_parent_id_account(self): + self.customer_id = self.fsm_parent_id.customer_id or False diff --git a/fieldservice_account_analytic/models/fsm_location_person.py b/fieldservice_account_analytic/models/fsm_location_person.py new file mode 100644 index 0000000000..d6e3a1f2e1 --- /dev/null +++ b/fieldservice_account_analytic/models/fsm_location_person.py @@ -0,0 +1,13 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMLocationPerson(models.Model): + _inherit = 'fsm.location.person' + + customer_id = fields.Many2one('res.partner', string='Billed Customer', + required=True, ondelete='restrict', + auto_join=True, + track_visibility='onchange') diff --git a/fieldservice_account_analytic/models/fsm_order.py b/fieldservice_account_analytic/models/fsm_order.py new file mode 100644 index 0000000000..d88ac6091a --- /dev/null +++ b/fieldservice_account_analytic/models/fsm_order.py @@ -0,0 +1,47 @@ +# 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', + string='Total Cost') + bill_to = fields.Selection([('location', 'Bill Location'), + ('contact', 'Bill Contact')], + string="Bill to", + required=True, + default="location") + customer_id = fields.Many2one('res.partner', string='Contact', + domain=[('customer', '=', True)], + change_default=True, + index=True, + track_visibility='always') + + def _compute_total_cost(self): + """ To be overridden as needed from other modules """ + for order in self: + order.total_cost = 0.0 + + @api.onchange('location_id') + def _onchange_location_id_customer_account(self): + if self.location_id: + return {'domain': {'customer_id': [('service_location_id', '=', + self.location_id.name)]}} + else: + return {'domain': {'customer_id': [('id', '!=', None)]}} + + @api.onchange('customer_id') + def _onchange_customer_id_location(self): + if self.customer_id: + self.location_id = self.customer_id.service_location_id + + @api.multi + def write(self, vals): + res = super(FSMOrder, self).write(vals) + for order in self: + if 'customer_id' not in vals and order.customer_id is False: + order.customer_id = order.location_id.customer_id.id + return res diff --git a/fieldservice_account_analytic/readme/DESCRIPTION.rst b/fieldservice_account_analytic/readme/DESCRIPTION.rst index 67dffec1b1..2941a900e3 100644 --- a/fieldservice_account_analytic/readme/DESCRIPTION.rst +++ b/fieldservice_account_analytic/readme/DESCRIPTION.rst @@ -1,2 +1,4 @@ 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/report/fsm_order_report_template.xml b/fieldservice_account_analytic/report/fsm_order_report_template.xml new file mode 100644 index 0000000000..e00d75f2c7 --- /dev/null +++ b/fieldservice_account_analytic/report/fsm_order_report_template.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/fieldservice_account_analytic/views/fsm_location.xml b/fieldservice_account_analytic/views/fsm_location.xml index 80477e2838..3a5e23cdcf 100644 --- a/fieldservice_account_analytic/views/fsm_location.xml +++ b/fieldservice_account_analytic/views/fsm_location.xml @@ -1,19 +1,51 @@ + + + fsm.location.tree.accounting + fsm.location + + + + + + + + + - fsm.location.form.analytic + 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..db0ccee063 --- /dev/null +++ b/fieldservice_account_analytic/views/fsm_order.xml @@ -0,0 +1,62 @@ + + + + fsm.order.form.account + fsm.order + + + + + + + + + + + + + + + + + fsm.order.tree + fsm.order + + + + + + + + + + + fsm.order.kanban + fsm.order + + + + + + +
    + + + +
    +
    +
    +
    + + + Orders + fsm.order + + + + + + + + +
    diff --git a/fieldservice_account_analytic/views/fsm_person.xml b/fieldservice_account_analytic/views/fsm_person.xml new file mode 100644 index 0000000000..1e8581675e --- /dev/null +++ b/fieldservice_account_analytic/views/fsm_person.xml @@ -0,0 +1,26 @@ + + + + fsm.person.form + fsm.person + + + + + + + + + + + fsm.location.person.form + fsm.location.person + + + + + + + + + diff --git a/fieldservice_account_analytic/views/fsm_route.xml b/fieldservice_account_analytic/views/fsm_route.xml new file mode 100644 index 0000000000..4f1df4b04b --- /dev/null +++ b/fieldservice_account_analytic/views/fsm_route.xml @@ -0,0 +1,14 @@ + + + + fsm.route.form + fsm.route + + + + + + + + + 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..a3050f737d --- /dev/null +++ b/fieldservice_account_analytic/wizard/fsm_wizard.py @@ -0,0 +1,13 @@ +# 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 + res['owner_id'] = partner.id + return res From cae4f72706abd011617043cb9311ddad16c1d1e2 Mon Sep 17 00:00:00 2001 From: hparfr Date: Wed, 27 Nov 2019 15:31:46 +0100 Subject: [PATCH 125/631] add missing files --- fieldservice_account_analytic/models/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 fieldservice_account_analytic/models/__init__.py diff --git a/fieldservice_account_analytic/models/__init__.py b/fieldservice_account_analytic/models/__init__.py new file mode 100644 index 0000000000..5c0842d55d --- /dev/null +++ b/fieldservice_account_analytic/models/__init__.py @@ -0,0 +1,10 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + account_invoice, + analytic_account, + fsm_location, + fsm_location_person, + fsm_order, + fsm_person, +) From 85a08526f0f9b5a21e0c0a7c43a9e626e292a202 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Mon, 2 Dec 2019 17:32:47 -0500 Subject: [PATCH 126/631] [FIX] fieldservice_account: tests and travis --- fieldservice_account_analytic/__init__.py | 3 +- fieldservice_account_analytic/__manifest__.py | 1 - fieldservice_account_analytic/init_hook.py | 8 +++++ .../models/__init__.py | 3 +- .../tests/__init__.py | 4 +++ .../tests/test_fsm_account_wizard.py | 30 +++++++++++++++++++ .../views/fsm_person.xml | 26 ---------------- 7 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 fieldservice_account_analytic/init_hook.py create mode 100644 fieldservice_account_analytic/tests/__init__.py create mode 100644 fieldservice_account_analytic/tests/test_fsm_account_wizard.py delete mode 100644 fieldservice_account_analytic/views/fsm_person.xml diff --git a/fieldservice_account_analytic/__init__.py b/fieldservice_account_analytic/__init__.py index f272a247d4..a60aec2546 100644 --- a/fieldservice_account_analytic/__init__.py +++ b/fieldservice_account_analytic/__init__.py @@ -2,4 +2,5 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models -from . import wizard \ No newline at end of file +from . import wizard +from .init_hook import pre_init_hook diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index 4d93f31191..5b98148f4f 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -20,7 +20,6 @@ 'report/fsm_order_report_template.xml', 'views/fsm_location.xml', 'views/fsm_order.xml', - 'views/fsm_person.xml', 'views/fsm_route.xml', ], 'demo': [ diff --git a/fieldservice_account_analytic/init_hook.py b/fieldservice_account_analytic/init_hook.py new file mode 100644 index 0000000000..730d91faac --- /dev/null +++ b/fieldservice_account_analytic/init_hook.py @@ -0,0 +1,8 @@ +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def pre_init_hook(cr): + cr.execute("""ALTER TABLE "fsm_location" ADD "customer_id" INT;""") + 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 index 5c0842d55d..173f04e574 100644 --- a/fieldservice_account_analytic/models/__init__.py +++ b/fieldservice_account_analytic/models/__init__.py @@ -1,10 +1,9 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ( - account_invoice, + account_invoice_line, analytic_account, fsm_location, fsm_location_person, fsm_order, - fsm_person, ) diff --git a/fieldservice_account_analytic/tests/__init__.py b/fieldservice_account_analytic/tests/__init__.py new file mode 100644 index 0000000000..3eb82c6555 --- /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_wizard diff --git a/fieldservice_account_analytic/tests/test_fsm_account_wizard.py b/fieldservice_account_analytic/tests/test_fsm_account_wizard.py new file mode 100644 index 0000000000..5a3eaf84ae --- /dev/null +++ b/fieldservice_account_analytic/tests/test_fsm_account_wizard.py @@ -0,0 +1,30 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from odoo.addons.fieldservice_account.tests.test_fsm_account import ( + FSMAccountCase +) + + +class FSMAccountCase(FSMAccountCase): + + def setUp(self): + super(FSMAccountCase, self).setUp() + + def test_convert_contact_to_fsm_location(self): + """ + Test converting a contact to a location to make sure the customer_id + and owner_id get set correctly + :return: + """ + self.Wizard.action_convert_location(self.test_loc_partner2) + + # check if there is a new FSM Location with the same name + self.wiz_location = self.env['fsm.location']. \ + search([('name', '=', self.test_loc_partner2.name)]) + + # check if location is created successfully and fields copied over + self.assertEqual(self.test_loc_partner2, + self.wiz_location.customer_id) + self.assertEqual(self.test_loc_partner2, + self.wiz_location.owner_id) diff --git a/fieldservice_account_analytic/views/fsm_person.xml b/fieldservice_account_analytic/views/fsm_person.xml deleted file mode 100644 index 1e8581675e..0000000000 --- a/fieldservice_account_analytic/views/fsm_person.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - fsm.person.form - fsm.person - - - - - - - - - - - fsm.location.person.form - fsm.location.person - - - - - - - - - From 38b18d1e1b657cbab2dd5d8b34713d036c348556 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Thu, 5 Dec 2019 13:28:31 -0500 Subject: [PATCH 127/631] [IMP] fieldservice_account: Update maintainers --- fieldservice_account_analytic/README.rst | 44 ++++--- fieldservice_account_analytic/__manifest__.py | 6 +- .../i18n/fieldservice_account_analytic.pot | 109 ++++++++++++++++++ .../static/description/index.html | 34 +++--- 4 files changed, 147 insertions(+), 46 deletions(-) create mode 100644 fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot diff --git a/fieldservice_account_analytic/README.rst b/fieldservice_account_analytic/README.rst index 278e295c55..aeb2336ff6 100644 --- a/fieldservice_account_analytic/README.rst +++ b/fieldservice_account_analytic/README.rst @@ -1,6 +1,6 @@ -========================== -Field Service - Accounting -========================== +=================================== +Field Service - Analytic Accounting +=================================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! @@ -14,10 +14,10 @@ Field Service - Accounting :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/12.0/fieldservice_account + :target: https://github.com/OCA/field-service/tree/12.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-12-0/field-service-12-0-fieldservice_account + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_account_analytic :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/264/12.0 @@ -25,10 +25,10 @@ Field Service - Accounting |badge1| |badge2| |badge3| |badge4| |badge5| -This module adds the ability to track employee time and contractor -costs for Field Service Orders. It also adds functionality to create -a customer invoice and a vendor bill when a Field Service Order is -completed. +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** @@ -51,18 +51,7 @@ To configure this module, you need to: Usage ===== -To use the module: -On a field service order, open the "Accounting" tab. Depending on -whether the logged in user or an employee or not, they will see -either a place to enter timesheet records or contractor costs. - -The total cost of the order is calculated based on the entries in -the employee timesheet entries and contractor costs. - -When an order is completed, a customer invoice will be generated for -the employee time and the contractor costs. A vendor bill will be -created for the contractor costs. Bug Tracker =========== @@ -70,7 +59,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -87,6 +76,7 @@ Contributors * Michael Allen * Serpent Consulting Services Pvt. Ltd. +* Brian McMaster Other credits ~~~~~~~~~~~~~ @@ -111,11 +101,17 @@ 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 `maintainer `__: +Current `maintainers `__: -|maintainer-osimallen| +|maintainer-osimallen| |maintainer-brian10048| |maintainer-bodedra| -This module is part of the `OCA/field-service `_ project on GitHub. +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/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index 5b98148f4f..b7e1330238 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -28,5 +28,9 @@ 'pre_init_hook': 'pre_init_hook', 'license': 'AGPL-3', 'development_status': 'Beta', - 'maintainers': ['osimallen'], + 'maintainers': [ + 'osimallen', + 'brian10048', + 'bodedra', + ], } 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..c68a6c0d8f --- /dev/null +++ b/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot @@ -0,0 +1,109 @@ +# 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" +"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 +#: selection:fsm.order,bill_to:0 +msgid "Bill Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: selection:fsm.order,bill_to:0 +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 +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: 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: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_location_person +msgid "Field Service Location Person Info" +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,name:fieldservice_account_analytic.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: fieldservice_account_analytic +#: code:addons/fieldservice_account_analytic/models/account_invoice_line.py:19 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:21 +#, 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/static/description/index.html b/fieldservice_account_analytic/static/description/index.html index be45db7518..ac71aa178f 100644 --- a/fieldservice_account_analytic/static/description/index.html +++ b/fieldservice_account_analytic/static/description/index.html @@ -4,7 +4,7 @@ -Field Service - Accounting +Field Service - Analytic Accounting -
    -

    Field Service - Accounting

    +
    +

    Field Service - Analytic Accounting

    -

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

    -

    This module adds the ability to track employee time and contractor -costs for Field Service Orders. It also adds functionality to create -a customer invoice and a vendor bill when a Field Service Order is -completed.

    +

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

    +

    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

    Usage

    -

    To use the module:

    -

    On a field service order, open the “Accounting” tab. Depending on -whether the logged in user or an employee or not, they will see -either a place to enter timesheet records or contractor costs.

    -

    The total cost of the order is calculated based on the entries in -the employee timesheet entries and contractor costs.

    -

    When an order is completed, a customer invoice will be generated for -the employee time and the contractor costs. A vendor bill will be -created for the contractor costs.

    Bug Tracker

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

    +feedback.

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

    @@ -433,6 +424,7 @@

    Contributors

    @@ -449,9 +441,9 @@

    Maintainers

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

    -

    Current maintainer:

    -

    osimallen

    -

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

    +

    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.

    From 12d8844d936ff7327ad176137b5e52be029de8d6 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 5 Dec 2019 19:10:31 +0000 Subject: [PATCH 128/631] fieldservice_account_analytic 12.0.2.0.2 --- fieldservice_account_analytic/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index b7e1330238..6857117776 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - Analytic Accounting', 'summary': """Track analytic accounts on Field Service locations and orders""", - 'version': '12.0.2.0.1', + 'version': '12.0.2.0.2', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', From dfafd9533fbfd40f37a5aca1cec4052cee91bfb1 Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 11 Dec 2019 15:28:09 -0800 Subject: [PATCH 129/631] [IMP] Analytic Account Company Dependant --- fieldservice_account_analytic/models/fsm_location.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fieldservice_account_analytic/models/fsm_location.py b/fieldservice_account_analytic/models/fsm_location.py index 92611bcbc0..bf9ed97b7b 100644 --- a/fieldservice_account_analytic/models/fsm_location.py +++ b/fieldservice_account_analytic/models/fsm_location.py @@ -8,7 +8,8 @@ class FSMLocation(models.Model): _inherit = 'fsm.location' analytic_account_id = fields.Many2one('account.analytic.account', - string='Analytic Account') + string='Analytic Account', + company_dependent=True) customer_id = fields.Many2one( 'res.partner', string='Billed Customer', required=True, From b3d6d421dbd2a5ec9b27b39970a7f5a2b4a6f3d4 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 12 Dec 2019 15:52:24 +0000 Subject: [PATCH 130/631] fieldservice_account_analytic 12.0.2.1.0 --- fieldservice_account_analytic/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index 6857117776..d041e45c72 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - Analytic Accounting', 'summary': """Track analytic accounts on Field Service locations and orders""", - 'version': '12.0.2.0.2', + 'version': '12.0.2.1.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', From 1ade4d75fe6cade96c6846f474a18e7c34401baf Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Tue, 17 Dec 2019 13:51:21 +0530 Subject: [PATCH 131/631] [12.0][IMP] fieldservice --- fieldservice_account_analytic/__manifest__.py | 1 - fieldservice_account_analytic/views/fsm_route.xml | 14 -------------- 2 files changed, 15 deletions(-) delete mode 100644 fieldservice_account_analytic/views/fsm_route.xml diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index d041e45c72..de1e8f178e 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -20,7 +20,6 @@ 'report/fsm_order_report_template.xml', 'views/fsm_location.xml', 'views/fsm_order.xml', - 'views/fsm_route.xml', ], 'demo': [ 'demo/fsm_location.xml', diff --git a/fieldservice_account_analytic/views/fsm_route.xml b/fieldservice_account_analytic/views/fsm_route.xml deleted file mode 100644 index 4f1df4b04b..0000000000 --- a/fieldservice_account_analytic/views/fsm_route.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - fsm.route.form - fsm.route - - - - - - - - - From e13ccb732fc3ec79414fb952e9d8a4fc3579c386 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 18 Dec 2019 15:26:50 +0000 Subject: [PATCH 132/631] fieldservice_account_analytic 12.0.3.0.0 --- fieldservice_account_analytic/__manifest__.py | 2 +- fieldservice_account_analytic/i18n/es_CL.po | 111 ++++++++++++++++++ fieldservice_account_analytic/i18n/pt_BR.po | 109 +++++++++++++++++ 3 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 fieldservice_account_analytic/i18n/es_CL.po create mode 100644 fieldservice_account_analytic/i18n/pt_BR.po diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index de1e8f178e..945f00ca47 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - Analytic Accounting', 'summary': """Track analytic accounts on Field Service locations and orders""", - 'version': '12.0.2.1.0', + 'version': '12.0.3.0.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_account_analytic/i18n/es_CL.po b/fieldservice_account_analytic/i18n/es_CL.po new file mode 100644 index 0000000000..87b385b095 --- /dev/null +++ b/fieldservice_account_analytic/i18n/es_CL.po @@ -0,0 +1,111 @@ +# 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 +#: selection:fsm.order,bill_to:0 +msgid "Bill Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: selection:fsm.order,bill_to:0 +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 +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: 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: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_location_person +msgid "Field Service Location Person Info" +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,name:fieldservice_account_analytic.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: fieldservice_account_analytic +#: code:addons/fieldservice_account_analytic/models/account_invoice_line.py:19 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:21 +#, 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/pt_BR.po b/fieldservice_account_analytic/i18n/pt_BR.po new file mode 100644 index 0000000000..199dd9b8bc --- /dev/null +++ b/fieldservice_account_analytic/i18n/pt_BR.po @@ -0,0 +1,109 @@ +# 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" +"Last-Translator: Automatically generated\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" + +#. 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 +#: selection:fsm.order,bill_to:0 +msgid "Bill Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: selection:fsm.order,bill_to:0 +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 +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: 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: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_location_person +msgid "Field Service Location Person Info" +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,name:fieldservice_account_analytic.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: fieldservice_account_analytic +#: code:addons/fieldservice_account_analytic/models/account_invoice_line.py:19 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:21 +#, 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 "" From e509ae317d7bacfc05a1c6efa308fb7e6d364019 Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 15 Jan 2020 17:35:01 -0800 Subject: [PATCH 133/631] [IMP] Set Default Customer [IMP] Move Method Up [IMP] api.model + space [IMP] fsm_parent_id [FIX] Typo --- fieldservice_account_analytic/i18n/es.po | 111 ++++++++++++++++++ .../models/fsm_location.py | 9 +- 2 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 fieldservice_account_analytic/i18n/es.po diff --git a/fieldservice_account_analytic/i18n/es.po b/fieldservice_account_analytic/i18n/es.po new file mode 100644 index 0000000000..b8c52b0790 --- /dev/null +++ b/fieldservice_account_analytic/i18n/es.po @@ -0,0 +1,111 @@ +# 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\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 +#: selection:fsm.order,bill_to:0 +msgid "Bill Contact" +msgstr "" + +#. module: fieldservice_account_analytic +#: selection:fsm.order,bill_to:0 +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 +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id +msgid "Billed Customer" +msgstr "" + +#. module: fieldservice_account_analytic +#: 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: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_location_person +msgid "Field Service Location Person Info" +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,name:fieldservice_account_analytic.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: fieldservice_account_analytic +#: code:addons/fieldservice_account_analytic/models/account_invoice_line.py:19 +#: code:addons/fieldservice_account_analytic/models/analytic_account.py:21 +#, 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/models/fsm_location.py b/fieldservice_account_analytic/models/fsm_location.py index bf9ed97b7b..6885f1b1c1 100644 --- a/fieldservice_account_analytic/models/fsm_location.py +++ b/fieldservice_account_analytic/models/fsm_location.py @@ -11,9 +11,16 @@ class FSMLocation(models.Model): string='Analytic Account', company_dependent=True) + @api.model + def get_default_customer(self): + if self.fsm_parent_id: + return self.fsm_parent_id.customer_id.id + return self.owner_id.id + customer_id = fields.Many2one( 'res.partner', string='Billed Customer', required=True, - ondelete='restrict', auto_join=True, track_visibility='onchange') + ondelete='restrict', auto_join=True, track_visibility='onchange', + default=get_default_customer) @api.onchange('fsm_parent_id') def _onchange_fsm_parent_id_account(self): From 6c95a6925dcf2078995389be1b845228a3ba6ea6 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 17 Jan 2020 00:35:14 +0000 Subject: [PATCH 134/631] fieldservice_account_analytic 12.0.3.1.0 --- fieldservice_account_analytic/__manifest__.py | 2 +- fieldservice_account_analytic/i18n/es.po | 34 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index 945f00ca47..8a4fd731d1 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - Analytic Accounting', 'summary': """Track analytic accounts on Field Service locations and orders""", - 'version': '12.0.3.0.0', + 'version': '12.0.3.1.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_account_analytic/i18n/es.po b/fieldservice_account_analytic/i18n/es.po index b8c52b0790..53524f15f9 100644 --- a/fieldservice_account_analytic/i18n/es.po +++ b/fieldservice_account_analytic/i18n/es.po @@ -6,7 +6,7 @@ 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" +"PO-Revision-Date: 2020-01-17 06:13+0000\n" "Last-Translator: Nelson Ramírez Sánchez \n" "Language-Team: none\n" "Language: es\n" @@ -30,82 +30,82 @@ msgstr "Cuenta Analítica" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line msgid "Analytic Line" -msgstr "" +msgstr "Linea Analitica" #. module: fieldservice_account_analytic #: selection:fsm.order,bill_to:0 msgid "Bill Contact" -msgstr "" +msgstr "Contacto de Facturación" #. module: fieldservice_account_analytic #: selection:fsm.order,bill_to:0 msgid "Bill Location" -msgstr "" +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 "" +msgstr "Facturar a" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id msgid "Billed Customer" -msgstr "" +msgstr "Facturado a Cliente" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id msgid "Contact" -msgstr "" +msgstr "Contacto" #. module: fieldservice_account_analytic #: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic msgid "Customer" -msgstr "" +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 "" +msgstr "Pedido FSM" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard msgid "FSM Record Conversion" -msgstr "" +msgstr "Conversión de Registro FSM" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_location msgid "Field Service Location" -msgstr "" +msgstr "Ubicación del Servicio de Campo" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_location_person msgid "Field Service Location Person Info" -msgstr "" +msgstr "Servicio de campo Ubicación Información de la persona" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_order msgid "Field Service Order" -msgstr "" +msgstr "Orden de Servicio de Campo" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_account_invoice_line msgid "Invoice Line" -msgstr "" +msgstr "Línea de factura" #. module: fieldservice_account_analytic #: code:addons/fieldservice_account_analytic/models/account_invoice_line.py:19 #: code:addons/fieldservice_account_analytic/models/analytic_account.py:21 #, python-format msgid "No analytic account set on the order's Location." -msgstr "" +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 "" +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 "" +msgstr "Coste Total" From bc7c7b54d1384137a8545096500fa63ae23c78b9 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 31 Jan 2020 14:49:43 -0800 Subject: [PATCH 135/631] [DEL] Remove fsm_location_person.py --- .../i18n/fieldservice_account_analytic.pot | 6 ------ fieldservice_account_analytic/models/__init__.py | 1 - .../models/fsm_location_person.py | 13 ------------- 3 files changed, 20 deletions(-) delete mode 100644 fieldservice_account_analytic/models/fsm_location_person.py diff --git a/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot b/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot index c68a6c0d8f..a7729d23a4 100644 --- a/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot +++ b/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot @@ -46,7 +46,6 @@ msgstr "" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id -#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id msgid "Billed Customer" msgstr "" @@ -75,11 +74,6 @@ msgstr "" msgid "Field Service Location" msgstr "" -#. module: fieldservice_account_analytic -#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location_person -msgid "Field Service Location Person Info" -msgstr "" - #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_order msgid "Field Service Order" diff --git a/fieldservice_account_analytic/models/__init__.py b/fieldservice_account_analytic/models/__init__.py index 173f04e574..59b98aeef2 100644 --- a/fieldservice_account_analytic/models/__init__.py +++ b/fieldservice_account_analytic/models/__init__.py @@ -4,6 +4,5 @@ account_invoice_line, analytic_account, fsm_location, - fsm_location_person, fsm_order, ) diff --git a/fieldservice_account_analytic/models/fsm_location_person.py b/fieldservice_account_analytic/models/fsm_location_person.py deleted file mode 100644 index d6e3a1f2e1..0000000000 --- a/fieldservice_account_analytic/models/fsm_location_person.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class FSMLocationPerson(models.Model): - _inherit = 'fsm.location.person' - - customer_id = fields.Many2one('res.partner', string='Billed Customer', - required=True, ondelete='restrict', - auto_join=True, - track_visibility='onchange') From 42628e1b847d07afe4f420350dca5481f9200880 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 1 Feb 2020 20:06:12 +0000 Subject: [PATCH 136/631] fieldservice_account_analytic 12.0.3.2.0 --- fieldservice_account_analytic/__manifest__.py | 2 +- fieldservice_account_analytic/i18n/es.po | 11 ++--- fieldservice_account_analytic/i18n/es_CL.po | 8 +--- fieldservice_account_analytic/i18n/pt_BR.po | 46 +++++++++---------- 4 files changed, 27 insertions(+), 40 deletions(-) diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index 8a4fd731d1..5fc8d3276f 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - Analytic Accounting', 'summary': """Track analytic accounts on Field Service locations and orders""", - 'version': '12.0.3.1.0', + 'version': '12.0.3.2.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_account_analytic/i18n/es.po b/fieldservice_account_analytic/i18n/es.po index 53524f15f9..017a539d4e 100644 --- a/fieldservice_account_analytic/i18n/es.po +++ b/fieldservice_account_analytic/i18n/es.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_account_analytic +# * fieldservice_account_analytic # msgid "" msgstr "" @@ -49,7 +49,6 @@ msgstr "Facturar a" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id -#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id msgid "Billed Customer" msgstr "Facturado a Cliente" @@ -78,11 +77,6 @@ msgstr "Conversión de Registro FSM" msgid "Field Service Location" msgstr "Ubicación del Servicio de Campo" -#. module: fieldservice_account_analytic -#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location_person -msgid "Field Service Location Person Info" -msgstr "Servicio de campo Ubicación Información de la persona" - #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_order msgid "Field Service Order" @@ -109,3 +103,6 @@ msgstr "Tipo de Tiempo" #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost msgid "Total Cost" msgstr "Coste Total" + +#~ 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_CL.po b/fieldservice_account_analytic/i18n/es_CL.po index 87b385b095..1ac61bd739 100644 --- a/fieldservice_account_analytic/i18n/es_CL.po +++ b/fieldservice_account_analytic/i18n/es_CL.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_account_analytic +# * fieldservice_account_analytic # msgid "" msgstr "" @@ -49,7 +49,6 @@ msgstr "" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id -#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id msgid "Billed Customer" msgstr "" @@ -78,11 +77,6 @@ msgstr "" msgid "Field Service Location" msgstr "" -#. module: fieldservice_account_analytic -#: model:ir.model,name:fieldservice_account_analytic.model_fsm_location_person -msgid "Field Service Location Person Info" -msgstr "" - #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_order msgid "Field Service Order" diff --git a/fieldservice_account_analytic/i18n/pt_BR.po b/fieldservice_account_analytic/i18n/pt_BR.po index 199dd9b8bc..5c3dc5dd7d 100644 --- a/fieldservice_account_analytic/i18n/pt_BR.po +++ b/fieldservice_account_analytic/i18n/pt_BR.po @@ -1,109 +1,105 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_account_analytic +# * fieldservice_account_analytic # msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-02-05 22:13+0000\n" +"Last-Translator: Marcel Savegnago \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_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 "" +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 "" +msgstr "Conta Analítica" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line msgid "Analytic Line" -msgstr "" +msgstr "Linha Analitica" #. module: fieldservice_account_analytic #: selection:fsm.order,bill_to:0 msgid "Bill Contact" -msgstr "" +msgstr "Conta do Contato" #. module: fieldservice_account_analytic #: selection:fsm.order,bill_to:0 msgid "Bill Location" -msgstr "" +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 "" +msgstr "Conta para" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__customer_id -#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location_person__customer_id msgid "Billed Customer" -msgstr "" +msgstr "Cliente Faturado" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id msgid "Contact" -msgstr "" +msgstr "Contato" #. module: fieldservice_account_analytic #: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic msgid "Customer" -msgstr "" +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 "" +msgstr "Ordem FSM" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard msgid "FSM Record Conversion" -msgstr "" +msgstr "Conversão do Registro FSM" #. 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_location_person -msgid "Field Service Location Person Info" -msgstr "" +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 "" +msgstr "Ordem de Serviço de Campo" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_account_invoice_line msgid "Invoice Line" -msgstr "" +msgstr "Linha de Fatura" #. module: fieldservice_account_analytic #: code:addons/fieldservice_account_analytic/models/account_invoice_line.py:19 #: code:addons/fieldservice_account_analytic/models/analytic_account.py:21 #, python-format msgid "No analytic account set on the order's Location." -msgstr "" +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 "" +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 "" +msgstr "Custo Total" From c5034e52425f4775fe4a897e9eca7f96a0f7ab26 Mon Sep 17 00:00:00 2001 From: scampbell Date: Thu, 16 Jan 2020 15:33:27 -0800 Subject: [PATCH 137/631] [IMP] Filter Location/Contact [IMP] Remove Unused Import [IMP] Github Comments [IMP] Add FSM to Variable --- fieldservice_account_analytic/__manifest__.py | 1 + .../i18n/fieldservice_account_analytic.pot | 22 +++++++++++++++++ .../models/__init__.py | 2 ++ .../models/fsm_order.py | 19 +++++++++++---- .../models/res_company.py | 18 ++++++++++++++ .../models/res_config_settings.py | 14 +++++++++++ .../views/res_config_settings.xml | 24 +++++++++++++++++++ 7 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 fieldservice_account_analytic/models/res_company.py create mode 100644 fieldservice_account_analytic/models/res_config_settings.py create mode 100644 fieldservice_account_analytic/views/res_config_settings.xml diff --git a/fieldservice_account_analytic/__manifest__.py b/fieldservice_account_analytic/__manifest__.py index 5fc8d3276f..c9aae9b2d8 100644 --- a/fieldservice_account_analytic/__manifest__.py +++ b/fieldservice_account_analytic/__manifest__.py @@ -20,6 +20,7 @@ 'report/fsm_order_report_template.xml', 'views/fsm_location.xml', 'views/fsm_order.xml', + 'views/res_config_settings.xml' ], 'demo': [ 'demo/fsm_location.xml', diff --git a/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot b/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot index a7729d23a4..9ec0a906fa 100644 --- a/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot +++ b/fieldservice_account_analytic/i18n/fieldservice_account_analytic.pot @@ -49,6 +49,16 @@ msgstr "" 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.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id msgid "Contact" @@ -79,6 +89,18 @@ msgstr "" 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_invoice_line msgid "Invoice Line" diff --git a/fieldservice_account_analytic/models/__init__.py b/fieldservice_account_analytic/models/__init__.py index 59b98aeef2..a08d9949b4 100644 --- a/fieldservice_account_analytic/models/__init__.py +++ b/fieldservice_account_analytic/models/__init__.py @@ -5,4 +5,6 @@ analytic_account, fsm_location, fsm_order, + res_company, + res_config_settings ) diff --git a/fieldservice_account_analytic/models/fsm_order.py b/fieldservice_account_analytic/models/fsm_order.py index d88ac6091a..c2e5da8402 100644 --- a/fieldservice_account_analytic/models/fsm_order.py +++ b/fieldservice_account_analytic/models/fsm_order.py @@ -25,13 +25,22 @@ def _compute_total_cost(self): for order in self: order.total_cost = 0.0 - @api.onchange('location_id') + @api.onchange('location_id', 'customer_id') def _onchange_location_id_customer_account(self): - if self.location_id: - return {'domain': {'customer_id': [('service_location_id', '=', - self.location_id.name)]}} + if self.env.user.company_id.fsm_filter_location_by_contact: + if self.location_id: + return {'domain': {'customer_id': [('service_location_id', '=', + self.location_id.id)]}} + else: + return {'domain': {'customer_id': [], + 'location_id': []}} else: - return {'domain': {'customer_id': [('id', '!=', None)]}} + if self.customer_id: + return {'domain': {'location_id': [('partner_id', '=', + self.customer_id.id)]}} + else: + return {'domain': {'location_id': [], + 'customer_id': []}} @api.onchange('customer_id') def _onchange_customer_id_location(self): diff --git a/fieldservice_account_analytic/models/res_company.py b/fieldservice_account_analytic/models/res_company.py new file mode 100644 index 0000000000..ed087f6ed9 --- /dev/null +++ b/fieldservice_account_analytic/models/res_company.py @@ -0,0 +1,18 @@ +# Copyright (C) 2020 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ResCompany(models.Model): + _inherit = 'res.company' + + fsm_filter_location_by_contact = fields.Boolean( + string='Filter Contacts with Location' + ) + + @api.onchange('fsm_filter_location_by_contact') + def onchange_fsm_filter_location_by_contact(self): + fso_ids = self.env['fsm.order'].search([]) + for fso_id in fso_ids: + fso_id._onchange_location_id_customer_account() 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..e8ea540845 --- /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/views/res_config_settings.xml b/fieldservice_account_analytic/views/res_config_settings.xml new file mode 100644 index 0000000000..b7bb82f2f6 --- /dev/null +++ b/fieldservice_account_analytic/views/res_config_settings.xml @@ -0,0 +1,24 @@ + + + res.config.settings.view.form.fsm.filter + res.config.settings + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    From a7e87f0518330a2f14cc3198c401c74e538e0ef3 Mon Sep 17 00:00:00 2001 From: scampbell Date: Thu, 14 Nov 2019 10:12:02 -0800 Subject: [PATCH 138/631] [IMP] Fix Convert Error [UPD] Update fieldservice_stock.pot --- fieldservice_stock/i18n/de.po | 240 ++++++++++++++++++ fieldservice_stock/i18n/es_CL.po | 240 ++++++++++++++++++ .../i18n/fieldservice_stock.pot | 238 +++++++++++++++++ fieldservice_stock/models/fsm_wizard.py | 2 +- 4 files changed, 719 insertions(+), 1 deletion(-) create mode 100644 fieldservice_stock/i18n/de.po create mode 100644 fieldservice_stock/i18n/es_CL.po create mode 100644 fieldservice_stock/i18n/fieldservice_stock.pot diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po new file mode 100644 index 0000000000..8574da489c --- /dev/null +++ b/fieldservice_stock/i18n/de.po @@ -0,0 +1,240 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-26 17:58+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_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Cancel" +msgstr "Abbrechen" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Cancelled" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment +msgid "Creates a FSM Equipment" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id +msgid "Current Inventory Location" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Deliveries" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count +msgid "Delivery Orders" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Done" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Draft" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id +msgid "Equipment" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search +msgid "FSM Order" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_equipment +msgid "Field Service Equipment" +msgstr "Service-Equipment" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_location +msgid "Field Service Location" +msgstr "Field-Service-Ort" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_order +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id +msgid "Field Service Order" +msgstr "Field-Service-Auftrag" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "In progress" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Inventory" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id +msgid "Inventory Location" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_production_lot +msgid "Lot/Serial" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids +msgid "Order Lines" +msgstr "" + +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/fsm_order.py:52 +#: code:addons/fieldservice_stock/models/fsm_order.py:65 +#: code:addons/fieldservice_stock/models/fsm_order.py:78 +#, python-format +msgid "Please create a stock request." +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_procurement_group +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id +msgid "Procurement Group" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id +msgid "Product" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_product_template +msgid "Product Template" +msgstr "Produktvorlage" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product +msgid "Products" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Receipts" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage +msgid "Request State" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count +msgid "Return Orders" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id +msgid "Serial #" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Set to Draft" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id +msgid "Shipping Location" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request +msgid "Stock Request" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request_order +msgid "Stock Request Order" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request +msgid "Stock Requests" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_rule +msgid "Stock Rule" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Submit" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Submitted" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids +msgid "Transfers" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse used to ship the materials" +msgstr "" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po new file mode 100644 index 0000000000..27aada4e53 --- /dev/null +++ b/fieldservice_stock/i18n/es_CL.po @@ -0,0 +1,240 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-18 06: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_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Cancel" +msgstr "Cancelar" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Cancelled" +msgstr "Cancelado" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment +msgid "Creates a FSM Equipment" +msgstr "Crea Equipos FSM" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id +msgid "Current Inventory Location" +msgstr "Ubicación Actual de Inventario" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Deliveries" +msgstr "Entregas" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count +msgid "Delivery Orders" +msgstr "Pedidos de Entrega" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Done" +msgstr "Hecho" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Draft" +msgstr "Borrador" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id +msgid "Equipment" +msgstr "Equipo" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search +msgid "FSM Order" +msgstr "Orden FSM" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversión de Registro FSM" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_equipment +msgid "Field Service Equipment" +msgstr "Equipo de Servicio de Campo" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_order +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id +msgid "Field Service Order" +msgstr "Orden de Servicio de Campo" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "In progress" +msgstr "En progreso" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Inventory" +msgstr "Inventario" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id +msgid "Inventory Location" +msgstr "Ubicación de Inventario" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_production_lot +msgid "Lot/Serial" +msgstr "Lote / Serie" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids +msgid "Order Lines" +msgstr "Líneas de Pedido" + +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/fsm_order.py:52 +#: code:addons/fieldservice_stock/models/fsm_order.py:65 +#: code:addons/fieldservice_stock/models/fsm_order.py:78 +#, python-format +msgid "Please create a stock request." +msgstr "Por favor cree una solicitud de stock." + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_procurement_group +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id +msgid "Procurement Group" +msgstr "Grupo de Adquisiciones" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id +msgid "Product" +msgstr "Producto" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimientos de Producto (Línea de Movimiento de Stock)" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_product_template +msgid "Product Template" +msgstr "Plantilla de Producto" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product +msgid "Products" +msgstr "Productos" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Receipts" +msgstr "Ingresos" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage +msgid "Request State" +msgstr "Estado de Solicitud" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count +msgid "Return Orders" +msgstr "Órdenes de Devolución" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id +msgid "Serial #" +msgstr "# de Serial" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Set to Draft" +msgstr "Establecer en Borrador" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id +msgid "Shipping Location" +msgstr "Lugar de Envío" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de Stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request +msgid "Stock Request" +msgstr "Solicitud de Stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request_order +msgid "Stock Request Order" +msgstr "Pedido de Solicitud de Stock" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request +msgid "Stock Requests" +msgstr "Solicitudes de Stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_rule +msgid "Stock Rule" +msgstr "Regla de Stock" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Submit" +msgstr "Enviar" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Submitted" +msgstr "Enviado" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking +msgid "Transfer" +msgstr "Transferir" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids +msgid "Transfers" +msgstr "Transferencias" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse" +msgstr "Almacén" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse used to ship the materials" +msgstr "Almacén utilizado para enviar los materiales" diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot new file mode 100644 index 0000000000..81c9893edf --- /dev/null +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -0,0 +1,238 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Cancel" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Cancelled" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment +msgid "Creates a FSM Equipment" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id +msgid "Current Inventory Location" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Deliveries" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count +msgid "Delivery Orders" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Done" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Draft" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id +msgid "Equipment" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search +msgid "FSM Order" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_equipment +msgid "Field Service Equipment" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_order +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "In progress" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Inventory" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id +msgid "Inventory Location" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_production_lot +msgid "Lot/Serial" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids +msgid "Order Lines" +msgstr "" + +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/fsm_order.py:52 +#: code:addons/fieldservice_stock/models/fsm_order.py:65 +#: code:addons/fieldservice_stock/models/fsm_order.py:78 +#, python-format +msgid "Please create a stock request." +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_procurement_group +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id +msgid "Procurement Group" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id +msgid "Product" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_product_template +msgid "Product Template" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product +msgid "Products" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Receipts" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage +msgid "Request State" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count +msgid "Return Orders" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id +msgid "Serial #" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Set to Draft" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id +msgid "Shipping Location" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request +msgid "Stock Request" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request_order +msgid "Stock Request Order" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request +msgid "Stock Requests" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_rule +msgid "Stock Rule" +msgstr "" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Submit" +msgstr "" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Submitted" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids +msgid "Transfers" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse used to ship the materials" +msgstr "" + diff --git a/fieldservice_stock/models/fsm_wizard.py b/fieldservice_stock/models/fsm_wizard.py index 509bbdba63..7b5be78958 100644 --- a/fieldservice_stock/models/fsm_wizard.py +++ b/fieldservice_stock/models/fsm_wizard.py @@ -8,6 +8,6 @@ class FSMWizard(models.TransientModel): _inherit = 'fsm.wizard' def _prepare_fsm_location(self, partner): - res = super(FSMWizard)._prepare_fsm_location(partner) + res = super()._prepare_fsm_location(partner) res['inventory_location_id'] = partner.property_stock_customer.id return res From f8c50627ca74b1146e8bb1d6bae77d69adf00ea6 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 11 Dec 2019 18:40:20 -0600 Subject: [PATCH 139/631] [FIX] fieldservice_stock: Multiple back-orders if multiple moves --- fieldservice_stock/models/stock_move.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fieldservice_stock/models/stock_move.py b/fieldservice_stock/models/stock_move.py index 9a495ae800..00ea84d474 100644 --- a/fieldservice_stock/models/stock_move.py +++ b/fieldservice_stock/models/stock_move.py @@ -18,9 +18,8 @@ def prepare_equipment_values(self, move_line): 'current_stock_location_id': move_line.location_dest_id.id} def _action_done(self): - res = False + res = super()._action_done() for rec in self: - res = super(StockMove, rec)._action_done() if rec.picking_code == 'outgoing' and rec.state == 'done': if rec.product_tmpl_id.create_fsm_equipment: for line in rec.move_line_ids: From a669e546967a80edbeaa9d21a938dd8a3498bf78 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 12 Dec 2019 16:23:27 +0000 Subject: [PATCH 140/631] fieldservice_stock 12.0.1.0.2 --- fieldservice_stock/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index d70f4e77b5..7c46596a71 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.0.1', + 'version': '12.0.1.0.2', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " From 366d7b9e0b82a415b5999ed85bdec387af97f916 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Fri, 13 Dec 2019 13:43:36 +0530 Subject: [PATCH 141/631] [WIP][12.0][IMP] fieldservice_stock [UPD] Update fieldservice_stock.pot --- fieldservice_stock/i18n/fieldservice_stock.pot | 11 ++++++++--- fieldservice_stock/models/fsm_order.py | 2 ++ fieldservice_stock/views/fsm_order.xml | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index 81c9893edf..935f810a0c 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -112,15 +112,20 @@ msgstr "" msgid "Lot/Serial" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids +msgid "Operations" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids msgid "Order Lines" msgstr "" #. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:52 -#: code:addons/fieldservice_stock/models/fsm_order.py:65 -#: code:addons/fieldservice_stock/models/fsm_order.py:78 +#: code:addons/fieldservice_stock/models/fsm_order.py:54 +#: code:addons/fieldservice_stock/models/fsm_order.py:67 +#: code:addons/fieldservice_stock/models/fsm_order.py:80 #, python-format msgid "Please create a stock request." msgstr "" diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 5a4a665e01..8ae87befc1 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -44,6 +44,8 @@ def _default_warehouse_id(self): request_stage = fields.Selection(REQUEST_STATES, string='Request State', default='draft', readonly=True, store=True) + move_ids = fields.One2many('stock.move', 'fsm_order_id', + string='Operations') @api.multi def action_request_submit(self): diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index f3c25de0da..2662684c43 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -70,6 +70,7 @@ + From 693cc45dc9cc954c29551c84eddcc93d72e4fb4e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 18 Dec 2019 16:31:05 +0000 Subject: [PATCH 142/631] fieldservice_stock 12.0.1.1.0 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 13 +++++++++---- fieldservice_stock/i18n/es_CL.po | 13 +++++++++---- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 7c46596a71..b25af0d471 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.0.2', + 'version': '12.0.1.1.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index 8574da489c..8c35057e55 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_stock +# * fieldservice_stock # msgid "" msgstr "" @@ -115,15 +115,20 @@ msgstr "" msgid "Lot/Serial" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids +msgid "Operations" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids msgid "Order Lines" msgstr "" #. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:52 -#: code:addons/fieldservice_stock/models/fsm_order.py:65 -#: code:addons/fieldservice_stock/models/fsm_order.py:78 +#: code:addons/fieldservice_stock/models/fsm_order.py:54 +#: code:addons/fieldservice_stock/models/fsm_order.py:67 +#: code:addons/fieldservice_stock/models/fsm_order.py:80 #, python-format msgid "Please create a stock request." msgstr "" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 27aada4e53..47b27bf3e6 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_stock +# * fieldservice_stock # msgid "" msgstr "" @@ -115,15 +115,20 @@ msgstr "Ubicación de Inventario" msgid "Lot/Serial" msgstr "Lote / Serie" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids +msgid "Operations" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids msgid "Order Lines" msgstr "Líneas de Pedido" #. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:52 -#: code:addons/fieldservice_stock/models/fsm_order.py:65 -#: code:addons/fieldservice_stock/models/fsm_order.py:78 +#: code:addons/fieldservice_stock/models/fsm_order.py:54 +#: code:addons/fieldservice_stock/models/fsm_order.py:67 +#: code:addons/fieldservice_stock/models/fsm_order.py:80 #, python-format msgid "Please create a stock request." msgstr "Por favor cree una solicitud de stock." From fd10af654ed22f9cce94a86835717864004170bf Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sun, 22 Dec 2019 10:55:47 -0600 Subject: [PATCH 143/631] [IMP] fieldervice_stock --- fieldservice_stock/models/fsm_order.py | 12 ++++++------ fieldservice_stock/models/stock_picking.py | 9 ++++++++- fieldservice_stock/views/fsm_order.xml | 3 +-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 8ae87befc1..83187089df 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -107,12 +107,12 @@ def action_view_delivery(self): pickings = self.mapped('picking_ids') delivery_ids = [picking.id for picking in pickings if picking.picking_type_id.code == 'outgoing'] - if len(pickings) > 1: + if len(delivery_ids) > 1: action['domain'] = [('id', 'in', delivery_ids)] elif pickings: action['views'] = [(self.env.ref('stock.view_picking_form').id, 'form')] - action['res_id'] = pickings.id + action['res_id'] = delivery_ids[0] return action @api.multi @@ -124,12 +124,12 @@ def action_view_returns(self): """ action = self.env.ref('stock.action_picking_tree_all').read()[0] pickings = self.mapped('picking_ids') - receipt_ids = [picking.id for picking in pickings if + return_ids = [picking.id for picking in pickings if picking.picking_type_id.code == 'incoming'] - if len(pickings) > 1: - action['domain'] = [('id', 'in', receipt_ids)] + if len(return_ids) > 1: + action['domain'] = [('id', 'in', return_ids)] elif pickings: action['views'] = [(self.env.ref('stock.view_picking_form').id, 'form')] - action['res_id'] = pickings.id + action['res_id'] = return_ids[0] return action diff --git a/fieldservice_stock/models/stock_picking.py b/fieldservice_stock/models/stock_picking.py index 076eb5174f..06abdeb450 100644 --- a/fieldservice_stock/models/stock_picking.py +++ b/fieldservice_stock/models/stock_picking.py @@ -1,6 +1,6 @@ # Copyright (C) 2018 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import api, fields, models class StockPicking(models.Model): @@ -8,3 +8,10 @@ class StockPicking(models.Model): fsm_order_id = fields.Many2one(related="group_id.fsm_order_id", string="Field Service Order", store=True) + + @api.model + def create(self, vals): + res = super().create(vals) + if vals.get('fsm_order_id'): + res.fsm_order_id = vals.get('fsm_order_id') + return res diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index 2662684c43..22dea28a5a 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -1,4 +1,3 @@ - @@ -20,7 +19,7 @@ class="oe_stat_button" icon="fa-truck" attrs="{'invisible': [('return_count', '=', 0)]}" groups="base.group_user"> - +
    From 5f0897a0a2a7b5b104c8449a03dcdf08f76bbd1d Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sun, 22 Dec 2019 14:26:58 -0600 Subject: [PATCH 144/631] [FIX] fieldservice_stock: PEP8 error [UPD] Update fieldservice_stock.pot --- fieldservice_stock/i18n/fieldservice_stock.pot | 10 +++++----- fieldservice_stock/models/fsm_order.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index 935f810a0c..8f20a16c0e 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -156,11 +156,6 @@ msgstr "" msgid "Products" msgstr "" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Receipts" -msgstr "" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage msgid "Request State" @@ -171,6 +166,11 @@ msgstr "" msgid "Return Orders" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Returns" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id msgid "Serial #" diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 83187089df..ee0a3987db 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -125,7 +125,7 @@ def action_view_returns(self): action = self.env.ref('stock.action_picking_tree_all').read()[0] pickings = self.mapped('picking_ids') return_ids = [picking.id for picking in pickings if - picking.picking_type_id.code == 'incoming'] + picking.picking_type_id.code == 'incoming'] if len(return_ids) > 1: action['domain'] = [('id', 'in', return_ids)] elif pickings: From afd6b5bfc7ab792fb5db0be65ed8f43b0cc9293d Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 30 Dec 2019 16:54:35 +0000 Subject: [PATCH 145/631] fieldservice_stock 12.0.1.2.0 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 10 +- fieldservice_stock/i18n/es.po | 250 +++++++++++++++++++++++++++++ fieldservice_stock/i18n/es_CL.po | 15 +- 4 files changed, 266 insertions(+), 11 deletions(-) create mode 100644 fieldservice_stock/i18n/es.po diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index b25af0d471..98bd750146 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.1.0', + 'version': '12.0.1.2.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index 8c35057e55..7c65aff38c 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -159,11 +159,6 @@ msgstr "Produktvorlage" msgid "Products" msgstr "" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Receipts" -msgstr "" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage msgid "Request State" @@ -174,6 +169,11 @@ msgstr "" msgid "Return Orders" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Returns" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id msgid "Serial #" diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po new file mode 100644 index 0000000000..5e1a62fa4d --- /dev/null +++ b/fieldservice_stock/i18n/es.po @@ -0,0 +1,250 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-18 06:35+0000\n" +"Last-Translator: Nelson Ramírez Sánchez \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 3.8\n" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Cancel" +msgstr "Cancelar" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Cancelled" +msgstr "Cancelado" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment +msgid "Creates a FSM Equipment" +msgstr "Crea Equipos FSM" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id +msgid "Current Inventory Location" +msgstr "Ubicación Actual de Inventario" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Deliveries" +msgstr "Entregas" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count +msgid "Delivery Orders" +msgstr "Pedidos de Entrega" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Done" +msgstr "Hecho" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Draft" +msgstr "Borrador" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id +msgid "Equipment" +msgstr "Equipo" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search +msgid "FSM Order" +msgstr "Orden FSM" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversión de Registro FSM" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_equipment +msgid "Field Service Equipment" +msgstr "Equipo de Servicio de Campo" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_order +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id +msgid "Field Service Order" +msgstr "Orden de Servicio de Campo" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "In progress" +msgstr "En progreso" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Inventory" +msgstr "Inventario" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id +msgid "Inventory Location" +msgstr "Ubicación de Inventario" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_production_lot +msgid "Lot/Serial" +msgstr "Lote / Serie" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids +msgid "Operations" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids +msgid "Order Lines" +msgstr "Líneas de Pedido" + +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/fsm_order.py:54 +#: code:addons/fieldservice_stock/models/fsm_order.py:67 +#: code:addons/fieldservice_stock/models/fsm_order.py:80 +#, python-format +msgid "Please create a stock request." +msgstr "Por favor cree una solicitud de stock." + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_procurement_group +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id +msgid "Procurement Group" +msgstr "Grupo de Adquisiciones" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id +msgid "Product" +msgstr "Producto" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimientos de Producto (Línea de Movimiento de Stock)" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_product_template +msgid "Product Template" +msgstr "Plantilla de Producto" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product +msgid "Products" +msgstr "Productos" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage +msgid "Request State" +msgstr "Estado de Solicitud" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count +msgid "Return Orders" +msgstr "Órdenes de Devolución" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +#, fuzzy +#| msgid "Return Orders" +msgid "Returns" +msgstr "Órdenes de Devolución" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id +msgid "Serial #" +msgstr "# de Serial" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Set to Draft" +msgstr "Establecer en Borrador" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id +msgid "Shipping Location" +msgstr "Lugar de Envío" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de Stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request +msgid "Stock Request" +msgstr "Solicitud de Stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request_order +msgid "Stock Request Order" +msgstr "Pedido de Solicitud de Stock" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request +msgid "Stock Requests" +msgstr "Solicitudes de Stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_rule +msgid "Stock Rule" +msgstr "Regla de Stock" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Submit" +msgstr "Enviar" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Submitted" +msgstr "Enviado" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking +msgid "Transfer" +msgstr "Transferir" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids +msgid "Transfers" +msgstr "Transferencias" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse" +msgstr "Almacén" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse used to ship the materials" +msgstr "Almacén utilizado para enviar los materiales" + +#~ msgid "Receipts" +#~ msgstr "Ingresos" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 47b27bf3e6..8d014d13c4 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -159,11 +159,6 @@ msgstr "Plantilla de Producto" msgid "Products" msgstr "Productos" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Receipts" -msgstr "Ingresos" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage msgid "Request State" @@ -174,6 +169,13 @@ msgstr "Estado de Solicitud" msgid "Return Orders" msgstr "Órdenes de Devolución" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +#, fuzzy +#| msgid "Return Orders" +msgid "Returns" +msgstr "Órdenes de Devolución" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id msgid "Serial #" @@ -243,3 +245,6 @@ msgstr "Almacén" #: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id msgid "Warehouse used to ship the materials" msgstr "Almacén utilizado para enviar los materiales" + +#~ msgid "Receipts" +#~ msgstr "Ingresos" From f9c92d6d72c088a62dea8efa1b8a85727b8e5b10 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 28 Jan 2020 14:32:25 -0600 Subject: [PATCH 146/631] [IMP] fieldservice_stock: Add warehouse to territory --- fieldservice_stock/__manifest__.py | 1 + fieldservice_stock/models/__init__.py | 1 + fieldservice_stock/models/fsm_territory.py | 9 ++++++++ fieldservice_stock/views/fsm_territory.xml | 27 ++++++++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 fieldservice_stock/models/fsm_territory.py create mode 100644 fieldservice_stock/views/fsm_territory.xml diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 98bd750146..9e667a19e4 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -18,6 +18,7 @@ 'data': [ 'security/ir.model.access.csv', 'data/fsm_stock_data.xml', + 'views/fsm_territory.xml', 'views/fsm_location.xml', 'views/fsm_order.xml', 'views/stock.xml', diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index c34c5a24a9..53c9270de6 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -2,6 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ( + fsm_territory, fsm_location, fsm_order, stock_move_line, diff --git a/fieldservice_stock/models/fsm_territory.py b/fieldservice_stock/models/fsm_territory.py new file mode 100644 index 0000000000..12959591af --- /dev/null +++ b/fieldservice_stock/models/fsm_territory.py @@ -0,0 +1,9 @@ +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class FSMTerritory(models.Model): + _inherit = 'fsm.territory' + + warehouse_id = fields.Many2one('stock.warehouse', string='Warehouse') diff --git a/fieldservice_stock/views/fsm_territory.xml b/fieldservice_stock/views/fsm_territory.xml new file mode 100644 index 0000000000..d6ec1dc11b --- /dev/null +++ b/fieldservice_stock/views/fsm_territory.xml @@ -0,0 +1,27 @@ + + + + + fsm.territory.warehouse.tree + fsm.territory + + + + + + + + + + + fsm.territory.warehouse.form + fsm.territory + + + + + + + + + From ff778d8e7a171f6deb7948a5eb2b6c6986c22625 Mon Sep 17 00:00:00 2001 From: Daniel Reis Date: Fri, 31 Jan 2020 08:57:22 +0000 Subject: [PATCH 147/631] [FIX] Don't error if some moves were deleted by previous logic When partially receiving Products that require Lot numbers, creating the backorder would raise an error, caused by missing records. Invalidating cache or rebrowsing the records did not fix the issue. Closes #492 --- fieldservice_stock/i18n/es.po | 10 ++++------ fieldservice_stock/models/stock_move_line.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index 5e1a62fa4d..647a539d09 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2019-11-18 06:35+0000\n" +"PO-Revision-Date: 2020-02-02 16:47+0000\n" "Last-Translator: Nelson Ramírez Sánchez \n" "Language-Team: none\n" "Language: es\n" @@ -14,7 +14,7 @@ msgstr "" "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" +"X-Generator: Weblate 3.10\n" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock @@ -118,7 +118,7 @@ msgstr "Lote / Serie" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids msgid "Operations" -msgstr "" +msgstr "Operaciones" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids @@ -171,10 +171,8 @@ msgstr "Órdenes de Devolución" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -#, fuzzy -#| msgid "Return Orders" msgid "Returns" -msgstr "Órdenes de Devolución" +msgstr "Devoluciones" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id diff --git a/fieldservice_stock/models/stock_move_line.py b/fieldservice_stock/models/stock_move_line.py index bda774e0c1..92c6dbba1a 100644 --- a/fieldservice_stock/models/stock_move_line.py +++ b/fieldservice_stock/models/stock_move_line.py @@ -1,6 +1,6 @@ # Copyright (C) 2018 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models +from odoo import exceptions, models class StockMoveLine(models.Model): @@ -9,7 +9,13 @@ class StockMoveLine(models.Model): def _action_done(self): res = super(StockMoveLine, self)._action_done() for rec in self: - if rec.move_id: + # cases were found where self contained deleted records + # example is creating a backorder for Products with lot number + try: + move_id = rec.move_id + except exceptions.MissingError: + move_id = None + if move_id: for request in rec.move_id.allocation_ids: if (request.stock_request_id.state == 'done' and request.stock_request_id.fsm_order_id): From e9cfa490c3bb193353c26bc21bc87fb9e73950d8 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 3 Feb 2020 08:38:22 -0600 Subject: [PATCH 148/631] [IMP] fieldservice_stock: Views and doc --- fieldservice_stock/readme/CONFIGURE.rst | 6 ++++++ fieldservice_stock/views/fsm_territory.xml | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fieldservice_stock/readme/CONFIGURE.rst b/fieldservice_stock/readme/CONFIGURE.rst index 60a1a510d9..8c54175260 100644 --- a/fieldservice_stock/readme/CONFIGURE.rst +++ b/fieldservice_stock/readme/CONFIGURE.rst @@ -18,3 +18,9 @@ procurement rule for that route: * Source Location: Partner Locations/Customers * Move Supply Method: Take From Stock * Operation Type: YourCompany: Receipts + +If you are in a multi-warehouse situation: + +* Go to Field Service > Configuration > Territories +* Create or select a territory +* Set the warehouse that will serve this territory diff --git a/fieldservice_stock/views/fsm_territory.xml b/fieldservice_stock/views/fsm_territory.xml index d6ec1dc11b..68b17195b9 100644 --- a/fieldservice_stock/views/fsm_territory.xml +++ b/fieldservice_stock/views/fsm_territory.xml @@ -7,7 +7,7 @@ - +
    @@ -19,7 +19,7 @@ - + From 22b8c5bf1a5bb05608a69755de984a7bdea62094 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 3 Feb 2020 14:56:18 +0000 Subject: [PATCH 149/631] fieldservice_stock 12.0.1.2.1 --- fieldservice_stock/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 9e667a19e4..eceb94a642 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.2.0', + 'version': '12.0.1.2.1', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " From d6bd605908bb7da0df510693469eefc5e1750505 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 5 Feb 2020 12:25:09 -0600 Subject: [PATCH 150/631] [FIX] fieldservice_stock [UPD] Update fieldservice_stock.pot [UPD] README.rst --- fieldservice_stock/README.rst | 6 ++++++ fieldservice_stock/i18n/fieldservice_stock.pot | 6 ++++++ fieldservice_stock/static/description/index.html | 6 ++++++ fieldservice_stock/views/fsm_territory.xml | 6 ++++-- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index f5c2166892..87b9146ec3 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -65,6 +65,12 @@ procurement rule for that route: * Move Supply Method: Take From Stock * Operation Type: YourCompany: Receipts +If you are in a multi-warehouse situation: + +* Go to Field Service > Configuration > Territories +* Create or select a territory +* Set the warehouse that will serve this territory + Usage ===== diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index 8f20a16c0e..915826d578 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -221,6 +221,11 @@ msgstr "" msgid "Submitted" msgstr "" +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_territory +msgid "Territory" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -233,6 +238,7 @@ msgstr "" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id msgid "Warehouse" msgstr "" diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 6177036f81..fdd70ff60d 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -416,6 +416,12 @@

    Configuration

  • Move Supply Method: Take From Stock
  • Operation Type: YourCompany: Receipts
  • +

    If you are in a multi-warehouse situation:

    +
      +
    • Go to Field Service > Configuration > Territories
    • +
    • Create or select a territory
    • +
    • Set the warehouse that will serve this territory
    • +

    Usage

    diff --git a/fieldservice_stock/views/fsm_territory.xml b/fieldservice_stock/views/fsm_territory.xml index 68b17195b9..bc6698c152 100644 --- a/fieldservice_stock/views/fsm_territory.xml +++ b/fieldservice_stock/views/fsm_territory.xml @@ -7,7 +7,8 @@ - + @@ -19,7 +20,8 @@ - + From f2db555cd3123172f336fb1810b8af4a95e237fd Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 6 Feb 2020 21:15:16 +0000 Subject: [PATCH 151/631] fieldservice_stock 12.0.1.3.0 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 6 ++++++ fieldservice_stock/i18n/es.po | 6 ++++++ fieldservice_stock/i18n/es_CL.po | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index eceb94a642..4a1be54e28 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.2.1', + 'version': '12.0.1.3.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index 7c65aff38c..6edca03c30 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -224,6 +224,11 @@ msgstr "" msgid "Submitted" msgstr "" +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_territory +msgid "Territory" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -236,6 +241,7 @@ msgstr "" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id msgid "Warehouse" msgstr "" diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index 647a539d09..fade02de3b 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -224,6 +224,11 @@ msgstr "Enviar" msgid "Submitted" msgstr "Enviado" +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_territory +msgid "Territory" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -236,6 +241,7 @@ msgstr "Transferencias" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id msgid "Warehouse" msgstr "Almacén" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 8d014d13c4..78a1371875 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -226,6 +226,11 @@ msgstr "Enviar" msgid "Submitted" msgstr "Enviado" +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_territory +msgid "Territory" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -238,6 +243,7 @@ msgstr "Transferencias" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id msgid "Warehouse" msgstr "Almacén" From ed586a24ecc428ff1f01c7e002626240aa31d313 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Mon, 24 Feb 2020 17:26:50 +0530 Subject: [PATCH 152/631] [12.0][IMP] fieldservice_stock [UPD] Update fieldservice_stock.pot --- .../i18n/fieldservice_stock.pot | 30 +++++++++++++++++++ fieldservice_stock/views/fsm_order.xml | 20 ++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index 915826d578..a7cf57132d 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -13,6 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Allocated Quantity" +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Cancel" @@ -49,6 +54,11 @@ msgstr "" msgid "Done" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Done Quantity" +msgstr "" + #. module: fieldservice_stock #: selection:fsm.order,request_stage:0 msgid "Draft" @@ -112,6 +122,11 @@ msgstr "" msgid "Lot/Serial" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Moves" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids msgid "Operations" @@ -156,11 +171,21 @@ msgstr "" msgid "Products" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Reference" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage msgid "Request State" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Requested Quantity" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count msgid "Return Orders" @@ -236,6 +261,11 @@ msgstr "" msgid "Transfers" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Unit of Measure" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index 22dea28a5a..15af98d18a 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -69,7 +69,25 @@ - + + + + + + + + + + + + + + + + + + + From 3c6135cbaeb7d9203ac70ed9fbdb4125c236df4d Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 24 Feb 2020 20:42:00 +0000 Subject: [PATCH 153/631] fieldservice_stock 12.0.1.4.0 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 30 ++++++++++++++++++++++++++ fieldservice_stock/i18n/es.po | 34 ++++++++++++++++++++++++++++-- fieldservice_stock/i18n/es_CL.po | 32 ++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 3 deletions(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 4a1be54e28..3c9f806eb4 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.3.0', + 'version': '12.0.1.4.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index 6edca03c30..54786115ee 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -16,6 +16,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.8\n" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Allocated Quantity" +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Cancel" @@ -52,6 +57,11 @@ msgstr "" msgid "Done" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Done Quantity" +msgstr "" + #. module: fieldservice_stock #: selection:fsm.order,request_stage:0 msgid "Draft" @@ -115,6 +125,11 @@ msgstr "" msgid "Lot/Serial" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Moves" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids msgid "Operations" @@ -159,11 +174,21 @@ msgstr "Produktvorlage" msgid "Products" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Reference" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage msgid "Request State" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Requested Quantity" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count msgid "Return Orders" @@ -239,6 +264,11 @@ msgstr "" msgid "Transfers" msgstr "" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Unit of Measure" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index fade02de3b..b1efb49689 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-02-02 16:47+0000\n" +"PO-Revision-Date: 2020-03-04 00:14+0000\n" "Last-Translator: Nelson Ramírez Sánchez \n" "Language-Team: none\n" "Language: es\n" @@ -16,6 +16,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.10\n" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Allocated Quantity" +msgstr "Cantidad Asignada" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Cancel" @@ -52,6 +57,11 @@ msgstr "Pedidos de Entrega" msgid "Done" msgstr "Hecho" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Done Quantity" +msgstr "Cantidad Hecha" + #. module: fieldservice_stock #: selection:fsm.order,request_stage:0 msgid "Draft" @@ -115,6 +125,11 @@ msgstr "Ubicación de Inventario" msgid "Lot/Serial" msgstr "Lote / Serie" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Moves" +msgstr "Movimientos" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids msgid "Operations" @@ -159,11 +174,21 @@ msgstr "Plantilla de Producto" msgid "Products" msgstr "Productos" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Reference" +msgstr "Referencia" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage msgid "Request State" msgstr "Estado de Solicitud" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Requested Quantity" +msgstr "Cantidad Requerida" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count msgid "Return Orders" @@ -227,7 +252,7 @@ msgstr "Enviado" #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_territory msgid "Territory" -msgstr "" +msgstr "Territorio" #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking @@ -239,6 +264,11 @@ msgstr "Transferir" msgid "Transfers" msgstr "Transferencias" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Unit of Measure" +msgstr "Unidad de Medida" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 78a1371875..4fa58755d2 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -16,6 +16,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.8\n" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Allocated Quantity" +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Cancel" @@ -52,6 +57,11 @@ msgstr "Pedidos de Entrega" msgid "Done" msgstr "Hecho" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Done Quantity" +msgstr "" + #. module: fieldservice_stock #: selection:fsm.order,request_stage:0 msgid "Draft" @@ -115,6 +125,11 @@ msgstr "Ubicación de Inventario" msgid "Lot/Serial" msgstr "Lote / Serie" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Moves" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids msgid "Operations" @@ -159,11 +174,23 @@ msgstr "Plantilla de Producto" msgid "Products" msgstr "Productos" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Reference" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage msgid "Request State" msgstr "Estado de Solicitud" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +#, fuzzy +#| msgid "Request State" +msgid "Requested Quantity" +msgstr "Estado de Solicitud" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count msgid "Return Orders" @@ -241,6 +268,11 @@ msgstr "Transferir" msgid "Transfers" msgstr "Transferencias" +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Unit of Measure" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id From 0f4173d5d6a270aa31f7e13fbb544c4ee9cfca72 Mon Sep 17 00:00:00 2001 From: Daniel Reis Date: Thu, 19 Mar 2020 18:20:13 +0000 Subject: [PATCH 154/631] [IMP] Add "Create FSM Equipment" option to Operation Types FSM Equipment creation for serial number tracked products can be on specific Operation Types, such as Delivery or Receipts. --- fieldservice_stock/__manifest__.py | 3 ++- fieldservice_stock/models/__init__.py | 1 + fieldservice_stock/models/stock_move.py | 13 ++++++------ .../models/stock_picking_type.py | 13 ++++++++++++ fieldservice_stock/readme/CONFIGURE.rst | 21 +++++++++++++++++++ fieldservice_stock/views/product_template.xml | 2 +- .../views/stock_picking_type.xml | 16 ++++++++++++++ 7 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 fieldservice_stock/models/stock_picking_type.py create mode 100644 fieldservice_stock/views/stock_picking_type.xml diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 3c9f806eb4..d9e559532c 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.4.0', + 'version': '12.0.2.0.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " @@ -24,6 +24,7 @@ 'views/stock.xml', 'views/fsm_equipment.xml', 'views/product_template.xml', + 'views/stock_picking_type.xml', 'views/stock_production_lot.xml', 'views/stock_request.xml', 'views/stock_request_order.xml', diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index 53c9270de6..9eb61a602c 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -10,6 +10,7 @@ procurement_group, stock_rule, stock_picking, + stock_picking_type, fsm_equipment, product_template, stock_production_lot, diff --git a/fieldservice_stock/models/stock_move.py b/fieldservice_stock/models/stock_move.py index 00ea84d474..554043edc9 100644 --- a/fieldservice_stock/models/stock_move.py +++ b/fieldservice_stock/models/stock_move.py @@ -20,10 +20,11 @@ def prepare_equipment_values(self, move_line): def _action_done(self): res = super()._action_done() for rec in self: - if rec.picking_code == 'outgoing' and rec.state == 'done': - if rec.product_tmpl_id.create_fsm_equipment: - for line in rec.move_line_ids: - vals = self.prepare_equipment_values(line) - line.lot_id.fsm_equipment_id = \ - rec.env['fsm.equipment'].create(vals) + if (rec.state == 'done' + and rec.picking_type_id.create_fsm_equipment + and rec.product_tmpl_id.create_fsm_equipment): + for line in rec.move_line_ids: + vals = self.prepare_equipment_values(line) + line.lot_id.fsm_equipment_id = \ + rec.env['fsm.equipment'].create(vals) return res diff --git a/fieldservice_stock/models/stock_picking_type.py b/fieldservice_stock/models/stock_picking_type.py new file mode 100644 index 0000000000..5fe0671881 --- /dev/null +++ b/fieldservice_stock/models/stock_picking_type.py @@ -0,0 +1,13 @@ +# Copyright (C) 2020 Open Source Integrators, Daniel Reis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class StockPickingType(models.Model): + _inherit = 'stock.picking.type' + + create_fsm_equipment = fields.Boolean( + name="Create FSM Equipment", + help="Products with the 'Creates a FSM Equipment' flag " + "will automatically be converted to an FSM Equipment." + ) diff --git a/fieldservice_stock/readme/CONFIGURE.rst b/fieldservice_stock/readme/CONFIGURE.rst index 8c54175260..f4ee189e04 100644 --- a/fieldservice_stock/readme/CONFIGURE.rst +++ b/fieldservice_stock/readme/CONFIGURE.rst @@ -24,3 +24,24 @@ If you are in a multi-warehouse situation: * Go to Field Service > Configuration > Territories * Create or select a territory * Set the warehouse that will serve this territory + +Products can be automatically converted into FSM Equipments. +This is only available only for products tracked by serial number. +This needs to be enabled both on Operation Types and Products. +For example, we may want to create the FSM Equipment on Delivery, +or on Receipts. + +To enable on Products: + +* Go to Inventory > Master Data > Products +* Open the Product form, Inventory tab +* On the "Traceability" section, make sure + "Tracking" is set to "By Unique Serial Number" +* Enable the "Creates FSM Equipment" checkbox + +To enable on Operation Types: + +* Go to Inventory > Configuration > Operation Types +* Select the intended Operation Type ("Receipts" for example) +* On the "Traceability" section, enable the + "Create FSM Equipment" checkbox diff --git a/fieldservice_stock/views/product_template.xml b/fieldservice_stock/views/product_template.xml index 67c6ff5919..6b9d6f36e3 100644 --- a/fieldservice_stock/views/product_template.xml +++ b/fieldservice_stock/views/product_template.xml @@ -1,7 +1,7 @@ - + product.template diff --git a/fieldservice_stock/views/stock_picking_type.xml b/fieldservice_stock/views/stock_picking_type.xml new file mode 100644 index 0000000000..d197e10f6a --- /dev/null +++ b/fieldservice_stock/views/stock_picking_type.xml @@ -0,0 +1,16 @@ + + + + + stock.picking.type + + + + + + + + + + + From d5426782cf3cfd1632729b0f44c64e5880955812 Mon Sep 17 00:00:00 2001 From: Daniel Reis Date: Thu, 19 Mar 2020 21:08:56 +0000 Subject: [PATCH 155/631] [IMP] Migration script to handle the otherwise breaking changes --- .../migrations/12.0.2.0.0/post-migration.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 fieldservice_stock/migrations/12.0.2.0.0/post-migration.py diff --git a/fieldservice_stock/migrations/12.0.2.0.0/post-migration.py b/fieldservice_stock/migrations/12.0.2.0.0/post-migration.py new file mode 100644 index 0000000000..2855328b90 --- /dev/null +++ b/fieldservice_stock/migrations/12.0.2.0.0/post-migration.py @@ -0,0 +1,13 @@ +# Copyright (C) 2020, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def migrate(env, version): + if not version: + return + + env.execute(""" + UPDATE stock_picking_type + SET create_fsm_equipment = 'true' + WHERE code = 'outgoing'; + """) From d9e7b18b970ef501d9eb6616cf45f1cbf46da305 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 18 Mar 2020 17:18:03 -0600 Subject: [PATCH 156/631] [IMP] fieldservice_stock: Set the FSM location when creating equipment --- fieldservice_stock/i18n/es_CL.po | 26 ++++++++----------- .../i18n/fieldservice_stock.pot | 3 +++ fieldservice_stock/models/fsm_order.py | 10 +++++-- fieldservice_stock/models/stock_move.py | 2 ++ 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 4fa58755d2..b9b2d25416 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2019-11-18 06:35+0000\n" +"PO-Revision-Date: 2020-03-20 01:13+0000\n" "Last-Translator: Nelson Ramírez Sánchez \n" "Language-Team: none\n" "Language: es_CL\n" @@ -14,12 +14,12 @@ msgstr "" "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" +"X-Generator: Weblate 3.10\n" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Allocated Quantity" -msgstr "" +msgstr "Cantidad Asignada" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock @@ -60,7 +60,7 @@ msgstr "Hecho" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Done Quantity" -msgstr "" +msgstr "Cantidad Hecha" #. module: fieldservice_stock #: selection:fsm.order,request_stage:0 @@ -128,12 +128,12 @@ msgstr "Lote / Serie" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Moves" -msgstr "" +msgstr "Movimientos" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids msgid "Operations" -msgstr "" +msgstr "Operaciones" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids @@ -177,7 +177,7 @@ msgstr "Productos" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" -msgstr "" +msgstr "Referencias" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage @@ -186,10 +186,8 @@ msgstr "Estado de Solicitud" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -#, fuzzy -#| msgid "Request State" msgid "Requested Quantity" -msgstr "Estado de Solicitud" +msgstr "Cantidad Pedida" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count @@ -198,10 +196,8 @@ msgstr "Órdenes de Devolución" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -#, fuzzy -#| msgid "Return Orders" msgid "Returns" -msgstr "Órdenes de Devolución" +msgstr "Devoluciones" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id @@ -256,7 +252,7 @@ msgstr "Enviado" #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_territory msgid "Territory" -msgstr "" +msgstr "Territorio" #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking @@ -271,7 +267,7 @@ msgstr "Transferencias" #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Unit of Measure" -msgstr "" +msgstr "Unidad de Medida" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index a7cf57132d..0305a2cadb 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -139,8 +139,11 @@ msgstr "" #. module: fieldservice_stock #: code:addons/fieldservice_stock/models/fsm_order.py:54 +#: code:addons/fieldservice_stock/models/fsm_order.py:60 #: code:addons/fieldservice_stock/models/fsm_order.py:67 +#: code:addons/fieldservice_stock/models/fsm_order.py:73 #: code:addons/fieldservice_stock/models/fsm_order.py:80 +#: code:addons/fieldservice_stock/models/fsm_order.py:86 #, python-format msgid "Please create a stock request." msgstr "" diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index ee0a3987db..1c470ad338 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -24,6 +24,11 @@ def _default_warehouse_id(self): [('company_id', '=', company)], limit=1) return warehouse_ids and warehouse_ids.id + @api.model + def _get_move_domain(self): + return [('picking_id.picking_type_id.code', 'in', + ('outgoing', 'incoming'))] + stock_request_ids = fields.One2many('stock.request', 'fsm_order_id', string="Order Lines") @@ -44,8 +49,9 @@ def _default_warehouse_id(self): request_stage = fields.Selection(REQUEST_STATES, string='Request State', default='draft', readonly=True, store=True) - move_ids = fields.One2many('stock.move', 'fsm_order_id', - string='Operations') + move_ids = fields.One2many( + 'stock.move', 'fsm_order_id', string='Operations', + domain=_get_move_domain) @api.multi def action_request_submit(self): diff --git a/fieldservice_stock/models/stock_move.py b/fieldservice_stock/models/stock_move.py index 554043edc9..92bbb8da84 100644 --- a/fieldservice_stock/models/stock_move.py +++ b/fieldservice_stock/models/stock_move.py @@ -13,6 +13,8 @@ def prepare_equipment_values(self, move_line): move_line.product_id.name, move_line.lot_id.name), 'product_id': move_line.product_id.id, 'lot_id': move_line.lot_id.id, + 'location_id': + move_line.move_id.stock_request_ids.fsm_order_id.location_id.id, 'current_location_id': move_line.move_id.stock_request_ids.fsm_order_id.location_id.id, 'current_stock_location_id': move_line.location_dest_id.id} From a4f9e5f76cb7925007feaa647db087d0b7445f44 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 13 Apr 2020 14:30:28 +0000 Subject: [PATCH 157/631] fieldservice_stock 12.0.1.5.0 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ [UPD] Update fieldservice_stock.pot Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ [UPD] Update fieldservice_stock.pot [UPD] README.rst --- fieldservice_stock/README.rst | 21 +++++++++++++++++++ fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 6 +++--- fieldservice_stock/i18n/es.po | 6 +++--- fieldservice_stock/i18n/es_CL.po | 6 +++--- .../i18n/fieldservice_stock.pot | 18 +++++++++++++--- .../static/description/index.html | 20 ++++++++++++++++++ 7 files changed, 66 insertions(+), 13 deletions(-) diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 87b9146ec3..f5d442763b 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -71,6 +71,27 @@ If you are in a multi-warehouse situation: * Create or select a territory * Set the warehouse that will serve this territory +Products can be automatically converted into FSM Equipments. +This is only available only for products tracked by serial number. +This needs to be enabled both on Operation Types and Products. +For example, we may want to create the FSM Equipment on Delivery, +or on Receipts. + +To enable on Products: + +* Go to Inventory > Master Data > Products +* Open the Product form, Inventory tab +* On the "Traceability" section, make sure + "Tracking" is set to "By Unique Serial Number" +* Enable the "Creates FSM Equipment" checkbox + +To enable on Operation Types: + +* Go to Inventory > Configuration > Operation Types +* Select the intended Operation Type ("Receipts" for example) +* On the "Traceability" section, enable the + "Create FSM Equipment" checkbox + Usage ===== diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index d9e559532c..1a70b4e826 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.2.0.0', + 'version': '12.0.1.5.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index 54786115ee..ba86e778a4 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -141,9 +141,9 @@ msgid "Order Lines" msgstr "" #. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:54 -#: code:addons/fieldservice_stock/models/fsm_order.py:67 -#: code:addons/fieldservice_stock/models/fsm_order.py:80 +#: code:addons/fieldservice_stock/models/fsm_order.py:60 +#: code:addons/fieldservice_stock/models/fsm_order.py:73 +#: code:addons/fieldservice_stock/models/fsm_order.py:86 #, python-format msgid "Please create a stock request." msgstr "" diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index b1efb49689..211de7a8fa 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -141,9 +141,9 @@ msgid "Order Lines" msgstr "Líneas de Pedido" #. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:54 -#: code:addons/fieldservice_stock/models/fsm_order.py:67 -#: code:addons/fieldservice_stock/models/fsm_order.py:80 +#: code:addons/fieldservice_stock/models/fsm_order.py:60 +#: code:addons/fieldservice_stock/models/fsm_order.py:73 +#: code:addons/fieldservice_stock/models/fsm_order.py:86 #, python-format msgid "Please create a stock request." msgstr "Por favor cree una solicitud de stock." diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index b9b2d25416..06f54a6034 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -141,9 +141,9 @@ msgid "Order Lines" msgstr "Líneas de Pedido" #. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:54 -#: code:addons/fieldservice_stock/models/fsm_order.py:67 -#: code:addons/fieldservice_stock/models/fsm_order.py:80 +#: code:addons/fieldservice_stock/models/fsm_order.py:60 +#: code:addons/fieldservice_stock/models/fsm_order.py:73 +#: code:addons/fieldservice_stock/models/fsm_order.py:86 #, python-format msgid "Please create a stock request." msgstr "Por favor cree una solicitud de stock." diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index 0305a2cadb..d5ed1034c6 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -28,6 +28,11 @@ msgstr "" msgid "Cancelled" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "Create Fsm Equipment" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment #: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment @@ -138,11 +143,13 @@ msgid "Order Lines" msgstr "" #. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:54 +#: model:ir.model,name:fieldservice_stock.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: fieldservice_stock #: code:addons/fieldservice_stock/models/fsm_order.py:60 -#: code:addons/fieldservice_stock/models/fsm_order.py:67 #: code:addons/fieldservice_stock/models/fsm_order.py:73 -#: code:addons/fieldservice_stock/models/fsm_order.py:80 #: code:addons/fieldservice_stock/models/fsm_order.py:86 #, python-format msgid "Please create a stock request." @@ -174,6 +181,11 @@ msgstr "" msgid "Products" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "Products with the 'Creates a FSM Equipment' flag will automatically be converted to an FSM Equipment." +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index fdd70ff60d..b5d319b640 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -422,6 +422,26 @@

    Configuration

  • Create or select a territory
  • Set the warehouse that will serve this territory
  • +

    Products can be automatically converted into FSM Equipments. +This is only available only for products tracked by serial number. +This needs to be enabled both on Operation Types and Products. +For example, we may want to create the FSM Equipment on Delivery, +or on Receipts.

    +

    To enable on Products:

    +
      +
    • Go to Inventory > Master Data > Products
    • +
    • Open the Product form, Inventory tab
    • +
    • On the “Traceability” section, make sure +“Tracking” is set to “By Unique Serial Number”
    • +
    • Enable the “Creates FSM Equipment” checkbox
    • +
    +

    To enable on Operation Types:

    +
      +
    • Go to Inventory > Configuration > Operation Types
    • +
    • Select the intended Operation Type (“Receipts” for example)
    • +
    • On the “Traceability” section, enable the +“Create FSM Equipment” checkbox
    • +

    Usage

    From bfbcfaf1e41d6d121920a7e8ad545b7af6c7ebd1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 14 Apr 2020 23:18:43 +0000 Subject: [PATCH 158/631] fieldservice_stock 12.0.2.1.0 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 17 +++++++++++++++++ fieldservice_stock/i18n/es.po | 19 +++++++++++++++++++ fieldservice_stock/i18n/es_CL.po | 19 +++++++++++++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 1a70b4e826..569b1f1787 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.1.5.0', + 'version': '12.0.2.1.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index ba86e778a4..3e30e67c14 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -31,6 +31,11 @@ msgstr "Abbrechen" msgid "Cancelled" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "Create Fsm Equipment" +msgstr "" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment #: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment @@ -140,6 +145,11 @@ msgstr "" msgid "Order Lines" msgstr "" +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking_type +msgid "Picking Type" +msgstr "" + #. module: fieldservice_stock #: code:addons/fieldservice_stock/models/fsm_order.py:60 #: code:addons/fieldservice_stock/models/fsm_order.py:73 @@ -174,6 +184,13 @@ msgstr "Produktvorlage" msgid "Products" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "" +"Products with the 'Creates a FSM Equipment' flag will automatically be " +"converted to an FSM Equipment." +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index 211de7a8fa..78224fc452 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -31,6 +31,13 @@ msgstr "Cancelar" msgid "Cancelled" msgstr "Cancelado" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +#, fuzzy +#| msgid "Creates a FSM Equipment" +msgid "Create Fsm Equipment" +msgstr "Crea Equipos FSM" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment #: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment @@ -140,6 +147,11 @@ msgstr "Operaciones" msgid "Order Lines" msgstr "Líneas de Pedido" +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking_type +msgid "Picking Type" +msgstr "" + #. module: fieldservice_stock #: code:addons/fieldservice_stock/models/fsm_order.py:60 #: code:addons/fieldservice_stock/models/fsm_order.py:73 @@ -174,6 +186,13 @@ msgstr "Plantilla de Producto" msgid "Products" msgstr "Productos" +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "" +"Products with the 'Creates a FSM Equipment' flag will automatically be " +"converted to an FSM Equipment." +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 06f54a6034..26943140e6 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -31,6 +31,13 @@ msgstr "Cancelar" msgid "Cancelled" msgstr "Cancelado" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +#, fuzzy +#| msgid "Creates a FSM Equipment" +msgid "Create Fsm Equipment" +msgstr "Crea Equipos FSM" + #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment #: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment @@ -140,6 +147,11 @@ msgstr "Operaciones" msgid "Order Lines" msgstr "Líneas de Pedido" +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking_type +msgid "Picking Type" +msgstr "" + #. module: fieldservice_stock #: code:addons/fieldservice_stock/models/fsm_order.py:60 #: code:addons/fieldservice_stock/models/fsm_order.py:73 @@ -174,6 +186,13 @@ msgstr "Plantilla de Producto" msgid "Products" msgstr "Productos" +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "" +"Products with the 'Creates a FSM Equipment' flag will automatically be " +"converted to an FSM Equipment." +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" From a41258e5c54b3f81a58decf3980bbda0e7e3acfd Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 15 Apr 2020 16:04:57 -0700 Subject: [PATCH 159/631] [IMP] FSM Stock Request Workflow Adjustment [DEL] Unused Imports [IMP] Consistency with Original Method [IMP] Fix Correction [IMP] Call Super() [UPD] Update fieldservice_stock.pot --- .../i18n/fieldservice_stock.pot | 6 ++++ fieldservice_stock/models/stock_request.py | 32 ++++++++++--------- .../models/stock_request_order.py | 2 +- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index d5ed1034c6..ec33be8660 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -266,6 +266,12 @@ msgstr "" msgid "Territory" msgstr "" +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/stock_request.py:58 +#, python-format +msgid "There is already a Stock Request Order with the same Field Service Order and Warehouse that is in Draft state. Please add this Stock Request there. (%s)" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" diff --git a/fieldservice_stock/models/stock_request.py b/fieldservice_stock/models/stock_request.py index 882ff13ca9..3acf4440e5 100644 --- a/fieldservice_stock/models/stock_request.py +++ b/fieldservice_stock/models/stock_request.py @@ -1,7 +1,7 @@ # Copyright (C) 2019 Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from datetime import datetime, timedelta -from odoo import api, fields, models +from odoo import api, fields, models, _ +from odoo.exceptions import UserError class StockRequest(models.Model): @@ -42,28 +42,26 @@ def create(self, vals): fsm_order = self.env['fsm.order'].browse(vals['fsm_order_id']) fsm_order.request_stage = 'draft' vals['warehouse_id'] = fsm_order.warehouse_id.id - val_date = vals['expected_date'] - if not isinstance(vals['expected_date'], str): - val_date = datetime.strftime(vals['expected_date'], - '%Y-%m-%d %H:%M:%S') - val_date = datetime.strptime(val_date, '%Y-%m-%d %H:%M:%S') picking_type_id = self.env['stock.picking.type'].search( [('code', '=', 'stock_request_order'), ('warehouse_id', '=', vals['warehouse_id'])], limit=1) - date_window_after = val_date - timedelta(hours=1) order = self.env['stock.request.order'].search([ ('fsm_order_id', '=', vals['fsm_order_id']), ('warehouse_id', '=', vals['warehouse_id']), ('picking_type_id', '=', picking_type_id.id), ('direction', '=', vals['direction']), - ('expected_date', '>', date_window_after), - ('state', '=', 'draft') - ]) - if order: - vals['expected_date'] = order.expected_date - vals['order_id'] = order.id - else: + ('state', '=', 'draft')], order="id asc") + + # User created a new SRO Manually + if len(order) > 1: + raise UserError(_('There is already a Stock Request Order \ + with the same Field Service Order and \ + Warehouse that is in Draft state. Please \ + add this Stock Request there. \ + (%s)') % order[0].name) + # Made from an FSO for the first time, create the SRO here + elif not order and vals.get('fsm_order_id'): values = self.prepare_order_values(vals) values.update({ 'picking_type_id': picking_type_id.id, @@ -71,6 +69,10 @@ def create(self, vals): }) vals['order_id'] = self.env['stock.request.order'].\ create(values).id + # There is an SRO made from FSO, assign here + elif len(order) == 1 and vals.get('fsm_order_id'): + vals['expected_date'] = order.expected_date + vals['order_id'] = order.id return super().create(vals) def _prepare_procurement_values(self, group_id=False): diff --git a/fieldservice_stock/models/stock_request_order.py b/fieldservice_stock/models/stock_request_order.py index 21cb0707ce..e96d3687c4 100644 --- a/fieldservice_stock/models/stock_request_order.py +++ b/fieldservice_stock/models/stock_request_order.py @@ -11,7 +11,7 @@ class StockRequestOrder(models.Model): 'fsm.order', string="FSM Order", ondelete='cascade', index=True, copy=False) - @api.onchange('direction', 'fsm_order_id') + @api.onchange('warehouse_id', 'direction', 'fsm_order_id') def _onchange_location_id(self): super()._onchange_location_id() if self.fsm_order_id: From 1c945695fbd82d50c3d9806491eec684650e9e8e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 21 Apr 2020 13:57:43 +0000 Subject: [PATCH 160/631] fieldservice_stock 12.0.2.1.1 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 10 + fieldservice_stock/i18n/es.po | 10 + fieldservice_stock/i18n/es_CL.po | 10 + fieldservice_stock/i18n/pt_BR.po | 307 +++++++++++++++++++++++++++++ 5 files changed, 338 insertions(+), 1 deletion(-) create mode 100644 fieldservice_stock/i18n/pt_BR.po diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 569b1f1787..887e0010fa 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.2.1.0', + 'version': '12.0.2.1.1', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index 3e30e67c14..488f9fa190 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -271,6 +271,16 @@ msgstr "" msgid "Territory" msgstr "" +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/stock_request.py:58 +#, python-format +msgid "" +"There is already a Stock Request Order " +"with the same Field Service Order and " +"Warehouse that is in Draft state. Please " +"add this Stock Request there. (%s)" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index 78224fc452..f6c4c41b72 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -273,6 +273,16 @@ msgstr "Enviado" msgid "Territory" msgstr "Territorio" +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/stock_request.py:58 +#, python-format +msgid "" +"There is already a Stock Request Order " +"with the same Field Service Order and " +"Warehouse that is in Draft state. Please " +"add this Stock Request there. (%s)" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 26943140e6..e257545b7e 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -273,6 +273,16 @@ msgstr "Enviado" msgid "Territory" msgstr "Territorio" +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/stock_request.py:58 +#, python-format +msgid "" +"There is already a Stock Request Order " +"with the same Field Service Order and " +"Warehouse that is in Draft state. Please " +"add this Stock Request there. (%s)" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" diff --git a/fieldservice_stock/i18n/pt_BR.po b/fieldservice_stock/i18n/pt_BR.po new file mode 100644 index 0000000000..dab7400c54 --- /dev/null +++ b/fieldservice_stock/i18n/pt_BR.po @@ -0,0 +1,307 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-17 16: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_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Allocated Quantity" +msgstr "Quantidade Alocada" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Cancel" +msgstr "Cancelar" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Cancelled" +msgstr "Cancelado" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "Create Fsm Equipment" +msgstr "Criar Equipamento FSM (Field Service Management)" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment +#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment +msgid "Creates a FSM Equipment" +msgstr "Cria um Equipamento FSM (Field Service Management)" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id +msgid "Current Inventory Location" +msgstr "Localização Atual do Inventário" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Deliveries" +msgstr "Entregas" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count +msgid "Delivery Orders" +msgstr "Pedidos de Entrega" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Done" +msgstr "Concluído" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Done Quantity" +msgstr "Quantidade Concluída" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Draft" +msgstr "Rascunho" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id +msgid "Equipment" +msgstr "Equipamento" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search +msgid "FSM Order" +msgstr "Pedido de FSM (Field Service Management)" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversão de registro FSM (Field Service Management)" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_equipment +msgid "Field Service Equipment" +msgstr "Equipamento de Serviço de Campo" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_location +msgid "Field Service Location" +msgstr "Localização do Serviço de Campo" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_order +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id +msgid "Field Service Order" +msgstr "Pedido de Serviço de Campo" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "In progress" +msgstr "Em andamento" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Inventory" +msgstr "Inventário" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id +msgid "Inventory Location" +msgstr "Localização de Inventário" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_production_lot +msgid "Lot/Serial" +msgstr "Lote/Serial" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Moves" +msgstr "Movimentações" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids +msgid "Operations" +msgstr "Operações" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids +msgid "Order Lines" +msgstr "Linhas do Pedido" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipo de Coleta" + +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/fsm_order.py:60 +#: code:addons/fieldservice_stock/models/fsm_order.py:73 +#: code:addons/fieldservice_stock/models/fsm_order.py:86 +#, python-format +msgid "Please create a stock request." +msgstr "Por gentileza, crie uma requisição de estoque." + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_procurement_group +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id +msgid "Procurement Group" +msgstr "Grupo de Aquisições" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id +msgid "Product" +msgstr "Produto" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimentações de Produto (Linha de Movimentação de Estoque)" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_product_template +msgid "Product Template" +msgstr "Modelo de Produto" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product +msgid "Products" +msgstr "Produtos" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment +msgid "Products with the 'Creates a FSM Equipment' flag will automatically be converted to an FSM Equipment." +msgstr "" +"Os produtos com o sinalizador \"Cria um equipamento FSM\" serão " +"automaticamente convertidos em um equipamento FSM." + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Reference" +msgstr "Referência" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage +msgid "Request State" +msgstr "Estado da Requisição" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Requested Quantity" +msgstr "Quantidade Requisitada" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count +msgid "Return Orders" +msgstr "Retornar Pedidos" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Returns" +msgstr "Retornos" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id +msgid "Serial #" +msgstr "Serial #" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Set to Draft" +msgstr "Marque como rascunho" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id +msgid "Shipping Location" +msgstr "Localização do Embarque" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move +msgid "Stock Move" +msgstr "Movimentação de Estoque" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request +msgid "Stock Request" +msgstr "Requisição de Estoque" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_request_order +msgid "Stock Request Order" +msgstr "Pedido de Movimentação de Estoque" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request +msgid "Stock Requests" +msgstr "Requisições de Estoque" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_rule +msgid "Stock Rule" +msgstr "Regra de Estoque" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Submit" +msgstr "Submeter" + +#. module: fieldservice_stock +#: selection:fsm.order,request_stage:0 +msgid "Submitted" +msgstr "Submetido" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_territory +msgid "Territory" +msgstr "Território" + +#. module: fieldservice_stock +#: code:addons/fieldservice_stock/models/stock_request.py:58 +#, python-format +msgid "There is already a Stock Request Order with the same Field Service Order and Warehouse that is in Draft state. Please add this Stock Request there. (%s)" +msgstr "" +"Já existe um Pedido de Solicitação de Estoque com o mesmo Pedido de Serviço " +"de Campo e Armazém que está no estado Rascunho. Adicione essa solicitação de " +"estoque lá. (%s)" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking +msgid "Transfer" +msgstr "Transferência" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids +msgid "Transfers" +msgstr "Transferências" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Unit of Measure" +msgstr "Unidade de Medida (UoM)" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id +msgid "Warehouse" +msgstr "Armazém" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse used to ship the materials" +msgstr "Armazém utilizado para embarque dos materiais" From 54fabe46b982199294b20595622d8b54eb3af704 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Thu, 20 Aug 2020 18:54:21 +0530 Subject: [PATCH 161/631] [IMP] Gave Access to portal user. --- fieldservice_stock/security/ir.model.access.csv | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fieldservice_stock/security/ir.model.access.csv b/fieldservice_stock/security/ir.model.access.csv index 310dd94a39..1d629dc0fd 100644 --- a/fieldservice_stock/security/ir.model.access.csv +++ b/fieldservice_stock/security/ir.model.access.csv @@ -1,4 +1,12 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_stock_request_allocation_fsm_user,stock.request.allocation.user,stock_request.model_stock_request_allocation,base.group_user,1,0,0,0 +access_stock_request_allocation_portal,access.stock.request.allocation.portal,stock_request.model_stock_request_allocation,base.group_portal,1,0,0,0 access_stock_request_fsm_user,stock.request.user,stock_request.model_stock_request,fieldservice.group_fsm_user,1,0,0,0 access_stock_request_fsm_dispatcher,stock.request.dispatcher,stock_request.model_stock_request,fieldservice.group_fsm_dispatcher,1,1,1,1 +access_stock_request_portal,access.stock.request.portal,stock_request.model_stock_request,base.group_portal,1,0,0,0 +access_stock_move_portal,access.stock.move.portal,stock.model_stock_move,base.group_portal,1,1,0,0 +access_stock_picking_type_portal,access.stock.picking.type.portal,stock.model_stock_picking_type,base.group_portal,1,0,0,0 +access_product_product_portal,access.product.product.portal,product.model_product_product,base.group_portal,1,0,0,0 +access_product_template_portal,access.product.template.portal,product.model_product_template,base.group_portal,1,0,0,0 +access_stock_move_line_portal,access.stock.move.line.portal,stock.model_stock_move_line,base.group_portal,1,0,0,0 +access_uom_uom_portal,access.uom.uom.portal,uom.model_uom_uom,base.group_portal,1,0,0,0 From 81c92382205df479581ef0bfb17ec741fedeb08f Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 29 Sep 2020 19:10:10 +0000 Subject: [PATCH 162/631] fieldservice_stock 12.0.2.2.0 --- fieldservice_stock/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 887e0010fa..e98b166362 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.2.1.1', + 'version': '12.0.2.2.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " From 66f5d79f52f879da3dd3626ecb275ddc71548625 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Tue, 22 Sep 2020 04:42:23 -0300 Subject: [PATCH 163/631] [IMP] fieldservice_stock: Improve Current Inventory Location --- fieldservice_stock/models/fsm_equipment.py | 8 +++- fieldservice_stock/readme/CONTRIBUTORS.rst | 1 + fieldservice_stock/tests/__init__.py | 4 ++ .../tests/test_fsm_equipment.py | 45 +++++++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 fieldservice_stock/tests/__init__.py create mode 100644 fieldservice_stock/tests/test_fsm_equipment.py diff --git a/fieldservice_stock/models/fsm_equipment.py b/fieldservice_stock/models/fsm_equipment.py index b395666caf..5551372ee2 100644 --- a/fieldservice_stock/models/fsm_equipment.py +++ b/fieldservice_stock/models/fsm_equipment.py @@ -15,7 +15,7 @@ class FSMEquipment(models.Model): 'stock.location', string='Current Inventory Location', compute='_compute_current_stock_loc_id') - @api.multi + @api.depends('product_id', 'lot_id') def _compute_current_stock_loc_id(self): for equipment in self: quants = self.env['stock.quant'].search( @@ -27,6 +27,12 @@ def _compute_current_stock_loc_id(self): else: equipment.current_stock_location_id = False + @api.onchange('product_id') + def _onchange_product(self): + for equipment in self: + # self.lot_id = False + self.current_stock_location_id = False + @api.model def create(self, vals): res = super(FSMEquipment, self).create(vals) diff --git a/fieldservice_stock/readme/CONTRIBUTORS.rst b/fieldservice_stock/readme/CONTRIBUTORS.rst index 61e9fc4dc3..5db5c162c6 100644 --- a/fieldservice_stock/readme/CONTRIBUTORS.rst +++ b/fieldservice_stock/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Brian McMaster * Sandip Mangukiya * Serpent Consulting Services Pvt. Ltd. +* Marcel Savegnago diff --git a/fieldservice_stock/tests/__init__.py b/fieldservice_stock/tests/__init__.py new file mode 100644 index 0000000000..50a5826fe6 --- /dev/null +++ b/fieldservice_stock/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2020 - TODAY, Marcel Savegnago (Escodoo) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import test_fsm_equipment diff --git a/fieldservice_stock/tests/test_fsm_equipment.py b/fieldservice_stock/tests/test_fsm_equipment.py new file mode 100644 index 0000000000..0e4c1418ea --- /dev/null +++ b/fieldservice_stock/tests/test_fsm_equipment.py @@ -0,0 +1,45 @@ +# Copyright (C) 2020 - TODAY, Marcel Savegnago (Escodoo) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.tests.common import TransactionCase + + +class TestFSMEquipment(TransactionCase): + + def setUp(self): + super(TestFSMEquipment, self).setUp() + self.Equipment = self.env['fsm.equipment'] + self.stock_location = self.env.ref('stock.stock_location_customers') + + product1 = self.env['product.product'].create({ + 'name': 'Product A', + 'type': 'product', + 'tracking': 'serial', + }) + lot1 = self.env['stock.production.lot'].create({ + 'name': 'serial1', + 'product_id': product1.id, + }) + self.env['stock.quant'].create({ + 'product_id': product1.id, + 'location_id': self.stock_location.id, + 'quantity': 1.0, + 'lot_id': lot1.id, + }) + + self.equipment = self.Equipment.create({ + 'name': 'Equipment 1', + 'product_id': product1.id, + 'lot_id': lot1.id, + 'current_stock_location_id': self.stock_location.id, + }) + + def test_onchange_product(self): + equipment = self.equipment + equipment._onchange_product() + # self.assertFalse(equipment.lot_id) + self.assertFalse(equipment.current_stock_location_id) + + def test_compute_current_stock_loc_id(self): + equipment = self.equipment + equipment._compute_current_stock_loc_id() + self.assertTrue(equipment.current_stock_location_id == self.stock_location) From f849e84688fbbda7a7fe07f172b86303f7262671 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Tue, 3 Nov 2020 13:46:03 -0300 Subject: [PATCH 164/631] [FIX] remove lot_id=false Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ [UPD] README.rst --- fieldservice_stock/README.rst | 1 + fieldservice_stock/i18n/es.po | 1 - fieldservice_stock/i18n/es_CL.po | 1 - fieldservice_stock/models/fsm_equipment.py | 1 - fieldservice_stock/static/description/index.html | 1 + fieldservice_stock/tests/test_fsm_equipment.py | 1 - 6 files changed, 2 insertions(+), 4 deletions(-) diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index f5d442763b..c94a6657f5 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -134,6 +134,7 @@ Contributors * Brian McMaster * Sandip Mangukiya * Serpent Consulting Services Pvt. Ltd. +* Marcel Savegnago Other credits ~~~~~~~~~~~~~ diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index f6c4c41b72..52397c63c7 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -34,7 +34,6 @@ msgstr "Cancelado" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment #, fuzzy -#| msgid "Creates a FSM Equipment" msgid "Create Fsm Equipment" msgstr "Crea Equipos FSM" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index e257545b7e..1d0768f10b 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -34,7 +34,6 @@ msgstr "Cancelado" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment #, fuzzy -#| msgid "Creates a FSM Equipment" msgid "Create Fsm Equipment" msgstr "Crea Equipos FSM" diff --git a/fieldservice_stock/models/fsm_equipment.py b/fieldservice_stock/models/fsm_equipment.py index 5551372ee2..0093df66c6 100644 --- a/fieldservice_stock/models/fsm_equipment.py +++ b/fieldservice_stock/models/fsm_equipment.py @@ -30,7 +30,6 @@ def _compute_current_stock_loc_id(self): @api.onchange('product_id') def _onchange_product(self): for equipment in self: - # self.lot_id = False self.current_stock_location_id = False @api.model diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index b5d319b640..17d3c2ccee 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -482,6 +482,7 @@

    Contributors

  • Brian McMaster <brian@mcmpest.com>
  • Sandip Mangukiya <smangukiya@opensourceintegrators.com>
  • Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
  • +
  • Marcel Savegnago <marcel.savegnago@escodoo.com.br>
  • diff --git a/fieldservice_stock/tests/test_fsm_equipment.py b/fieldservice_stock/tests/test_fsm_equipment.py index 0e4c1418ea..c6488b2598 100644 --- a/fieldservice_stock/tests/test_fsm_equipment.py +++ b/fieldservice_stock/tests/test_fsm_equipment.py @@ -36,7 +36,6 @@ def setUp(self): def test_onchange_product(self): equipment = self.equipment equipment._onchange_product() - # self.assertFalse(equipment.lot_id) self.assertFalse(equipment.current_stock_location_id) def test_compute_current_stock_loc_id(self): From f8fbd6a98f0879df6b22b4b3afdd5e6eca2b3777 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 10 Dec 2020 20:14:27 +0000 Subject: [PATCH 165/631] fieldservice_stock 12.0.2.3.0 --- fieldservice_stock/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index e98b166362..d2401c4101 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.2.2.0', + 'version': '12.0.2.3.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " From 2ea04c60fd3be2e9b63f6d6f0941d964db7a289f Mon Sep 17 00:00:00 2001 From: brian10048 Date: Sat, 21 Nov 2020 12:25:05 -0500 Subject: [PATCH 166/631] [IMP] fieldservice_stock: Split stock request --- fieldservice_stock/__manifest__.py | 5 +- fieldservice_stock/models/__init__.py | 3 - fieldservice_stock/models/fsm_order.py | 57 +-------- fieldservice_stock/models/stock_move_line.py | 24 ---- fieldservice_stock/models/stock_request.py | 115 ------------------ .../models/stock_request_order.py | 54 -------- fieldservice_stock/readme/CONFIGURE.rst | 16 --- fieldservice_stock/readme/DESCRIPTION.rst | 3 +- fieldservice_stock/readme/USAGE.rst | 10 +- .../security/ir.model.access.csv | 6 - fieldservice_stock/views/fsm_order.xml | 40 +----- fieldservice_stock/views/stock.xml | 6 - fieldservice_stock/views/stock_request.xml | 24 ---- .../views/stock_request_order.xml | 53 -------- 14 files changed, 8 insertions(+), 408 deletions(-) delete mode 100644 fieldservice_stock/models/stock_move_line.py delete mode 100644 fieldservice_stock/models/stock_request.py delete mode 100644 fieldservice_stock/models/stock_request_order.py delete mode 100644 fieldservice_stock/views/stock_request.xml delete mode 100644 fieldservice_stock/views/stock_request_order.xml diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index d2401c4101..56beded5bb 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -12,8 +12,7 @@ 'website': 'https://github.com/OCA/field-service', 'depends': [ 'fieldservice', - 'stock_request_direction', - 'stock_request_picking_type', + 'stock', ], 'data': [ 'security/ir.model.access.csv', @@ -26,8 +25,6 @@ 'views/product_template.xml', 'views/stock_picking_type.xml', 'views/stock_production_lot.xml', - 'views/stock_request.xml', - 'views/stock_request_order.xml', ], 'license': 'AGPL-3', 'development_status': 'Beta', diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index 9eb61a602c..26f78971aa 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -5,7 +5,6 @@ fsm_territory, fsm_location, fsm_order, - stock_move_line, stock_move, procurement_group, stock_rule, @@ -15,6 +14,4 @@ product_template, stock_production_lot, fsm_wizard, - stock_request, - stock_request_order, ) diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 1c470ad338..6c9872c14b 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -1,17 +1,7 @@ # Copyright (C) 2018 - TODAY, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields, models, _ - -from odoo.exceptions import UserError - - -REQUEST_STATES = [ - ('draft', 'Draft'), - ('submitted', 'Submitted'), - ('open', 'In progress'), - ('done', 'Done'), - ('cancel', 'Cancelled')] +from odoo import api, fields, models class FSMOrder(models.Model): @@ -29,9 +19,6 @@ def _get_move_domain(self): return [('picking_id.picking_type_id.code', 'in', ('outgoing', 'incoming'))] - stock_request_ids = fields.One2many('stock.request', 'fsm_order_id', - string="Order Lines") - picking_ids = fields.One2many('stock.picking', 'fsm_order_id', string='Transfers') delivery_count = fields.Integer(string='Delivery Orders', @@ -46,52 +33,10 @@ def _get_move_domain(self): help="Warehouse used to ship the materials") return_count = fields.Integer(string='Return Orders', compute='_compute_picking_ids') - request_stage = fields.Selection(REQUEST_STATES, string='Request State', - default='draft', readonly=True, - store=True) move_ids = fields.One2many( 'stock.move', 'fsm_order_id', string='Operations', domain=_get_move_domain) - @api.multi - def action_request_submit(self): - for rec in self: - if not rec.stock_request_ids: - raise UserError(_('Please create a stock request.')) - for line in rec.stock_request_ids: - if line.state == 'draft': - if line.order_id: - line.order_id.action_submit() - else: - line.action_submit() - rec.request_stage = 'submitted' - - @api.multi - def action_request_cancel(self): - for rec in self: - if not rec.stock_request_ids: - raise UserError(_('Please create a stock request.')) - for line in rec.stock_request_ids: - if line.state in ('draft', 'submitted'): - if line.order_id: - line.order_id.action_cancel() - else: - line.action_cancel() - rec.request_stage = 'cancel' - - @api.multi - def action_request_draft(self): - for rec in self: - if not rec.stock_request_ids: - raise UserError(_('Please create a stock request.')) - for line in rec.stock_request_ids: - if line.state == 'cancel': - if line.order_id: - line.order_id.action_draft() - else: - line.action_draft() - rec.request_stage = 'draft' - @api.depends('picking_ids') def _compute_picking_ids(self): for order in self: diff --git a/fieldservice_stock/models/stock_move_line.py b/fieldservice_stock/models/stock_move_line.py deleted file mode 100644 index 92c6dbba1a..0000000000 --- a/fieldservice_stock/models/stock_move_line.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (C) 2018 Brian McMaster -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import exceptions, models - - -class StockMoveLine(models.Model): - _inherit = "stock.move.line" - - def _action_done(self): - res = super(StockMoveLine, self)._action_done() - for rec in self: - # cases were found where self contained deleted records - # example is creating a backorder for Products with lot number - try: - move_id = rec.move_id - except exceptions.MissingError: - move_id = None - if move_id: - for request in rec.move_id.allocation_ids: - if (request.stock_request_id.state == 'done' - and request.stock_request_id.fsm_order_id): - request.stock_request_id.\ - fsm_order_id.request_stage = 'done' - return res diff --git a/fieldservice_stock/models/stock_request.py b/fieldservice_stock/models/stock_request.py deleted file mode 100644 index 3acf4440e5..0000000000 --- a/fieldservice_stock/models/stock_request.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright (C) 2019 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 UserError - - -class StockRequest(models.Model): - _inherit = 'stock.request' - - fsm_order_id = fields.Many2one( - 'fsm.order', string="FSM Order", ondelete='cascade', - index=True, copy=False) - - @api.onchange('direction', 'fsm_order_id') - def _onchange_location_id(self): - super()._onchange_location_id() - if self.fsm_order_id: - if self.direction == 'outbound': - # Inventory location of the FSM location of the order - self.location_id = \ - self.fsm_order_id.location_id.inventory_location_id.id - else: - # Otherwise the stock location of the warehouse - self.location_id = \ - self.fsm_order_id.warehouse_id.lot_stock_id.id - - def prepare_order_values(self, vals): - res = { - 'expected_date': vals['expected_date'], - 'picking_policy': vals['picking_policy'], - 'warehouse_id': vals['warehouse_id'], - 'direction': vals['direction'], - 'location_id': vals['location_id'], - } - if 'fsm_order_id' in vals and vals['fsm_order_id']: - res.update({'fsm_order_id': vals['fsm_order_id']}) - return res - - @api.model - def create(self, vals): - if 'fsm_order_id' in vals and vals['fsm_order_id']: - fsm_order = self.env['fsm.order'].browse(vals['fsm_order_id']) - fsm_order.request_stage = 'draft' - vals['warehouse_id'] = fsm_order.warehouse_id.id - picking_type_id = self.env['stock.picking.type'].search( - [('code', '=', 'stock_request_order'), - ('warehouse_id', '=', vals['warehouse_id'])], - limit=1) - order = self.env['stock.request.order'].search([ - ('fsm_order_id', '=', vals['fsm_order_id']), - ('warehouse_id', '=', vals['warehouse_id']), - ('picking_type_id', '=', picking_type_id.id), - ('direction', '=', vals['direction']), - ('state', '=', 'draft')], order="id asc") - - # User created a new SRO Manually - if len(order) > 1: - raise UserError(_('There is already a Stock Request Order \ - with the same Field Service Order and \ - Warehouse that is in Draft state. Please \ - add this Stock Request there. \ - (%s)') % order[0].name) - # Made from an FSO for the first time, create the SRO here - elif not order and vals.get('fsm_order_id'): - values = self.prepare_order_values(vals) - values.update({ - 'picking_type_id': picking_type_id.id, - 'warehouse_id': vals['warehouse_id'], - }) - vals['order_id'] = self.env['stock.request.order'].\ - create(values).id - # There is an SRO made from FSO, assign here - elif len(order) == 1 and vals.get('fsm_order_id'): - vals['expected_date'] = order.expected_date - vals['order_id'] = order.id - return super().create(vals) - - def _prepare_procurement_values(self, group_id=False): - res = super()._prepare_procurement_values(group_id=group_id) - if self.fsm_order_id: - res.update({ - 'fsm_order_id': self.fsm_order_id.id, - 'partner_id': - self.fsm_order_id.location_id.shipping_address_id.id or - self.fsm_order_id.location_id.partner_id.id - }) - return res - - def _prepare_procurement_group_values(self): - if self.fsm_order_id: - order = self.env['fsm.order'].browse(self.fsm_order_id.id) - return {'name': order.name, - 'fsm_order_id': order.id, - 'move_type': 'direct'} - else: - return {} - - @api.multi - def _action_confirm(self): - for req in self: - if (not req.procurement_group_id) and req.fsm_order_id: - fsm_order = self.env['fsm.order'].browse(req.fsm_order_id.id) - group = self.env['procurement.group'].search([ - ('fsm_order_id', '=', fsm_order.id)]) - if not group: - values = req._prepare_procurement_group_values() - group = req.env['procurement.group'].create(values) - if req.order_id: - req.order_id.procurement_group_id = group.id - req.procurement_group_id = group.id - res = super(StockRequest, req)._action_confirm() - fsm_order.request_stage = 'open' - else: - res = super(StockRequest, req)._action_confirm() - return res diff --git a/fieldservice_stock/models/stock_request_order.py b/fieldservice_stock/models/stock_request_order.py deleted file mode 100644 index e96d3687c4..0000000000 --- a/fieldservice_stock/models/stock_request_order.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2019 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import api, fields, models - - -class StockRequestOrder(models.Model): - _inherit = 'stock.request.order' - - fsm_order_id = fields.Many2one( - 'fsm.order', string="FSM Order", ondelete='cascade', - index=True, copy=False) - - @api.onchange('warehouse_id', 'direction', 'fsm_order_id') - def _onchange_location_id(self): - super()._onchange_location_id() - if self.fsm_order_id: - if self.direction == 'outbound': - # Inventory location of the FSM location of the order - self.location_id = \ - self.fsm_order_id.location_id.inventory_location_id.id - else: - # Otherwise the stock location of the warehouse - self.location_id = \ - self.fsm_order_id.warehouse_id.lot_stock_id.id - self.change_childs() - - def change_childs(self): - super().change_childs() - if not self._context.get('no_change_childs', False): - for line in self.stock_request_ids: - line.fsm_order_id = self.fsm_order_id.id - - def _prepare_procurement_group_values(self): - if self.fsm_order_id: - order = self.env['fsm.order'].browse(self.fsm_order_id.id) - return {'name': order.name, - 'fsm_order_id': order.id, - 'move_type': 'direct'} - else: - return {} - - @api.multi - def action_confirm(self): - if self.fsm_order_id: - fsm_order = self.env['fsm.order'].browse(self.fsm_order_id.id) - group = self.env['procurement.group'].search([ - ('fsm_order_id', '=', fsm_order.id)]) - if not group: - values = self._prepare_procurement_group_values() - group = self.env['procurement.group'].create(values) - self.procurement_group_id = group[0].id - self.change_childs() - return super().action_confirm() diff --git a/fieldservice_stock/readme/CONFIGURE.rst b/fieldservice_stock/readme/CONFIGURE.rst index f4ee189e04..9b3e10b369 100644 --- a/fieldservice_stock/readme/CONFIGURE.rst +++ b/fieldservice_stock/readme/CONFIGURE.rst @@ -2,22 +2,6 @@ To configure this module, you need to: * Go to Field Service > Master Data > Locations * Create or select a location and set the inventory location -* Go to Inventory > Configuration > Routes -* Select the routes that you want to use from a FSM order -* Check the box 'FSM Order Line' for outbound transfer -* Check the box 'FSM Return Line' for inbound transfer - -The route 'Receipt in 1 step' has no procurement rule so if you want items to be -returned from the service location to your warehouse, you need to create a new -procurement rule for that route: - -* Name: YourCompany: Return -* Action: Move From Another Location -* Procurement Location: WH/Stock -* Served Warehouse: YourCompany -* Source Location: Partner Locations/Customers -* Move Supply Method: Take From Stock -* Operation Type: YourCompany: Receipts If you are in a multi-warehouse situation: diff --git a/fieldservice_stock/readme/DESCRIPTION.rst b/fieldservice_stock/readme/DESCRIPTION.rst index 978a9f3b33..0662a1496a 100644 --- a/fieldservice_stock/readme/DESCRIPTION.rst +++ b/fieldservice_stock/readme/DESCRIPTION.rst @@ -1,2 +1,3 @@ This module is an add-on for the Field Service application in Odoo. -It provides inventory and stock operations. +It provides a generic framework to allow you to link inventory and +stock operations with your field service operations. diff --git a/fieldservice_stock/readme/USAGE.rst b/fieldservice_stock/readme/USAGE.rst index a9332d58c5..0eca605486 100644 --- a/fieldservice_stock/readme/USAGE.rst +++ b/fieldservice_stock/readme/USAGE.rst @@ -1,7 +1,3 @@ -To use this module, you need to: - -* Create a new service order -* Under the Inventory tab, select the warehouse and add products with quantity -* Confirm the order to create the delivery orders -* Validate the transfers in the Inventory app. Quantities delivered on FSM - Order Line will be updated. +This module primarily establishes a connection between stock and +field service operations so therefore has no specific usage +instructions. diff --git a/fieldservice_stock/security/ir.model.access.csv b/fieldservice_stock/security/ir.model.access.csv index 1d629dc0fd..2bca56c306 100644 --- a/fieldservice_stock/security/ir.model.access.csv +++ b/fieldservice_stock/security/ir.model.access.csv @@ -1,12 +1,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_stock_request_allocation_fsm_user,stock.request.allocation.user,stock_request.model_stock_request_allocation,base.group_user,1,0,0,0 -access_stock_request_allocation_portal,access.stock.request.allocation.portal,stock_request.model_stock_request_allocation,base.group_portal,1,0,0,0 -access_stock_request_fsm_user,stock.request.user,stock_request.model_stock_request,fieldservice.group_fsm_user,1,0,0,0 -access_stock_request_fsm_dispatcher,stock.request.dispatcher,stock_request.model_stock_request,fieldservice.group_fsm_dispatcher,1,1,1,1 -access_stock_request_portal,access.stock.request.portal,stock_request.model_stock_request,base.group_portal,1,0,0,0 access_stock_move_portal,access.stock.move.portal,stock.model_stock_move,base.group_portal,1,1,0,0 access_stock_picking_type_portal,access.stock.picking.type.portal,stock.model_stock_picking_type,base.group_portal,1,0,0,0 access_product_product_portal,access.product.product.portal,product.model_product_product,base.group_portal,1,0,0,0 access_product_template_portal,access.product.template.portal,product.model_product_template,base.group_portal,1,0,0,0 -access_stock_move_line_portal,access.stock.move.line.portal,stock.model_stock_move_line,base.group_portal,1,0,0,0 access_uom_uom_portal,access.uom.uom.portal,uom.model_uom_uom,base.group_portal,1,0,0,0 diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index 15af98d18a..8bb19a11d4 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -23,19 +23,7 @@
    - -
    -
    + - - - - - - - - - - - - - - - - - - - - - diff --git a/fieldservice_stock/views/stock.xml b/fieldservice_stock/views/stock.xml index edabe5eb06..37d0963414 100644 --- a/fieldservice_stock/views/stock.xml +++ b/fieldservice_stock/views/stock.xml @@ -1,12 +1,6 @@ - - - - - - stock.request - - - - - - - - - - stock.request - - - - - - - - - diff --git a/fieldservice_stock/views/stock_request_order.xml b/fieldservice_stock/views/stock_request_order.xml deleted file mode 100644 index b13d8b4b35..0000000000 --- a/fieldservice_stock/views/stock_request_order.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - stock.request.order - - - - - - - { - 'default_fsm_order_id': fsm_order_id, - 'default_expected_date': expected_date, - 'default_picking_policy': picking_policy, - 'default_warehouse_id': warehouse_id, - 'default_direction': direction, - 'default_location_id': location_id, - 'default_procurement_group_id': procurement_group_id, - 'default_company_id': company_id, - 'default_state': state} - - - - - - - - - stock.request.order - - - - - - - - - - stock.request.order - - - - - - - - - - - - From b106ce5a14e1c1085b6c04beda21e656a07430e2 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Sat, 21 Nov 2020 13:05:46 -0500 Subject: [PATCH 167/631] [IMP] fieldservice_stock: Split equipment Remove the equipment related functionality from the fieldservice_stock module and make into separate module --- fieldservice_stock/__manifest__.py | 4 -- .../migrations/12.0.2.0.0/post-migration.py | 13 ----- fieldservice_stock/models/__init__.py | 4 -- fieldservice_stock/models/fsm_equipment.py | 50 ------------------- fieldservice_stock/models/product_template.py | 10 ---- fieldservice_stock/models/stock_move.py | 23 --------- .../models/stock_picking_type.py | 13 ----- .../models/stock_production_lot.py | 11 ---- fieldservice_stock/readme/CONFIGURE.rst | 21 -------- .../security/ir.model.access.csv | 1 - fieldservice_stock/tests/__init__.py | 4 -- .../tests/test_fsm_equipment.py | 44 ---------------- fieldservice_stock/views/fsm_equipment.xml | 33 ------------ fieldservice_stock/views/product_template.xml | 16 ------ .../views/stock_picking_type.xml | 16 ------ .../views/stock_production_lot.xml | 24 --------- 16 files changed, 287 deletions(-) delete mode 100644 fieldservice_stock/migrations/12.0.2.0.0/post-migration.py delete mode 100644 fieldservice_stock/models/fsm_equipment.py delete mode 100644 fieldservice_stock/models/product_template.py delete mode 100644 fieldservice_stock/models/stock_picking_type.py delete mode 100644 fieldservice_stock/models/stock_production_lot.py delete mode 100644 fieldservice_stock/tests/__init__.py delete mode 100644 fieldservice_stock/tests/test_fsm_equipment.py delete mode 100644 fieldservice_stock/views/fsm_equipment.xml delete mode 100644 fieldservice_stock/views/product_template.xml delete mode 100644 fieldservice_stock/views/stock_picking_type.xml delete mode 100644 fieldservice_stock/views/stock_production_lot.xml diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 56beded5bb..fd30c1df71 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -21,10 +21,6 @@ 'views/fsm_location.xml', 'views/fsm_order.xml', 'views/stock.xml', - 'views/fsm_equipment.xml', - 'views/product_template.xml', - 'views/stock_picking_type.xml', - 'views/stock_production_lot.xml', ], 'license': 'AGPL-3', 'development_status': 'Beta', diff --git a/fieldservice_stock/migrations/12.0.2.0.0/post-migration.py b/fieldservice_stock/migrations/12.0.2.0.0/post-migration.py deleted file mode 100644 index 2855328b90..0000000000 --- a/fieldservice_stock/migrations/12.0.2.0.0/post-migration.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (C) 2020, Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - - -def migrate(env, version): - if not version: - return - - env.execute(""" - UPDATE stock_picking_type - SET create_fsm_equipment = 'true' - WHERE code = 'outgoing'; - """) diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index 26f78971aa..3b9b5ad1fd 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -9,9 +9,5 @@ procurement_group, stock_rule, stock_picking, - stock_picking_type, - fsm_equipment, - product_template, - stock_production_lot, fsm_wizard, ) diff --git a/fieldservice_stock/models/fsm_equipment.py b/fieldservice_stock/models/fsm_equipment.py deleted file mode 100644 index 0093df66c6..0000000000 --- a/fieldservice_stock/models/fsm_equipment.py +++ /dev/null @@ -1,50 +0,0 @@ -# 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 FSMEquipment(models.Model): - _inherit = 'fsm.equipment' - - product_id = fields.Many2one( - 'product.product', string='Product', required=True) - lot_id = fields.Many2one( - 'stock.production.lot', string='Serial #', required=True) - current_stock_location_id = fields.Many2one( - 'stock.location', string='Current Inventory Location', - compute='_compute_current_stock_loc_id') - - @api.depends('product_id', 'lot_id') - def _compute_current_stock_loc_id(self): - for equipment in self: - quants = self.env['stock.quant'].search( - [('lot_id', '=', equipment.lot_id.id)], order="id desc", - limit=1) - if quants and quants.location_id: - equipment.current_stock_location_id = \ - quants.location_id.id - else: - equipment.current_stock_location_id = False - - @api.onchange('product_id') - def _onchange_product(self): - for equipment in self: - self.current_stock_location_id = False - - @api.model - def create(self, vals): - res = super(FSMEquipment, self).create(vals) - if 'lot_id' in vals: - res.lot_id.fsm_equipment_id = res.id - return res - - @api.multi - def write(self, vals): - for equipment in self: - prev_lot = equipment.lot_id - res = super(FSMEquipment, equipment).write(vals) - if 'lot_id' in vals: - prev_lot.fsm_equipment_id = False - equipment.lot_id.fsm_equipment_id = equipment.id - return res diff --git a/fieldservice_stock/models/product_template.py b/fieldservice_stock/models/product_template.py deleted file mode 100644 index 54195f55d7..0000000000 --- a/fieldservice_stock/models/product_template.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class ProductTemplate(models.Model): - _inherit = 'product.template' - - create_fsm_equipment = fields.Boolean(string='Creates a FSM Equipment') diff --git a/fieldservice_stock/models/stock_move.py b/fieldservice_stock/models/stock_move.py index 92bbb8da84..8c492ab972 100644 --- a/fieldservice_stock/models/stock_move.py +++ b/fieldservice_stock/models/stock_move.py @@ -7,26 +7,3 @@ class StockMove(models.Model): _inherit = "stock.move" fsm_order_id = fields.Many2one('fsm.order', string='Field Service Order') - - def prepare_equipment_values(self, move_line): - return {'name': '%s (%s)' % ( - move_line.product_id.name, move_line.lot_id.name), - 'product_id': move_line.product_id.id, - 'lot_id': move_line.lot_id.id, - 'location_id': - move_line.move_id.stock_request_ids.fsm_order_id.location_id.id, - 'current_location_id': - move_line.move_id.stock_request_ids.fsm_order_id.location_id.id, - 'current_stock_location_id': move_line.location_dest_id.id} - - def _action_done(self): - res = super()._action_done() - for rec in self: - if (rec.state == 'done' - and rec.picking_type_id.create_fsm_equipment - and rec.product_tmpl_id.create_fsm_equipment): - for line in rec.move_line_ids: - vals = self.prepare_equipment_values(line) - line.lot_id.fsm_equipment_id = \ - rec.env['fsm.equipment'].create(vals) - return res diff --git a/fieldservice_stock/models/stock_picking_type.py b/fieldservice_stock/models/stock_picking_type.py deleted file mode 100644 index 5fe0671881..0000000000 --- a/fieldservice_stock/models/stock_picking_type.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (C) 2020 Open Source Integrators, Daniel Reis -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models - - -class StockPickingType(models.Model): - _inherit = 'stock.picking.type' - - create_fsm_equipment = fields.Boolean( - name="Create FSM Equipment", - help="Products with the 'Creates a FSM Equipment' flag " - "will automatically be converted to an FSM Equipment." - ) diff --git a/fieldservice_stock/models/stock_production_lot.py b/fieldservice_stock/models/stock_production_lot.py deleted file mode 100644 index 5e52651e3e..0000000000 --- a/fieldservice_stock/models/stock_production_lot.py +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class StockProductionLot(models.Model): - _inherit = 'stock.production.lot' - - fsm_equipment_id = fields.Many2one('fsm.equipment', - string='Equipment', readonly=True) diff --git a/fieldservice_stock/readme/CONFIGURE.rst b/fieldservice_stock/readme/CONFIGURE.rst index 9b3e10b369..be45397600 100644 --- a/fieldservice_stock/readme/CONFIGURE.rst +++ b/fieldservice_stock/readme/CONFIGURE.rst @@ -8,24 +8,3 @@ If you are in a multi-warehouse situation: * Go to Field Service > Configuration > Territories * Create or select a territory * Set the warehouse that will serve this territory - -Products can be automatically converted into FSM Equipments. -This is only available only for products tracked by serial number. -This needs to be enabled both on Operation Types and Products. -For example, we may want to create the FSM Equipment on Delivery, -or on Receipts. - -To enable on Products: - -* Go to Inventory > Master Data > Products -* Open the Product form, Inventory tab -* On the "Traceability" section, make sure - "Tracking" is set to "By Unique Serial Number" -* Enable the "Creates FSM Equipment" checkbox - -To enable on Operation Types: - -* Go to Inventory > Configuration > Operation Types -* Select the intended Operation Type ("Receipts" for example) -* On the "Traceability" section, enable the - "Create FSM Equipment" checkbox diff --git a/fieldservice_stock/security/ir.model.access.csv b/fieldservice_stock/security/ir.model.access.csv index 2bca56c306..b8e0ce44b5 100644 --- a/fieldservice_stock/security/ir.model.access.csv +++ b/fieldservice_stock/security/ir.model.access.csv @@ -1,6 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_stock_move_portal,access.stock.move.portal,stock.model_stock_move,base.group_portal,1,1,0,0 -access_stock_picking_type_portal,access.stock.picking.type.portal,stock.model_stock_picking_type,base.group_portal,1,0,0,0 access_product_product_portal,access.product.product.portal,product.model_product_product,base.group_portal,1,0,0,0 access_product_template_portal,access.product.template.portal,product.model_product_template,base.group_portal,1,0,0,0 access_uom_uom_portal,access.uom.uom.portal,uom.model_uom_uom,base.group_portal,1,0,0,0 diff --git a/fieldservice_stock/tests/__init__.py b/fieldservice_stock/tests/__init__.py deleted file mode 100644 index 50a5826fe6..0000000000 --- a/fieldservice_stock/tests/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# Copyright (C) 2020 - TODAY, Marcel Savegnago (Escodoo) -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) - -from . import test_fsm_equipment diff --git a/fieldservice_stock/tests/test_fsm_equipment.py b/fieldservice_stock/tests/test_fsm_equipment.py deleted file mode 100644 index c6488b2598..0000000000 --- a/fieldservice_stock/tests/test_fsm_equipment.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (C) 2020 - TODAY, Marcel Savegnago (Escodoo) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase - - -class TestFSMEquipment(TransactionCase): - - def setUp(self): - super(TestFSMEquipment, self).setUp() - self.Equipment = self.env['fsm.equipment'] - self.stock_location = self.env.ref('stock.stock_location_customers') - - product1 = self.env['product.product'].create({ - 'name': 'Product A', - 'type': 'product', - 'tracking': 'serial', - }) - lot1 = self.env['stock.production.lot'].create({ - 'name': 'serial1', - 'product_id': product1.id, - }) - self.env['stock.quant'].create({ - 'product_id': product1.id, - 'location_id': self.stock_location.id, - 'quantity': 1.0, - 'lot_id': lot1.id, - }) - - self.equipment = self.Equipment.create({ - 'name': 'Equipment 1', - 'product_id': product1.id, - 'lot_id': lot1.id, - 'current_stock_location_id': self.stock_location.id, - }) - - def test_onchange_product(self): - equipment = self.equipment - equipment._onchange_product() - self.assertFalse(equipment.current_stock_location_id) - - def test_compute_current_stock_loc_id(self): - equipment = self.equipment - equipment._compute_current_stock_loc_id() - self.assertTrue(equipment.current_stock_location_id == self.stock_location) diff --git a/fieldservice_stock/views/fsm_equipment.xml b/fieldservice_stock/views/fsm_equipment.xml deleted file mode 100644 index 1ce8ae287f..0000000000 --- a/fieldservice_stock/views/fsm_equipment.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - fsm.equipment.form.stock - fsm.equipment - - - - - - - - - - - - - - fsm.equipment.model - fsm.equipment - - - - - - - - diff --git a/fieldservice_stock/views/product_template.xml b/fieldservice_stock/views/product_template.xml deleted file mode 100644 index 6b9d6f36e3..0000000000 --- a/fieldservice_stock/views/product_template.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - product.template - - - - - - - - - diff --git a/fieldservice_stock/views/stock_picking_type.xml b/fieldservice_stock/views/stock_picking_type.xml deleted file mode 100644 index d197e10f6a..0000000000 --- a/fieldservice_stock/views/stock_picking_type.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - stock.picking.type - - - - - - - - - - - diff --git a/fieldservice_stock/views/stock_production_lot.xml b/fieldservice_stock/views/stock_production_lot.xml deleted file mode 100644 index 4f23b37cad..0000000000 --- a/fieldservice_stock/views/stock_production_lot.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - stock.production.lot - - - - - - - - - - - - {'search_default_group_by_product': 1, - 'default_product_id': context.get('product_id', False)} - - - - From 21d47c195108adf6bb191f54518c6eda6e0154f0 Mon Sep 17 00:00:00 2001 From: Brian McMaster Date: Fri, 15 Jan 2021 15:32:31 -0500 Subject: [PATCH 168/631] [IMP] fieldservice_stock_request: Add tests [UPD] Update fieldservice_stock.pot [UPD] README.rst --- fieldservice_stock/README.rst | 50 +------ .../i18n/fieldservice_stock.pot | 134 ------------------ .../static/description/index.html | 50 +------ fieldservice_stock/tests/__init__.py | 4 + fieldservice_stock/tests/common.py | 26 ++++ 5 files changed, 40 insertions(+), 224 deletions(-) create mode 100644 fieldservice_stock/tests/__init__.py create mode 100644 fieldservice_stock/tests/common.py diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index c94a6657f5..9a6fcdb3da 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -26,7 +26,8 @@ Field Service - Stock |badge1| |badge2| |badge3| |badge4| |badge5| This module is an add-on for the Field Service application in Odoo. -It provides inventory and stock operations. +It provides a generic framework to allow you to link inventory and +stock operations with your field service operations. **Table of contents** @@ -48,22 +49,6 @@ To configure this module, you need to: * Go to Field Service > Master Data > Locations * Create or select a location and set the inventory location -* Go to Inventory > Configuration > Routes -* Select the routes that you want to use from a FSM order -* Check the box 'FSM Order Line' for outbound transfer -* Check the box 'FSM Return Line' for inbound transfer - -The route 'Receipt in 1 step' has no procurement rule so if you want items to be -returned from the service location to your warehouse, you need to create a new -procurement rule for that route: - -* Name: YourCompany: Return -* Action: Move From Another Location -* Procurement Location: WH/Stock -* Served Warehouse: YourCompany -* Source Location: Partner Locations/Customers -* Move Supply Method: Take From Stock -* Operation Type: YourCompany: Receipts If you are in a multi-warehouse situation: @@ -71,37 +56,12 @@ If you are in a multi-warehouse situation: * Create or select a territory * Set the warehouse that will serve this territory -Products can be automatically converted into FSM Equipments. -This is only available only for products tracked by serial number. -This needs to be enabled both on Operation Types and Products. -For example, we may want to create the FSM Equipment on Delivery, -or on Receipts. - -To enable on Products: - -* Go to Inventory > Master Data > Products -* Open the Product form, Inventory tab -* On the "Traceability" section, make sure - "Tracking" is set to "By Unique Serial Number" -* Enable the "Creates FSM Equipment" checkbox - -To enable on Operation Types: - -* Go to Inventory > Configuration > Operation Types -* Select the intended Operation Type ("Receipts" for example) -* On the "Traceability" section, enable the - "Create FSM Equipment" checkbox - Usage ===== -To use this module, you need to: - -* Create a new service order -* Under the Inventory tab, select the warehouse and add products with quantity -* Confirm the order to create the delivery orders -* Validate the transfers in the Inventory app. Quantities delivered on FSM - Order Line will be updated. +This module primarily establishes a connection between stock and +field service operations so therefore has no specific usage +instructions. Known issues / Roadmap ====================== diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index ec33be8660..e23b030443 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -18,32 +18,6 @@ msgstr "" msgid "Allocated Quantity" msgstr "" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Cancel" -msgstr "" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Cancelled" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "Create Fsm Equipment" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment -msgid "Creates a FSM Equipment" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id -msgid "Current Inventory Location" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Deliveries" @@ -54,43 +28,16 @@ msgstr "" msgid "Delivery Orders" msgstr "" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Done" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Done Quantity" msgstr "" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Draft" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id -msgid "Equipment" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search -msgid "FSM Order" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_wizard msgid "FSM Record Conversion" msgstr "" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_equipment -msgid "Field Service Equipment" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_location msgid "Field Service Location" @@ -104,14 +51,8 @@ msgstr "" msgid "Field Service Order" msgstr "" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "In progress" -msgstr "" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Inventory" msgstr "" @@ -122,11 +63,6 @@ msgstr "" msgid "Inventory Location" msgstr "" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_production_lot -msgid "Lot/Serial" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Moves" @@ -137,16 +73,6 @@ msgstr "" msgid "Operations" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids -msgid "Order Lines" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_picking_type -msgid "Picking Type" -msgstr "" - #. module: fieldservice_stock #: code:addons/fieldservice_stock/models/fsm_order.py:60 #: code:addons/fieldservice_stock/models/fsm_order.py:73 @@ -161,41 +87,16 @@ msgstr "" msgid "Procurement Group" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id -msgid "Product" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_move_line -msgid "Product Moves (Stock Move Line)" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_product_template -msgid "Product Template" -msgstr "" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product msgid "Products" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "Products with the 'Creates a FSM Equipment' flag will automatically be converted to an FSM Equipment." -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage -msgid "Request State" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Requested Quantity" @@ -211,16 +112,6 @@ msgstr "" msgid "Returns" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id -msgid "Serial #" -msgstr "" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Set to Draft" -msgstr "" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id msgid "Shipping Location" @@ -231,36 +122,11 @@ msgstr "" msgid "Stock Move" msgstr "" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request -msgid "Stock Request" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request_order -msgid "Stock Request Order" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request -msgid "Stock Requests" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_rule msgid "Stock Rule" msgstr "" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Submit" -msgstr "" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Submitted" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_territory msgid "Territory" diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 17d3c2ccee..e3f772599b 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -369,7 +369,8 @@

    Field Service - Stock

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

    This module is an add-on for the Field Service application in Odoo. -It provides inventory and stock operations.

    +It provides a generic framework to allow you to link inventory and +stock operations with your field service operations.

    Table of contents

      @@ -399,22 +400,6 @@

      Configuration

      • Go to Field Service > Master Data > Locations
      • Create or select a location and set the inventory location
      • -
      • Go to Inventory > Configuration > Routes
      • -
      • Select the routes that you want to use from a FSM order
      • -
      • Check the box ‘FSM Order Line’ for outbound transfer
      • -
      • Check the box ‘FSM Return Line’ for inbound transfer
      • -
      -

      The route ‘Receipt in 1 step’ has no procurement rule so if you want items to be -returned from the service location to your warehouse, you need to create a new -procurement rule for that route:

      -
        -
      • Name: YourCompany: Return
      • -
      • Action: Move From Another Location
      • -
      • Procurement Location: WH/Stock
      • -
      • Served Warehouse: YourCompany
      • -
      • Source Location: Partner Locations/Customers
      • -
      • Move Supply Method: Take From Stock
      • -
      • Operation Type: YourCompany: Receipts

      If you are in a multi-warehouse situation:

        @@ -422,37 +407,12 @@

        Configuration

      • Create or select a territory
      • Set the warehouse that will serve this territory
      -

      Products can be automatically converted into FSM Equipments. -This is only available only for products tracked by serial number. -This needs to be enabled both on Operation Types and Products. -For example, we may want to create the FSM Equipment on Delivery, -or on Receipts.

      -

      To enable on Products:

      -
        -
      • Go to Inventory > Master Data > Products
      • -
      • Open the Product form, Inventory tab
      • -
      • On the “Traceability” section, make sure -“Tracking” is set to “By Unique Serial Number”
      • -
      • Enable the “Creates FSM Equipment” checkbox
      • -
      -

      To enable on Operation Types:

      -
        -
      • Go to Inventory > Configuration > Operation Types
      • -
      • Select the intended Operation Type (“Receipts” for example)
      • -
      • On the “Traceability” section, enable the -“Create FSM Equipment” checkbox
      • -

    Usage

    -

    To use this module, you need to:

    -
      -
    • Create a new service order
    • -
    • Under the Inventory tab, select the warehouse and add products with quantity
    • -
    • Confirm the order to create the delivery orders
    • -
    • Validate the transfers in the Inventory app. Quantities delivered on FSM -Order Line will be updated.
    • -
    +

    This module primarily establishes a connection between stock and +field service operations so therefore has no specific usage +instructions.

    Known issues / Roadmap

    diff --git a/fieldservice_stock/tests/__init__.py b/fieldservice_stock/tests/__init__.py new file mode 100644 index 0000000000..0d064c5691 --- /dev/null +++ b/fieldservice_stock/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2020, Brian McMaster +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import common diff --git a/fieldservice_stock/tests/common.py b/fieldservice_stock/tests/common.py new file mode 100644 index 0000000000..f71cabc456 --- /dev/null +++ b/fieldservice_stock/tests/common.py @@ -0,0 +1,26 @@ +# Copyright (C) 2020, Brian McMaster +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from odoo.tests.common import SavepointCase + + +class TestFSMStockCommon(SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestFSMStockCommon, cls).setUpClass() + + cls.ModelData = cls.env["ir.model.data"] + cls.FSMOrder = cls.env["fsm.order"] + cls.Product = cls.env["product.product"] + + cls.stock_cust_loc = cls.ModelData.xmlid_to_res_id( + "stock.stock_location_customers") + cls.partner_1 = cls.env["res.partner"].with_context( + tracking_disable=True).create({"name": "Partner 1"}) + cls.fsm_location_1 = cls.env["fsm.location"].create({ + "name": "FSM Location 1", + "owner_id": cls.partner_1.id, + "customer_id": cls.partner_1.id, + "inventory_location_id": cls.stock_cust_loc, + }) From eeea691d7d1a0156e7d8674721f14323c4dd60e0 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 9 Mar 2021 22:53:52 +0000 Subject: [PATCH 169/631] fieldservice_stock 12.0.3.0.0 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ [UPD] Update fieldservice_stock.pot Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_stock/ --- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/de.po | 163 +----------- fieldservice_stock/i18n/es.po | 231 ++++++---------- fieldservice_stock/i18n/es_CL.po | 231 ++++++---------- .../i18n/fieldservice_stock.pot | 14 - fieldservice_stock/i18n/pt_BR.po | 251 +++++++----------- 6 files changed, 259 insertions(+), 633 deletions(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index fd30c1df71..0423695fa7 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Stock', 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.2.3.0', + 'version': '12.0.3.0.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/de.po b/fieldservice_stock/i18n/de.po index 488f9fa190..1af4456989 100644 --- a/fieldservice_stock/i18n/de.po +++ b/fieldservice_stock/i18n/de.po @@ -21,32 +21,6 @@ msgstr "" msgid "Allocated Quantity" msgstr "" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Cancel" -msgstr "Abbrechen" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Cancelled" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "Create Fsm Equipment" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment -msgid "Creates a FSM Equipment" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id -msgid "Current Inventory Location" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Deliveries" @@ -57,43 +31,16 @@ msgstr "" msgid "Delivery Orders" msgstr "" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Done" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Done Quantity" msgstr "" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Draft" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id -msgid "Equipment" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search -msgid "FSM Order" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_wizard msgid "FSM Record Conversion" msgstr "" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_equipment -msgid "Field Service Equipment" -msgstr "Service-Equipment" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_location msgid "Field Service Location" @@ -107,14 +54,8 @@ msgstr "Field-Service-Ort" msgid "Field Service Order" msgstr "Field-Service-Auftrag" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "In progress" -msgstr "" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Inventory" msgstr "" @@ -125,11 +66,6 @@ msgstr "" msgid "Inventory Location" msgstr "" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_production_lot -msgid "Lot/Serial" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Moves" @@ -140,67 +76,22 @@ msgstr "" msgid "Operations" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids -msgid "Order Lines" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_picking_type -msgid "Picking Type" -msgstr "" - -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:60 -#: code:addons/fieldservice_stock/models/fsm_order.py:73 -#: code:addons/fieldservice_stock/models/fsm_order.py:86 -#, python-format -msgid "Please create a stock request." -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_procurement_group #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id msgid "Procurement Group" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id -msgid "Product" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_move_line -msgid "Product Moves (Stock Move Line)" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_product_template -msgid "Product Template" -msgstr "Produktvorlage" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product msgid "Products" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "" -"Products with the 'Creates a FSM Equipment' flag will automatically be " -"converted to an FSM Equipment." -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage -msgid "Request State" -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Requested Quantity" @@ -216,16 +107,6 @@ msgstr "" msgid "Returns" msgstr "" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id -msgid "Serial #" -msgstr "" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Set to Draft" -msgstr "" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id msgid "Shipping Location" @@ -236,51 +117,16 @@ msgstr "" msgid "Stock Move" msgstr "" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request -msgid "Stock Request" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request_order -msgid "Stock Request Order" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request -msgid "Stock Requests" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_rule msgid "Stock Rule" msgstr "" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Submit" -msgstr "" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Submitted" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_territory msgid "Territory" msgstr "" -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/stock_request.py:58 -#, python-format -msgid "" -"There is already a Stock Request Order " -"with the same Field Service Order and " -"Warehouse that is in Draft state. Please " -"add this Stock Request there. (%s)" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -306,3 +152,12 @@ msgstr "" #: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id msgid "Warehouse used to ship the materials" msgstr "" + +#~ msgid "Cancel" +#~ msgstr "Abbrechen" + +#~ msgid "Field Service Equipment" +#~ msgstr "Service-Equipment" + +#~ msgid "Product Template" +#~ msgstr "Produktvorlage" diff --git a/fieldservice_stock/i18n/es.po b/fieldservice_stock/i18n/es.po index 52397c63c7..7bf3a80c58 100644 --- a/fieldservice_stock/i18n/es.po +++ b/fieldservice_stock/i18n/es.po @@ -21,33 +21,6 @@ msgstr "" msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Cancel" -msgstr "Cancelar" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Cancelled" -msgstr "Cancelado" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -#, fuzzy -msgid "Create Fsm Equipment" -msgstr "Crea Equipos FSM" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment -msgid "Creates a FSM Equipment" -msgstr "Crea Equipos FSM" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id -msgid "Current Inventory Location" -msgstr "Ubicación Actual de Inventario" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Deliveries" @@ -58,43 +31,16 @@ msgstr "Entregas" msgid "Delivery Orders" msgstr "Pedidos de Entrega" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Done" -msgstr "Hecho" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Done Quantity" msgstr "Cantidad Hecha" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Draft" -msgstr "Borrador" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id -msgid "Equipment" -msgstr "Equipo" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search -msgid "FSM Order" -msgstr "Orden FSM" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_wizard msgid "FSM Record Conversion" msgstr "Conversión de Registro FSM" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_equipment -msgid "Field Service Equipment" -msgstr "Equipo de Servicio de Campo" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_location msgid "Field Service Location" @@ -108,14 +54,8 @@ msgstr "Ubicación del Servicio de Campo" msgid "Field Service Order" msgstr "Orden de Servicio de Campo" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "In progress" -msgstr "En progreso" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Inventory" msgstr "Inventario" @@ -126,11 +66,6 @@ msgstr "Inventario" msgid "Inventory Location" msgstr "Ubicación de Inventario" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_production_lot -msgid "Lot/Serial" -msgstr "Lote / Serie" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Moves" @@ -141,67 +76,22 @@ msgstr "Movimientos" msgid "Operations" msgstr "Operaciones" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids -msgid "Order Lines" -msgstr "Líneas de Pedido" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_picking_type -msgid "Picking Type" -msgstr "" - -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:60 -#: code:addons/fieldservice_stock/models/fsm_order.py:73 -#: code:addons/fieldservice_stock/models/fsm_order.py:86 -#, python-format -msgid "Please create a stock request." -msgstr "Por favor cree una solicitud de stock." - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_procurement_group #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id msgid "Procurement Group" msgstr "Grupo de Adquisiciones" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id -msgid "Product" -msgstr "Producto" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_move_line -msgid "Product Moves (Stock Move Line)" -msgstr "Movimientos de Producto (Línea de Movimiento de Stock)" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_product_template -msgid "Product Template" -msgstr "Plantilla de Producto" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product msgid "Products" msgstr "Productos" -#. module: fieldservice_stock -#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "" -"Products with the 'Creates a FSM Equipment' flag will automatically be " -"converted to an FSM Equipment." -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" msgstr "Referencia" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage -msgid "Request State" -msgstr "Estado de Solicitud" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Requested Quantity" @@ -217,16 +107,6 @@ msgstr "Órdenes de Devolución" msgid "Returns" msgstr "Devoluciones" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id -msgid "Serial #" -msgstr "# de Serial" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Set to Draft" -msgstr "Establecer en Borrador" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id msgid "Shipping Location" @@ -237,51 +117,16 @@ msgstr "Lugar de Envío" msgid "Stock Move" msgstr "Movimiento de Stock" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request -msgid "Stock Request" -msgstr "Solicitud de Stock" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request_order -msgid "Stock Request Order" -msgstr "Pedido de Solicitud de Stock" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request -msgid "Stock Requests" -msgstr "Solicitudes de Stock" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_rule msgid "Stock Rule" msgstr "Regla de Stock" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Submit" -msgstr "Enviar" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Submitted" -msgstr "Enviado" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_territory msgid "Territory" msgstr "Territorio" -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/stock_request.py:58 -#, python-format -msgid "" -"There is already a Stock Request Order " -"with the same Field Service Order and " -"Warehouse that is in Draft state. Please " -"add this Stock Request there. (%s)" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -308,5 +153,81 @@ msgstr "Almacén" msgid "Warehouse used to ship the materials" msgstr "Almacén utilizado para enviar los materiales" +#~ msgid "Please create a stock request." +#~ msgstr "Por favor cree una solicitud de stock." + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Cancelled" +#~ msgstr "Cancelado" + +#, fuzzy +#~ msgid "Create Fsm Equipment" +#~ msgstr "Crea Equipos FSM" + +#~ msgid "Creates a FSM Equipment" +#~ msgstr "Crea Equipos FSM" + +#~ msgid "Current Inventory Location" +#~ msgstr "Ubicación Actual de Inventario" + +#~ msgid "Done" +#~ msgstr "Hecho" + +#~ msgid "Draft" +#~ msgstr "Borrador" + +#~ msgid "Equipment" +#~ msgstr "Equipo" + +#~ msgid "FSM Order" +#~ msgstr "Orden FSM" + +#~ msgid "Field Service Equipment" +#~ msgstr "Equipo de Servicio de Campo" + +#~ msgid "In progress" +#~ msgstr "En progreso" + +#~ msgid "Lot/Serial" +#~ msgstr "Lote / Serie" + +#~ msgid "Order Lines" +#~ msgstr "Líneas de Pedido" + +#~ msgid "Product" +#~ msgstr "Producto" + +#~ msgid "Product Moves (Stock Move Line)" +#~ msgstr "Movimientos de Producto (Línea de Movimiento de Stock)" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de Producto" + +#~ msgid "Request State" +#~ msgstr "Estado de Solicitud" + +#~ msgid "Serial #" +#~ msgstr "# de Serial" + +#~ msgid "Set to Draft" +#~ msgstr "Establecer en Borrador" + +#~ msgid "Stock Request" +#~ msgstr "Solicitud de Stock" + +#~ msgid "Stock Request Order" +#~ msgstr "Pedido de Solicitud de Stock" + +#~ msgid "Stock Requests" +#~ msgstr "Solicitudes de Stock" + +#~ msgid "Submit" +#~ msgstr "Enviar" + +#~ msgid "Submitted" +#~ msgstr "Enviado" + #~ msgid "Receipts" #~ msgstr "Ingresos" diff --git a/fieldservice_stock/i18n/es_CL.po b/fieldservice_stock/i18n/es_CL.po index 1d0768f10b..e918795dcd 100644 --- a/fieldservice_stock/i18n/es_CL.po +++ b/fieldservice_stock/i18n/es_CL.po @@ -21,33 +21,6 @@ msgstr "" msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Cancel" -msgstr "Cancelar" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Cancelled" -msgstr "Cancelado" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -#, fuzzy -msgid "Create Fsm Equipment" -msgstr "Crea Equipos FSM" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment -msgid "Creates a FSM Equipment" -msgstr "Crea Equipos FSM" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id -msgid "Current Inventory Location" -msgstr "Ubicación Actual de Inventario" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Deliveries" @@ -58,43 +31,16 @@ msgstr "Entregas" msgid "Delivery Orders" msgstr "Pedidos de Entrega" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Done" -msgstr "Hecho" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Done Quantity" msgstr "Cantidad Hecha" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Draft" -msgstr "Borrador" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id -msgid "Equipment" -msgstr "Equipo" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search -msgid "FSM Order" -msgstr "Orden FSM" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_wizard msgid "FSM Record Conversion" msgstr "Conversión de Registro FSM" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_equipment -msgid "Field Service Equipment" -msgstr "Equipo de Servicio de Campo" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_location msgid "Field Service Location" @@ -108,14 +54,8 @@ msgstr "Ubicación del Servicio de Campo" msgid "Field Service Order" msgstr "Orden de Servicio de Campo" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "In progress" -msgstr "En progreso" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Inventory" msgstr "Inventario" @@ -126,11 +66,6 @@ msgstr "Inventario" msgid "Inventory Location" msgstr "Ubicación de Inventario" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_production_lot -msgid "Lot/Serial" -msgstr "Lote / Serie" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Moves" @@ -141,67 +76,22 @@ msgstr "Movimientos" msgid "Operations" msgstr "Operaciones" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids -msgid "Order Lines" -msgstr "Líneas de Pedido" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_picking_type -msgid "Picking Type" -msgstr "" - -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:60 -#: code:addons/fieldservice_stock/models/fsm_order.py:73 -#: code:addons/fieldservice_stock/models/fsm_order.py:86 -#, python-format -msgid "Please create a stock request." -msgstr "Por favor cree una solicitud de stock." - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_procurement_group #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id msgid "Procurement Group" msgstr "Grupo de Adquisiciones" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id -msgid "Product" -msgstr "Producto" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_move_line -msgid "Product Moves (Stock Move Line)" -msgstr "Movimientos de Producto (Línea de Movimiento de Stock)" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_product_template -msgid "Product Template" -msgstr "Plantilla de Producto" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product msgid "Products" msgstr "Productos" -#. module: fieldservice_stock -#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "" -"Products with the 'Creates a FSM Equipment' flag will automatically be " -"converted to an FSM Equipment." -msgstr "" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" msgstr "Referencias" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage -msgid "Request State" -msgstr "Estado de Solicitud" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Requested Quantity" @@ -217,16 +107,6 @@ msgstr "Órdenes de Devolución" msgid "Returns" msgstr "Devoluciones" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id -msgid "Serial #" -msgstr "# de Serial" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Set to Draft" -msgstr "Establecer en Borrador" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id msgid "Shipping Location" @@ -237,51 +117,16 @@ msgstr "Lugar de Envío" msgid "Stock Move" msgstr "Movimiento de Stock" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request -msgid "Stock Request" -msgstr "Solicitud de Stock" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request_order -msgid "Stock Request Order" -msgstr "Pedido de Solicitud de Stock" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request -msgid "Stock Requests" -msgstr "Solicitudes de Stock" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_rule msgid "Stock Rule" msgstr "Regla de Stock" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Submit" -msgstr "Enviar" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Submitted" -msgstr "Enviado" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_territory msgid "Territory" msgstr "Territorio" -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/stock_request.py:58 -#, python-format -msgid "" -"There is already a Stock Request Order " -"with the same Field Service Order and " -"Warehouse that is in Draft state. Please " -"add this Stock Request there. (%s)" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -308,5 +153,81 @@ msgstr "Almacén" msgid "Warehouse used to ship the materials" msgstr "Almacén utilizado para enviar los materiales" +#~ msgid "Please create a stock request." +#~ msgstr "Por favor cree una solicitud de stock." + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Cancelled" +#~ msgstr "Cancelado" + +#, fuzzy +#~ msgid "Create Fsm Equipment" +#~ msgstr "Crea Equipos FSM" + +#~ msgid "Creates a FSM Equipment" +#~ msgstr "Crea Equipos FSM" + +#~ msgid "Current Inventory Location" +#~ msgstr "Ubicación Actual de Inventario" + +#~ msgid "Done" +#~ msgstr "Hecho" + +#~ msgid "Draft" +#~ msgstr "Borrador" + +#~ msgid "Equipment" +#~ msgstr "Equipo" + +#~ msgid "FSM Order" +#~ msgstr "Orden FSM" + +#~ msgid "Field Service Equipment" +#~ msgstr "Equipo de Servicio de Campo" + +#~ msgid "In progress" +#~ msgstr "En progreso" + +#~ msgid "Lot/Serial" +#~ msgstr "Lote / Serie" + +#~ msgid "Order Lines" +#~ msgstr "Líneas de Pedido" + +#~ msgid "Product" +#~ msgstr "Producto" + +#~ msgid "Product Moves (Stock Move Line)" +#~ msgstr "Movimientos de Producto (Línea de Movimiento de Stock)" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de Producto" + +#~ msgid "Request State" +#~ msgstr "Estado de Solicitud" + +#~ msgid "Serial #" +#~ msgstr "# de Serial" + +#~ msgid "Set to Draft" +#~ msgstr "Establecer en Borrador" + +#~ msgid "Stock Request" +#~ msgstr "Solicitud de Stock" + +#~ msgid "Stock Request Order" +#~ msgstr "Pedido de Solicitud de Stock" + +#~ msgid "Stock Requests" +#~ msgstr "Solicitudes de Stock" + +#~ msgid "Submit" +#~ msgstr "Enviar" + +#~ msgid "Submitted" +#~ msgstr "Enviado" + #~ msgid "Receipts" #~ msgstr "Ingresos" diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index e23b030443..831dfcda85 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -73,14 +73,6 @@ msgstr "" msgid "Operations" msgstr "" -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:60 -#: code:addons/fieldservice_stock/models/fsm_order.py:73 -#: code:addons/fieldservice_stock/models/fsm_order.py:86 -#, python-format -msgid "Please create a stock request." -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_procurement_group #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id @@ -132,12 +124,6 @@ msgstr "" msgid "Territory" msgstr "" -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/stock_request.py:58 -#, python-format -msgid "There is already a Stock Request Order with the same Field Service Order and Warehouse that is in Draft state. Please add this Stock Request there. (%s)" -msgstr "" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" diff --git a/fieldservice_stock/i18n/pt_BR.po b/fieldservice_stock/i18n/pt_BR.po index dab7400c54..bf6b70185f 100644 --- a/fieldservice_stock/i18n/pt_BR.po +++ b/fieldservice_stock/i18n/pt_BR.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_stock +# * fieldservice_stock # msgid "" msgstr "" @@ -21,32 +21,6 @@ msgstr "" msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Cancel" -msgstr "Cancelar" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Cancelled" -msgstr "Cancelado" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "Create Fsm Equipment" -msgstr "Criar Equipamento FSM (Field Service Management)" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_product__create_fsm_equipment -#: model:ir.model.fields,field_description:fieldservice_stock.field_product_template__create_fsm_equipment -msgid "Creates a FSM Equipment" -msgstr "Cria um Equipamento FSM (Field Service Management)" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__current_stock_location_id -msgid "Current Inventory Location" -msgstr "Localização Atual do Inventário" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Deliveries" @@ -57,43 +31,16 @@ msgstr "Entregas" msgid "Delivery Orders" msgstr "Pedidos de Entrega" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Done" -msgstr "Concluído" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Done Quantity" msgstr "Quantidade Concluída" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Draft" -msgstr "Rascunho" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_production_lot__fsm_equipment_id -msgid "Equipment" -msgstr "Equipamento" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_request_order__fsm_order_id -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.stock_request_order_fsm_order_search -msgid "FSM Order" -msgstr "Pedido de FSM (Field Service Management)" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_wizard msgid "FSM Record Conversion" msgstr "Conversão de registro FSM (Field Service Management)" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_equipment -msgid "Field Service Equipment" -msgstr "Equipamento de Serviço de Campo" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_location msgid "Field Service Location" @@ -107,14 +54,8 @@ msgstr "Localização do Serviço de Campo" msgid "Field Service Order" msgstr "Pedido de Serviço de Campo" -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "In progress" -msgstr "Em andamento" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.fsm_equipment_form_view_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Inventory" msgstr "Inventário" @@ -125,11 +66,6 @@ msgstr "Inventário" msgid "Inventory Location" msgstr "Localização de Inventário" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_production_lot -msgid "Lot/Serial" -msgstr "Lote/Serial" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Moves" @@ -140,67 +76,22 @@ msgstr "Movimentações" msgid "Operations" msgstr "Operações" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__stock_request_ids -msgid "Order Lines" -msgstr "Linhas do Pedido" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_picking_type -msgid "Picking Type" -msgstr "Tipo de Coleta" - -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/fsm_order.py:60 -#: code:addons/fieldservice_stock/models/fsm_order.py:73 -#: code:addons/fieldservice_stock/models/fsm_order.py:86 -#, python-format -msgid "Please create a stock request." -msgstr "Por gentileza, crie uma requisição de estoque." - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_procurement_group #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id msgid "Procurement Group" msgstr "Grupo de Aquisições" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__product_id -msgid "Product" -msgstr "Produto" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_move_line -msgid "Product Moves (Stock Move Line)" -msgstr "Movimentações de Produto (Linha de Movimentação de Estoque)" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_product_template -msgid "Product Template" -msgstr "Modelo de Produto" - #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product msgid "Products" msgstr "Produtos" -#. module: fieldservice_stock -#: model:ir.model.fields,help:fieldservice_stock.field_stock_picking_type__create_fsm_equipment -msgid "Products with the 'Creates a FSM Equipment' flag will automatically be converted to an FSM Equipment." -msgstr "" -"Os produtos com o sinalizador \"Cria um equipamento FSM\" serão " -"automaticamente convertidos em um equipamento FSM." - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Reference" msgstr "Referência" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__request_stage -msgid "Request State" -msgstr "Estado da Requisição" - #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Requested Quantity" @@ -216,16 +107,6 @@ msgstr "Retornar Pedidos" msgid "Returns" msgstr "Retornos" -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_equipment__lot_id -msgid "Serial #" -msgstr "Serial #" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Set to Draft" -msgstr "Marque como rascunho" - #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id msgid "Shipping Location" @@ -236,50 +117,16 @@ msgstr "Localização do Embarque" msgid "Stock Move" msgstr "Movimentação de Estoque" -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request -msgid "Stock Request" -msgstr "Requisição de Estoque" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_request_order -msgid "Stock Request Order" -msgstr "Pedido de Movimentação de Estoque" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_request -msgid "Stock Requests" -msgstr "Requisições de Estoque" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_rule msgid "Stock Rule" msgstr "Regra de Estoque" -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Submit" -msgstr "Submeter" - -#. module: fieldservice_stock -#: selection:fsm.order,request_stage:0 -msgid "Submitted" -msgstr "Submetido" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_fsm_territory msgid "Territory" msgstr "Território" -#. module: fieldservice_stock -#: code:addons/fieldservice_stock/models/stock_request.py:58 -#, python-format -msgid "There is already a Stock Request Order with the same Field Service Order and Warehouse that is in Draft state. Please add this Stock Request there. (%s)" -msgstr "" -"Já existe um Pedido de Solicitação de Estoque com o mesmo Pedido de Serviço " -"de Campo e Armazém que está no estado Rascunho. Adicione essa solicitação de " -"estoque lá. (%s)" - #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_stock_picking msgid "Transfer" @@ -305,3 +152,99 @@ msgstr "Armazém" #: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id msgid "Warehouse used to ship the materials" msgstr "Armazém utilizado para embarque dos materiais" + +#~ msgid "Please create a stock request." +#~ msgstr "Por gentileza, crie uma requisição de estoque." + +#~ msgid "" +#~ "There is already a Stock Request Order " +#~ "with the same Field Service Order and " +#~ "Warehouse that is in Draft state. " +#~ "Please add this Stock Request " +#~ "there. (%s)" +#~ msgstr "" +#~ "Já existe um Pedido de Solicitação de Estoque com o mesmo Pedido de " +#~ "Serviço de Campo e Armazém que está no estado Rascunho. Adicione essa " +#~ "solicitação de estoque lá. (%s)" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Cancelled" +#~ msgstr "Cancelado" + +#~ msgid "Create Fsm Equipment" +#~ msgstr "Criar Equipamento FSM (Field Service Management)" + +#~ msgid "Creates a FSM Equipment" +#~ msgstr "Cria um Equipamento FSM (Field Service Management)" + +#~ msgid "Current Inventory Location" +#~ msgstr "Localização Atual do Inventário" + +#~ msgid "Done" +#~ msgstr "Concluído" + +#~ msgid "Draft" +#~ msgstr "Rascunho" + +#~ msgid "Equipment" +#~ msgstr "Equipamento" + +#~ msgid "FSM Order" +#~ msgstr "Pedido de FSM (Field Service Management)" + +#~ msgid "Field Service Equipment" +#~ msgstr "Equipamento de Serviço de Campo" + +#~ msgid "In progress" +#~ msgstr "Em andamento" + +#~ msgid "Lot/Serial" +#~ msgstr "Lote/Serial" + +#~ msgid "Order Lines" +#~ msgstr "Linhas do Pedido" + +#~ msgid "Picking Type" +#~ msgstr "Tipo de Coleta" + +#~ msgid "Product" +#~ msgstr "Produto" + +#~ msgid "Product Moves (Stock Move Line)" +#~ msgstr "Movimentações de Produto (Linha de Movimentação de Estoque)" + +#~ msgid "Product Template" +#~ msgstr "Modelo de Produto" + +#~ msgid "" +#~ "Products with the 'Creates a FSM Equipment' flag will automatically be " +#~ "converted to an FSM Equipment." +#~ msgstr "" +#~ "Os produtos com o sinalizador \"Cria um equipamento FSM\" serão " +#~ "automaticamente convertidos em um equipamento FSM." + +#~ msgid "Request State" +#~ msgstr "Estado da Requisição" + +#~ msgid "Serial #" +#~ msgstr "Serial #" + +#~ msgid "Set to Draft" +#~ msgstr "Marque como rascunho" + +#~ msgid "Stock Request" +#~ msgstr "Requisição de Estoque" + +#~ msgid "Stock Request Order" +#~ msgstr "Pedido de Movimentação de Estoque" + +#~ msgid "Stock Requests" +#~ msgstr "Requisições de Estoque" + +#~ msgid "Submit" +#~ msgstr "Submeter" + +#~ msgid "Submitted" +#~ msgstr "Submetido" From 232df0390d3fd9eb10ad2f457dde6c82a740edb8 Mon Sep 17 00:00:00 2001 From: Brian McMaster Date: Wed, 26 May 2021 11:23:36 -0400 Subject: [PATCH 170/631] [IMP] fieldservice_stock: black, isort, prettier --- fieldservice_stock/__manifest__.py | 46 ++++----- fieldservice_stock/data/fsm_stock_data.xml | 5 +- fieldservice_stock/models/fsm_location.py | 17 ++-- fieldservice_stock/models/fsm_order.py | 98 +++++++++++-------- fieldservice_stock/models/fsm_territory.py | 4 +- fieldservice_stock/models/fsm_wizard.py | 4 +- .../models/procurement_group.py | 4 +- fieldservice_stock/models/stock_move.py | 2 +- fieldservice_stock/models/stock_picking.py | 11 ++- fieldservice_stock/models/stock_rule.py | 28 ++++-- fieldservice_stock/tests/common.py | 25 +++-- fieldservice_stock/views/fsm_location.xml | 13 ++- fieldservice_stock/views/fsm_order.xml | 98 ++++++++++++------- fieldservice_stock/views/fsm_territory.xml | 19 ++-- fieldservice_stock/views/stock.xml | 27 ++--- 15 files changed, 229 insertions(+), 172 deletions(-) diff --git a/fieldservice_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 0423695fa7..ef693f20ea 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -2,32 +2,24 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service - Stock', - 'summary': 'Integrate the logistics operations with Field Service', - 'version': '12.0.3.0.0', - 'category': 'Field Service', - 'author': "Open Source Integrators, " - "Brian McMaster, " - "Odoo Community Association (OCA)", - 'website': 'https://github.com/OCA/field-service', - 'depends': [ - 'fieldservice', - 'stock', - ], - 'data': [ - 'security/ir.model.access.csv', - 'data/fsm_stock_data.xml', - 'views/fsm_territory.xml', - 'views/fsm_location.xml', - 'views/fsm_order.xml', - 'views/stock.xml', - ], - 'license': 'AGPL-3', - 'development_status': 'Beta', - 'maintainers': [ - 'brian10048', - 'wolfhall', - 'max3903', - 'smangukiya', + "name": "Field Service - Stock", + "summary": "Integrate the logistics operations with Field Service", + "version": "12.0.3.0.0", + "category": "Field Service", + "author": "Open Source Integrators, " + "Brian McMaster, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": ["fieldservice", "stock"], + "data": [ + "security/ir.model.access.csv", + "data/fsm_stock_data.xml", + "views/fsm_territory.xml", + "views/fsm_location.xml", + "views/fsm_order.xml", + "views/stock.xml", ], + "license": "AGPL-3", + "development_status": "Beta", + "maintainers": ["brian10048", "wolfhall", "max3903", "smangukiya"], } diff --git a/fieldservice_stock/data/fsm_stock_data.xml b/fieldservice_stock/data/fsm_stock_data.xml index 290cd237e7..21fb29802d 100644 --- a/fieldservice_stock/data/fsm_stock_data.xml +++ b/fieldservice_stock/data/fsm_stock_data.xml @@ -1,11 +1,8 @@ - - Field view - + - diff --git a/fieldservice_stock/models/fsm_location.py b/fieldservice_stock/models/fsm_location.py index d5b35bcd8b..e4d8f0298c 100644 --- a/fieldservice_stock/models/fsm_location.py +++ b/fieldservice_stock/models/fsm_location.py @@ -5,16 +5,17 @@ class FSMLocation(models.Model): - _inherit = 'fsm.location' + _inherit = "fsm.location" inventory_location_id = fields.Many2one( - 'stock.location', string='Inventory Location', required=True, - default=lambda self: self.env.ref('stock.stock_location_customers')) - shipping_address_id = fields.Many2one('res.partner', - string='Shipping Location') + "stock.location", + string="Inventory Location", + required=True, + default=lambda self: self.env.ref("stock.stock_location_customers"), + ) + shipping_address_id = fields.Many2one("res.partner", string="Shipping Location") - @api.onchange('fsm_parent_id') + @api.onchange("fsm_parent_id") def _onchange_fsm_parent_id(self): super(FSMLocation, self)._onchange_fsm_parent_id() - self.inventory_location_id = \ - self.fsm_parent_id.inventory_location_id.id + self.inventory_location_id = self.fsm_parent_id.inventory_location_id.id diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 6c9872c14b..56bf7dae1f 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -5,47 +5,61 @@ class FSMOrder(models.Model): - _inherit = 'fsm.order' + _inherit = "fsm.order" @api.model def _default_warehouse_id(self): company = self.env.user.company_id.id - warehouse_ids = self.env['stock.warehouse'].search( - [('company_id', '=', company)], limit=1) + warehouse_ids = self.env["stock.warehouse"].search( + [("company_id", "=", company)], limit=1 + ) return warehouse_ids and warehouse_ids.id @api.model def _get_move_domain(self): - return [('picking_id.picking_type_id.code', 'in', - ('outgoing', 'incoming'))] + return [("picking_id.picking_type_id.code", "in", ("outgoing", "incoming"))] - picking_ids = fields.One2many('stock.picking', 'fsm_order_id', - string='Transfers') - delivery_count = fields.Integer(string='Delivery Orders', - compute='_compute_picking_ids') + picking_ids = fields.One2many("stock.picking", "fsm_order_id", string="Transfers") + delivery_count = fields.Integer( + string="Delivery Orders", compute="_compute_picking_ids" + ) procurement_group_id = fields.Many2one( - 'procurement.group', 'Procurement Group', copy=False) + "procurement.group", "Procurement Group", copy=False + ) inventory_location_id = fields.Many2one( - related='location_id.inventory_location_id', readonly=True) - warehouse_id = fields.Many2one('stock.warehouse', string='Warehouse', - required=True, - default=_default_warehouse_id, - help="Warehouse used to ship the materials") - return_count = fields.Integer(string='Return Orders', - compute='_compute_picking_ids') + related="location_id.inventory_location_id", readonly=True + ) + warehouse_id = fields.Many2one( + "stock.warehouse", + string="Warehouse", + required=True, + default=_default_warehouse_id, + help="Warehouse used to ship the materials", + ) + return_count = fields.Integer( + string="Return Orders", compute="_compute_picking_ids" + ) move_ids = fields.One2many( - 'stock.move', 'fsm_order_id', string='Operations', - domain=_get_move_domain) + "stock.move", "fsm_order_id", string="Operations", domain=_get_move_domain + ) - @api.depends('picking_ids') + @api.depends("picking_ids") def _compute_picking_ids(self): for order in self: order.delivery_count = len( - [picking for picking in order.picking_ids if - picking.picking_type_id.code == 'outgoing']) + [ + picking + for picking in order.picking_ids + if picking.picking_type_id.code == "outgoing" + ] + ) order.return_count = len( - [picking for picking in order.picking_ids if - picking.picking_type_id.code == 'incoming']) + [ + picking + for picking in order.picking_ids + if picking.picking_type_id.code == "incoming" + ] + ) @api.multi def action_view_delivery(self): @@ -54,16 +68,18 @@ def action_view_delivery(self): of given fsm order ids. It can either be a in a list or in a form view, if there is only one delivery order to show. """ - action = self.env.ref('stock.action_picking_tree_all').read()[0] - pickings = self.mapped('picking_ids') - delivery_ids = [picking.id for picking in pickings if - picking.picking_type_id.code == 'outgoing'] + action = self.env.ref("stock.action_picking_tree_all").read()[0] + pickings = self.mapped("picking_ids") + delivery_ids = [ + picking.id + for picking in pickings + if picking.picking_type_id.code == "outgoing" + ] if len(delivery_ids) > 1: - action['domain'] = [('id', 'in', delivery_ids)] + action["domain"] = [("id", "in", delivery_ids)] elif pickings: - action['views'] = [(self.env.ref('stock.view_picking_form').id, - 'form')] - action['res_id'] = delivery_ids[0] + action["views"] = [(self.env.ref("stock.view_picking_form").id, "form")] + action["res_id"] = delivery_ids[0] return action @api.multi @@ -73,14 +89,16 @@ def action_view_returns(self): of given fsm order ids. It can either be a in a list or in a form view, if there is only one return order to show. """ - action = self.env.ref('stock.action_picking_tree_all').read()[0] - pickings = self.mapped('picking_ids') - return_ids = [picking.id for picking in pickings if - picking.picking_type_id.code == 'incoming'] + action = self.env.ref("stock.action_picking_tree_all").read()[0] + pickings = self.mapped("picking_ids") + return_ids = [ + picking.id + for picking in pickings + if picking.picking_type_id.code == "incoming" + ] if len(return_ids) > 1: - action['domain'] = [('id', 'in', return_ids)] + action["domain"] = [("id", "in", return_ids)] elif pickings: - action['views'] = [(self.env.ref('stock.view_picking_form').id, - 'form')] - action['res_id'] = return_ids[0] + action["views"] = [(self.env.ref("stock.view_picking_form").id, "form")] + action["res_id"] = return_ids[0] return action diff --git a/fieldservice_stock/models/fsm_territory.py b/fieldservice_stock/models/fsm_territory.py index 12959591af..bdff957024 100644 --- a/fieldservice_stock/models/fsm_territory.py +++ b/fieldservice_stock/models/fsm_territory.py @@ -4,6 +4,6 @@ class FSMTerritory(models.Model): - _inherit = 'fsm.territory' + _inherit = "fsm.territory" - warehouse_id = fields.Many2one('stock.warehouse', string='Warehouse') + warehouse_id = fields.Many2one("stock.warehouse", string="Warehouse") diff --git a/fieldservice_stock/models/fsm_wizard.py b/fieldservice_stock/models/fsm_wizard.py index 7b5be78958..96a1266b3e 100644 --- a/fieldservice_stock/models/fsm_wizard.py +++ b/fieldservice_stock/models/fsm_wizard.py @@ -5,9 +5,9 @@ class FSMWizard(models.TransientModel): - _inherit = 'fsm.wizard' + _inherit = "fsm.wizard" def _prepare_fsm_location(self, partner): res = super()._prepare_fsm_location(partner) - res['inventory_location_id'] = partner.property_stock_customer.id + res["inventory_location_id"] = partner.property_stock_customer.id return res diff --git a/fieldservice_stock/models/procurement_group.py b/fieldservice_stock/models/procurement_group.py index 39e60cda88..1c02672451 100644 --- a/fieldservice_stock/models/procurement_group.py +++ b/fieldservice_stock/models/procurement_group.py @@ -4,6 +4,6 @@ class ProcurementGroup(models.Model): - _inherit = 'procurement.group' + _inherit = "procurement.group" - fsm_order_id = fields.Many2one('fsm.order', 'Field Service Order') + fsm_order_id = fields.Many2one("fsm.order", "Field Service Order") diff --git a/fieldservice_stock/models/stock_move.py b/fieldservice_stock/models/stock_move.py index 8c492ab972..9c7abe934e 100644 --- a/fieldservice_stock/models/stock_move.py +++ b/fieldservice_stock/models/stock_move.py @@ -6,4 +6,4 @@ class StockMove(models.Model): _inherit = "stock.move" - fsm_order_id = fields.Many2one('fsm.order', string='Field Service Order') + fsm_order_id = fields.Many2one("fsm.order", string="Field Service Order") diff --git a/fieldservice_stock/models/stock_picking.py b/fieldservice_stock/models/stock_picking.py index 06abdeb450..20f94d4247 100644 --- a/fieldservice_stock/models/stock_picking.py +++ b/fieldservice_stock/models/stock_picking.py @@ -4,14 +4,15 @@ class StockPicking(models.Model): - _inherit = 'stock.picking' + _inherit = "stock.picking" - fsm_order_id = fields.Many2one(related="group_id.fsm_order_id", - string="Field Service Order", store=True) + fsm_order_id = fields.Many2one( + related="group_id.fsm_order_id", string="Field Service Order", store=True + ) @api.model def create(self, vals): res = super().create(vals) - if vals.get('fsm_order_id'): - res.fsm_order_id = vals.get('fsm_order_id') + if vals.get("fsm_order_id"): + res.fsm_order_id = vals.get("fsm_order_id") return res diff --git a/fieldservice_stock/models/stock_rule.py b/fieldservice_stock/models/stock_rule.py index 63c0ec3dff..84dde2f114 100644 --- a/fieldservice_stock/models/stock_rule.py +++ b/fieldservice_stock/models/stock_rule.py @@ -4,12 +4,28 @@ class StockRule(models.Model): - _inherit = 'stock.rule' + _inherit = "stock.rule" - def _get_stock_move_values(self, product_id, product_qty, product_uom, - location_id, name, origin, values, group_id): + def _get_stock_move_values( + self, + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + values, + group_id, + ): vals = super()._get_stock_move_values( - product_id, product_qty, product_uom, location_id, name, origin, - values, group_id) - vals.update({'fsm_order_id': values.get('fsm_order_id')}) + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + values, + group_id, + ) + vals.update({"fsm_order_id": values.get("fsm_order_id")}) return vals diff --git a/fieldservice_stock/tests/common.py b/fieldservice_stock/tests/common.py index f71cabc456..c20a4a83b2 100644 --- a/fieldservice_stock/tests/common.py +++ b/fieldservice_stock/tests/common.py @@ -5,7 +5,6 @@ class TestFSMStockCommon(SavepointCase): - @classmethod def setUpClass(cls): super(TestFSMStockCommon, cls).setUpClass() @@ -15,12 +14,18 @@ def setUpClass(cls): cls.Product = cls.env["product.product"] cls.stock_cust_loc = cls.ModelData.xmlid_to_res_id( - "stock.stock_location_customers") - cls.partner_1 = cls.env["res.partner"].with_context( - tracking_disable=True).create({"name": "Partner 1"}) - cls.fsm_location_1 = cls.env["fsm.location"].create({ - "name": "FSM Location 1", - "owner_id": cls.partner_1.id, - "customer_id": cls.partner_1.id, - "inventory_location_id": cls.stock_cust_loc, - }) + "stock.stock_location_customers" + ) + cls.partner_1 = ( + cls.env["res.partner"] + .with_context(tracking_disable=True) + .create({"name": "Partner 1"}) + ) + cls.fsm_location_1 = cls.env["fsm.location"].create( + { + "name": "FSM Location 1", + "owner_id": cls.partner_1.id, + "customer_id": cls.partner_1.id, + "inventory_location_id": cls.stock_cust_loc, + } + ) diff --git a/fieldservice_stock/views/fsm_location.xml b/fieldservice_stock/views/fsm_location.xml index 2de8f469b9..11a5350655 100644 --- a/fieldservice_stock/views/fsm_location.xml +++ b/fieldservice_stock/views/fsm_location.xml @@ -1,21 +1,20 @@ - - fsm.location - + - + - + - diff --git a/fieldservice_stock/views/fsm_order.xml b/fieldservice_stock/views/fsm_order.xml index 8bb19a11d4..6c04bffdc3 100644 --- a/fieldservice_stock/views/fsm_order.xml +++ b/fieldservice_stock/views/fsm_order.xml @@ -1,58 +1,84 @@ - fsm.order.form.stock fsm.order - +
    - - -
    - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +
    -
    diff --git a/fieldservice_stock/views/fsm_territory.xml b/fieldservice_stock/views/fsm_territory.xml index bc6698c152..810c48c970 100644 --- a/fieldservice_stock/views/fsm_territory.xml +++ b/fieldservice_stock/views/fsm_territory.xml @@ -1,29 +1,30 @@ - fsm.territory.warehouse.tree fsm.territory - + - + - fsm.territory.warehouse.form fsm.territory - + - + - diff --git a/fieldservice_stock/views/stock.xml b/fieldservice_stock/views/stock.xml index 37d0963414..110cf14e6b 100644 --- a/fieldservice_stock/views/stock.xml +++ b/fieldservice_stock/views/stock.xml @@ -1,16 +1,17 @@ - - - - - + + From 6451e71188d1f863c8ed833c2eb29ac6b758babc Mon Sep 17 00:00:00 2001 From: Brian McMaster Date: Wed, 26 May 2021 13:28:49 -0400 Subject: [PATCH 171/631] [MIG] fieldservice_stock: Migration to 13.0 --- fieldservice_stock/README.rst | 12 +- fieldservice_stock/__manifest__.py | 6 +- fieldservice_stock/i18n/es_AR.po | 154 ++++++++++++++++++ .../i18n/fieldservice_stock.pot | 11 +- fieldservice_stock/i18n/fr_FR.po | 154 ++++++++++++++++++ .../migrations/13.0.1.0.0/pre-migration.py | 12 ++ fieldservice_stock/models/__init__.py | 2 +- fieldservice_stock/models/fsm_order.py | 2 - .../{fsm_territory.py => res_territory.py} | 4 +- fieldservice_stock/readme/INSTALL.rst | 2 +- .../static/description/index.html | 8 +- .../{fsm_territory.xml => res_territory.xml} | 16 +- fieldservice_stock/views/stock.xml | 2 +- 13 files changed, 351 insertions(+), 34 deletions(-) create mode 100644 fieldservice_stock/i18n/es_AR.po create mode 100644 fieldservice_stock/i18n/fr_FR.po create mode 100644 fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py rename fieldservice_stock/models/{fsm_territory.py => res_territory.py} (77%) rename fieldservice_stock/views/{fsm_territory.xml => res_territory.xml} (56%) diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 9a6fcdb3da..231c92d3ac 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -14,13 +14,13 @@ Field Service - Stock :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/12.0/fieldservice_stock + :target: https://github.com/OCA/field-service/tree/13.0/fieldservice_stock :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-12-0/field-service-12-0-fieldservice_stock + :target: https://translation.odoo-community.org/projects/field-service-13-0/field-service-13-0-fieldservice_stock :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/12.0 + :target: https://runbot.odoo-community.org/runbot/264/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -40,7 +40,7 @@ Installation To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/11.0/base_geoengine +https://github.com/OCA/geospatial/tree/13.0/base_geoengine Configuration ============= @@ -75,7 +75,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -133,6 +133,6 @@ Current `maintainers `__: |maintainer-brian10048| |maintainer-wolfhall| |maintainer-max3903| |maintainer-smangukiya| -This module is part of the `OCA/field-service `_ project on GitHub. +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_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index ef693f20ea..3d609dd3de 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -1,10 +1,10 @@ -# Copyright (C) 2018 - TODAY, Brian McMaster +# Copyright (C) 2018 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Field Service - Stock", "summary": "Integrate the logistics operations with Field Service", - "version": "12.0.3.0.0", + "version": "13.0.1.0.0", "category": "Field Service", "author": "Open Source Integrators, " "Brian McMaster, " @@ -14,7 +14,7 @@ "data": [ "security/ir.model.access.csv", "data/fsm_stock_data.xml", - "views/fsm_territory.xml", + "views/res_territory.xml", "views/fsm_location.xml", "views/fsm_order.xml", "views/stock.xml", diff --git a/fieldservice_stock/i18n/es_AR.po b/fieldservice_stock/i18n/es_AR.po new file mode 100644 index 0000000000..4fb6ffd27d --- /dev/null +++ b/fieldservice_stock/i18n/es_AR.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-05-30 20:48+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.3.2\n" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Allocated Quantity" +msgstr "Cantidad Asignada" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Deliveries" +msgstr "Entregas" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count +msgid "Delivery Orders" +msgstr "Pedidos de Entrega" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Done Quantity" +msgstr "Cantidad Realizada" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "Conversión de Registro FSM" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_order +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id +msgid "Field Service Order" +msgstr "Pedido de Servicio de Campo" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Inventory" +msgstr "Inventario" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id +msgid "Inventory Location" +msgstr "Ubicación de Inventario" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Moves" +msgstr "Movimientos" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids +msgid "Operations" +msgstr "Operaciones" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_procurement_group +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id +msgid "Procurement Group" +msgstr "Grupo de Adquicisiones" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product +msgid "Products" +msgstr "Productos" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Reference" +msgstr "Referencia" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Requested Quantity" +msgstr "Cantidad Requerida" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count +msgid "Return Orders" +msgstr "Pedidos de Devolución" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Returns" +msgstr "Devoluciones" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id +msgid "Shipping Location" +msgstr "Ubicación de Envío" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de Inventario" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_rule +msgid "Stock Rule" +msgstr "Regla de Inventario" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_res_territory +msgid "Territory" +msgstr "Territorio" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking +msgid "Transfer" +msgstr "Transferencia" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids +msgid "Transfers" +msgstr "Transferencias" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Unit of Measure" +msgstr "Unidad de Medida" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory__warehouse_id +msgid "Warehouse" +msgstr "Almacén" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse used to ship the materials" +msgstr "Almacén utilizada para envío de materiales" diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index 831dfcda85..8e5a953614 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_stock +# * fieldservice_stock # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -120,7 +120,7 @@ msgid "Stock Rule" msgstr "" #. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_territory +#: model:ir.model,name:fieldservice_stock.model_res_territory msgid "Territory" msgstr "" @@ -141,7 +141,7 @@ msgstr "" #. module: fieldservice_stock #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_territory__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory__warehouse_id msgid "Warehouse" msgstr "" @@ -149,4 +149,3 @@ msgstr "" #: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id msgid "Warehouse used to ship the materials" msgstr "" - diff --git a/fieldservice_stock/i18n/fr_FR.po b/fieldservice_stock/i18n/fr_FR.po new file mode 100644 index 0000000000..b96b9bc440 --- /dev/null +++ b/fieldservice_stock/i18n/fr_FR.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-06-02 11: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_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Allocated Quantity" +msgstr "Quantité allouée" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Deliveries" +msgstr "Livraisons" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count +msgid "Delivery Orders" +msgstr "Ordres de livraison" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Done Quantity" +msgstr "Quantité faite" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_location +msgid "Field Service Location" +msgstr "Lieu de prestation" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_fsm_order +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id +msgid "Field Service Order" +msgstr "Service sur site" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Inventory" +msgstr "Inventaire" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id +msgid "Inventory Location" +msgstr "Lieu d'inventaire" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Moves" +msgstr "Mouvements" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids +msgid "Operations" +msgstr "Opérations" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_procurement_group +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id +msgid "Procurement Group" +msgstr "Groupe d'approvisionnement" + +#. module: fieldservice_stock +#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product +msgid "Products" +msgstr "Produits" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Reference" +msgstr "Référence" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Requested Quantity" +msgstr "Quantité demandée" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count +msgid "Return Orders" +msgstr "Ordres de retour" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Returns" +msgstr "Retours" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id +msgid "Shipping Location" +msgstr "Lieu de livraison" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_move +msgid "Stock Move" +msgstr "Mouvement de stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_rule +msgid "Stock Rule" +msgstr "Règle de stock" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_res_territory +msgid "Territory" +msgstr "Territoire" + +#. module: fieldservice_stock +#: model:ir.model,name:fieldservice_stock.model_stock_picking +msgid "Transfer" +msgstr "Transfert" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids +msgid "Transfers" +msgstr "Transferts" + +#. module: fieldservice_stock +#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock +msgid "Unit of Measure" +msgstr "Unité de mesure" + +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id +#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory__warehouse_id +msgid "Warehouse" +msgstr "Entrepôt" + +#. module: fieldservice_stock +#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id +msgid "Warehouse used to ship the materials" +msgstr "Entrepôt utilisé pour livrer les produits" diff --git a/fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py b/fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py new file mode 100644 index 0000000000..45666c371e --- /dev/null +++ b/fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py @@ -0,0 +1,12 @@ +# Copyright 2021 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + cr = env.cr + if openupgrade.table_exists(cr, "fsm_territory"): + openupgrade.rename_models(cr, [("fsm.territory", "res.territory")]) + openupgrade.rename_tables(cr, [("fsm_territory", "res_territory")]) diff --git a/fieldservice_stock/models/__init__.py b/fieldservice_stock/models/__init__.py index 3b9b5ad1fd..f8f62f5645 100644 --- a/fieldservice_stock/models/__init__.py +++ b/fieldservice_stock/models/__init__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ( - fsm_territory, + res_territory, fsm_location, fsm_order, stock_move, diff --git a/fieldservice_stock/models/fsm_order.py b/fieldservice_stock/models/fsm_order.py index 56bf7dae1f..106a51eff3 100644 --- a/fieldservice_stock/models/fsm_order.py +++ b/fieldservice_stock/models/fsm_order.py @@ -61,7 +61,6 @@ def _compute_picking_ids(self): ] ) - @api.multi def action_view_delivery(self): """ This function returns an action that display existing delivery orders @@ -82,7 +81,6 @@ def action_view_delivery(self): action["res_id"] = delivery_ids[0] return action - @api.multi def action_view_returns(self): """ This function returns an action that display existing return orders diff --git a/fieldservice_stock/models/fsm_territory.py b/fieldservice_stock/models/res_territory.py similarity index 77% rename from fieldservice_stock/models/fsm_territory.py rename to fieldservice_stock/models/res_territory.py index bdff957024..e231fca4e9 100644 --- a/fieldservice_stock/models/fsm_territory.py +++ b/fieldservice_stock/models/res_territory.py @@ -3,7 +3,7 @@ from odoo import fields, models -class FSMTerritory(models.Model): - _inherit = "fsm.territory" +class ResTerritory(models.Model): + _inherit = "res.territory" warehouse_id = fields.Many2one("stock.warehouse", string="Warehouse") diff --git a/fieldservice_stock/readme/INSTALL.rst b/fieldservice_stock/readme/INSTALL.rst index c010f8f6a2..e5355c4b0f 100644 --- a/fieldservice_stock/readme/INSTALL.rst +++ b/fieldservice_stock/readme/INSTALL.rst @@ -1,4 +1,4 @@ To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/11.0/base_geoengine +https://github.com/OCA/geospatial/tree/13.0/base_geoengine diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index e3f772599b..28f9414271 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Stock

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    This module is an add-on for the Field Service application in Odoo. It provides a generic framework to allow you to link inventory and stock operations with your field service operations.

    @@ -392,7 +392,7 @@

    Field Service - Stock

    Installation

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

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

    +https://github.com/OCA/geospatial/tree/13.0/base_geoengine

    Configuration

    @@ -424,7 +424,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -461,7 +461,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    brian10048 wolfhall max3903 smangukiya

    -

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

    +

    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_stock/views/fsm_territory.xml b/fieldservice_stock/views/res_territory.xml similarity index 56% rename from fieldservice_stock/views/fsm_territory.xml rename to fieldservice_stock/views/res_territory.xml index 810c48c970..62d19ef241 100644 --- a/fieldservice_stock/views/fsm_territory.xml +++ b/fieldservice_stock/views/res_territory.xml @@ -1,9 +1,9 @@ - - fsm.territory.warehouse.tree - fsm.territory - + + res.territory.warehouse.tree + res.territory + - - fsm.territory.warehouse.form - fsm.territory - + + res.territory.warehouse.form + res.territory + From a6a5c8a1771648e2102b11c036c416bc30fc237a Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 5 Jul 2021 17:10:05 +0530 Subject: [PATCH 172/631] [14.0][MIG] fieldservice_stock --- fieldservice_stock/README.rst | 11 +- fieldservice_stock/__manifest__.py | 2 +- fieldservice_stock/i18n/es_AR.po | 154 ------------------ fieldservice_stock/i18n/fr_FR.po | 154 ------------------ .../migrations/13.0.1.0.0/pre-migration.py | 12 -- fieldservice_stock/models/stock_rule.py | 4 +- fieldservice_stock/readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 9 +- fieldservice_stock/tests/__init__.py | 3 +- fieldservice_stock/tests/common.py | 31 ---- fieldservice_stock/tests/test_fsm_stock.py | 65 ++++++++ fieldservice_stock/tests/test_fsm_wizard.py | 18 ++ fieldservice_stock/views/fsm_order.xml | 1 - .../odoo/addons/fieldservice_stock | 1 + setup/fieldservice_stock/setup.py | 6 + 15 files changed, 107 insertions(+), 365 deletions(-) delete mode 100644 fieldservice_stock/i18n/es_AR.po delete mode 100644 fieldservice_stock/i18n/fr_FR.po delete mode 100644 fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py delete mode 100644 fieldservice_stock/tests/common.py create mode 100644 fieldservice_stock/tests/test_fsm_stock.py create mode 100644 fieldservice_stock/tests/test_fsm_wizard.py create mode 120000 setup/fieldservice_stock/odoo/addons/fieldservice_stock create mode 100644 setup/fieldservice_stock/setup.py diff --git a/fieldservice_stock/README.rst b/fieldservice_stock/README.rst index 231c92d3ac..a5ae65c03f 100644 --- a/fieldservice_stock/README.rst +++ b/fieldservice_stock/README.rst @@ -14,13 +14,13 @@ Field Service - Stock :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/13.0/fieldservice_stock + :target: https://github.com/OCA/field-service/tree/14.0/fieldservice_stock :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-13-0/field-service-13-0-fieldservice_stock + :target: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_stock :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/13.0 + :target: https://runbot.odoo-community.org/runbot/264/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -75,7 +75,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -95,6 +95,7 @@ Contributors * Sandip Mangukiya * Serpent Consulting Services Pvt. Ltd. * Marcel Savegnago +* Freni Patel Other credits ~~~~~~~~~~~~~ @@ -133,6 +134,6 @@ Current `maintainers `__: |maintainer-brian10048| |maintainer-wolfhall| |maintainer-max3903| |maintainer-smangukiya| -This module is part of the `OCA/field-service `_ project on GitHub. +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_stock/__manifest__.py b/fieldservice_stock/__manifest__.py index 3d609dd3de..1f5683ce8e 100644 --- a/fieldservice_stock/__manifest__.py +++ b/fieldservice_stock/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Field Service - Stock", "summary": "Integrate the logistics operations with Field Service", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Field Service", "author": "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_stock/i18n/es_AR.po b/fieldservice_stock/i18n/es_AR.po deleted file mode 100644 index 4fb6ffd27d..0000000000 --- a/fieldservice_stock/i18n/es_AR.po +++ /dev/null @@ -1,154 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * fieldservice_stock -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-05-30 20:48+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.3.2\n" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Allocated Quantity" -msgstr "Cantidad Asignada" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Deliveries" -msgstr "Entregas" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count -msgid "Delivery Orders" -msgstr "Pedidos de Entrega" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Done Quantity" -msgstr "Cantidad Realizada" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_wizard -msgid "FSM Record Conversion" -msgstr "Conversión de Registro FSM" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_location -msgid "Field Service Location" -msgstr "Ubicación del Servicio de Campo" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_order -#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id -msgid "Field Service Order" -msgstr "Pedido de Servicio de Campo" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Inventory" -msgstr "Inventario" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id -msgid "Inventory Location" -msgstr "Ubicación de Inventario" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Moves" -msgstr "Movimientos" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids -msgid "Operations" -msgstr "Operaciones" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_procurement_group -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id -msgid "Procurement Group" -msgstr "Grupo de Adquicisiones" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product -msgid "Products" -msgstr "Productos" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Reference" -msgstr "Referencia" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Requested Quantity" -msgstr "Cantidad Requerida" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count -msgid "Return Orders" -msgstr "Pedidos de Devolución" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Returns" -msgstr "Devoluciones" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id -msgid "Shipping Location" -msgstr "Ubicación de Envío" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_move -msgid "Stock Move" -msgstr "Movimiento de Inventario" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_rule -msgid "Stock Rule" -msgstr "Regla de Inventario" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_res_territory -msgid "Territory" -msgstr "Territorio" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_picking -msgid "Transfer" -msgstr "Transferencia" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids -msgid "Transfers" -msgstr "Transferencias" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Unit of Measure" -msgstr "Unidad de Medida" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory__warehouse_id -msgid "Warehouse" -msgstr "Almacén" - -#. module: fieldservice_stock -#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id -msgid "Warehouse used to ship the materials" -msgstr "Almacén utilizada para envío de materiales" diff --git a/fieldservice_stock/i18n/fr_FR.po b/fieldservice_stock/i18n/fr_FR.po deleted file mode 100644 index b96b9bc440..0000000000 --- a/fieldservice_stock/i18n/fr_FR.po +++ /dev/null @@ -1,154 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * fieldservice_stock -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-06-02 11: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_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Allocated Quantity" -msgstr "Quantité allouée" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Deliveries" -msgstr "Livraisons" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__delivery_count -msgid "Delivery Orders" -msgstr "Ordres de livraison" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Done Quantity" -msgstr "Quantité faite" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_wizard -msgid "FSM Record Conversion" -msgstr "" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_location -msgid "Field Service Location" -msgstr "Lieu de prestation" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_fsm_order -#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__fsm_order_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__fsm_order_id -msgid "Field Service Order" -msgstr "Service sur site" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Inventory" -msgstr "Inventaire" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__inventory_location_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__inventory_location_id -msgid "Inventory Location" -msgstr "Lieu d'inventaire" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Moves" -msgstr "Mouvements" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__move_ids -msgid "Operations" -msgstr "Opérations" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_procurement_group -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id -msgid "Procurement Group" -msgstr "Groupe d'approvisionnement" - -#. module: fieldservice_stock -#: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_product -msgid "Products" -msgstr "Produits" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Reference" -msgstr "Référence" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Requested Quantity" -msgstr "Quantité demandée" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__return_count -msgid "Return Orders" -msgstr "Ordres de retour" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Returns" -msgstr "Retours" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__shipping_address_id -msgid "Shipping Location" -msgstr "Lieu de livraison" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_move -msgid "Stock Move" -msgstr "Mouvement de stock" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_rule -msgid "Stock Rule" -msgstr "Règle de stock" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_res_territory -msgid "Territory" -msgstr "Territoire" - -#. module: fieldservice_stock -#: model:ir.model,name:fieldservice_stock.model_stock_picking -msgid "Transfer" -msgstr "Transfert" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__picking_ids -msgid "Transfers" -msgstr "Transferts" - -#. module: fieldservice_stock -#: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock -msgid "Unit of Measure" -msgstr "Unité de mesure" - -#. module: fieldservice_stock -#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__warehouse_id -#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory__warehouse_id -msgid "Warehouse" -msgstr "Entrepôt" - -#. module: fieldservice_stock -#: model:ir.model.fields,help:fieldservice_stock.field_fsm_order__warehouse_id -msgid "Warehouse used to ship the materials" -msgstr "Entrepôt utilisé pour livrer les produits" diff --git a/fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py b/fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py deleted file mode 100644 index 45666c371e..0000000000 --- a/fieldservice_stock/migrations/13.0.1.0.0/pre-migration.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright 2021 Brian McMaster -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from openupgradelib import openupgrade - - -@openupgrade.migrate() -def migrate(env, version): - cr = env.cr - if openupgrade.table_exists(cr, "fsm_territory"): - openupgrade.rename_models(cr, [("fsm.territory", "res.territory")]) - openupgrade.rename_tables(cr, [("fsm_territory", "res_territory")]) diff --git a/fieldservice_stock/models/stock_rule.py b/fieldservice_stock/models/stock_rule.py index 84dde2f114..3ae73200cf 100644 --- a/fieldservice_stock/models/stock_rule.py +++ b/fieldservice_stock/models/stock_rule.py @@ -14,8 +14,8 @@ def _get_stock_move_values( location_id, name, origin, + company_id, values, - group_id, ): vals = super()._get_stock_move_values( product_id, @@ -24,8 +24,8 @@ def _get_stock_move_values( location_id, name, origin, + company_id, values, - group_id, ) vals.update({"fsm_order_id": values.get("fsm_order_id")}) return vals diff --git a/fieldservice_stock/readme/CONTRIBUTORS.rst b/fieldservice_stock/readme/CONTRIBUTORS.rst index 5db5c162c6..c8f79f911e 100644 --- a/fieldservice_stock/readme/CONTRIBUTORS.rst +++ b/fieldservice_stock/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Sandip Mangukiya * Serpent Consulting Services Pvt. Ltd. * Marcel Savegnago +* Freni Patel diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 28f9414271..02b650895c 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Stock + + +
    +

    Field Service Partner Relations

    + + +

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

    +

    Partner Multi Relations does not support FSM Locations as a left or right +partner_id, only Organisation and Person

    +

    This module allows you to connect partner_multi_relations with FSM Locations and +comes with a predifined list of relation types for the user to use.

    +

    Table of contents

    + +
    +

    Installation

    +

    First install partner_multi_relation from OCA/partner-contact and then +install the fieldservice module. After these are installed you can install +this module.

    +

    Please refer to the installation instructions available at: +https://github.com/OCA/field-service/tree/11.0/fieldservice_partner_multi_relation

    +
    +
    +

    Configuration

    +

    To use this module, you need to:

    +
      +
    • Go to Contacts > Relation Types
    • +
    • Create or select a relation type with FSM location
    • +
    • Choose wether or not make it a unique relation
    • +
    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Go to Contacts > Relations
    • +
    • Set a relation of your choosing using your new type
    • +
    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    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.

    +

    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.

    +
    +
    +
    + + From b8b20530e88cbf67514ff6f9cebb828503bf1c5e Mon Sep 17 00:00:00 2001 From: osi-scampbell Date: Thu, 17 Jan 2019 12:56:35 -0700 Subject: [PATCH 177/631] [IMP] flake8 --- .../models/res_partner_relation_type.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fieldservice_partner_multi_relation/models/res_partner_relation_type.py b/fieldservice_partner_multi_relation/models/res_partner_relation_type.py index 8e6f5cbd10..ec6c081923 100644 --- a/fieldservice_partner_multi_relation/models/res_partner_relation_type.py +++ b/fieldservice_partner_multi_relation/models/res_partner_relation_type.py @@ -2,6 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import _, api, models +from odoo.exceptions import ValidationError HANDLE_INVALID_ONCHANGE = [ ('restrict', @@ -26,7 +27,7 @@ def get_partner_types(self): ('p', _('Person')), ('fsm-location', _('FSM Location')) ] - + @api.multi def _check_partner(self, side): super(ResPartnerRelationType, self) @@ -35,9 +36,9 @@ def _check_partner(self, side): ptype = getattr(record.type_id, "contact_type_%s" % side) partner = getattr(record, '%s_partner_id' % side) if ((ptype == 'c' and not partner.is_company) or - (ptype == 'p' and partner.is_company) or - (ptype == 'fsm-location' and - not partner.fsm_location)): + (ptype == 'p' and partner.is_company) or + (ptype == 'fsm-location' and + not partner.fsm_location)): raise ValidationError( _('The %s partner is not applicable for this ' 'relation type.') % side From 53f245dd2450790da8c3d3bf249ffe4512f7763e Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 23 Jan 2019 13:27:51 -0600 Subject: [PATCH 178/631] [FIX] fieldservice_partner_multi_relation --- fieldservice_partner_multi_relation/models/__init__.py | 1 - fieldservice_partner_multi_relation/models/res_partner.py | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fieldservice_partner_multi_relation/models/__init__.py b/fieldservice_partner_multi_relation/models/__init__.py index 17fa5f3c11..1f68c26cd0 100644 --- a/fieldservice_partner_multi_relation/models/__init__.py +++ b/fieldservice_partner_multi_relation/models/__init__.py @@ -3,4 +3,3 @@ from . import res_partner_relation_type from . import res_partner - diff --git a/fieldservice_partner_multi_relation/models/res_partner.py b/fieldservice_partner_multi_relation/models/res_partner.py index 9a16eccada..c5f1d1093a 100644 --- a/fieldservice_partner_multi_relation/models/res_partner.py +++ b/fieldservice_partner_multi_relation/models/res_partner.py @@ -9,12 +9,13 @@ class ResPartner(models.Model): @api.multi def get_partner_type(self): - super(ResPartner, self) - """Get partner type for relation. + """ + Get partner type for relation. :return: 'c' for company or 'p' for person or - 'fsm-location' for FSM Location + 'fsm-location' for FSM Location :rtype: str """ + super(ResPartner, self) self.ensure_one() if self.fsm_location: return 'fsm-location' From 6a83da9a94fceda26d2b7759a63ce435c99cfcfd Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Mon, 22 Apr 2019 17:06:48 +0530 Subject: [PATCH 179/631] [MIG][12.0] fieldservice_partner_multi_relation --- .../README.rst | 19 +++++++--- .../__init__.py | 1 - .../__manifest__.py | 12 +++---- .../data/demo.xml | 21 ----------- .../models/__init__.py | 1 - .../models/res_partner.py | 6 +--- .../models/res_partner_relation_type.py | 36 +------------------ .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 9 +++-- 9 files changed, 29 insertions(+), 77 deletions(-) diff --git a/fieldservice_partner_multi_relation/README.rst b/fieldservice_partner_multi_relation/README.rst index 6f55c109b5..febb21a839 100644 --- a/fieldservice_partner_multi_relation/README.rst +++ b/fieldservice_partner_multi_relation/README.rst @@ -14,13 +14,13 @@ Field Service Partner Relations :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/11.0/fieldservice_partner_multi_relation + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_partner_multi_relation :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-11-0/field-service-11-0-fieldservice_partner_multi_relation + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_partner_multi_relation :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -75,7 +75,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -91,6 +91,7 @@ Contributors ~~~~~~~~~~~~ * Steven Campbell +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -112,6 +113,14 @@ 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. -This module is part of the `OCA/field-service `_ project on GitHub. +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 + +Current `maintainer `__: + +|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_partner_multi_relation/__init__.py b/fieldservice_partner_multi_relation/__init__.py index da2feecfe9..69f7babdfb 100644 --- a/fieldservice_partner_multi_relation/__init__.py +++ b/fieldservice_partner_multi_relation/__init__.py @@ -1,4 +1,3 @@ -# Copyright (C) 2018 - TODAY, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models diff --git a/fieldservice_partner_multi_relation/__manifest__.py b/fieldservice_partner_multi_relation/__manifest__.py index 2f85787adc..8eb9c4bb6a 100644 --- a/fieldservice_partner_multi_relation/__manifest__.py +++ b/fieldservice_partner_multi_relation/__manifest__.py @@ -2,19 +2,19 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Field Service Partner Relations", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', "website": "https://github.com/OCA/partner-contact", "complexity": "normal", "license": "AGPL-3", "depends": [ - 'contacts', - 'sales_team', - 'partner_multi_relation' + 'partner_multi_relation', + 'fieldservice' ], "demo": [ "data/demo.xml", - ] - + ], + 'development_status': 'Beta', + 'maintainers': ['max3903'], } diff --git a/fieldservice_partner_multi_relation/data/demo.xml b/fieldservice_partner_multi_relation/data/demo.xml index dccce47168..70a4c7e5d2 100644 --- a/fieldservice_partner_multi_relation/data/demo.xml +++ b/fieldservice_partner_multi_relation/data/demo.xml @@ -6,21 +6,18 @@ is owned by fsm-location fsm-location -
    owns is owned by p fsm-location - owns is owned by c fsm-location - @@ -29,21 +26,18 @@ is managed by fsm-location fsm-location -
    manges is managed by c fsm-location - manges is managed by p fsm-location - @@ -52,21 +46,18 @@ gets the invoices paid by fsm-location fsm-location -
    pays the invoices for gets the invoices paid by c fsm-location - pays the invoices for gets the invoices paid by p fsm-location - @@ -75,21 +66,18 @@ whose primary contact fsm-location fsm-location - is the primary contact of whose primary contact c fsm-location - is the primary contact of whose primary contact p fsm-location - @@ -98,21 +86,18 @@ whose secondary contact fsm-location fsm-location - is the secondary contact of whose secondary contact c fsm-location - is the secondary contact of whose secondary contact p fsm-location - @@ -121,21 +106,18 @@ is occupied by fsm-location fsm-location - is a tenant of is occupied by c fsm-location - is a tenant of is occupied by p fsm-location - @@ -144,20 +126,17 @@ employs fsm-location fsm-location - is an employee at employs c fsm-location - is an employee at employs p fsm-location -
    diff --git a/fieldservice_partner_multi_relation/models/__init__.py b/fieldservice_partner_multi_relation/models/__init__.py index 1f68c26cd0..afae7c673f 100644 --- a/fieldservice_partner_multi_relation/models/__init__.py +++ b/fieldservice_partner_multi_relation/models/__init__.py @@ -1,4 +1,3 @@ -# Copyright (C) 2018 - TODAY, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import res_partner_relation_type diff --git a/fieldservice_partner_multi_relation/models/res_partner.py b/fieldservice_partner_multi_relation/models/res_partner.py index c5f1d1093a..144b3151f5 100644 --- a/fieldservice_partner_multi_relation/models/res_partner.py +++ b/fieldservice_partner_multi_relation/models/res_partner.py @@ -15,11 +15,7 @@ def get_partner_type(self): 'fsm-location' for FSM Location :rtype: str """ - super(ResPartner, self) self.ensure_one() if self.fsm_location: return 'fsm-location' - elif self.is_company: - return 'c' - else: - return 'p' + return super(ResPartner, self).get_partner_type() diff --git a/fieldservice_partner_multi_relation/models/res_partner_relation_type.py b/fieldservice_partner_multi_relation/models/res_partner_relation_type.py index ec6c081923..6a7bb3aa96 100644 --- a/fieldservice_partner_multi_relation/models/res_partner_relation_type.py +++ b/fieldservice_partner_multi_relation/models/res_partner_relation_type.py @@ -2,18 +2,6 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import _, api, models -from odoo.exceptions import ValidationError - -HANDLE_INVALID_ONCHANGE = [ - ('restrict', - _('Do not allow change that will result in invalid relations')), - ('ignore', - _('Allow existing relations that do not fit changed conditions')), - ('end', - _('End relations per today, if they do not fit changed conditions')), - ('delete', - _('Delete relations that do not fit changed conditions')), -] class ResPartnerRelationType(models.Model): @@ -21,31 +9,9 @@ class ResPartnerRelationType(models.Model): @api.multi def get_partner_types(self): - super(ResPartnerRelationType, self) + super(ResPartnerRelationType, self).get_partner_types() return [ ('c', _('Organisation')), ('p', _('Person')), ('fsm-location', _('FSM Location')) ] - - @api.multi - def _check_partner(self, side): - super(ResPartnerRelationType, self) - for record in self: - assert side in ['left', 'right'] - ptype = getattr(record.type_id, "contact_type_%s" % side) - partner = getattr(record, '%s_partner_id' % side) - if ((ptype == 'c' and not partner.is_company) or - (ptype == 'p' and partner.is_company) or - (ptype == 'fsm-location' and - not partner.fsm_location)): - raise ValidationError( - _('The %s partner is not applicable for this ' - 'relation type.') % side - ) - category = getattr(record.type_id, "partner_category_%s" % side) - if category and category.id not in partner.category_id.ids: - raise ValidationError( - _('The %s partner does not have category %s.') % - (side, category.name) - ) diff --git a/fieldservice_partner_multi_relation/readme/CONTRIBUTORS.rst b/fieldservice_partner_multi_relation/readme/CONTRIBUTORS.rst index 8fa8bb9784..f40f65a097 100644 --- a/fieldservice_partner_multi_relation/readme/CONTRIBUTORS.rst +++ b/fieldservice_partner_multi_relation/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Steven Campbell +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_partner_multi_relation/static/description/index.html b/fieldservice_partner_multi_relation/static/description/index.html index 917c496e33..ff33fc87a3 100644 --- a/fieldservice_partner_multi_relation/static/description/index.html +++ b/fieldservice_partner_multi_relation/static/description/index.html @@ -367,7 +367,7 @@

    Field Service Partner Relations

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    Partner Multi Relations does not support FSM Locations as a left or right partner_id, only Organisation and Person

    This module allows you to connect partner_multi_relations with FSM Locations and @@ -424,7 +424,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -439,6 +439,7 @@

    Authors

    Contributors

    @@ -455,7 +456,9 @@

    Maintainers

    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.

    -

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

    +

    Current 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.

    From 2e39784d5e7d860d1aaa7e9aa1756fc3d8fd9fa3 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 7 Jun 2019 10:28:03 -0700 Subject: [PATCH 180/631] [IMP][ADD] Smart Button FSM Location to Relations --- .../__manifest__.py | 4 +++ .../models/__init__.py | 1 + .../models/fsm_location.py | 35 +++++++++++++++++++ .../views/fsm_location.xml | 22 ++++++++++++ .../views/menu.xml | 9 +++++ 5 files changed, 71 insertions(+) create mode 100644 fieldservice_partner_multi_relation/models/fsm_location.py create mode 100644 fieldservice_partner_multi_relation/views/fsm_location.xml create mode 100644 fieldservice_partner_multi_relation/views/menu.xml diff --git a/fieldservice_partner_multi_relation/__manifest__.py b/fieldservice_partner_multi_relation/__manifest__.py index 8eb9c4bb6a..f3d43d2ca9 100644 --- a/fieldservice_partner_multi_relation/__manifest__.py +++ b/fieldservice_partner_multi_relation/__manifest__.py @@ -12,6 +12,10 @@ 'partner_multi_relation', 'fieldservice' ], + "data": [ + 'views/fsm_location.xml', + 'views/menu.xml' + ], "demo": [ "data/demo.xml", ], diff --git a/fieldservice_partner_multi_relation/models/__init__.py b/fieldservice_partner_multi_relation/models/__init__.py index afae7c673f..708edadd81 100644 --- a/fieldservice_partner_multi_relation/models/__init__.py +++ b/fieldservice_partner_multi_relation/models/__init__.py @@ -2,3 +2,4 @@ from . import res_partner_relation_type from . import res_partner +from . import fsm_location diff --git a/fieldservice_partner_multi_relation/models/fsm_location.py b/fieldservice_partner_multi_relation/models/fsm_location.py new file mode 100644 index 0000000000..747d281bc2 --- /dev/null +++ b/fieldservice_partner_multi_relation/models/fsm_location.py @@ -0,0 +1,35 @@ +# 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 FSMLocation(models.Model): + _inherit = 'fsm.location' + + rel_count = fields.Integer(string='Relations', + compute='_compute_relation_count') + + @api.multi + def _compute_relation_count(self): + for location in self: + location.rel_count = self.env['res.partner.relation.all'].\ + search_count([('this_partner_id', '=', location.name)]) + + @api.multi + def action_view_relations(self): + """ + This function returns an action that display existing + partner relations of a given fsm location id. + """ + for location in self: + action = self.env.\ + ref('partner_multi_relation.tree_res_partner_relation_all').\ + read()[0] + relations = self.env['res.partner.relation.all'].\ + search([('this_partner_id', '=', location.name)]) + action = self.env.\ + ref('partner_multi_relation.action_res_partner_relation_all')\ + .read()[0] + action['domain'] = [('id', 'in', relations.ids)] + return action diff --git a/fieldservice_partner_multi_relation/views/fsm_location.xml b/fieldservice_partner_multi_relation/views/fsm_location.xml new file mode 100644 index 0000000000..5503590922 --- /dev/null +++ b/fieldservice_partner_multi_relation/views/fsm_location.xml @@ -0,0 +1,22 @@ + + + + + + fsm.location.relations.form.view + fsm.location + + +
    + +
    +
    +
    +
    diff --git a/fieldservice_partner_multi_relation/views/menu.xml b/fieldservice_partner_multi_relation/views/menu.xml new file mode 100644 index 0000000000..ee241e56d6 --- /dev/null +++ b/fieldservice_partner_multi_relation/views/menu.xml @@ -0,0 +1,9 @@ + + + + From 14dab2da3338ea6567c75b26db4872169c7245cb Mon Sep 17 00:00:00 2001 From: Steve Campbell Date: Tue, 25 Jun 2019 09:56:01 -0700 Subject: [PATCH 181/631] [IMP] fieldservice_partner_multi_relation: Integrate FSM in Partner Multi Relation (#240) --- .../data/demo.xml | 84 +++---- .../models/__init__.py | 1 + .../models/res_partner_relation_all.py | 220 ++++++++++++++++++ .../static/description/index.html | 2 +- 4 files changed, 264 insertions(+), 43 deletions(-) create mode 100644 fieldservice_partner_multi_relation/models/res_partner_relation_all.py diff --git a/fieldservice_partner_multi_relation/data/demo.xml b/fieldservice_partner_multi_relation/data/demo.xml index 70a4c7e5d2..b9a95a1724 100644 --- a/fieldservice_partner_multi_relation/data/demo.xml +++ b/fieldservice_partner_multi_relation/data/demo.xml @@ -2,140 +2,140 @@ - owns - is owned by + [L+L] owns + [L+L] is owned by fsm-location fsm-location - owns - is owned by + [P+L] owns + [L+P] is owned by p fsm-location - owns - is owned by + [C+L] owns + [L+C] is owned by c fsm-location - manges - is managed by + [L+L] manages + [L+L] is managed by fsm-location fsm-location - manges - is managed by + [C+L] manages + [L+C] is managed by c fsm-location - manges - is managed by + [P+L] manages + [L+P] is managed by p fsm-location - pays the invoices for - gets the invoices paid by + [L+L] pays the invoices for + [L+L] gets the invoices paid by fsm-location fsm-location - pays the invoices for - gets the invoices paid by + [C+L] pays the invoices for + [L+C] gets the invoices paid by c fsm-location - pays the invoices for - gets the invoices paid by + [P+L] pays the invoices for + [L+P] gets the invoices paid by p fsm-location - is the primary contact of - whose primary contact + [L+L] is the primary contact of + [L+L] whose primary contact fsm-location fsm-location - is the primary contact of - whose primary contact + [C+L] is the primary contact of + [L+C] whose primary contact c fsm-location - is the primary contact of - whose primary contact + [P+L] is the primary contact of + [L+P] whose primary contact p fsm-location - is the secondary contact of - whose secondary contact + [L+L] is the secondary contact of + [L+L] whose secondary contact fsm-location fsm-location - is the secondary contact of - whose secondary contact + [C+L] is the secondary contact of + [L+C] whose secondary contact c fsm-location - is the secondary contact of - whose secondary contact + [P+L] is the secondary contact of + [L+P] whose secondary contact p fsm-location - is a tenant of - is occupied by + [L+L] is a tenant of + [L+L] is occupied by fsm-location fsm-location - is a tenant of - is occupied by + [C+L] is a tenant of + [L+C] is occupied by c fsm-location - is a tenant of - is occupied by + [P+L] is a tenant of + [L+P] is occupied by p fsm-location - is an employee at - employs + [L+L] is an employee at + [L+L] employs fsm-location fsm-location - is an employee at - employs + [C+L] is an employee at + [L+C] employs c fsm-location - is an employee at - employs + [P+L] is an employee at + [L+P] employs p fsm-location diff --git a/fieldservice_partner_multi_relation/models/__init__.py b/fieldservice_partner_multi_relation/models/__init__.py index 708edadd81..5be357425d 100644 --- a/fieldservice_partner_multi_relation/models/__init__.py +++ b/fieldservice_partner_multi_relation/models/__init__.py @@ -3,3 +3,4 @@ from . import res_partner_relation_type from . import res_partner from . import fsm_location +from . import res_partner_relation_all diff --git a/fieldservice_partner_multi_relation/models/res_partner_relation_all.py b/fieldservice_partner_multi_relation/models/res_partner_relation_all.py new file mode 100644 index 0000000000..914151eca4 --- /dev/null +++ b/fieldservice_partner_multi_relation/models/res_partner_relation_all.py @@ -0,0 +1,220 @@ +# Copyright (C) 2019 - 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 ResPartnerRelationAll(models.AbstractModel): + _inherit = 'res.partner.relation.all' + + @api.onchange('this_partner_id') + def onchange_this_partner_id(self): + if self.this_partner_id: + type_id = self.env['res.partner.relation.type'].\ + search([('name', '=', self.type_selection_id.name)]) + if (type_id.contact_type_left == 'fsm-location' + or type_id.contact_type_right == 'fsm-location' + or self.this_partner_id.fsm_location + or self.other_partner_id.fsm_location): + if not self.type_selection_id: + return self.set_domain_type() + elif not self.this_partner_id: + if not self.other_partner_id: + return {'domain': {'type_selection_id': ''}} + + else: + super(ResPartnerRelationAll, self).onchange_partner_id() + else: + # Remove left_cat domain on type + return self.set_domain_type() + + @api.onchange('other_partner_id') + def onchange_other_partner_id(self): + if self.other_partner_id: + type_id = self.env['res.partner.relation.type'].\ + search([('name', '=', self.type_selection_id.name)]) + if (type_id.contact_type_left == 'fsm-location' + or type_id.contact_type_right == 'fsm-location' + or self.this_partner_id.fsm_location + or self.other_partner_id.fsm_location): + if not type_id: + return self.set_domain_type() + elif not self.other_partner_id: + if not self.this_partner_id: + return {'domain': {'type_selection_id': ''}} + + else: + super(ResPartnerRelationAll, self).onchange_partner_id() + else: + # Remove right_cat domain on type + self.set_domain_type() + + @api.onchange('type_selection_id') + def onchange_type_selection_id(self): + # Clear any prexisting domains + if not self.type_selection_id: + return {'domain': + {'this_partner_id': [('id', '!=', None)], + 'other_partner_id': [('id', '!=', None)]}} + type_id = self.env['res.partner.relation.type'].\ + search([('name', '=', self.type_selection_id.name)]) + if (type_id.contact_type_left == 'fsm-location' + or type_id.contact_type_right == 'fsm-location' + or self.this_partner_id.fsm_location + or self.other_partner_id.fsm_location): + if self.this_partner_id and self.other_partner_id: + # Check + self.try_type() + elif self.this_partner_id: + # Set domain Right + res = self.set_domain_right() + return res + elif self.other_partner_id: + # Set domain Left + res = self.set_domain_left() + return res + else: + res = self.set_domain_left() + res2 = self.set_domain_right() + res.update(res2['domain']) + return res + else: + super(ResPartnerRelationAll, self).onchange_type_selection_id() + + def try_type(self): + type_id = self.env['res.partner.relation.type'].\ + search([('name', '=', self.type_selection_id.name)]) + # From Type + left_cat = type_id.contact_type_left + right_cat = type_id.contact_type_right + # Left Partner + left_to_test = self.this_partner_id + # Right Partner + right_to_test = self.other_partner_id + + # Compare + if left_cat == 'p': + if left_to_test.company_type != 'person': + raise ValidationError(_('Left Partner not type Person')) + if left_cat == 'c': + if left_to_test.company_type != 'compnay': + raise ValidationError(_('Left Partner not type Company')) + if left_cat == 'fsm-location': + if not left_to_test.fsm_location: + raise ValidationError(_('Left Partner not type FSM Location')) + + if right_cat == 'p': + if right_to_test.company_type != 'person': + raise ValidationError(_('Right Partner not type Person')) + if right_cat == 'c': + if right_to_test.company_type != 'compnay': + raise ValidationError(_('Right Partner not type Company')) + if right_cat == 'fsm-location': + if not right_to_test.fsm_location: + raise ValidationError( + _('Right Partner not type FSM Location')) + + def set_domain_left(self): + type_id = self.env['res.partner.relation.type'].\ + search([('name', '=', self.type_selection_id.name)]) + # From Type + res = {} + # With a Relation Type + if type_id: + left_cat = type_id.contact_type_left + # Create domain for Left based on Type Left Category + res = self.build_domain(1, left_cat) + return res + # Without a Relation Type + else: + res = {'domain': {'this_partner_id': ''}} + + def set_domain_right(self): + type_id = self.env['res.partner.relation.type'].\ + search([('name', '=', self.type_selection_id.name)]) + # From Type + res = {} + # With a Relation Type + if type_id: + right_cat = type_id.contact_type_right + # Create domain for Right based on Type Right Category + res = self.build_domain(0, right_cat) + return res + # Wtihout a Relation Type + else: + res = {'domain': {'other_partner_id': ''}} + + def set_domain_type(self): + res = {} + # If Left & Right then Type must match both + if self.this_partner_id and self.other_partner_id: + left_cat = self.get_cat(self.this_partner_id) + right_cat = self.get_cat(self.other_partner_id) + type_ids = self.env['res.partner.relation.type'].\ + search([('contact_type_left', '=', left_cat), + ('contact_type_right', '=', right_cat)]) + type_names = [] + for type_id in type_ids: + type_names.append(type_id.name) + # From Type + res = {'domain': + {'type_selection_id': [('name', 'in', type_names)]}} + # If Left Type must match Left + elif self.this_partner_id: + left_cat = self.get_cat(self.this_partner_id) + type_ids = self.env['res.partner.relation.type'].\ + search([('contact_type_left', '=', left_cat)]) + type_names = [] + for type_id in type_ids: + type_names.append(type_id.name) + res = {'domain': + {'type_selection_id': [('name', 'in', type_names)]}} + # If Right Type must match Right + elif self.other_partner_id: + right_cat = self.get_cat(self.other_partner_id) + type_ids = self.env['res.partner.relation.type'].\ + search([('contact_type_right', '=', right_cat)]) + type_names = [] + for type_id in type_ids: + type_names.append(type_id.name) + res = {'domain': + {'type_selection_id': [('name', 'in', type_names)]}} + return res + + def build_domain(self, side, cat): + build = {} + if cat == 'p': + if side: + build = {'domain': + {'this_partner_id': + [('company_type', '=', 'person')]}} + else: + build = {'domain': + {'other_partner_id': + [('company_type', '=', 'person')]}} + if cat == 'c': + if side: + build = {'domain': + {'this_partner_id': + [('company_type', '=', 'company')]}} + else: + build = {'domain': + {'other_partner_id': + [('company_type', '=', 'company')]}} + if cat == 'fsm-location': + if side: + build = {'domain': + {'this_partner_id': [('fsm_location', '=', True)]}} + else: + build = {'domain': + {'other_partner_id': [('fsm_location', '=', True)]}} + return build + + def get_cat(self, partner): + if partner.fsm_location: + return 'fsm-location' + elif partner.company_type == 'person': + return 'p' + else: + return 'c' diff --git a/fieldservice_partner_multi_relation/static/description/index.html b/fieldservice_partner_multi_relation/static/description/index.html index ff33fc87a3..0dee5b6d8b 100644 --- a/fieldservice_partner_multi_relation/static/description/index.html +++ b/fieldservice_partner_multi_relation/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service Partner Relations + + +
    +

    Field Service - Distribution

    + + +

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

    +

    This module allows you to manage your distribution network (of water, +electricity, gaz, telephone, bandwidth) by setting the distribution parent on a +field service location.

    +

    Table of contents

    + +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service > Master Data > Locations
    • +
    • Create or select a location
    • +
    • In the “Others” tab, you can set a location as a distribution location
    • +
    • On another location, below the Parent location, you can set the parent +distribution location that distributes to the current location
    • +
    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    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 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_distribution/views/fsm_location.xml b/fieldservice_distribution/views/fsm_location.xml new file mode 100644 index 0000000000..5ba5ab4698 --- /dev/null +++ b/fieldservice_distribution/views/fsm_location.xml @@ -0,0 +1,21 @@ + + + + + + fsm.location.form + fsm.location + + + + + + + + + + + + From 6bc8966e5b2600ddd4264ebc2024d985c79376d7 Mon Sep 17 00:00:00 2001 From: Michael Allen Date: Thu, 13 Dec 2018 10:34:23 -0700 Subject: [PATCH 186/631] [IMP] Enable geometry on location --- fieldservice_distribution/models/fsm_location.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fieldservice_distribution/models/fsm_location.py b/fieldservice_distribution/models/fsm_location.py index 4ecbb75645..d685b67574 100644 --- a/fieldservice_distribution/models/fsm_location.py +++ b/fieldservice_distribution/models/fsm_location.py @@ -1,10 +1,11 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import fields +from odoo.addons.base_geoengine import geo_model -class FSMLocation(models.Model): +class FSMLocation(geo_model.GeoModel): _inherit = 'fsm.location' is_a_distribution = fields.Boolean(string='Is a Distribution') From 468959ab89c7e910f5ccba816bd31599060756c8 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 31 Jan 2019 17:17:26 -0600 Subject: [PATCH 187/631] [IMP] fieldservice_distribution --- fieldservice_distribution/__manifest__.py | 2 +- .../models/fsm_location.py | 43 ++++++++++++++++++- .../views/fsm_location.xml | 13 +++++- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/fieldservice_distribution/__manifest__.py b/fieldservice_distribution/__manifest__.py index 4e1c00bed7..72abb56b38 100644 --- a/fieldservice_distribution/__manifest__.py +++ b/fieldservice_distribution/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Distribution', 'summary': 'Manage your distribution structure', - 'version': '11.0.0.0.1', + 'version': '11.0.0.1.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_distribution/models/fsm_location.py b/fieldservice_distribution/models/fsm_location.py index d685b67574..1cf447d6fd 100644 --- a/fieldservice_distribution/models/fsm_location.py +++ b/fieldservice_distribution/models/fsm_location.py @@ -1,7 +1,7 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields +from odoo import api, fields from odoo.addons.base_geoengine import geo_model @@ -11,3 +11,44 @@ class FSMLocation(geo_model.GeoModel): is_a_distribution = fields.Boolean(string='Is a Distribution') dist_parent_id = fields.Many2one('fsm.location', string='Distribution Parent') + + distrib_count = fields.Integer( + compute='_compute_distrib_sublocation_ids', + string='# of distributed sub-locations') + + @api.multi + def _compute_distrib_sublocation_ids(self): + for location in self: + for child in location: + child_locs = self.env['fsm.location'].search( + [('parent_id', '=', child.id)]) + count = self.env['fsm.location'].search_count( + [('parent_id', '=', child.id), + ('is_a_distribution', '=', True)]) + if child_locs: + for loc in child_locs: + count += loc.distrib_count + location.distrib_count = count + + @api.multi + def action_view_distrib_sublocation(self): + ''' + This function returns an action that display existing + distribution sub-locations of a given fsm location id. + It can either be a in a list or in a form view, if there is only one + sub-location to show. + ''' + for location in self: + action = self.env.ref('fieldservice.action_fsm_location').read()[0] + sublocation = self.get_action_views(0, 0, location) + sublocation.filtered(lambda r: r.is_a_distribution) + if len(sublocation) > 1 or len(sublocation) == 0: + action['domain'] = [('id', 'in', sublocation.ids), + ('is_a_distribution', '=', True)] + elif sublocation: + action['views'] = [(self.env. + ref('fieldservice.' + + 'fsm_location_form_view').id, + 'form')] + action['res_id'] = sublocation.id + return action diff --git a/fieldservice_distribution/views/fsm_location.xml b/fieldservice_distribution/views/fsm_location.xml index 5ba5ab4698..ef6a1468a8 100644 --- a/fieldservice_distribution/views/fsm_location.xml +++ b/fieldservice_distribution/views/fsm_location.xml @@ -7,13 +7,24 @@ fsm.location +
    + +
    + domain="[('is_a_distribution', '=', True)]"/> From 1fe3f6a72122c7774939351e2e03d0cf8f499e98 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 1 Feb 2019 19:04:57 -0600 Subject: [PATCH 188/631] [FIX] fieldservice_distribution --- fieldservice_distribution/__manifest__.py | 2 +- fieldservice_distribution/views/fsm_location.xml | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/fieldservice_distribution/__manifest__.py b/fieldservice_distribution/__manifest__.py index 72abb56b38..ab0f46ed06 100644 --- a/fieldservice_distribution/__manifest__.py +++ b/fieldservice_distribution/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Distribution', 'summary': 'Manage your distribution structure', - 'version': '11.0.0.1.0', + 'version': '11.0.0.2.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_distribution/views/fsm_location.xml b/fieldservice_distribution/views/fsm_location.xml index ef6a1468a8..81d85bf385 100644 --- a/fieldservice_distribution/views/fsm_location.xml +++ b/fieldservice_distribution/views/fsm_location.xml @@ -12,7 +12,8 @@ type="object" class="oe_stat_button" icon="fa-sitemap" - attrs="{'invisible': [('is_a_distribution', '!=', True)]}"> + attrs="{'invisible': [('is_a_distribution', '!=', True)]}" + context="{'parent_id': active_id, 'dist_parent_id': active_id, 'is_a_distribution': True}"> @@ -22,11 +23,17 @@ position="inside">
    - + + + {'default_parent_id': context.get('parent_id', False), + 'default_dist_parent_id': context.get('dist_parent_id', False), + 'default_is_a_distribution': context.get('is_a_distribution', False)} + +
    From 9e0036e2f13c11e0d8a2503ebea14272fbedbcee Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 21 Feb 2019 09:58:07 -0600 Subject: [PATCH 189/631] [FIX] Conflict with parent_id field of res.partner --- fieldservice_distribution/models/fsm_location.py | 4 ++-- fieldservice_distribution/views/fsm_location.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fieldservice_distribution/models/fsm_location.py b/fieldservice_distribution/models/fsm_location.py index 1cf447d6fd..f7def5f4a7 100644 --- a/fieldservice_distribution/models/fsm_location.py +++ b/fieldservice_distribution/models/fsm_location.py @@ -21,9 +21,9 @@ def _compute_distrib_sublocation_ids(self): for location in self: for child in location: child_locs = self.env['fsm.location'].search( - [('parent_id', '=', child.id)]) + [('fsm_parent_id', '=', child.id)]) count = self.env['fsm.location'].search_count( - [('parent_id', '=', child.id), + [('fsm_parent_id', '=', child.id), ('is_a_distribution', '=', True)]) if child_locs: for loc in child_locs: diff --git a/fieldservice_distribution/views/fsm_location.xml b/fieldservice_distribution/views/fsm_location.xml index 81d85bf385..4000fd830e 100644 --- a/fieldservice_distribution/views/fsm_location.xml +++ b/fieldservice_distribution/views/fsm_location.xml @@ -13,7 +13,7 @@ class="oe_stat_button" icon="fa-sitemap" attrs="{'invisible': [('is_a_distribution', '!=', True)]}" - context="{'parent_id': active_id, 'dist_parent_id': active_id, 'is_a_distribution': True}"> + context="{'fsm_parent_id': active_id, 'dist_parent_id': active_id, 'is_a_distribution': True}"> @@ -31,7 +31,7 @@ - {'default_parent_id': context.get('parent_id', False), + {'default_fsm_parent_id': context.get('fsm_parent_id', False), 'default_dist_parent_id': context.get('dist_parent_id', False), 'default_is_a_distribution': context.get('is_a_distribution', False)} From 4b81c2299c63dbb5fc8ae2a8d3de89c9c8c0c269 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Wed, 3 Apr 2019 21:15:44 +0530 Subject: [PATCH 190/631] [MIG][WIP][12.0] fieldservice_distribution --- fieldservice_distribution/README.rst | 11 ++++--- fieldservice_distribution/__manifest__.py | 2 +- .../models/fsm_location.py | 31 +++++++------------ .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 +++-- 5 files changed, 24 insertions(+), 28 deletions(-) diff --git a/fieldservice_distribution/README.rst b/fieldservice_distribution/README.rst index 810e76a083..d070352a5c 100644 --- a/fieldservice_distribution/README.rst +++ b/fieldservice_distribution/README.rst @@ -14,13 +14,13 @@ Field Service - Distribution :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/11.0/fieldservice_distribution + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_distribution :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-11-0/field-service-11-0-fieldservice_distribution + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_distribution :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -57,7 +57,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -75,6 +75,7 @@ Contributors * Wolfgang Hall * Maxime Chambreuil * Steve Campbell +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -104,6 +105,6 @@ Current `maintainer `__: |maintainer-max3903| -This module is part of the `OCA/field-service `_ project on GitHub. +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_distribution/__manifest__.py b/fieldservice_distribution/__manifest__.py index ab0f46ed06..3ef7292b12 100644 --- a/fieldservice_distribution/__manifest__.py +++ b/fieldservice_distribution/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Distribution', 'summary': 'Manage your distribution structure', - 'version': '11.0.0.2.0', + 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_distribution/models/fsm_location.py b/fieldservice_distribution/models/fsm_location.py index f7def5f4a7..d98f6f0797 100644 --- a/fieldservice_distribution/models/fsm_location.py +++ b/fieldservice_distribution/models/fsm_location.py @@ -1,11 +1,10 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields -from odoo.addons.base_geoengine import geo_model +from odoo import api, fields, models -class FSMLocation(geo_model.GeoModel): +class FSMLocation(models.Model): _inherit = 'fsm.location' is_a_distribution = fields.Boolean(string='Is a Distribution') @@ -19,36 +18,30 @@ class FSMLocation(geo_model.GeoModel): @api.multi def _compute_distrib_sublocation_ids(self): for location in self: - for child in location: - child_locs = self.env['fsm.location'].search( - [('fsm_parent_id', '=', child.id)]) - count = self.env['fsm.location'].search_count( - [('fsm_parent_id', '=', child.id), - ('is_a_distribution', '=', True)]) - if child_locs: - for loc in child_locs: - count += loc.distrib_count - location.distrib_count = count + location.distrib_count = self.env['fsm.location'].search_count( + [('fsm_parent_id', 'child_of', location.id), ( + 'id', '!=', location.id), ( + 'is_a_distribution', '=', True)]) @api.multi def action_view_distrib_sublocation(self): - ''' + """ This function returns an action that display existing distribution sub-locations of a given fsm location id. It can either be a in a list or in a form view, if there is only one sub-location to show. - ''' + """ for location in self: action = self.env.ref('fieldservice.action_fsm_location').read()[0] sublocation = self.get_action_views(0, 0, location) sublocation.filtered(lambda r: r.is_a_distribution) - if len(sublocation) > 1 or len(sublocation) == 0: - action['domain'] = [('id', 'in', sublocation.ids), - ('is_a_distribution', '=', True)] - elif sublocation: + if len(sublocation) == 1: action['views'] = [(self.env. ref('fieldservice.' + 'fsm_location_form_view').id, 'form')] action['res_id'] = sublocation.id + else: + action['domain'] = [('id', 'in', sublocation.ids), + ('is_a_distribution', '=', True)] return action diff --git a/fieldservice_distribution/readme/CONTRIBUTORS.rst b/fieldservice_distribution/readme/CONTRIBUTORS.rst index db6ccc051b..c72bec9f3b 100644 --- a/fieldservice_distribution/readme/CONTRIBUTORS.rst +++ b/fieldservice_distribution/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Wolfgang Hall * Maxime Chambreuil * Steve Campbell +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_distribution/static/description/index.html b/fieldservice_distribution/static/description/index.html index 64c643d0e7..acd4a69adf 100644 --- a/fieldservice_distribution/static/description/index.html +++ b/fieldservice_distribution/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Distribution

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    This module allows you to manage your distribution network (of water, electricity, gaz, telephone, bandwidth) by setting the distribution parent on a field service location.

    @@ -407,7 +407,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -424,6 +424,7 @@

    Contributors

  • Wolfgang Hall <whall@opensourceintegrators.com>
  • Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
  • Steve Campbell <scampbell@opensourceintegrators.com>
  • +
  • Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
  • @@ -442,7 +443,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    max3903

    -

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

    +

    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.

    From 2f6a137cf3aa9e32dd699aa80efee02aed987df2 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 24 May 2019 17:52:52 -0500 Subject: [PATCH 191/631] [IMP] fieldservice_account: #135 Contractor Cost Check --- fieldservice_distribution/i18n/de.po | 42 +++++++++++++++++++ fieldservice_distribution/i18n/es.po | 42 +++++++++++++++++++ fieldservice_distribution/i18n/es_AR.po | 42 +++++++++++++++++++ fieldservice_distribution/i18n/es_CL.po | 42 +++++++++++++++++++ .../i18n/fieldservice_distribution.pot | 40 ++++++++++++++++++ fieldservice_distribution/i18n/pt_BR.po | 42 +++++++++++++++++++ .../static/description/index.html | 2 +- .../views/fsm_location.xml | 10 ++--- 8 files changed, 254 insertions(+), 8 deletions(-) create mode 100644 fieldservice_distribution/i18n/de.po create mode 100644 fieldservice_distribution/i18n/es.po create mode 100644 fieldservice_distribution/i18n/es_AR.po create mode 100644 fieldservice_distribution/i18n/es_CL.po create mode 100644 fieldservice_distribution/i18n/fieldservice_distribution.pot create mode 100644 fieldservice_distribution/i18n/pt_BR.po diff --git a/fieldservice_distribution/i18n/de.po b/fieldservice_distribution/i18n/de.po new file mode 100644 index 0000000000..bfb39b5403 --- /dev/null +++ b/fieldservice_distribution/i18n/de.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_distribution +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__distrib_count +msgid "# of distributed sub-locations" +msgstr "" + +#. module: fieldservice_distribution +#: model_terms:ir.ui.view,arch_db:fieldservice_distribution.fsm_location_form_view +msgid "Distributed To" +msgstr "" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__dist_parent_id +msgid "Distribution Parent" +msgstr "" + +#. module: fieldservice_distribution +#: model:ir.model,name:fieldservice_distribution.model_fsm_location +msgid "Field Service Location" +msgstr "Field-Service-Ort" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__is_a_distribution +msgid "Is a Distribution" +msgstr "" diff --git a/fieldservice_distribution/i18n/es.po b/fieldservice_distribution/i18n/es.po new file mode 100644 index 0000000000..1a2a31f22b --- /dev/null +++ b/fieldservice_distribution/i18n/es.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_distribution +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-22 04:35+0000\n" +"Last-Translator: Nelson Ramírez Sánchez \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 3.8\n" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__distrib_count +msgid "# of distributed sub-locations" +msgstr "# de sububicaciones distribuidas" + +#. module: fieldservice_distribution +#: model_terms:ir.ui.view,arch_db:fieldservice_distribution.fsm_location_form_view +msgid "Distributed To" +msgstr "Distribuido a" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__dist_parent_id +msgid "Distribution Parent" +msgstr "Padre de Distribución" + +#. module: fieldservice_distribution +#: model:ir.model,name:fieldservice_distribution.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__is_a_distribution +msgid "Is a Distribution" +msgstr "Es una Distribución" diff --git a/fieldservice_distribution/i18n/es_AR.po b/fieldservice_distribution/i18n/es_AR.po new file mode 100644 index 0000000000..4398fc718c --- /dev/null +++ b/fieldservice_distribution/i18n/es_AR.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_distribution +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-21 05:19+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 3.10\n" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__distrib_count +msgid "# of distributed sub-locations" +msgstr "# de sub-ubicaciones distribuidas" + +#. module: fieldservice_distribution +#: model_terms:ir.ui.view,arch_db:fieldservice_distribution.fsm_location_form_view +msgid "Distributed To" +msgstr "Distribuido a" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__dist_parent_id +msgid "Distribution Parent" +msgstr "Distribución Principal" + +#. module: fieldservice_distribution +#: model:ir.model,name:fieldservice_distribution.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación de Servicio de Campo" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__is_a_distribution +msgid "Is a Distribution" +msgstr "Es una Distribución" diff --git a/fieldservice_distribution/i18n/es_CL.po b/fieldservice_distribution/i18n/es_CL.po new file mode 100644 index 0000000000..07110e8f38 --- /dev/null +++ b/fieldservice_distribution/i18n/es_CL.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_distribution +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-22 04: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_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__distrib_count +msgid "# of distributed sub-locations" +msgstr "# de sububicaciones distribuidas" + +#. module: fieldservice_distribution +#: model_terms:ir.ui.view,arch_db:fieldservice_distribution.fsm_location_form_view +msgid "Distributed To" +msgstr "Distribuido a" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__dist_parent_id +msgid "Distribution Parent" +msgstr "Padre de Distribución" + +#. module: fieldservice_distribution +#: model:ir.model,name:fieldservice_distribution.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del Servicio de Campo" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__is_a_distribution +msgid "Is a Distribution" +msgstr "Es una Distribución" diff --git a/fieldservice_distribution/i18n/fieldservice_distribution.pot b/fieldservice_distribution/i18n/fieldservice_distribution.pot new file mode 100644 index 0000000000..7253d9283a --- /dev/null +++ b/fieldservice_distribution/i18n/fieldservice_distribution.pot @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_distribution +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__distrib_count +msgid "# of distributed sub-locations" +msgstr "" + +#. module: fieldservice_distribution +#: model_terms:ir.ui.view,arch_db:fieldservice_distribution.fsm_location_form_view +msgid "Distributed To" +msgstr "" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__dist_parent_id +msgid "Distribution Parent" +msgstr "" + +#. module: fieldservice_distribution +#: model:ir.model,name:fieldservice_distribution.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__is_a_distribution +msgid "Is a Distribution" +msgstr "" + diff --git a/fieldservice_distribution/i18n/pt_BR.po b/fieldservice_distribution/i18n/pt_BR.po new file mode 100644 index 0000000000..fcdc298bcc --- /dev/null +++ b/fieldservice_distribution/i18n/pt_BR.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_distribution +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-17 22:19+0000\n" +"Last-Translator: Fernando Colus \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__distrib_count +msgid "# of distributed sub-locations" +msgstr "Número de sub-locais distribuídos" + +#. module: fieldservice_distribution +#: model_terms:ir.ui.view,arch_db:fieldservice_distribution.fsm_location_form_view +msgid "Distributed To" +msgstr "Distribuído Para" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__dist_parent_id +msgid "Distribution Parent" +msgstr "Pai da Distribuição" + +#. module: fieldservice_distribution +#: model:ir.model,name:fieldservice_distribution.model_fsm_location +msgid "Field Service Location" +msgstr "Localização do Serviço de Campo" + +#. module: fieldservice_distribution +#: model:ir.model.fields,field_description:fieldservice_distribution.field_fsm_location__is_a_distribution +msgid "Is a Distribution" +msgstr "É uma Distribuição" diff --git a/fieldservice_distribution/static/description/index.html b/fieldservice_distribution/static/description/index.html index acd4a69adf..7e2e356d84 100644 --- a/fieldservice_distribution/static/description/index.html +++ b/fieldservice_distribution/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Distribution + + +
    +

    Field Service

    + + +

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

    +

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

    +

    Table of contents

    + +
    +

    Installation

    +

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

    +

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

    +
    +
    +

    Configuration

    +

    To configure this module, you need to:

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

    Usage

    +

    To use this module, you need to:

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

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    Other credits

    +

    The development of this module has been financially supported by:

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

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

    +

    Current maintainers:

    +

    wolfhall max3903

    +

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

    +

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

    +
    +
    +
    + + diff --git a/fieldservice_sale/static/description/index.html b/fieldservice_sale/static/description/index.html new file mode 100644 index 0000000000..6d777250e3 --- /dev/null +++ b/fieldservice_sale/static/description/index.html @@ -0,0 +1,459 @@ + + + + + + +Field Service - Sales + + + +
    +

    Field Service - Sales

    + + +

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

    +

    The module integrate the field service application with the sales one.

    +

    Table of contents

    + +
    +

    Installation

    +

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

    +

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

    +
    +
    +

    Configuration

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service > Master Data > Locations
    • +
    • Create or select a location
    • +
    • Go to the Sales tab and select the sales territory
    • +
    +
    +
    +

    Usage

    +

    Coming soon???

    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    Other credits

    +

    The development of this module has been financially supported by:

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

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

    +

    Current maintainers:

    +

    wolfhall max3903

    +

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

    +

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

    +
    +
    +
    + + diff --git a/fieldservice_sale/views/fsm_location.xml b/fieldservice_sale/views/fsm_location.xml new file mode 100644 index 0000000000..886f431298 --- /dev/null +++ b/fieldservice_sale/views/fsm_location.xml @@ -0,0 +1,19 @@ + + + + + + fsm.location.form + fsm.location + + + + + + + + + + + + From 13f039a2ab09ad3c031a8091273c6c379a51827d Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 20 Dec 2018 11:27:24 -0600 Subject: [PATCH 201/631] [REN] fsm_location.py --- fieldservice_sale/models/{fsm_sale.py => fsm_location.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename fieldservice_sale/models/{fsm_sale.py => fsm_location.py} (100%) diff --git a/fieldservice_sale/models/fsm_sale.py b/fieldservice_sale/models/fsm_location.py similarity index 100% rename from fieldservice_sale/models/fsm_sale.py rename to fieldservice_sale/models/fsm_location.py From d8e30c68bd74c318c974e20d17dba5bd421f8403 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 20 Dec 2018 17:40:55 -0600 Subject: [PATCH 202/631] [FIX] View + icon --- fieldservice_sale/__manifest__.py | 1 - fieldservice_sale/static/description/icon.png | Bin 0 -> 17808 bytes fieldservice_sale/views/fsm_location.xml | 8 +++++--- 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 fieldservice_sale/static/description/icon.png diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index 8e8741f7c8..ada52ef64b 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -15,7 +15,6 @@ 'data': [ 'views/fsm_location.xml' ], - 'application': True, 'license': 'AGPL-3', 'development_status': 'Beta', 'maintainers': [ diff --git a/fieldservice_sale/static/description/icon.png b/fieldservice_sale/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 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 literal 0 HcmV?d00001 diff --git a/fieldservice_sale/views/fsm_location.xml b/fieldservice_sale/views/fsm_location.xml index 886f431298..b9be2f2f87 100644 --- a/fieldservice_sale/views/fsm_location.xml +++ b/fieldservice_sale/views/fsm_location.xml @@ -7,12 +7,14 @@ fsm.location - + - + + + - + From 5efe8f9b57c378e3d0b9da82ec4bc77b424a4098 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Wed, 3 Apr 2019 20:53:20 +0530 Subject: [PATCH 203/631] [MIG][WIP][12.0] fieldservice_sale --- fieldservice_sale/README.rst | 13 +- fieldservice_sale/__manifest__.py | 3 +- fieldservice_sale/models/fsm_location.py | 6 +- fieldservice_sale/readme/CONTRIBUTORS.rst | 1 + fieldservice_sale/readme/INSTALL.rst | 2 +- .../static/description/description/icon.png | Bin 17808 -> 0 bytes .../static/description/description/index.html | 464 ------------------ .../static/description/index.html | 9 +- 8 files changed, 18 insertions(+), 480 deletions(-) delete mode 100644 fieldservice_sale/static/description/description/icon.png delete mode 100644 fieldservice_sale/static/description/description/index.html diff --git a/fieldservice_sale/README.rst b/fieldservice_sale/README.rst index e86745c429..755ff8d4eb 100644 --- a/fieldservice_sale/README.rst +++ b/fieldservice_sale/README.rst @@ -14,13 +14,13 @@ Field Service - Sales :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/11.0/fieldservice_sale + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_sale :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-11-0/field-service-11-0-fieldservice_sale + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_sale :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,7 @@ Installation To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/11.0/base_geoengine +https://github.com/OCA/geospatial/tree/12.0/base_geoengine Configuration ============= @@ -66,7 +66,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -84,6 +84,7 @@ Contributors * Steve Campbell * Maxime Chambreuil * Wolfgang Hall +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -116,6 +117,6 @@ Current `maintainers `__: |maintainer-wolfhall| |maintainer-max3903| -This module is part of the `OCA/field-service `_ project on GitHub. +This module is part of the `OCA/field-service `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index ada52ef64b..c06567201e 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Sales', 'summary': 'Sales', - 'version': '11.0.0.0.1', + 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', @@ -21,4 +21,5 @@ 'wolfhall', 'max3903', ], + 'installable': True, } diff --git a/fieldservice_sale/models/fsm_location.py b/fieldservice_sale/models/fsm_location.py index 65416a8a7a..601c2408b2 100644 --- a/fieldservice_sale/models/fsm_location.py +++ b/fieldservice_sale/models/fsm_location.py @@ -1,12 +1,10 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields +from odoo import fields, models -from odoo.addons.base_geoengine import geo_model - -class FSMLocation(geo_model.GeoModel): +class FSMLocation(models.Model): _inherit = 'fsm.location' sales_territory_id = fields.Many2one('fsm.territory', diff --git a/fieldservice_sale/readme/CONTRIBUTORS.rst b/fieldservice_sale/readme/CONTRIBUTORS.rst index 1b9bde1401..c6a834aaa4 100644 --- a/fieldservice_sale/readme/CONTRIBUTORS.rst +++ b/fieldservice_sale/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Steve Campbell * Maxime Chambreuil * Wolfgang Hall +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_sale/readme/INSTALL.rst b/fieldservice_sale/readme/INSTALL.rst index c010f8f6a2..8571f65376 100644 --- a/fieldservice_sale/readme/INSTALL.rst +++ b/fieldservice_sale/readme/INSTALL.rst @@ -1,4 +1,4 @@ To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/11.0/base_geoengine +https://github.com/OCA/geospatial/tree/12.0/base_geoengine diff --git a/fieldservice_sale/static/description/description/icon.png b/fieldservice_sale/static/description/description/icon.png deleted file mode 100644 index 955674d8f0b8c47de3ffa9db25cb109fbe4a1091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17808 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 diff --git a/fieldservice_sale/static/description/description/index.html b/fieldservice_sale/static/description/description/index.html deleted file mode 100644 index 734a351843..0000000000 --- a/fieldservice_sale/static/description/description/index.html +++ /dev/null @@ -1,464 +0,0 @@ - - - - - - -Field Service - - - -
    -

    Field Service

    - - -

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

    -

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

    -

    Table of contents

    - -
    -

    Installation

    -

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

    -

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

    -
    -
    -

    Configuration

    -

    To configure this module, you need to:

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

    Usage

    -

    To use this module, you need to:

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

    Known issues / Roadmap

    -

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

    -
    -
    -

    Bug Tracker

    -

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

    -

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

    -
    -
    -

    Credits

    -
    -

    Authors

    -
      -
    • Open Source Integrators
    • -
    -
    - -
    -

    Other credits

    -

    The development of this module has been financially supported by:

    - -
    -
    -

    Maintainers

    -

    This module is maintained by the OCA.

    -Odoo Community Association -

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

    -

    Current maintainers:

    -

    wolfhall max3903

    -

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

    -

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

    -
    -
    -
    - - diff --git a/fieldservice_sale/static/description/index.html b/fieldservice_sale/static/description/index.html index 6d777250e3..23490becee 100644 --- a/fieldservice_sale/static/description/index.html +++ b/fieldservice_sale/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Sales

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    The module integrate the field service application with the sales one.

    Table of contents

    @@ -390,7 +390,7 @@

    Field Service - Sales

    Installation

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

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

    +https://github.com/OCA/geospatial/tree/12.0/base_geoengine

    Configuration

    @@ -415,7 +415,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -432,6 +432,7 @@

    Contributors

  • Steve Campbell <scampbell@opensourceintegrators.com>
  • Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
  • Wolfgang Hall <whall@opensourceintegrators.com>
  • +
  • Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
  • @@ -450,7 +451,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    wolfhall max3903

    -

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

    +

    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.

    From 0865cbc89e47dc3659a18beb8cb35c661181f060 Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 26 Jun 2019 09:43:27 -0700 Subject: [PATCH 204/631] [IMP] FSM Sale Update [IMP] Remove Duplicate Field --- fieldservice_sale/views/fsm_location.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/fieldservice_sale/views/fsm_location.xml b/fieldservice_sale/views/fsm_location.xml index b9be2f2f87..88ae128d9c 100644 --- a/fieldservice_sale/views/fsm_location.xml +++ b/fieldservice_sale/views/fsm_location.xml @@ -12,6 +12,7 @@ + From 3869634923c15ced5dcc6297e5f8a7e71e414738 Mon Sep 17 00:00:00 2001 From: osi-scampbell Date: Wed, 19 Dec 2018 15:50:26 -0700 Subject: [PATCH 205/631] [ADD] fieldservice_sale --- fieldservice_sale/README.rst | 4 + fieldservice_sale/__manifest__.py | 1 + fieldservice_sale/models/fsm_sale.py | 13 + .../static/description/description/icon.png | Bin 0 -> 17808 bytes .../static/description/description/index.html | 464 ++++++++++++++++++ 5 files changed, 482 insertions(+) create mode 100644 fieldservice_sale/models/fsm_sale.py create mode 100644 fieldservice_sale/static/description/description/icon.png create mode 100644 fieldservice_sale/static/description/description/index.html diff --git a/fieldservice_sale/README.rst b/fieldservice_sale/README.rst index 755ff8d4eb..39d9b32177 100644 --- a/fieldservice_sale/README.rst +++ b/fieldservice_sale/README.rst @@ -38,7 +38,11 @@ Installation To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: +<<<<<<< HEAD https://github.com/OCA/geospatial/tree/12.0/base_geoengine +======= +https://github.com/OCA/geospatial/tree/11.0/base_geoengine +>>>>>>> [UPD] README.rst Configuration ============= diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index c06567201e..9e9b1127a8 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -15,6 +15,7 @@ 'data': [ 'views/fsm_location.xml' ], + 'application': True, 'license': 'AGPL-3', 'development_status': 'Beta', 'maintainers': [ diff --git a/fieldservice_sale/models/fsm_sale.py b/fieldservice_sale/models/fsm_sale.py new file mode 100644 index 0000000000..65416a8a7a --- /dev/null +++ b/fieldservice_sale/models/fsm_sale.py @@ -0,0 +1,13 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields + +from odoo.addons.base_geoengine import geo_model + + +class FSMLocation(geo_model.GeoModel): + _inherit = 'fsm.location' + + sales_territory_id = fields.Many2one('fsm.territory', + string='Sales Territory') diff --git a/fieldservice_sale/static/description/description/icon.png b/fieldservice_sale/static/description/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 zcmeHvc;{H3sucZElF-G)hC-+rdy@|cVP3o7ETY&& zJl-5>)T;P#Y>Z2k74p9gK&J2CJC5%@{WsV@`$(=#w|Cf>44L@opuIqTY_XMpYif9< zJEhZ)*(Ciawd2E4g!g{`tf-6DV*W@FZ!b&?uih_mMpBM%8|x61r3D=Pkjl)*LT52YNq;hIj5|udFA)RjvAIV zR;k3*$i5qSsi6bcd50k9_J$d6qZe5$CLIT#a*i*=wkVz%dgiqH(oe=68=3m>aXb03 zuyMGqBG(dcQxAcfP+K4yg1i{GtF9VUM32?R>d%HqF@xRPyIc?3mifg(5sPQ&5bDFm zimOQwOnX4K!Srd#7sF2xi^4^1yiGAIq~p7mmzr<~Lo z`^Zj#UvWcW93Rm$F}uR@r0rcd-HSU5-(-GqWovBbB`xhmjl4J(??0#Kk62I~XSft|EnXSitq|ZL3=o#1EvQgW9 zJ|12;ejG8^^|hTqjb_(={4bNTpQWY8O}Sq_{M)O6b6uy9w|sdo6^zbBeKnQ6ZrBxf z{=<=LGexYoQ+%!%@poCfC;cW~ny!1tUwf@o9+XcXuz3-vA`{X*t(iu(J(v4eK3$BR z#?wsdnI9niHT%fq-!r>21r=>B+y?CU48s?sGY##Qf?l6kS}{XEKaG3P%=c#V{Z`MeV8Rg#4Z(I6 zeUkKcouTFhVv!mqpgP%TpU}z8*Yf=tv1Q~b#DPLwkmDjH6U{+_F!pgNVV@}v zE_;Oc;S_mM$!3hz@uxyNzlJV`D!(V$L`Z$=*YjiSe_v$^V+Z*0H4ecz-X^KG3Xh91 zJtlf|UNz07Y#FKl46c-J6y0GhCP<)$*JggiUF@eIv9sen?MtXFOuac$_`IKZ&l|z) z$DT>fB2eQzolI1)xny!__wV%Nr%CM35kW0htameEa2Xxl-VJUt0m|nu2U3$ze(Tv8 z_hVB{JXq83`D;Upw=LOuDRooALyP@8w;=UBLcBPO_Oo2Eqzyr^s9lFgZ;gA+g>qXL zQ&>MXjs}PweSxbdKlG#^m{z z4MEp>mrQoM81`rGl4fG*YlUD7lD(ODkJuzt4j+8OD@_^c{M?VWMvL-mhf5~AL_6K|~@F^Eh5X5Bh|N|tZb>4SGD2C!(~DsSL~^_)(2+Whr4`XyCSV{(`B^kJm~Sq5H4 z={4Mo>%Pqe9hXx1H!&Weh$$`>=k4s~l1y2@kbRf3#Hj62w#Y5v*j#41aOZbPZKJoD zT65i*>hQ5H;E&)$J)> zuxv=r!DD1$E7*+}4Znaljjhl{m+jeAD`FwHnWb{?rNRS*#3~Eb#Z1J*x%}A?y#QqE zY3J9H`r#V7#3BN9WEBUyms973^%E}-Q85dO6vPw{YyP8Ab4h)?4d>@Xa#ek}@me&_ zsu*@8-MJp@l{Fajl%X)8YIcH{gQoNo%j$Ln89tr-rRpk=Lq@6>FU_I#jZ|+7ZKE>6 z`W`W+WV)WGFH2S=CjUICcO}vmZk_yD>>7iGl&wC-+*cwN($J)jR>5uzBwO^18T3HJ zT8ptb-yH>B@o#OOS75y{VrE?xxSu@8N>}~U{LqHoaKE;reTWfe$#5$VNM4#Fa zZfkbN3W0lG%wM)^|%PIa;|pL*eGhj125^^V^CQRr+V=S<3oHC@VQ*Rvr%;;2?TUnpig5 zs`9&vGhHwPd|19TpB=*Cu_T2BC$2Fz*pU2+51AZVxI5b)^K-JSFG}8$HTeA8+{C9G z*4RK}Arvx*HHlneHX#xcWra;;X7HN0S|>@v+IX*doQvK2OR0MB!&KBFV8_8TA0ThE zUCUNO#Of)<)vmp~sOy>|@lwf~eO7X}(3(rQI5f_v+RezW-U2vuDQncBGD zF(VA7*oS6JB(F=kHQ%l@G%-$VFA?@NnvM#;BzN!R{H%%y6~sEZ0pg(3FEUZEuc7No z1Vj|DQSR`iJZVT3MW?4vwx^xq7#`xvF@!X|rJ=jmC-Mdo(DWonw&V~O<5O8-Hkh zOEdL3#D24!;Y?zY9P8c(<+YD8#kyPIzaKvmD8e2y)X6<-*L!drI*zBDi-i=0uu5G` z$J^EToaG?!T8-pJb2(>-C$@OY{R-{yWp zii!?Pz`{sZ2%!VEB+y#c+Vk$iN>j5Wy>hoJ+R5)5Q+5@NKuMolyQFK^9jgWXKvtad zvnR{)_U4xGO`mULUP(d`1_ugr8!tEcJ4M87LxLFW#JOsVI3d(sq^&;R^5av?A}=9E z*@zzYGj@5w{;!VC2hN(VF{>|nbd$l!@6OZSfDI?==C0&@N@ob6!tY0y1(_*y&gn2n z7{TwW-TxBjC#f}hDQ3*~wR0UU=GR0P(iD8-Ess&BusECJJg1h~m7+-(T6nE!|L#W% z0cxy)EHM~T8h=1~aH=vJa5OPQW}I%FT(w*L>->d`ohE-q_uu6`d&$=gznwiw2sHISjYlQg zJdPT=Lce8FTqkR#p>6iek2&+loxZ8D=317tg0adE`KvP@dEz~z&(^PXsw-I*i|n7Z zjBn=~pL05}RzkjtUYGiDjjYe|d{}5ng8KHs*Q&#|#7BX0P0ol_&sQ9+?c)f-r7|V9 zW{d0er92o2iOjV{2m4bHDq)~+VGPX8r!wn~Tw-Cuyh-+}a=4t*5DQ!vMQHo5_>#U~ zdH14?&zDw9?WN;_v9T#GGZDMWtHmcL_-T#FMP=k>C4g55CUZ9uJWD=ZrBlCtNAF9l z@}wNeXq{=>N|JW<-=9^%NZq@qD`^8Jx&@Q}FOt)tNn+diSNi`K_DL$Nnvt zu(FV$dO0oS=wO72Q}pS4OQWZ-#VMc6GF73?o_c#@gQ8z9N@85$;+n*+=~M=uiB~wO zIx^Cwjz(`e0Ep&p^s97SwLh5b1bwOQrg^`bIhW>X(PiUlqajhz$Lq%AqqXXcR3w>U zQ?V_Z#z3F}L=jbcQH|n_%5(orK+U`JnwB2#Gj)=6&QF~22uO`_`9jJyyJ8H zR4MQj0#zvrM_G*LfnE$4dvKY5;+{@!^uVaBx0sW5R(Va{fjDg2b+-X!Rpl85^bWB# zL9CiD+sGE=o-65iW$h4uxUXg&h`T0!nGZIKie9}ry&|9H(r;q&I=fR^3+ey~x?PS* zLU!r0Qz)^?QU7_&Z-wEqx~;huBz4DT;n zx%-9VM*R(Lax`-HjE3yUt4@Wat&nK>PaVFx2bQR$UWup>vT?^t74*Kd-RCxZCP7w5 zCn@3jHF~7O(i+{3BlWMeGjpVF{jqkhW)W!pqhO+AqXEH;KmMn=t2!mb{Kh_I7M5q8~NAl_$ji!)jq4t6m`*jW6}ei+TZ`>JVA2k2RR}e6S}3qpyWK|01)a zR3y2>nLBJ8_^@CPxBg)yK6-VoT@xW*C0*>_*L`eAVyYOr5A3KFNm^dqw(I?-Yw6L@ zoy~;Qb3~p(uU?YV3mE!-rzULw72^J;=p?v5n=|iyL+@c1sj!eEfwjtg`6QG_ga_BU zJa6*UhqUAxgCJ#B#nDGMS-Ps5ajoD%y3@2%#z)He1y8=VS)3$oKSg@O7(B&}zX%u8 z9P1g*YG$C;AyMmh7eHKDHOcS~kvtWsU`bu}b&mw-!cE5K?x(GM>=RxM4T8vfAmN{@ zL=5)7Ss1S(H@%!1HdUYJ26efRKr8#p->jZjuY6)xtJM4=gT=YOl?gdc*+S2T({1LO z2I@rMKK}-_4fg~L-n0^-+PJqs*IOF*#$5NLl0fo7ezq>c!1G20)wsID+*dwjLR7t} zy^R(o0A~PApD`${GLOv9nVW-OKz&oqty1VXMng_1%xLePEL(2d_bEG> z_E*2rzx(>HZYnry0S}QT6&32>eCxk-5+#J29`9Y_{%5~k$S12G4A&%7NzX0M_P*nIkvB0&E!5Gg zGtLt;c4XwqqRX&R#|B~Oq8IN8yti5yOd-lDP#MFTUtsf__`)d0RUI{p$0S)%|MQ)E ziRf>W+vVFgbIDXxmgqO5wB@bZ=_@z4aey&sTy~n^_c+OelD5;-0xF}iTuB!UG$->A zYNBiHbFc2*#?PSLZOfW!Nep#bUVVFQ=KBbF&=f^7f2^cHI-a}DpQGKBPo_}s!>d{? zd*UX$2qC|#1)qJFYc&lehUmL1k5ix~s~Nw_4Y>EdA$dGMRr1kZzlFSn&=EeO))69T zz8SXDw#af^8_$tX%}#4Ox!ZOK8AtDW(p{zrSA5q`Tu@(Jrg~6TO(mlD4b8XpLz}%H zyp7CvE;gNcHWHs2^y4$WAw%t%GcafUgiH=@HD>~O0?B{KwQa*=MVb@;b zEYNwm%dnOVyT;rL(K48AR0^=9t>fQZQxUB!Lu(T>wXg3dECL_%22JF);t$<89Fh~T zdyVEF%4gK68xv312&aC6r7x&{@zl85Euq?xiZlAr4_Ms~Y)(zf{Mv$BX)_ILA^Aj~j;my-Ox|Hu|O6dWimSNEO2i(%9Oyn^kV;#= zJa>%=k0D$V(xnl3-IIqcQnmA@q>l-hD#Oz$1w&P+C8T^&M(1~tz9BF~!l9ej-uD2@ zR9@|0Q`+a|W#j+DfIz*)Kp5TCE#swLD;1W#ik2QvYT0bFa%+bL0IXVPOMdN~*1LgT z!mb3hM&79NZOPv6K6{A;g=)$Aua>uTx_T^MEmpSVPM_b=Kx3mR8BiHO@VLelzSq02 zc0U-ax*hWjmaUtz(x60_n(EiollZ)fKU6kiwCH@^azWhIyZ?Qe|L2D;W$GoK`72#N z#Az9QXrtcgEC;7BwPh<5*O@92C(HSj=mO@w?L*lH%!x~k?NyrUK76ut-NPZm&Y9dv znM85NnCw7P*&(;23EXV_s1QhaYD??ycu|*bwtWUhu6e-w_;LK4xt8x*b@Hf%Z5w3U z#KWAtsg&Za94KLq-mSkqLlM4vEPSg+Bv}on47spJJw-87`ImL>5jbBcWTj zz0!b#Af-7fi37khDD7VyfZbV!7Y=pF3-KD}!Y@+a4rPIWQ({X+NxZ*phei2EZvm)T zw-Y45CIbjv+_perJBcM!;kv^3V>X@JgI4(E=b&xl?U4eXogcT+RLp;7rM;T|1`tl_&*=zD}8mBjFrGM&H(zV#c4_fC+psUP3p9(5>tdp zV*GfGf9?I7+5G1D{ELe>G1#`(-o4#hJWlz_-+R|G!XKD{!jOJq^de0mrrq%s)K(-e`F@4nuS*U#R#zvJR@!Cn*N!)Fwe}bW~MiuSGV;jvD@i*rzUxLPNq?I@Y}ho` z7hkg(>BOuWN8_!7JrTcNF^-E(0}=X8 z{NX>#aj;imRy4Z)_swn{M`+rA?$?ZXqp+YbuC7U;v*$hV9KjPAF<@?c6-uCWV#^C#89W*Cmt(to_}}v5>(+mM`@v3ob6v~tnOj?H_0|K1 zTB$@ZhhmOViRj#b?-^4b6-maplLGGCGYWe3y;B1L2wp`HwOfC^VHx{aqx1UqyPzPQ ziKXLJUe9D8Hfwx)$L6rezuo%3gg`Ow;t#%=c@d7C$U6EPdCyF5;+uyKf2BrwEVKdI z#GnFVq~o6QNES|F&q{;z5vYq3_XN;_wC=|wms-~CL5H?{cTgMaKWmLYqsk-@E$eE5 z5OJyrt8I=pn8go7$<+dg*XvKJ_UEh7G8z1;ZM=cz?ixHC)2z%j_Vpo(1Rgj_Kp0Zn zJD_jWRKJM+)KsdT*0mF*%|Xs3CwS^&oBciALzjS0=n$|ucrKYj>l&22xJUV2S0h@HomV;ImUK$Y=qaQ>k^)^cdIt zIq-QQx&|NhRSfA#Ouk$L5IO=1*In25Eeb)`A?11>OrSyT{h~M!!ob}1yoq9?2!{l{ zt`wGxPlT*?+^Om6-eDYcR)=vZDyLP-JO_$H6mnvX{f{!^pFE*;z6Io9q1BGZ{5HF! zL%>ZNEqY!M56{NK=Ku_bl2rf>^okfO4LEb1_rA#tG~ys)R+q-uRtz5-JSzQ{umxPibOH+T*O_)mAWnDZf5DfEOAgyf?Tg=1b_Tp z>zpJHFM>Y0yP=Lt*AGgfUa2ash zd_wcdw{5@*em~rBjhSSJ*gG63@fmbSWI_YDgoGPntbpgD>bUY=w)wjn?s|<#CB^^h zR)V-v{}OTzmPOE(1JHN=_cojaFsr167|5(0QsYY~7e{)YZAX;zq*t=~uGk&_b}LhwbP+ z5NQwxc7d`aW{lpS3E{+g*c@e!c7NJW{~1$c)!MF!zf}%KM6FJ{_K#d z0hCc@dyc`9rf=E~azy={W;Jwc!9qhw%J)szPwNf2u3$A~a4_+mE;&|-$iZ8ky*q-Zb`)ix z{A>ui(@syZ`@UI0Rk_X9fKps=chNU<=SHBiPhD)_a?g(c0Zc8K0J1RpB*61r?^I=! zp|X`XQC0jqq3E}wpKLJwEIg?VNO6Ed7jADGUHkM(dK8dG_d`at5eO3)7C=oA!7(I^wu>rGbT}M^#%j1GBcXT!NQ-p_A7J#bUwK^tXFNI?z2g^?~{AFr?ocuZ7CQxX7bF z9K{O!{^^cygL%a2@rr!pp~6o~XWwkbrI^xA8C zRGD^2)(4TKKXP{ZzI3&6kBAZ^Xod%uFD%7;H8t<~I;@sFxQSS73ngYfYJfruwt6_E z0MLfLqv_0vHQonSjqD}K$^t=Y|F`S;a#BoO$ZDJ}%iEXnU*BT`SVJI)16gEE%Jc@f zOHkaW4=M$tZcyvY*bY*MFEYx)!g*isS**JJ%=y!Yt8`aC?e1Ha=t8>S5|2gqS-V>m z!Ots<0C7RcI^e!G?O9~qIm`ZcCKWcZR*ylKKz#m4-OT(g(EZTB4!Q(LY~p;Z)}y;_ zff5oiNcNuj`AI@faP?5CqPCK7m{R0y&bC!V-Q?RtF^X`Xt!ANv*(V{dH)Zo$poqZb zpoGc29t2JFYejEt`PnG(ST|sOH&0u94Xy?w_>$jK2D~TDHoliT*R>gyYh*iDnp8AA zU+ugn@-$KuHsqg=tyZb`inuc0&(Fl{ZNA78ng1wHU*&fbDomy9a!JpulJXafNc?ecuJ0k+TE|~GSM#o0CmLksxPORgG~n_vW`(5qH}COjNqk;` z@P!fz_xo|Ihd<=!-1tdUCQ(lj{Sq4Isn+NY_6D@U1=0LFY8auZfZQps$bkGCggWcwMkwqqpj3K zO!r^z0A8u=!@C{>TMJyr$xg0|n-6T(zp7LCWAzd|z*h?MH1*o4iw}=1qE1TXPaqx~ z9atwR9eom7*p+Tj%^!?#zx%za=fK_+f`9GR>q%J-#;tsoOq~{L%H$hbD)G zHNG0gUFb_n?7$;f>3z2Al#>hzU*C-qpVkIx@LP0oywK6ieJDmelNlf?=bb}IYNEYk z9;i8iYW%$Mx1&}FcUczm^vt>3`OMev0$5p~41pr4>PzVlmuFugh=~ekmi4*CpG}t4 zQTd%K94ry_(_(M!uYzfu*KQtT4)hy*0G&>ToVNvtgbgwc=oonMWnU?e%(5*o69jUJ zeXoGKk+E9=LN+2&g1t*@Qcn;(XK?fG+WilgDS!4;W)if9i_;1-aG&d!b0$-RH3zjY zzG`0J(A@~)m@Wtv;9L)!BcOaY0s*${6bU3`MIb0ZpPTxVs2J$GVi6xU>HQDYjZ!}) ztC!w~y*Vrl|>V7#! zFJ+7&8keD629@lrj_sWccA*iZp=bC#$`iLJIgRulcR_9iv_W6Rf3pd(uOQD@J*f;) zl)lgS`4zEhw%|WK1PRM@(cq0JfBM~S_F&hN>D}||KpP|+Pc`%NuT2KBRiJP|$eEe? zN&g?AN?nzj`)0W8Q%z6=rF!u_64|Z~1|b+F!Wc%qu%x#` zw(+vW-k-`kzr$rm&(773j^B;>G*5O;C!3h~fxHbw0+fL>0UBz4 z*T?Uo@+^Y+C5LGYEXr7XK{moo1Kzj$YpxAXTtLdP+lj$|BnN)2syUljdwg6Q0maMo z@t)t2aM=PvKJonG)H7D6oYw3~dD#zBCN(Vk=Z?IVJ)hiziei1E+-?Yjd*TA@fEagZ zOh7r($IT8mBgQ6q;PzTk^3E5}R7`Dm)$qWLx zIAdZF2y8H5RK+j+5=NR!rV7e@zd!qqo=<7hyh+%AI*HK}9x<`mS^LAE8yQPF#Gt!$ zLB2pS<6RO}eTa16e0_l-h~5(?XLZ}|Yutso>Isy5@WuCSV@z5d=A^SEU8K{%>`iKnd5oMAR*z>WgkTpU1i6AaG4#KfB5%xuHh>Hfe?ke zMyYY^E4(uvUPh=L`tWx`v6`MB)AwA@cZOX)bvc@@MbzIsdIr?ZD5#?X0bjr-8FG8a z{@_O1X$bWeo_(E7tAT*jIhZ-MMmHDJy`-roRBR_bB8{_w^2_wTvaSir9!<&9)C|@% zh(5G|J1zdM!(WJ;Ba8!{?wHF&N(gIzcP?TMiFk*(L6Iz$<+CHNIF3S(FealbK4l{i zHlbS#fZAALjc(g~K6Ape(|FLXc~daz9u)K?i$2g)2jE%}y1&%6UsVWkGL6{q{XG{) z!87>`wAQjkABSid;pS~GVzTAI(|Gm9U{Lev0AIkRD02Upt+D{{Qc0is%F}j=PaqNI zZC<6OOUe1WgM+DrYfHLP?Drsadqm{u8*)_^%|9fZ?beKNI$U0>k(5NU^@IFiYODfm ztTr>K>=g5m79e6vy_z41-uoA08g^4sXA(GOkeh=k0WN+{y6uiV5{gV;)p^GNQfR}^ zN5O-)a+9^OE!9j`a#$L*qr^^N zHGx9q^ds-5zku?^P!_gL{w7d$9nket!lq_M@uKtd=D%*Vc+65BFR0xlNySC-4;U*^ zyu7QEI9gu$Ss#{l{7MC7;vz7$zRTl%|40uV4;ZIjBGb$|2PGh;L555}5U+$_&h<%x zIW)<<(7><6t@HFP_aarR_Mr&ce}f-jI42%L5_nk-_}#^lJAD~_Ie*^ySAz?F z(bY-Y+*LV$`)YNjzJx6u<`b|o0{N0VP#)m2+lC<16j|{sRtz8&wpTAGHEHbETIMwPM5s^CgH7O-Yn@@gb(pLio-EF8EpAm3<-P*Px3^Lj{AsJH|` zDl}_ExPeB6Y7d<6c&vy#RgT^H4Bf8y!_gTmTC+K)V+m<(ytfI zroj4o+EK~BcN>9Hj{@#^ff~cFh)Bzy;qZAGU`_~f-EJa|FGxe61E*$ANZau6Du_z9 zt&56mXcrY)|IhBq{8HlQghUl@L|p@WnR)jJD}sw{$22ofd8?m>0DAHuGuSa1j$Q&C zD-HU>9JRl_{-<0!SIeynAotW^Q`h9TQ9b6Y@0;Eszr5SJ^p+v#UZ1I@v}$R zrB+npul%N(2EvKFwrD>T$iVGG@1?E#{XV(?7AcRG6Cjwk$q41dbvx?$f?xJ$!6%r$ zs(tMkH-zO7D?E$p*UjX-HJdwxs#ho>u4v^;Ly~`06`Bt1Y10`iB1a@qAUMG8kK3*Z zH2p%Etqx_i*p5rjY&wDJ6>7Le0veqBZUet``@r82;^0)gKedUbd;B1?f~r0pOizz=Sue^P#>^nqnsOT9+oqw#Z>;P}m`%w63sZJ$sJzN)=e4WzJMl!N`mO|R`!?W0Y|AJb8=p>KkNMi?XTL_h{O|as! zhsCMLS$u75XOaQ28^qr?Tx8%P)7``59~v6a zRRmq-&k_Q=dYhJL_YjnJz!1)+lZZZo+8taAwra{j$!I8Kxq?lfdO3iqXtOtPl@*iC zFO>%T*6l7{i}+}W2I9!zfhqxd%Fso{6oWykVgKJe!I?bSHc%xL!|`VVMID6pu2FgrSs zF5Zm>Xpt2Ug=3j_nl+C~g(SXS7}Q_j9*Q8dTV*^FXeZ9o7o5I!e&i`K?FecTG@@mD zkF=r_?LPftpeV&0H(S*q6xcR8blcwzqy%aO2eOHVu|9rem{P~H&p~MA-CGyDeVFoR- z3w$_BQBg0GB8h<~MOr+x{6VV+k-4tx@1e}pl}zlrvY18zD2;4IvfHvDLcFSz#CHg_ zHI4HS`$m4*K@giN5v2z1)Tn~0`@oIk6)I10Eq7rh0ImC`qx+!P;o64#!Jy>DEAQW) zPF_ubMDQWE_QndwN|Rhte98{tKs_{il~m)_(_9PxeVJ)o(%y~mRYN~EQb2=Eb(jAi zUUJYla0vi^5Dz|5A4j03*8`gmCbG!;SqM;$Tp5D=yoG6ugR&;EHZ;wzre83X55Bu7 zb@w2u)HJh!pUcEv;=jW6%rpUI|)aY)7#WCpnDt zHz56?xeRn_C1L(GW?D;Z1k!)QYgkO^9f6L4vzBn>`c2H!d;Kend?DGSU|pxfF-Nq= zxB^bL1;Spv9n?@`afiRq1XEFjAg_htD`ts;dZBrahph#h)8-OO`T1I(R#1u@dbQS1GdVCW( z(TEq_JGjUdQY@l$KnjevzqJEgMn9oLqN0FHBOuj0BzwpS(1^*EecK~269RBW9-K)$hfQT0u`)3UU=|L6)a$@85~9I48v;3{oG-f& z;AGrTz1Gnf3#oU7-}D%-vI0Pb;39lj0Wg(C3~TiR&$Mr~Vm&b&tD+*hHf;QK8Yug7 zV-zUf1P-1?2N(H9k!4p@jSCndt$r~@=lksQtWUJbva(>Yhk?-B_&Ssy%iZAp664ST zEvxoZZtO_x;<-lb-uOuwR_$LB(0CuKFW9A$6py~IVJ*w83S+^=s%sLl*&PNBhf^tXepT1KL^lYWb7isxxa6)zK#c^pwyWaACqF z*M=@&?-yF3$Gg7$)$P2H{G6vf@rq$zTW4U~+w}$&U!k@P>8n)0P2f5?zdX8;S3L6m;(he=iO2n!xEb2?+ z@!Q-vFOf7o*bb25t}J;Bp4R@;S%M(@z=NWllIRf?>n`)H*0Z?m#3*ky7tppIrQOKQ4h1kHTSOsIndWhMzDgQw* zjVMFQTwyXs!lbb-eqjNQB071^_^EGui-jQ;@8f^mMVmCA=Fga@CbN_{9c;}}=t0s% z8zQSSTWt+A*Hw`E_M&1X(4%{FV}CmD?9@$;u@S==IJ9hhh)NURRCzp1fZCLmJ^M7e zh72){_{dgn%}`D!u13?N8PUxoZsA6cU|7~%t}~k*AE*L_Ad1U=4x$i1Lo`0sPuCvu z^5AG@ObyrZ!kLuW)5*5oOiPz#At-MzxmnXEToM}$KrAjwQy~|a23I#P9j1+@xzk{^ zfhLAvD2T^d3029YFise#a#6*3)B-^mmKPpN+kHJwT%AI2*`K5BVL;lnmo$6^@@U=f zc+ISm{@BYikpU9^g%cXhJgmbZR0K|L+Se(zAFutXd2yJSO_Try$CZDyF+~VzdM~k& zuy{`=LpyKZ7rU-xUzDfFAQ;>M+y_j#&eviD5tA_tQq4HZE%v5MoCXLwB}+C4jK0=Yy|(o;xV_Pyf~*E$*B-T=wsd(tHd}>b-UDg&>oS2 zl|{JKU<9S5H!6yf?|?>#6i9WJU7s1DhO7yv3bnOtqjC)oApuf? zRDq~vmXs)!^)DAxle|TROpLUP3-exL$jN#3TQ+5Qb6%Vp=u@fOJIik!9AQQ+q)r~h z%EiGEUUglrlu7`7E-UfR0Jzi%y;Mod_>;1CEf2h-2_4>Ba|^9@SLmgK)4A|h@`n$y z^RC}_rl?OYF8H+V!okA>{eN&a6c3SlQkJeizKbAuoap~AfZdkj$wV=5W)TK)VyHnH zfI?_uM5Gc?LzTJW>(aQRBgTknt?V zl4NBQ|Ja#wJo%iNHzqeud2-LZ;5dz3sg&%=A0N<>&eQchJsGLf=^SFvU9HfcY#Ud| zgSyJ0D{|rj`Us)=Oqv|Dg`)oYe@o|1j}FMiHs8lsL9rdyo(w(yZ%S%dzL%DAKN|+} z9(_^`2D%ml(K|UWU%sqiSpAHPxB$=vf@EuoC~l#JJ}~40%m2>j zGWwXHJI2OAP%xvDU9Fj)f3zvya2lRc-*b24QTTj4YW{ZA8xplo{PTs)6LjtvE4+oq zO>t&E^fTM;A=cV%8JzPn3PB&kAXl2KhW?Nd85wzJlx#0ijShXJW?6qNFT5WHgX*`4 znAw6(otBnuX*CHI7J32YAFrpeFe*%n?tiX`q=R&agxqy8y^(5Q$_ZB`XM!tI*GZbX z(X#_0LZp6h^6*3~mEHhT0b`4Yup6AXVlpn+Q7tknyZpxvuEohyH{$F=!8mZnEQAjI zQ46(s-Yaz;wNUgv&W5ThKB{W3(9dUm{iObJMRL?`A=vQt%jg)l{#&O4GI+#Kwjew0nySosF+@T>xBYngWHD;bxF;7b-%>cT74(~!j za)0gM!|>0eyS75X+B()YfAk)l$Phu_s10UQ8K<;`o;##M&SgtTuC$&4T{~TLYh~dK zLm$LxbZ^z;{Wl*6GW5?iFeeetYLG-nRdM6TR)K?1<#+hD&;m{|(ME|BrHBci#pV0oF(@prIFR=LEDdC|` z$6e@>ZBk~p1x{c}1ap=W1^2W?Z=AMy=;mO76+#5-nyl4XmK<5P7YCL|M_(NIF>`>^ z*RLK*lO8nwDMbFyjM$-Z6Jc-2q&bOb^^g1dhQG`X-*=g!K5kpSk08tH`uba$AEu(3 gUHh>HCdQ7*k1fAW1vhU(MTsEtw^U^Fq)ngxAO8EYHUIzs literal 0 HcmV?d00001 diff --git a/fieldservice_sale/static/description/description/index.html b/fieldservice_sale/static/description/description/index.html new file mode 100644 index 0000000000..734a351843 --- /dev/null +++ b/fieldservice_sale/static/description/description/index.html @@ -0,0 +1,464 @@ + + + + + + +Field Service + + + +
    +

    Field Service

    + + +

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

    +

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

    +

    Table of contents

    + +
    +

    Installation

    +

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

    +

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

    +
    +
    +

    Configuration

    +

    To configure this module, you need to:

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

    Usage

    +

    To use this module, you need to:

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

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    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.

    +
    +
    +
    + + From c6d38513c66670249317d295ff856353badc8b0d Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 20 Dec 2018 17:40:55 -0600 Subject: [PATCH 206/631] [FIX] View + icon --- fieldservice_sale/__manifest__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index 9e9b1127a8..c06567201e 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -15,7 +15,6 @@ 'data': [ 'views/fsm_location.xml' ], - 'application': True, 'license': 'AGPL-3', 'development_status': 'Beta', 'maintainers': [ From 0f02a8ba4c49cb9c220c1cf711396211b800f725 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Sat, 11 May 2019 17:54:52 -0400 Subject: [PATCH 207/631] [IMP] fieldservice_sale Added ability to link a product with FSM order template and create FSM orders upon sale order confirmation Added option to install fieldservice_sale module --- fieldservice_sale/__manifest__.py | 12 +- fieldservice_sale/models/__init__.py | 3 + fieldservice_sale/models/fsm_order.py | 23 ++++ fieldservice_sale/models/product.py | 26 ++++ fieldservice_sale/models/sale_order.py | 157 ++++++++++++++++++++++ fieldservice_sale/readme/CONFIGURE.rst | 12 +- fieldservice_sale/readme/CONTRIBUTORS.rst | 1 + fieldservice_sale/readme/USAGE.rst | 7 +- fieldservice_sale/views/fsm_order.xml | 19 +++ fieldservice_sale/views/product.xml | 16 +++ fieldservice_sale/views/sale_order.xml | 23 ++++ 11 files changed, 293 insertions(+), 6 deletions(-) create mode 100644 fieldservice_sale/models/fsm_order.py create mode 100644 fieldservice_sale/models/product.py create mode 100644 fieldservice_sale/models/sale_order.py create mode 100644 fieldservice_sale/views/fsm_order.xml create mode 100644 fieldservice_sale/views/product.xml create mode 100644 fieldservice_sale/views/sale_order.xml diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index c06567201e..8dee4eb29d 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -3,23 +3,27 @@ { 'name': 'Field Service - Sales', - 'summary': 'Sales', - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', + 'summary': 'Sales integration for Field Service', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', 'depends': [ 'fieldservice', - 'sale', + 'sale_management', ], 'data': [ - 'views/fsm_location.xml' + 'views/fsm_location.xml', + 'views/fsm_order.xml', + 'views/product.xml', + 'views/sale_order.xml', ], 'license': 'AGPL-3', 'development_status': 'Beta', 'maintainers': [ 'wolfhall', 'max3903', + 'brian10048', ], 'installable': True, } diff --git a/fieldservice_sale/models/__init__.py b/fieldservice_sale/models/__init__.py index 61d98a615d..360a690640 100644 --- a/fieldservice_sale/models/__init__.py +++ b/fieldservice_sale/models/__init__.py @@ -2,3 +2,6 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import fsm_location +from . import product +from . import sale_order +from . import fsm_order diff --git a/fieldservice_sale/models/fsm_order.py b/fieldservice_sale/models/fsm_order.py new file mode 100644 index 0000000000..4798b725a1 --- /dev/null +++ b/fieldservice_sale/models/fsm_order.py @@ -0,0 +1,23 @@ +# Copyright (C) 2019 - TODAY, Brian McMaster, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, _ + +from odoo.addons.base_geoengine import geo_model + + +class FSMOrder(geo_model.GeoModel): + _inherit = 'fsm.order' + + sale_line_id = fields.Many2one('sale.order.line') + + def action_view_sales(self): + self.ensure_one() + return { + "type": "ir.actions.act_window", + "res_model": "sale.order", + "views": [[False, "form"]], + "res_id": self.sale_line_id.order_id.id, + "context": {"create": False}, + "name": _("Sales Orders"), + } diff --git a/fieldservice_sale/models/product.py b/fieldservice_sale/models/product.py new file mode 100644 index 0000000000..9655b7dc2b --- /dev/null +++ b/fieldservice_sale/models/product.py @@ -0,0 +1,26 @@ +# Copyright (C) 2019 - TODAY, Brian McMaster, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + service_type = fields.Selection(selection_add=[ + ('field', 'Field Service Orders'), + ]) + field_service_tracking = fields.Selection([ + ('no', 'Don\'t create order'), + ('order', 'Create a single order'), + ], string="Field Service Tracking", default="no", + help="""On Sales order confirmation, this product can generate a field + service order.""") + fsm_order_template_id = fields.Many2one( + 'fsm.template', 'Field Service Order Template', + help="Select the field service order template to be created") + + @api.onchange('field_service_tracking') + def _onchange_field_service_tracking(self): + if self.field_service_tracking != 'order': + self.fsm_order_template_id = False diff --git a/fieldservice_sale/models/sale_order.py b/fieldservice_sale/models/sale_order.py new file mode 100644 index 0000000000..46395a3967 --- /dev/null +++ b/fieldservice_sale/models/sale_order.py @@ -0,0 +1,157 @@ +# Copyright (C) 2019 - TODAY, Brian McMaster, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, _ + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + fsm_location_id = fields.Many2one( + 'fsm.location', string='Service Location', + help="SO Lines generating a FSM order will be for this location") + fsm_order_ids = fields.Many2many( + 'fsm.order', compute='_compute_fsm_order_ids', + string='Field Service orders associated to this sale') + fsm_order_count = fields.Float( + string='Field Service Orders', compute='_compute_fsm_order_ids') + + @api.multi + @api.depends('order_line.product_id') + def _compute_fsm_order_ids(self): + for order in self: + order.fsm_order_ids = self.env['fsm.order'].search([ + ('sale_line_id', 'in', order.order_line.ids)]) + order.fsm_order_count = len(order.fsm_order_ids) + + @api.multi + def action_confirm(self): + """ On SO confirmation, some lines generate field service orders. """ + result = super(SaleOrder, self).action_confirm() + self.order_line._field_service_generation() + return result + + @api.multi + def action_view_fsm_order(self): + fsm_orders = self.mapped('fsm_order_ids') + action = self.env.ref('fieldservice.action_fsm_dash_order').read()[0] + if len(fsm_orders) > 1: + action['domain'] = [('id', 'in', fsm_orders.ids)] + elif len(fsm_orders) == 1: + action['views'] = [(self.env. + ref('fieldservice.fsm_order_form').id, + 'form')] + action['res_id'] = fsm_orders.id + else: + action = {'type': 'ir.actions.act_window_close'} + return action + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + fsm_order_id = fields.Many2one( + 'fsm.order', 'Order', index=True, + help="Field Service Order generated by the sales order item") + is_field_service = fields.Boolean( + "Is a Field Service", compute='_compute_is_field_service', + store=True, + help="""Sales Order item should generate an Order and/or + Order Recurrence, depending on the product settings.""") + + @api.multi + @api.depends('product_id.type') + def _compute_is_field_service(self): + for so_line in self: + so_line.is_field_service = so_line.product_id.type == 'service' + + @api.depends('product_id.type') + def _compute_product_updatable(self): + for line in self: + if line.product_id.type == 'service' and line.state == 'sale': + line.product_updatable = False + else: + super(SaleOrderLine, line)._compute_product_updatable() + + @api.model + def create(self, values): + line = super(SaleOrderLine, self).create(values) + if line.state == 'sale': + line._field_service_generation() + return line + + def _field_create_fsm_order_prepare_values(self): + self.ensure_one() + return { + 'customer_id': self.order_id.partner_id.id, + 'location_id': self.order_id.fsm_location_id.id, + # 'request_early': , + # 'scheduled_date_start': , + 'description': self.name, + 'template_id': self.product_id.fsm_order_template_id.id, + 'sale_line_id': self.id, + 'company_id': self.company_id.id, + } + + @api.multi + def _field_create_fsm_order(self): + """ Generate fsm_order for the given so line, and link it. + :return a mapping with the so line id and its linked fsm_order + :rtype dict + """ + result = {} + for so_line in self: + # create fsm_order + values = so_line._field_create_fsm_order_prepare_values() + fsm_order = self.env['fsm.order'].sudo().create(values) + so_line.write({'fsm_order_id': fsm_order.id}) + # post message on SO + msg_body = _( + """Field Service Order Created (%s): %s + """) % (so_line.product_id.name, fsm_order.id, fsm_order.name) + so_line.order_id.message_post(body=msg_body) + # post message on fsm_order + fsm_order_msg = _( + """This order has been created from: %s (%s) + """) % (so_line.order_id.id, so_line.order_id.name, + so_line.product_id.name) + fsm_order.message_post(body=fsm_order_msg) + + result[so_line.id] = fsm_order + return result + + @api.multi + def _field_find_fsm_order(self): + """ Find the fsm_order generated by the so lines. If no fsm_order + linked, it will be created automatically. + :return a mapping with the so line id and its linked fsm_order + :rtype dict + """ + # one search for all so lines + fsm_orders = self.env['fsm.order'].search([ + ('sale_line_id', 'in', self.ids)]) + fsm_order_sol_mapping = { + fsm_order.sale_line_id.id: fsm_order for fsm_order in fsm_orders} + + result = {} + for so_line in self: + # If the SO was confirmed, cancelled, set to draft then confirmed, + # avoid creating a new fsm_order. + fsm_order = fsm_order_sol_mapping.get(so_line.id) + # If not found, create one fsm_order for the so line + if not fsm_order: + fsm_order = so_line._field_create_fsm_order()[so_line.id] + result[so_line.id] = fsm_order + return result + + @api.multi + def _field_service_generation(self): + """ For service lines, create the field service order. If it already + exists, it simply links the existing one to the line. + """ + for so_line in self.filtered(lambda sol: sol.is_field_service): + # create order + if so_line.product_id.field_service_tracking == 'order': + so_line._field_find_fsm_order() diff --git a/fieldservice_sale/readme/CONFIGURE.rst b/fieldservice_sale/readme/CONFIGURE.rst index f2731c6102..f9e33986f8 100644 --- a/fieldservice_sale/readme/CONFIGURE.rst +++ b/fieldservice_sale/readme/CONFIGURE.rst @@ -1,4 +1,14 @@ -To use this module, you need to: +To setup a product for quoting and selling field service orders: + +* Go to Sales > Catalog > Products +* Create or select a product +* Set the Product Type to 'Service' under General Information tab +* Under Invoicing tab, set the Field Service Tracking option +* Select the FSM Order Template that will be used for creating FSM Orders when + a Sale Order is confirmed with this product + + +To setup a sales territory, you need to: * Go to Field Service > Master Data > Locations * Create or select a location diff --git a/fieldservice_sale/readme/CONTRIBUTORS.rst b/fieldservice_sale/readme/CONTRIBUTORS.rst index c6a834aaa4..997a52c353 100644 --- a/fieldservice_sale/readme/CONTRIBUTORS.rst +++ b/fieldservice_sale/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Maxime Chambreuil * Wolfgang Hall * Serpent Consulting Services Pvt. Ltd. +* Brian McMaster diff --git a/fieldservice_sale/readme/USAGE.rst b/fieldservice_sale/readme/USAGE.rst index 684e27f7d7..21658803b6 100644 --- a/fieldservice_sale/readme/USAGE.rst +++ b/fieldservice_sale/readme/USAGE.rst @@ -1 +1,6 @@ -Coming soon... +* Go to Sales app +* Create a new Quotation/Sale Order +* Set the FSM Location to be used +* On a Sale Order Line, select a product configured for field service orders +* Confirm the Sale Order +* Field Service Orders linked to SO lines are created diff --git a/fieldservice_sale/views/fsm_order.xml b/fieldservice_sale/views/fsm_order.xml new file mode 100644 index 0000000000..4a0de01ae0 --- /dev/null +++ b/fieldservice_sale/views/fsm_order.xml @@ -0,0 +1,19 @@ + + + + fsm.order + + + + + + + + diff --git a/fieldservice_sale/views/product.xml b/fieldservice_sale/views/product.xml new file mode 100644 index 0000000000..d6fd0cea69 --- /dev/null +++ b/fieldservice_sale/views/product.xml @@ -0,0 +1,16 @@ + + + + product.template.fieldservice.form + product.template + + + + + + + + + diff --git a/fieldservice_sale/views/sale_order.xml b/fieldservice_sale/views/sale_order.xml new file mode 100644 index 0000000000..a23ed15b96 --- /dev/null +++ b/fieldservice_sale/views/sale_order.xml @@ -0,0 +1,23 @@ + + + + sale.order.form.sale.fieldservice + sale.order + + + + + + + + + + + From 7576826c8eeea30c7b97f771f31048ae8e69acd9 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Mon, 13 May 2019 19:19:11 -0400 Subject: [PATCH 208/631] [IMP] fieldservice_sale Added support for selling recurring orders --- fieldservice_sale/__manifest__.py | 2 + fieldservice_sale/models/__init__.py | 1 + fieldservice_sale/models/fsm_recurring.py | 21 ++++ fieldservice_sale/models/product.py | 8 +- fieldservice_sale/models/sale_order.py | 115 +++++++++++++++++++++- fieldservice_sale/views/fsm_recurring.xml | 19 ++++ fieldservice_sale/views/product.xml | 2 + fieldservice_sale/views/sale_order.xml | 13 +++ 8 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 fieldservice_sale/models/fsm_recurring.py create mode 100644 fieldservice_sale/views/fsm_recurring.xml diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index 8dee4eb29d..8b03f285ec 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -10,11 +10,13 @@ 'website': 'https://github.com/OCA/field-service', 'depends': [ 'fieldservice', + 'fieldservice_recurring', 'sale_management', ], 'data': [ 'views/fsm_location.xml', 'views/fsm_order.xml', + 'views/fsm_recurring.xml', 'views/product.xml', 'views/sale_order.xml', ], diff --git a/fieldservice_sale/models/__init__.py b/fieldservice_sale/models/__init__.py index 360a690640..af7c9764a8 100644 --- a/fieldservice_sale/models/__init__.py +++ b/fieldservice_sale/models/__init__.py @@ -5,3 +5,4 @@ from . import product from . import sale_order from . import fsm_order +from . import fsm_recurring diff --git a/fieldservice_sale/models/fsm_recurring.py b/fieldservice_sale/models/fsm_recurring.py new file mode 100644 index 0000000000..30bca2240d --- /dev/null +++ b/fieldservice_sale/models/fsm_recurring.py @@ -0,0 +1,21 @@ +# Copyright (C) 2019 - TODAY, Brian McMaster, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models, _ + + +class FSMRecurring(models.Model): + _inherit = 'fsm.recurring' + + sale_line_id = fields.Many2one('sale.order.line') + + def action_view_sales(self): + self.ensure_one() + return { + "type": "ir.actions.act_window", + "res_model": "sale.order", + "views": [[False, "form"]], + "res_id": self.sale_line_id.order_id.id, + "context": {"create": False}, + "name": _("Sales Orders"), + } diff --git a/fieldservice_sale/models/product.py b/fieldservice_sale/models/product.py index 9655b7dc2b..241a3d153c 100644 --- a/fieldservice_sale/models/product.py +++ b/fieldservice_sale/models/product.py @@ -13,14 +13,20 @@ class ProductTemplate(models.Model): field_service_tracking = fields.Selection([ ('no', 'Don\'t create order'), ('order', 'Create a single order'), + ('recurring', 'Create a recurring order') ], string="Field Service Tracking", default="no", help="""On Sales order confirmation, this product can generate a field - service order.""") + service order or field service recurring order.""") fsm_order_template_id = fields.Many2one( 'fsm.template', 'Field Service Order Template', help="Select the field service order template to be created") + fsm_recurring_template_id = fields.Many2one( + 'fsm.recurring', 'Field Service Recurring Template', + help="Select a field service recurring order template to be created") @api.onchange('field_service_tracking') def _onchange_field_service_tracking(self): if self.field_service_tracking != 'order': self.fsm_order_template_id = False + elif self.field_service_tracking != 'recurring': + self.fsm_recurring_template_id = False diff --git a/fieldservice_sale/models/sale_order.py b/fieldservice_sale/models/sale_order.py index 46395a3967..a3e37f09d0 100644 --- a/fieldservice_sale/models/sale_order.py +++ b/fieldservice_sale/models/sale_order.py @@ -10,11 +10,20 @@ class SaleOrder(models.Model): fsm_location_id = fields.Many2one( 'fsm.location', string='Service Location', help="SO Lines generating a FSM order will be for this location") + date_fsm_request = fields.Datetime( + string='Requested Service Date', readonly=True, + states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, + copy=False, default=fields.Datetime.now) fsm_order_ids = fields.Many2many( 'fsm.order', compute='_compute_fsm_order_ids', string='Field Service orders associated to this sale') fsm_order_count = fields.Float( string='Field Service Orders', compute='_compute_fsm_order_ids') + fsm_recurring_ids = fields.Many2many( + 'fsm.recurring', compute='_compute_fsm_recurring_ids', + string='Field Service Recurring orders associated to this sale') + fsm_recurring_count = fields.Float( + string='FSM Recurring Orders', compute='_compute_fsm_recurring_ids') @api.multi @api.depends('order_line.product_id') @@ -24,6 +33,14 @@ def _compute_fsm_order_ids(self): ('sale_line_id', 'in', order.order_line.ids)]) order.fsm_order_count = len(order.fsm_order_ids) + @api.multi + @api.depends('order_line.product_id') + def _compute_fsm_recurring_ids(self): + for order in self: + order.fsm_recurring_ids = self.env['fsm.recurring'].search([ + ('sale_line_id', 'in', order.order_line.ids)]) + order.fsm_recurring_count = len(order.fsm_recurring_ids) + @api.multi def action_confirm(self): """ On SO confirmation, some lines generate field service orders. """ @@ -46,6 +63,21 @@ def action_view_fsm_order(self): action = {'type': 'ir.actions.act_window_close'} return action + @api.multi + def action_view_fsm_recurring(self): + fsm_recurrings = self.mapped('fsm_recurring_ids') + action = self.env.ref('fieldservice.action_fsm_recurring').read()[0] + if len(fsm_recurrings) > 1: + action['domain'] = [('id', 'in', fsm_recurrings.ids)] + elif len(fsm_recurrings) == 1: + action['views'] = [(self.env.ref( + 'fieldservice.fsm_recurring_form_view').id, + 'form')] + action['res_id'] = fsm_recurrings.id + else: + action = {'type': 'ir.actions.act_window_close'} + return action + class SaleOrderLine(models.Model): _inherit = "sale.order.line" @@ -53,6 +85,9 @@ class SaleOrderLine(models.Model): fsm_order_id = fields.Many2one( 'fsm.order', 'Order', index=True, help="Field Service Order generated by the sales order item") + fsm_recurring_id = fields.Many2one( + 'fsm.recurring', 'Recurring Order', index=True, + help="Field Service Recurring Order generated by the sale order line") is_field_service = fields.Boolean( "Is a Field Service", compute='_compute_is_field_service', store=True, @@ -86,13 +121,29 @@ def _field_create_fsm_order_prepare_values(self): 'customer_id': self.order_id.partner_id.id, 'location_id': self.order_id.fsm_location_id.id, # 'request_early': , - # 'scheduled_date_start': , + 'scheduled_date_start': self.order_id.date_fsm_request, 'description': self.name, 'template_id': self.product_id.fsm_order_template_id.id, 'sale_line_id': self.id, 'company_id': self.company_id.id, } + def _field_create_fsm_recurring_prepare_values(self): + self.ensure_one() + template = self.product_id.fsm_recurring_template_id + return { + 'customer_id': self.order_id.partner_id.id, + 'location_id': self.order_id.fsm_location_id.id, + 'start_date': self.order_id.date_fsm_request, + 'fsm_recurring_template_id': template.id, + 'description': self.name + '\n ' + template.description, + 'max_orders': template.max_orders, + 'fsm_frequency_set_id': template.fsm_frequency_set_id, + 'fsm_order_template_id': template.fsm_order_template_id, + 'sale_line_id': self.id, + 'company_id': self.company_id.id, + } + @api.multi def _field_create_fsm_order(self): """ Generate fsm_order for the given so line, and link it. @@ -118,10 +169,40 @@ def _field_create_fsm_order(self): """) % (so_line.order_id.id, so_line.order_id.name, so_line.product_id.name) fsm_order.message_post(body=fsm_order_msg) - result[so_line.id] = fsm_order return result + @api.multi + def _field_create_fsm_recurring(self): + """ Generate fsm_recurring for the given so line, and link it. + :return a mapping with the so line id and its linked fsm_recurring + :rtype dict + """ + result = {} + for so_line in self: + # create fsm_recurring + values = so_line._field_create_fsm_recurring_prepare_values() + fsm_recurring = self.env['fsm.recurring'].sudo().create(values) + fsm_recurring.action_start() + so_line.write({'fsm_recurring_id': fsm_recurring.id}) + # post message on SO + msg_body = _( + """Field Service recurring Created (%s): %s + """) % (so_line.product_id.name, + fsm_recurring.id, + fsm_recurring.name) + so_line.order_id.message_post(body=msg_body) + # post message on fsm_recurring + fsm_recurring_msg = _( + """This recurring has been created from: %s (%s) + """) % (so_line.order_id.id, so_line.order_id.name, + so_line.product_id.name) + fsm_recurring.message_post(body=fsm_recurring_msg) + result[so_line.id] = fsm_recurring + return result + @api.multi def _field_find_fsm_order(self): """ Find the fsm_order generated by the so lines. If no fsm_order @@ -134,7 +215,6 @@ def _field_find_fsm_order(self): ('sale_line_id', 'in', self.ids)]) fsm_order_sol_mapping = { fsm_order.sale_line_id.id: fsm_order for fsm_order in fsm_orders} - result = {} for so_line in self: # If the SO was confirmed, cancelled, set to draft then confirmed, @@ -146,6 +226,32 @@ def _field_find_fsm_order(self): result[so_line.id] = fsm_order return result + @api.multi + def _field_find_fsm_recurring(self): + """ Find the fsm_recurring generated by the so lines. If no + fsm_recurring linked, it will be created automatically. + :return a mapping with the so line id and its linked + fsm_recurring + :rtype dict + """ + # one search for all so lines + fsm_recurrings = self.env['fsm.recurring'].search([ + ('sale_line_id', 'in', self.ids)]) + fsm_recurring_sol_mapping = { + fsm_recurring.sale_line_id.id: + fsm_recurring for fsm_recurring in fsm_recurrings} + result = {} + for so_line in self: + # If the SO was confirmed, cancelled, set to draft then confirmed, + # avoid creating a new fsm_recurring. + fsm_recurring = fsm_recurring_sol_mapping.get(so_line.id) + # If not found, create one fsm_recurring for the so line + if not fsm_recurring: + fsm_recurring = so_line._field_create_fsm_recurring( + )[so_line.id] + result[so_line.id] = fsm_recurring + return result + @api.multi def _field_service_generation(self): """ For service lines, create the field service order. If it already @@ -155,3 +261,6 @@ def _field_service_generation(self): # create order if so_line.product_id.field_service_tracking == 'order': so_line._field_find_fsm_order() + # create recurring order + elif so_line.product_id.field_service_tracking == 'recurring': + so_line._field_find_fsm_recurring() diff --git a/fieldservice_sale/views/fsm_recurring.xml b/fieldservice_sale/views/fsm_recurring.xml new file mode 100644 index 0000000000..aedaeb3826 --- /dev/null +++ b/fieldservice_sale/views/fsm_recurring.xml @@ -0,0 +1,19 @@ + + + + fsm.recurring + + + + + + + + diff --git a/fieldservice_sale/views/product.xml b/fieldservice_sale/views/product.xml index d6fd0cea69..1553a6a8fb 100644 --- a/fieldservice_sale/views/product.xml +++ b/fieldservice_sale/views/product.xml @@ -10,6 +10,8 @@ attrs="{'invisible': [('type','!=','service')]}"/> + diff --git a/fieldservice_sale/views/sale_order.xml b/fieldservice_sale/views/sale_order.xml index a23ed15b96..fa3538f07e 100644 --- a/fieldservice_sale/views/sale_order.xml +++ b/fieldservice_sale/views/sale_order.xml @@ -14,10 +14,23 @@ groups="fieldservice.group_fsm_user"> + + + + + +
    From 3080c72817afadcd526a080454cd03ba71a6f54c Mon Sep 17 00:00:00 2001 From: brian10048 Date: Wed, 22 May 2019 18:35:48 -0400 Subject: [PATCH 209/631] [FIX] fieldservice_sale errors Travis Typo, wrong model relationship Improved values prepation method for recurring Updated errors on SO smart button for recurring --- fieldservice_sale/README.rst | 30 ++++++++++++++----- fieldservice_sale/models/product.py | 2 +- fieldservice_sale/models/sale_order.py | 19 +++++++----- .../static/description/index.html | 26 ++++++++++++++-- fieldservice_sale/views/sale_order.xml | 2 +- 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/fieldservice_sale/README.rst b/fieldservice_sale/README.rst index 39d9b32177..69e0db232a 100644 --- a/fieldservice_sale/README.rst +++ b/fieldservice_sale/README.rst @@ -38,16 +38,22 @@ Installation To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -<<<<<<< HEAD https://github.com/OCA/geospatial/tree/12.0/base_geoengine -======= -https://github.com/OCA/geospatial/tree/11.0/base_geoengine ->>>>>>> [UPD] README.rst Configuration ============= -To use this module, you need to: +To setup a product for quoting and selling field service orders: + +* Go to Sales > Catalog > Products +* Create or select a product +* Set the Product Type to 'Service' under General Information tab +* Under Invoicing tab, set the Field Service Tracking option +* Select the FSM Order Template that will be used for creating FSM Orders when + a Sale Order is confirmed with this product + + +To setup a sales territory, you need to: * Go to Field Service > Master Data > Locations * Create or select a location @@ -56,7 +62,12 @@ To use this module, you need to: Usage ===== -Coming soon... +* Go to Sales app +* Create a new Quotation/Sale Order +* Set the FSM Location to be used +* On a Sale Order Line, select a product configured for field service orders +* Confirm the Sale Order +* Field Service Orders linked to SO lines are created Known issues / Roadmap ====================== @@ -89,6 +100,8 @@ Contributors * Maxime Chambreuil * Wolfgang Hall * Serpent Consulting Services Pvt. Ltd. +* Brian McMaster + Other credits ~~~~~~~~~~~~~ @@ -116,10 +129,13 @@ promote its widespread use. .. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px :target: https://github.com/max3903 :alt: max3903 +.. |maintainer-brian10048| image:: https://github.com/brian10048.png?size=40px + :target: https://github.com/brian10048 + :alt: brian10048 Current `maintainers `__: -|maintainer-wolfhall| |maintainer-max3903| +|maintainer-wolfhall| |maintainer-max3903| |maintainer-brian10048| This module is part of the `OCA/field-service `_ project on GitHub. diff --git a/fieldservice_sale/models/product.py b/fieldservice_sale/models/product.py index 241a3d153c..e96a2fbdd7 100644 --- a/fieldservice_sale/models/product.py +++ b/fieldservice_sale/models/product.py @@ -21,7 +21,7 @@ class ProductTemplate(models.Model): 'fsm.template', 'Field Service Order Template', help="Select the field service order template to be created") fsm_recurring_template_id = fields.Many2one( - 'fsm.recurring', 'Field Service Recurring Template', + 'fsm.recurring.template', 'Field Service Recurring Template', help="Select a field service recurring order template to be created") @api.onchange('field_service_tracking') diff --git a/fieldservice_sale/models/sale_order.py b/fieldservice_sale/models/sale_order.py index a3e37f09d0..0262d65d0c 100644 --- a/fieldservice_sale/models/sale_order.py +++ b/fieldservice_sale/models/sale_order.py @@ -66,13 +66,15 @@ def action_view_fsm_order(self): @api.multi def action_view_fsm_recurring(self): fsm_recurrings = self.mapped('fsm_recurring_ids') - action = self.env.ref('fieldservice.action_fsm_recurring').read()[0] + action = self.env.ref( + 'fieldservice_recurring.action_fsm_recurring').read()[0] if len(fsm_recurrings) > 1: action['domain'] = [('id', 'in', fsm_recurrings.ids)] elif len(fsm_recurrings) == 1: - action['views'] = [(self.env.ref( - 'fieldservice.fsm_recurring_form_view').id, - 'form')] + action['views'] = [ + (self.env.ref( + 'fieldservice_recurring.fsm_recurring_form_view').id, + 'form')] action['res_id'] = fsm_recurrings.id else: action = {'type': 'ir.actions.act_window_close'} @@ -131,15 +133,18 @@ def _field_create_fsm_order_prepare_values(self): def _field_create_fsm_recurring_prepare_values(self): self.ensure_one() template = self.product_id.fsm_recurring_template_id + note = self.name + if template.description: + note += '\n ' + template.description return { 'customer_id': self.order_id.partner_id.id, 'location_id': self.order_id.fsm_location_id.id, 'start_date': self.order_id.date_fsm_request, 'fsm_recurring_template_id': template.id, - 'description': self.name + '\n ' + template.description, + 'description': note, 'max_orders': template.max_orders, - 'fsm_frequency_set_id': template.fsm_frequency_set_id, - 'fsm_order_template_id': template.fsm_order_template_id, + 'fsm_frequency_set_id': template.fsm_frequency_set_id.id, + 'fsm_order_template_id': template.fsm_order_template_id.id, 'sale_line_id': self.id, 'company_id': self.company_id.id, } diff --git a/fieldservice_sale/static/description/index.html b/fieldservice_sale/static/description/index.html index 23490becee..1daf759a46 100644 --- a/fieldservice_sale/static/description/index.html +++ b/fieldservice_sale/static/description/index.html @@ -394,7 +394,19 @@

    Installation

    Configuration

    -

    To use this module, you need to:

    +

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

    +
      +
    • Go to Sales > Catalog > Products
    • +
    • Create or select a product
    • +
    • Set the Product Type to ???Service??? under General Information tab
    • +
    • Under Invoicing tab, set the Field Service Tracking option
    • +
    • +
      Select the FSM Order Template that will be used for creating FSM Orders when
      +
      a Sale Order is confirmed with this product
      +
      +
    • +
    +

    To setup a sales territory, you need to:

    • Go to Field Service > Master Data > Locations
    • Create or select a location
    • @@ -403,7 +415,14 @@

      Configuration

    Usage

    -

    Coming soon???

    +
      +
    • Go to Sales app
    • +
    • Create a new Quotation/Sale Order
    • +
    • Set the FSM Location to be used
    • +
    • On a Sale Order Line, select a product configured for field service orders
    • +
    • Confirm the Sale Order
    • +
    • Field Service Orders linked to SO lines are created
    • +

    Known issues / Roadmap

    @@ -433,6 +452,7 @@

    Contributors

  • Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
  • Wolfgang Hall <whall@opensourceintegrators.com>
  • Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
  • +
  • Brian McMaster <brian@mcmpest.com>
  • @@ -450,8 +470,10 @@

    Maintainers

    mission is to support the collaborative development of Odoo features and promote its widespread use.

    Current maintainers:

    +<<<<<<< HEAD

    wolfhall max3903

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

    +

    wolfhall max3903 brian10048

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

    diff --git a/fieldservice_sale/views/sale_order.xml b/fieldservice_sale/views/sale_order.xml index fa3538f07e..16d5f6699f 100644 --- a/fieldservice_sale/views/sale_order.xml +++ b/fieldservice_sale/views/sale_order.xml @@ -17,7 +17,7 @@
    - diff --git a/fieldservice_sale/views/product_template.xml b/fieldservice_sale/views/product_template.xml index f7e5e51307..a1da19f361 100644 --- a/fieldservice_sale/views/product_template.xml +++ b/fieldservice_sale/views/product_template.xml @@ -2,12 +2,14 @@ product.template.fieldservice.form product.template - + - - + + diff --git a/fieldservice_sale/views/res_config_settings.xml b/fieldservice_sale/views/res_config_settings.xml index 5ccce52562..61ebb9c951 100644 --- a/fieldservice_sale/views/res_config_settings.xml +++ b/fieldservice_sale/views/res_config_settings.xml @@ -1,12 +1,11 @@ - - + - - - + + + + - diff --git a/fieldservice_sale/views/sale_order.xml b/fieldservice_sale/views/sale_order.xml index ef445200a6..fa628c2f6b 100644 --- a/fieldservice_sale/views/sale_order.xml +++ b/fieldservice_sale/views/sale_order.xml @@ -2,20 +2,26 @@ sale.order.form.sale.fieldservice sale.order - + - - + From 8498d4af2fd3688ba9c41dc8f5208d1d98e19ab3 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Sat, 18 Jul 2020 00:08:36 -0400 Subject: [PATCH 246/631] [MIG] fieldservice_sale: Migration to 13.0 --- fieldservice_sale/__manifest__.py | 2 +- fieldservice_sale/models/sale_order.py | 6 ------ fieldservice_sale/models/sale_order_line.py | 6 ------ fieldservice_sale/readme/INSTALL.rst | 2 +- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index 7f47a70077..94b8f9007c 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Field Service - Sales", - "version": "12.0.2.5.1", + "version": "13.0.1.0.0", "summary": "Sell field services.", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", diff --git a/fieldservice_sale/models/sale_order.py b/fieldservice_sale/models/sale_order.py index 571e0317c0..30c06f7e3c 100644 --- a/fieldservice_sale/models/sale_order.py +++ b/fieldservice_sale/models/sale_order.py @@ -22,7 +22,6 @@ class SaleOrder(models.Model): string="FSM Orders", compute="_compute_fsm_order_ids" ) - @api.multi @api.depends("order_line") def _compute_fsm_order_ids(self): for order in self: @@ -79,7 +78,6 @@ def _field_create_fsm_order_prepare_values(self): "company_id": self.company_id.id, } - @api.multi def _field_create_fsm_order(self): """ Generate fsm_order for the given Sale Order, and link it. :return a mapping with the sale order id and its linked fsm_order @@ -113,7 +111,6 @@ def _field_create_fsm_order(self): result[so.id] = fsm_order return result - @api.multi def _field_find_fsm_order(self): """ Find the fsm_order generated by the Sale Order. If no fsm_order linked, it will be created automatically. @@ -138,7 +135,6 @@ def _field_find_fsm_order(self): result[so.id] = fsm_order return result - @api.multi def _action_confirm(self): """ On SO confirmation, some lines generate field service orders. """ result = super(SaleOrder, self)._action_confirm() @@ -150,7 +146,6 @@ def _action_confirm(self): self.order_line._field_service_generation() return result - @api.multi def action_invoice_create(self, grouped=False, final=False): invoice_ids = super().action_invoice_create(grouped, final) result = invoice_ids or [] @@ -205,7 +200,6 @@ def action_invoice_create(self, grouped=False, final=False): result.append(new.id) return result - @api.multi def action_view_fsm_order(self): fsm_orders = self.mapped("fsm_order_ids") action = self.env.ref("fieldservice.action_fsm_dash_order").read()[0] diff --git a/fieldservice_sale/models/sale_order_line.py b/fieldservice_sale/models/sale_order_line.py index cbc793aac6..db320def81 100644 --- a/fieldservice_sale/models/sale_order_line.py +++ b/fieldservice_sale/models/sale_order_line.py @@ -25,7 +25,6 @@ def _compute_product_updatable(self): else: super(SaleOrderLine, line)._compute_product_updatable() - @api.multi @api.depends("product_id") def _compute_qty_delivered_method(self): super(SaleOrderLine, self)._compute_qty_delivered_method() @@ -33,7 +32,6 @@ def _compute_qty_delivered_method(self): if not line.is_expense and line.product_id.field_service_tracking == "line": line.qty_delivered_method = "field_service" - @api.multi @api.depends("fsm_order_id.stage_id") def _compute_qty_delivered(self): super(SaleOrderLine, self)._compute_qty_delivered() @@ -73,7 +71,6 @@ def _field_create_fsm_order_prepare_values(self): "company_id": self.company_id.id, } - @api.multi def _field_create_fsm_order(self): """ Generate fsm_order for the given so line, and link it. :return a mapping with the so line id and its linked fsm_order @@ -108,7 +105,6 @@ def _field_create_fsm_order(self): result[so_line.id] = fsm_order return result - @api.multi def _field_find_fsm_order(self): """ Find the fsm_order generated by the so lines. If no fsm_order linked, it will be created automatically. @@ -132,7 +128,6 @@ def _field_find_fsm_order(self): res[so_line.id] = fsm_order return res - @api.multi def _field_service_generation(self): """ For service lines, create the field service order. If it already exists, it simply links the existing one to the line. @@ -145,7 +140,6 @@ def _field_service_generation(self): if rec.product_id.field_service_tracking == "line": rec._field_find_fsm_order() - @api.multi def _prepare_invoice_line(self, qty): res = super()._prepare_invoice_line(qty) res.update({"fsm_order_id": self.fsm_order_id.id}) diff --git a/fieldservice_sale/readme/INSTALL.rst b/fieldservice_sale/readme/INSTALL.rst index 8571f65376..e5355c4b0f 100644 --- a/fieldservice_sale/readme/INSTALL.rst +++ b/fieldservice_sale/readme/INSTALL.rst @@ -1,4 +1,4 @@ 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/12.0/base_geoengine +https://github.com/OCA/geospatial/tree/13.0/base_geoengine From 98a1128237f8043960ffb7c5f67f8705a724b34c Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 5 Oct 2020 16:31:29 -0700 Subject: [PATCH 247/631] [FIX] fieldservice_sale migration changes --- fieldservice_sale/__manifest__.py | 2 +- fieldservice_sale/models/__init__.py | 2 +- fieldservice_sale/models/fsm_location.py | 2 +- .../models/{fsm_branch.py => res_branch.py} | 4 ++-- fieldservice_sale/readme/CONTRIBUTORS.rst | 1 + fieldservice_sale/views/fsm_branch.xml | 12 ------------ fieldservice_sale/views/res_branch.xml | 12 ++++++++++++ fieldservice_sale/views/res_config_settings.xml | 3 --- 8 files changed, 18 insertions(+), 20 deletions(-) rename fieldservice_sale/models/{fsm_branch.py => res_branch.py} (84%) delete mode 100644 fieldservice_sale/views/fsm_branch.xml create mode 100644 fieldservice_sale/views/res_branch.xml diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index 94b8f9007c..1659be6b22 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -10,10 +10,10 @@ "depends": ["fieldservice", "sale_management", "fieldservice_account"], "data": [ "security/ir.model.access.csv", - "views/fsm_branch.xml", "views/fsm_location.xml", "views/fsm_order.xml", "views/product_template.xml", + "views/res_branch.xml", "views/sale_order.xml", "views/res_config_settings.xml", ], diff --git a/fieldservice_sale/models/__init__.py b/fieldservice_sale/models/__init__.py index fda80ebcfa..dfe9d6412e 100644 --- a/fieldservice_sale/models/__init__.py +++ b/fieldservice_sale/models/__init__.py @@ -2,10 +2,10 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ( - fsm_branch, fsm_location, fsm_order, product_template, + res_branch, sale_order_line, sale_order, ) diff --git a/fieldservice_sale/models/fsm_location.py b/fieldservice_sale/models/fsm_location.py index eb1d302ae0..be5cb6f85f 100644 --- a/fieldservice_sale/models/fsm_location.py +++ b/fieldservice_sale/models/fsm_location.py @@ -6,4 +6,4 @@ class FSMLocation(models.Model): _inherit = "fsm.location" - sales_territory_id = fields.Many2one("fsm.territory", string="Sales Territory") + sales_territory_id = fields.Many2one("res.territory", string="Sales Territory") diff --git a/fieldservice_sale/models/fsm_branch.py b/fieldservice_sale/models/res_branch.py similarity index 84% rename from fieldservice_sale/models/fsm_branch.py rename to fieldservice_sale/models/res_branch.py index a8fadfee49..e9a601932e 100644 --- a/fieldservice_sale/models/fsm_branch.py +++ b/fieldservice_sale/models/res_branch.py @@ -3,8 +3,8 @@ from odoo import fields, models -class FSMBranch(models.Model): - _inherit = "fsm.branch" +class ResBranch(models.Model): + _inherit = "res.branch" pricelist_id = fields.Many2one( "product.pricelist", diff --git a/fieldservice_sale/readme/CONTRIBUTORS.rst b/fieldservice_sale/readme/CONTRIBUTORS.rst index 44ba2fbfcb..674036d84b 100644 --- a/fieldservice_sale/readme/CONTRIBUTORS.rst +++ b/fieldservice_sale/readme/CONTRIBUTORS.rst @@ -3,6 +3,7 @@ * Steve Campbell * Maxime Chambreuil * Wolfgang Hall + * Raphael Lee * Serpent Consulting Services Pvt. Ltd. * Brian McMaster diff --git a/fieldservice_sale/views/fsm_branch.xml b/fieldservice_sale/views/fsm_branch.xml deleted file mode 100644 index 6f46faa6a1..0000000000 --- a/fieldservice_sale/views/fsm_branch.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - fsm.branch.form.pricelist - fsm.branch - - - - - - - - diff --git a/fieldservice_sale/views/res_branch.xml b/fieldservice_sale/views/res_branch.xml new file mode 100644 index 0000000000..9629a57a15 --- /dev/null +++ b/fieldservice_sale/views/res_branch.xml @@ -0,0 +1,12 @@ + + + res.branch.form.pricelist + res.branch + + + + + + + + diff --git a/fieldservice_sale/views/res_config_settings.xml b/fieldservice_sale/views/res_config_settings.xml index 61ebb9c951..7d57014d73 100644 --- a/fieldservice_sale/views/res_config_settings.xml +++ b/fieldservice_sale/views/res_config_settings.xml @@ -3,9 +3,6 @@ - - - From 62b167c6bb6d3ba86e23b609b975e1da85b7ee76 Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 7 Oct 2020 15:08:23 -0700 Subject: [PATCH 248/631] [FIX] invoice creation from SO --- .../migrations/12.0.2.0.0/pre-migration.py | 12 ---- fieldservice_sale/models/sale_order.py | 72 ++++++++++++++----- fieldservice_sale/models/sale_order_line.py | 1 - .../tests/test_fsm_sale_order.py | 18 ++--- 4 files changed, 60 insertions(+), 43 deletions(-) delete mode 100644 fieldservice_sale/migrations/12.0.2.0.0/pre-migration.py diff --git a/fieldservice_sale/migrations/12.0.2.0.0/pre-migration.py b/fieldservice_sale/migrations/12.0.2.0.0/pre-migration.py deleted file mode 100644 index 3a7530b375..0000000000 --- a/fieldservice_sale/migrations/12.0.2.0.0/pre-migration.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (C) 2019, Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - - -def migrate(env, version): - if not version: - return - - env.execute( - "UPDATE product_template SET field_service_tracking = 'sale' " - "WHERE field_service_tracking = 'order';" - ) diff --git a/fieldservice_sale/models/sale_order.py b/fieldservice_sale/models/sale_order.py index 30c06f7e3c..720963f4e7 100644 --- a/fieldservice_sale/models/sale_order.py +++ b/fieldservice_sale/models/sale_order.py @@ -146,58 +146,92 @@ def _action_confirm(self): self.order_line._field_service_generation() return result - def action_invoice_create(self, grouped=False, final=False): - invoice_ids = super().action_invoice_create(grouped, final) - result = invoice_ids or [] + def _create_invoices(self, grouped=False, final=False): + Invoices = self.env["account.move"] + InvoiceLines = self.env["account.move.line"] + invoice_ids = super()._create_invoices(grouped, final) + result = invoice_ids or Invoices - for invoice_id in invoice_ids: - invoice = self.env["account.invoice"].browse(invoice_id) + for invoice in invoice_ids: # check for invoice lines with product # field_service_tracking = line - lines_by_line = self.env["account.invoice.line"].search( + lines_by_line = InvoiceLines.search( [ - ("invoice_id", "=", invoice_id), + ("move_id", "=", invoice.id), ("product_id.field_service_tracking", "=", "line"), + ("exclude_from_invoice_tab", "=", False), ] ) if len(lines_by_line) > 0: + # Create a new invoice for each "line" product line_count = len(invoice.invoice_line_ids) for i in range(len(lines_by_line)): duplicate = True if ((i + 1) == len(lines_by_line)) and ((i + 1) == line_count): + # Don't create a new invoice if there's only 1 product duplicate = False inv = invoice if duplicate: inv = invoice.copy() - inv.write({"invoice_line_ids": [(6, 0, [])]}) - inv.compute_taxes() - invoice.compute_taxes() - lines_by_line[i].invoice_id = inv.id - result.append(inv.id) + inv.with_context(check_move_validity=False).write( + {'invoice_line_ids': [(6, 0, [])]} + ) + lines_by_line[i].with_context( + check_move_validity=False + ).move_id = inv.id + inv.with_context( + check_move_validity=False + )._recompute_dynamic_lines( + recompute_all_taxes=True, recompute_tax_base_amount=True + ) + invoice.with_context( + check_move_validity=False + )._recompute_dynamic_lines( + recompute_all_taxes=True, recompute_tax_base_amount=True + ) + result |= inv inv.fsm_order_ids = [(4, lines_by_line[i].fsm_order_id.id)] # check for invoice lines with product # field_service_tracking = sale - lines_by_sale = self.env["account.invoice.line"].search( + lines_by_sale = InvoiceLines.search( [ - ("invoice_id", "=", invoice_id), + ("move_id", "=", invoice.id), ("product_id.field_service_tracking", "=", "sale"), + ("exclude_from_invoice_tab", "=", False), ] ) if len(lines_by_sale) > 0: + # Create a new invoice for "sale" products fsm_orders = self.env["fsm.order"].search( [("sale_id", "in", self.ids), ("sale_line_id", "=", False)] ) if len(lines_by_sale) == len(invoice.invoice_line_ids): + # Don't create a new invoice if all products are "sale" invoice.fsm_order_ids = [ (4, fsm_order.id) for fsm_order in fsm_orders ] elif len(invoice.invoice_line_ids) > len(lines_by_sale): new = invoice.copy() - new.write({"invoice_line_ids": [(6, 0, [])]}) - lines_by_sale.write({"invoice_id": new.id}) - new.compute_taxes() - invoice.compute_taxes() - result.append(new.id) + new.fsm_order_ids = [ + (4, fsm_order.id) for fsm_order in fsm_orders + ] + new.with_context(check_move_validity=False).write( + {'invoice_line_ids': [(6, 0, [])]} + ) + lines_by_sale.with_context(check_move_validity=False).write( + {'move_id': new.id} + ) + new.with_context( + check_move_validity=False + )._recompute_dynamic_lines( + recompute_all_taxes=True, recompute_tax_base_amount=True + ) + invoice.with_context( + check_move_validity=False + )._recompute_dynamic_lines( + recompute_all_taxes=True, recompute_tax_base_amount=True + ) + result |= new return result def action_view_fsm_order(self): diff --git a/fieldservice_sale/models/sale_order_line.py b/fieldservice_sale/models/sale_order_line.py index db320def81..a6274407ac 100644 --- a/fieldservice_sale/models/sale_order_line.py +++ b/fieldservice_sale/models/sale_order_line.py @@ -56,7 +56,6 @@ def _field_create_fsm_order_prepare_values(self): self.ensure_one() categories = self.product_id.fsm_order_template_id.category_ids return { - "customer_id": self.order_id.partner_id.id, "location_id": self.order_id.fsm_location_id.id, "location_directions": self.order_id.fsm_location_id.direction, "request_early": self.order_id.expected_date, diff --git a/fieldservice_sale/tests/test_fsm_sale_order.py b/fieldservice_sale/tests/test_fsm_sale_order.py index c74fc5b549..6251154a43 100644 --- a/fieldservice_sale/tests/test_fsm_sale_order.py +++ b/fieldservice_sale/tests/test_fsm_sale_order.py @@ -207,9 +207,8 @@ def test_sale_order_1(self): fsm_order.action_complete() # Invoice the order - Invoice = self.env["account.invoice"] - inv_id = self.sale_order_1.action_invoice_create() - invoice = Invoice.browse(inv_id) + Invoice = self.env["account.move"] + invoice = self.sale_order_1._create_invoices() # 1 invoices created self.assertEqual( len(invoice.ids), 1, "FSM Sale: Sale Order 1 should create 1 invoice" @@ -256,9 +255,8 @@ def test_sale_order_2(self): ) # Invoice the order - Invoice = self.env["account.invoice"] - inv_id = self.sale_order_2.action_invoice_create() - invoice = Invoice.browse(inv_id) + Invoice = self.env["account.move"] + invoice = self.sale_order_2._create_invoices() # 1 invoice created self.assertEqual( len(invoice.ids), 1, "FSM Sale: Sale Order 2 should create 1 invoice" @@ -321,8 +319,7 @@ def test_sale_order_3(self): # Invoice the sale order Invoice = self.env["account.invoice"] - inv_id = self.sale_order_3.action_invoice_create() - invoices = Invoice.browse(inv_id) + invoices = self.sale_order_3._create_invoices() # 2 invoices created self.assertEqual( len(invoices.ids), 2, "FSM Sale: Sale Order 3 should create 2 invoices" @@ -409,9 +406,8 @@ def test_sale_order_4(self): # qty_delivered does not update for FSM orders linked only to the sale # Invoice the sale order - Invoice = self.env["account.invoice"] - inv_id = self.sale_order_4.action_invoice_create() - invoices = Invoice.browse(inv_id) + Invoice = self.env["account.move"] + invoices = self.sale_order_4._create_invoices() # 3 invoices created self.assertEqual( len(invoices.ids), 3, "FSM Sale: Sale Order 4 should create 3 invoices" From dd9747c95253ee62064e7a3ec015dcf4957af2a9 Mon Sep 17 00:00:00 2001 From: Brian McMaster Date: Thu, 22 Oct 2020 16:22:50 -0400 Subject: [PATCH 249/631] [IMP] pre-commit, black --- fieldservice_sale/models/sale_order.py | 24 +++++----- .../tests/test_fsm_sale_order.py | 46 +++++++++---------- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/fieldservice_sale/models/sale_order.py b/fieldservice_sale/models/sale_order.py index 720963f4e7..a52b37a67f 100644 --- a/fieldservice_sale/models/sale_order.py +++ b/fieldservice_sale/models/sale_order.py @@ -79,9 +79,9 @@ def _field_create_fsm_order_prepare_values(self): } def _field_create_fsm_order(self): - """ Generate fsm_order for the given Sale Order, and link it. - :return a mapping with the sale order id and its linked fsm_order - :rtype dict + """Generate fsm_order for the given Sale Order, and link it. + :return a mapping with the sale order id and its linked fsm_order + :rtype dict """ result = {} for so in self: @@ -112,10 +112,10 @@ def _field_create_fsm_order(self): return result def _field_find_fsm_order(self): - """ Find the fsm_order generated by the Sale Order. If no fsm_order - linked, it will be created automatically. - :return a mapping with the so line id and its linked fsm_order - :rtype dict + """Find the fsm_order generated by the Sale Order. If no fsm_order + linked, it will be created automatically. + :return a mapping with the so line id and its linked fsm_order + :rtype dict """ # one search for all Sale Orders fsm_orders = self.env["fsm.order"].search( @@ -174,7 +174,7 @@ def _create_invoices(self, grouped=False, final=False): if duplicate: inv = invoice.copy() inv.with_context(check_move_validity=False).write( - {'invoice_line_ids': [(6, 0, [])]} + {"invoice_line_ids": [(6, 0, [])]} ) lines_by_line[i].with_context( check_move_validity=False @@ -212,14 +212,12 @@ def _create_invoices(self, grouped=False, final=False): ] elif len(invoice.invoice_line_ids) > len(lines_by_sale): new = invoice.copy() - new.fsm_order_ids = [ - (4, fsm_order.id) for fsm_order in fsm_orders - ] + new.fsm_order_ids = [(4, fsm_order.id) for fsm_order in fsm_orders] new.with_context(check_move_validity=False).write( - {'invoice_line_ids': [(6, 0, [])]} + {"invoice_line_ids": [(6, 0, [])]} ) lines_by_sale.with_context(check_move_validity=False).write( - {'move_id': new.id} + {"move_id": new.id} ) new.with_context( check_move_validity=False diff --git a/fieldservice_sale/tests/test_fsm_sale_order.py b/fieldservice_sale/tests/test_fsm_sale_order.py index 6251154a43..f04dd0a29b 100644 --- a/fieldservice_sale/tests/test_fsm_sale_order.py +++ b/fieldservice_sale/tests/test_fsm_sale_order.py @@ -143,9 +143,9 @@ def setUpClass(cls): ) def _isp_account_installed(self): - """ Checks if module is installed which will require more - logic for the tests. - :return Boolean indicating the installed status of the module + """Checks if module is installed which will require more + logic for the tests. + :return Boolean indicating the installed status of the module """ result = False isp_account_module = self.env["ir.module.module"].search( @@ -156,9 +156,9 @@ def _isp_account_installed(self): return result def _fulfill_order(self, order): - """ Extra logic required to fulfill FSM order status and prevent - validation error when attempting to complete the FSM order - :return FSM Order with additional fields set + """Extra logic required to fulfill FSM order status and prevent + validation error when attempting to complete the FSM order + :return FSM Order with additional fields set """ analytic_account = self.env.ref("analytic.analytic_administratif") self.test_location.analytic_account_id = analytic_account.id @@ -177,9 +177,9 @@ def _fulfill_order(self, order): return order def test_sale_order_1(self): - """ Test the sales order 1 flow from sale to invoice. - - One FSM order linked to the Sale Order should be created. - - One Invoice linked to the FSM Order should be created. + """Test the sales order 1 flow from sale to invoice. + - One FSM order linked to the Sale Order should be created. + - One Invoice linked to the FSM Order should be created. """ # Confirm the sale order self.sale_order_1.action_confirm() @@ -207,7 +207,6 @@ def test_sale_order_1(self): fsm_order.action_complete() # Invoice the order - Invoice = self.env["account.move"] invoice = self.sale_order_1._create_invoices() # 1 invoices created self.assertEqual( @@ -219,10 +218,10 @@ def test_sale_order_1(self): ) def test_sale_order_2(self): - """ Test the sales order 2 flow from sale to invoice. - - One FSM order linked to the Sale Order Line should be created. - - The FSM Order should update qty_delivered when completed. - - One Invoice linked to the FSM Order should be created. + """Test the sales order 2 flow from sale to invoice. + - One FSM order linked to the Sale Order Line should be created. + - The FSM Order should update qty_delivered when completed. + - One Invoice linked to the FSM Order should be created. """ sol = self.sol_service_per_line_1 # Confirm the sale order @@ -255,7 +254,6 @@ def test_sale_order_2(self): ) # Invoice the order - Invoice = self.env["account.move"] invoice = self.sale_order_2._create_invoices() # 1 invoice created self.assertEqual( @@ -267,10 +265,10 @@ def test_sale_order_2(self): ) def test_sale_order_3(self): - """ Test sale order 3 flow from sale to invoice. - - An FSM order should be created for each Sale Order Line. - - The FSM Order should update qty_delivered when completed. - - An Invoice linked to each FSM Order should be created. + """Test sale order 3 flow from sale to invoice. + - An FSM order should be created for each Sale Order Line. + - The FSM Order should update qty_delivered when completed. + - An Invoice linked to each FSM Order should be created. """ sol1 = self.sol_service_per_line_2 sol2 = self.sol_service_per_line_3 @@ -318,7 +316,6 @@ def test_sale_order_3(self): ) # Invoice the sale order - Invoice = self.env["account.invoice"] invoices = self.sale_order_3._create_invoices() # 2 invoices created self.assertEqual( @@ -337,10 +334,10 @@ def test_sale_order_3(self): ) def test_sale_order_4(self): - """ Test sale order 4 flow from sale to invoice. - - Two FSM orders linked to the Sale Order Lines should be created. - - One FSM order linked to the Sale Order should be created. - - Three Invoices should be created (One for each FSM Order). + """Test sale order 4 flow from sale to invoice. + - Two FSM orders linked to the Sale Order Lines should be created. + - One FSM order linked to the Sale Order should be created. + - Three Invoices should be created (One for each FSM Order). """ sol1 = self.sol_service_per_line_4 sol2 = self.sol_service_per_line_5 @@ -406,7 +403,6 @@ def test_sale_order_4(self): # qty_delivered does not update for FSM orders linked only to the sale # Invoice the sale order - Invoice = self.env["account.move"] invoices = self.sale_order_4._create_invoices() # 3 invoices created self.assertEqual( From 1b5cf425776aac2618660ae4b72763e1ba3b9391 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Thu, 15 Apr 2021 13:45:46 +0530 Subject: [PATCH 250/631] [FIX] Travis --- fieldservice_sale/__manifest__.py | 2 +- fieldservice_sale/models/sale_order_line.py | 18 +++++++++--------- .../tests/test_fsm_sale_onchange_partner.py | 6 +++--- .../odoo/addons/fieldservice_sale | 1 + setup/fieldservice_sale/setup.py | 6 ++++++ 5 files changed, 20 insertions(+), 13 deletions(-) create mode 120000 setup/fieldservice_sale/odoo/addons/fieldservice_sale create mode 100644 setup/fieldservice_sale/setup.py diff --git a/fieldservice_sale/__manifest__.py b/fieldservice_sale/__manifest__.py index 1659be6b22..94495b6413 100644 --- a/fieldservice_sale/__manifest__.py +++ b/fieldservice_sale/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Field Service - Sales", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "summary": "Sell field services.", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", diff --git a/fieldservice_sale/models/sale_order_line.py b/fieldservice_sale/models/sale_order_line.py index a6274407ac..4c7c4bccc4 100644 --- a/fieldservice_sale/models/sale_order_line.py +++ b/fieldservice_sale/models/sale_order_line.py @@ -71,9 +71,9 @@ def _field_create_fsm_order_prepare_values(self): } def _field_create_fsm_order(self): - """ Generate fsm_order for the given so line, and link it. - :return a mapping with the so line id and its linked fsm_order - :rtype dict + """Generate fsm_order for the given so line, and link it. + :return a mapping with the so line id and its linked fsm_order + :rtype dict """ result = {} for so_line in self: @@ -105,10 +105,10 @@ def _field_create_fsm_order(self): return result def _field_find_fsm_order(self): - """ Find the fsm_order generated by the so lines. If no fsm_order - linked, it will be created automatically. - :return a mapping with the so line id and its linked fsm_order - :rtype dict + """Find the fsm_order generated by the so lines. If no fsm_order + linked, it will be created automatically. + :return a mapping with the so line id and its linked fsm_order + :rtype dict """ for rec in self: # one search for all so lines @@ -128,8 +128,8 @@ def _field_find_fsm_order(self): return res def _field_service_generation(self): - """ For service lines, create the field service order. If it already - exists, it simply links the existing one to the line. + """For service lines, create the field service order. If it already + exists, it simply links the existing one to the line. """ for rec in self: if rec.product_id.field_service_tracking == "sale": diff --git a/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py b/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py index a856900b04..9c66f21fa2 100644 --- a/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py +++ b/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py @@ -34,7 +34,7 @@ def setUp(self): self.location = self.env.ref("fieldservice.location_1") def test_1_autofill_so_fsm_location(self): - """ First case : + """First case : - commercial_partner IS NOT a fsm_location - partner IS a fsm_location - shipping_partner IS NOT a fsm_location @@ -49,7 +49,7 @@ def test_1_autofill_so_fsm_location(self): self.assertEqual(self.so.fsm_location_id.id, self.location.id) def test_2_autofill_so_fsm_location(self): - """ Second case : + """Second case : - commercial_partner IS NOT a fsm_location - partner IS NOT a fsm_location - shipping_partner IS a fsm_location @@ -64,7 +64,7 @@ def test_2_autofill_so_fsm_location(self): self.assertEqual(self.so.fsm_location_id.id, self.location.id) def test_3_autofill_so_fsm_location(self): - """ Third case : + """Third case : - commercial_partner IS a fsm_location - partner IS NOT a fsm_location - shipping_partner IS NOT a fsm_location diff --git a/setup/fieldservice_sale/odoo/addons/fieldservice_sale b/setup/fieldservice_sale/odoo/addons/fieldservice_sale new file mode 120000 index 0000000000..a4b9cc32e8 --- /dev/null +++ b/setup/fieldservice_sale/odoo/addons/fieldservice_sale @@ -0,0 +1 @@ +../../../../fieldservice_sale \ No newline at end of file diff --git a/setup/fieldservice_sale/setup.py b/setup/fieldservice_sale/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/fieldservice_sale/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 75e318539a87e3bdaada4c63452ce1ba1e4fda86 Mon Sep 17 00:00:00 2001 From: Nikul Chaudhary Date: Fri, 13 Dec 2019 17:27:11 +0530 Subject: [PATCH 251/631] [ADD] Added a fieldservice_route v12 --- fieldservice_route/README.rst | 114 +++++ fieldservice_route/__init__.py | 3 + fieldservice_route/__manifest__.py | 34 ++ .../data/fsm_route_day_data.xml | 31 ++ fieldservice_route/data/fsm_stage_data.xml | 19 + fieldservice_route/data/ir_sequence.xml | 12 + .../i18n/fieldservice_route.pot | 323 +++++++++++++ fieldservice_route/models/__init__.py | 8 + fieldservice_route/models/fsm_location.py | 11 + fieldservice_route/models/fsm_order.py | 55 +++ fieldservice_route/models/fsm_route.py | 15 + fieldservice_route/models/fsm_route_day.py | 21 + .../models/fsm_route_dayroute.py | 63 +++ fieldservice_route/models/fsm_stage.py | 11 + fieldservice_route/readme/CONFIGURE.rst | 6 + fieldservice_route/readme/CONTRIBUTORS.rst | 2 + fieldservice_route/readme/CREDITS.rst | 4 + fieldservice_route/readme/DESCRIPTION.rst | 4 + fieldservice_route/readme/USAGE.rst | 7 + .../security/ir.model.access.csv | 7 + .../static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 454 ++++++++++++++++++ fieldservice_route/tests/__init__.py | 3 + fieldservice_route/tests/test_fsm_order.py | 36 ++ fieldservice_route/views/fsm_location.xml | 14 + fieldservice_route/views/fsm_order.xml | 17 + fieldservice_route/views/fsm_route.xml | 48 ++ fieldservice_route/views/fsm_route_day.xml | 39 ++ .../views/fsm_route_dayroute.xml | 122 +++++ fieldservice_route/views/menu.xml | 28 ++ 30 files changed, 1511 insertions(+) create mode 100644 fieldservice_route/README.rst create mode 100644 fieldservice_route/__init__.py create mode 100644 fieldservice_route/__manifest__.py create mode 100644 fieldservice_route/data/fsm_route_day_data.xml create mode 100644 fieldservice_route/data/fsm_stage_data.xml create mode 100644 fieldservice_route/data/ir_sequence.xml create mode 100644 fieldservice_route/i18n/fieldservice_route.pot create mode 100644 fieldservice_route/models/__init__.py create mode 100644 fieldservice_route/models/fsm_location.py create mode 100644 fieldservice_route/models/fsm_order.py create mode 100644 fieldservice_route/models/fsm_route.py create mode 100644 fieldservice_route/models/fsm_route_day.py create mode 100644 fieldservice_route/models/fsm_route_dayroute.py create mode 100644 fieldservice_route/models/fsm_stage.py create mode 100644 fieldservice_route/readme/CONFIGURE.rst create mode 100644 fieldservice_route/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_route/readme/CREDITS.rst create mode 100644 fieldservice_route/readme/DESCRIPTION.rst create mode 100644 fieldservice_route/readme/USAGE.rst create mode 100644 fieldservice_route/security/ir.model.access.csv create mode 100644 fieldservice_route/static/description/icon.png create mode 100644 fieldservice_route/static/description/index.html create mode 100644 fieldservice_route/tests/__init__.py create mode 100644 fieldservice_route/tests/test_fsm_order.py create mode 100644 fieldservice_route/views/fsm_location.xml create mode 100644 fieldservice_route/views/fsm_order.xml create mode 100644 fieldservice_route/views/fsm_route.xml create mode 100644 fieldservice_route/views/fsm_route_day.xml create mode 100644 fieldservice_route/views/fsm_route_dayroute.xml create mode 100644 fieldservice_route/views/menu.xml diff --git a/fieldservice_route/README.rst b/fieldservice_route/README.rst new file mode 100644 index 0000000000..d6e6a25790 --- /dev/null +++ b/fieldservice_route/README.rst @@ -0,0 +1,114 @@ +=================== +Field Service Route +=================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/12.0/fieldservice_route + :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-12-0/field-service-12-0-fieldservice_route + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +A Field Service route is the sorted list of orders that one worker/vehicle will perform during a day. + +This module allows you to manage your Field Service routes: when assigning an order to a worker and scheduling it, a route is automatically created for that worker and day. + + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To use this module, you need to: + +* Go to Field Service > Configuration > Stages +* Define the workflow of your routes by creating new stages whose type is "Route" +* Go to Field Service > Configuration > Routes +* Create your routes by setting their name and selecting their territory + +Usage +===== + +To use this module, you need to: + +* Go to Field Service +* Create or select an order +* Assign it to a worker and schedule it +* Go to Field Service > Dashboard > Day Routes. A new record has been created. + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* Maxime Chambreuil +* Nikul Chaudhary + +Other credits +~~~~~~~~~~~~~ + +The development of this module has been financially supported by: + +* Open Source Integrators +* Serpent Consulting Services Pvt. Ltd. + +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-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 + +Current `maintainer `__: + +|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_route/__init__.py b/fieldservice_route/__init__.py new file mode 100644 index 0000000000..69f7babdfb --- /dev/null +++ b/fieldservice_route/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_route/__manifest__.py b/fieldservice_route/__manifest__.py new file mode 100644 index 0000000000..7d574e6503 --- /dev/null +++ b/fieldservice_route/__manifest__.py @@ -0,0 +1,34 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Field Service Route', + 'summary': '''A Field Service route is the sorted list of orders that one + worker/vehicle will perform during a day.''', + 'version': '12.0.1.0.0', + 'category': 'Field Service', + 'license': 'AGPL-3', + 'author': 'Open Source Integrators, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/field-service', + 'depends': [ + 'fieldservice' + ], + 'data': [ + 'data/ir_sequence.xml', + 'data/fsm_route_day_data.xml', + 'data/fsm_stage_data.xml', + 'security/ir.model.access.csv', + 'views/fsm_route_day.xml', + 'views/fsm_route.xml', + 'views/fsm_location.xml', + 'views/fsm_route_dayroute.xml', + 'views/fsm_order.xml', + 'views/menu.xml', + ], + 'application': True, + 'development_status': 'Beta', + 'maintainers': [ + 'max3903' + ], +} diff --git a/fieldservice_route/data/fsm_route_day_data.xml b/fieldservice_route/data/fsm_route_day_data.xml new file mode 100644 index 0000000000..c9d4a499a0 --- /dev/null +++ b/fieldservice_route/data/fsm_route_day_data.xml @@ -0,0 +1,31 @@ + + + + Monday + + + + Tuesday + + + + Wednesday + + + + Thursday + + + + Friday + + + + Saturday + + + + Sunday + + + diff --git a/fieldservice_route/data/fsm_stage_data.xml b/fieldservice_route/data/fsm_stage_data.xml new file mode 100644 index 0000000000..3634662647 --- /dev/null +++ b/fieldservice_route/data/fsm_stage_data.xml @@ -0,0 +1,19 @@ + + + + New + 10 + True + route + #ECF0F1 + + + + Closed + 20 + True + route + #7F8C8D + + + diff --git a/fieldservice_route/data/ir_sequence.xml b/fieldservice_route/data/ir_sequence.xml new file mode 100644 index 0000000000..1f3c2525b2 --- /dev/null +++ b/fieldservice_route/data/ir_sequence.xml @@ -0,0 +1,12 @@ + + + + + FSM Day Route + fsm.route.dayroute + SR + 3 + + + + diff --git a/fieldservice_route/i18n/fieldservice_route.pot b/fieldservice_route/i18n/fieldservice_route.pot new file mode 100644 index 0000000000..64127504cd --- /dev/null +++ b/fieldservice_route/i18n/fieldservice_route.pot @@ -0,0 +1,323 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_route +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute +msgid "Add Day Routes here." +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route +msgid "Add Routes here." +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day +msgid "Create a Route Day." +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_uid +msgid "Created by" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_date +msgid "Created on" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date +msgid "Date" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__dayroute_id +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Day Route" +msgstr "" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_report +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute_report +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_graph_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_pivot_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_tree +msgid "Day Routes" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute_report +msgid "Day Routes Report" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__day_ids +msgid "Days" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__end_location_id +msgid "End Location" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Equipment" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route +msgid "Field Service Route" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route_dayroute +msgid "Field Service Route Dayroute" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_stage +msgid "Field Service Stage" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Friday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__id +msgid "ID" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__last_location_id +msgid "Last Location" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__latitude +msgid "Latitude" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Location" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__longitude +msgid "Longitude" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_allow_time +msgid "Maximal Allowable Time (in hours)" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Monday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__name +msgid "Name" +msgstr "" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:20 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:60 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:62 +#, python-format +msgid "New" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_count +msgid "Number of Orders" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Order" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Orders" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__fsm_person_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__person_id +msgid "Person" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date_start_planned +msgid "Planned Start Time" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Planning" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__route_id +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Route" +msgstr "" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_day +#: model:ir.model,name:fieldservice_route.model_fsm_route_day +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_tree_view +msgid "Route Day" +msgstr "" + +#. module: fieldservice_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_day +msgid "Route Days" +msgstr "" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_tree +msgid "Routes" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Saturday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__stage_id +msgid "Stage" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__start_location_id +msgid "Start Location" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Sunday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__team_id +msgid "Team" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__territory_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__territory_id +msgid "Territory" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Thursday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__work_time +msgid "Time before overtime (in hours)" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Tuesday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__stage_type +msgid "Type" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Wednesday" +msgstr "" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Worker" +msgstr "" + +#. module: fieldservice_route +#: sql_constraint:fsm.route.dayroute:0 +msgid "You cannot create 2 day routes for the same worker on the same day!" +msgstr "" + diff --git a/fieldservice_route/models/__init__.py b/fieldservice_route/models/__init__.py new file mode 100644 index 0000000000..de911b39ca --- /dev/null +++ b/fieldservice_route/models/__init__.py @@ -0,0 +1,8 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import fsm_stage +from . import fsm_route_day +from . import fsm_route +from . import fsm_location +from . import fsm_route_dayroute +from . import fsm_order diff --git a/fieldservice_route/models/fsm_location.py b/fieldservice_route/models/fsm_location.py new file mode 100644 index 0000000000..db787c4f68 --- /dev/null +++ b/fieldservice_route/models/fsm_location.py @@ -0,0 +1,11 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class FSMLocation(models.Model): + _inherit = 'fsm.location' + + fsm_route_id = fields.Many2one('fsm.route', string='Route') diff --git a/fieldservice_route/models/fsm_order.py b/fieldservice_route/models/fsm_order.py new file mode 100644 index 0000000000..359974ee85 --- /dev/null +++ b/fieldservice_route/models/fsm_order.py @@ -0,0 +1,55 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class FSMOrder(models.Model): + _inherit = 'fsm.order' + + dayroute_id = fields.Many2one('fsm.route.dayroute', + string='Day Route', + index=True) + fsm_route_id = fields.Many2one(related="location_id.fsm_route_id", + string='Route') + + def _manage_fsm_route(self, vals): + fsm_route_obj = self.env['fsm.route.dayroute'] + for rec in self: + old_route_id = False + person_id = vals.get('person_id') or rec.person_id.id + scheduled_date_start = vals.get('scheduled_date_start') or \ + rec.scheduled_date_start + fsm_route = fsm_route_obj.search([ + ('person_id', '=', person_id), + ('date', '=', scheduled_date_start)], + limit=1) + old_route_id = rec.dayroute_id + if fsm_route: + rec.dayroute_id = fsm_route.id + if old_route_id and not old_route_id.order_ids: + old_route_id.unlink() + elif not fsm_route and person_id or scheduled_date_start: + fsm_route_obj.create({ + 'person_id': person_id, + 'date': scheduled_date_start, + 'route_id': rec.fsm_route_id.id, + 'order_ids': [(4, rec.id)] + }) + if old_route_id and not old_route_id.order_ids: + old_route_id.unlink() + + @api.model + def create(self, vals): + res = super(FSMOrder, self).create(vals) + if res.person_id and res.scheduled_date_start: + res._manage_fsm_route(vals) + return res + + @api.multi + def write(self, vals): + for rec in self: + if vals.get('person_id') or vals.get('scheduled_date_start'): + rec._manage_fsm_route(vals) + return super(FSMOrder, self).write(vals) diff --git a/fieldservice_route/models/fsm_route.py b/fieldservice_route/models/fsm_route.py new file mode 100644 index 0000000000..56ae757c63 --- /dev/null +++ b/fieldservice_route/models/fsm_route.py @@ -0,0 +1,15 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class FSMRoute(models.Model): + _name = 'fsm.route' + _description = 'Field Service Route' + + name = fields.Char('Name', required=True) + territory_id = fields.Many2one('fsm.territory', string='Territory') + fsm_person_id = fields.Many2one('fsm.person', string='Person') + day_ids = fields.Many2many('fsm.route.day', string='Days') diff --git a/fieldservice_route/models/fsm_route_day.py b/fieldservice_route/models/fsm_route_day.py new file mode 100644 index 0000000000..683a8214af --- /dev/null +++ b/fieldservice_route/models/fsm_route_day.py @@ -0,0 +1,21 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class FSMRouteDay(models.Model): + _name = 'fsm.route.day' + _description = 'Route Day' + + name = fields.Selection([ + ('Monday', 'Monday'), + ('Tuesday', 'Tuesday'), + ('Wednesday', 'Wednesday'), + ('Thursday', 'Thursday'), + ('Friday', 'Friday'), + ('Saturday', 'Saturday'), + ('Sunday', 'Sunday')], + string='Name' + ) diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py new file mode 100644 index 0000000000..a18b6cb5e9 --- /dev/null +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -0,0 +1,63 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models, _ + + +class FSMRouteDayRoute(models.Model): + _name = 'fsm.route.dayroute' + _description = 'Field Service Route Dayroute' + + @api.depends('route_id') + def _compute_order_count(self): + for rec in self: + rec.order_count = 0 + if rec.order_ids: + rec.order_count = len(rec.order_ids) + + name = fields.Char(string='Name', required=True, + default=lambda self: _('New')) + person_id = fields.Many2one('fsm.person', string='Person') + route_id = fields.Many2one('fsm.route', string='Route') + date = fields.Date(string='Date') + team_id = fields.Many2one('fsm.team', string='Team') + stage_id = fields.Many2one('fsm.stage', string='Stage', + domain="[('stage_type', '=', 'route')]", + index=True, copy=False, + default=lambda self: self._default_stage_id()) + territory_id = fields.Many2one('fsm.territory', string='Territory') + longitude = fields.Float("Longitude") + latitude = fields.Float("Latitude") + last_location_id = fields.Many2one('fsm.location', string='Last Location') + date_start_planned = fields.Datetime(string='Planned Start Time') + start_location_id = fields.Many2one( + 'fsm.location', string='Start Location') + end_location_id = fields.Many2one('fsm.location', string='End Location') + work_time = fields.Float(string='Time before overtime (in hours)', + default=8.0) + max_allow_time = fields.Float(string="Maximal Allowable Time (in hours)", + default=10.0) + order_ids = fields.One2many('fsm.order', 'dayroute_id', + string='Orders') + order_count = fields.Integer(string='Number of Orders', + compute=_compute_order_count) + + _sql_constraints = [ + ('fsm_route_dayroute_person_date_uniq', + 'unique (person_id, date)', + "You cannot create 2 day routes for the same" + " worker on the same day!"), + ] + + def _default_stage_id(self): + return self.env['fsm.stage'].search([('stage_type', '=', 'route'), + ('is_default', '=', True)], + limit=1) + + @api.model + def create(self, vals): + if vals.get('name', _('New')) == _('New'): + vals['name'] = self.env['ir.sequence'].next_by_code( + 'fsm.route.dayroute') or _('New') + return super(FSMRouteDayRoute, self).create(vals) diff --git a/fieldservice_route/models/fsm_stage.py b/fieldservice_route/models/fsm_stage.py new file mode 100644 index 0000000000..7a3773dab3 --- /dev/null +++ b/fieldservice_route/models/fsm_stage.py @@ -0,0 +1,11 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class FSMStage(models.Model): + _inherit = 'fsm.stage' + + stage_type = fields.Selection(selection_add=[('route', 'Route')]) diff --git a/fieldservice_route/readme/CONFIGURE.rst b/fieldservice_route/readme/CONFIGURE.rst new file mode 100644 index 0000000000..4cd722a155 --- /dev/null +++ b/fieldservice_route/readme/CONFIGURE.rst @@ -0,0 +1,6 @@ +To use this module, you need to: + +* Go to Field Service > Configuration > Stages +* Define the workflow of your routes by creating new stages whose type is "Route" +* Go to Field Service > Configuration > Routes +* Create your routes by setting their name and selecting their territory diff --git a/fieldservice_route/readme/CONTRIBUTORS.rst b/fieldservice_route/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..f4dcda0602 --- /dev/null +++ b/fieldservice_route/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Maxime Chambreuil +* Nikul Chaudhary diff --git a/fieldservice_route/readme/CREDITS.rst b/fieldservice_route/readme/CREDITS.rst new file mode 100644 index 0000000000..d2eaed7d81 --- /dev/null +++ b/fieldservice_route/readme/CREDITS.rst @@ -0,0 +1,4 @@ +The development of this module has been financially supported by: + +* Open Source Integrators +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_route/readme/DESCRIPTION.rst b/fieldservice_route/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..94f9854196 --- /dev/null +++ b/fieldservice_route/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +A Field Service route is the sorted list of orders that one worker/vehicle will perform during a day. + +This module allows you to manage your Field Service routes: when assigning an order to a worker and scheduling it, a route is automatically created for that worker and day. + diff --git a/fieldservice_route/readme/USAGE.rst b/fieldservice_route/readme/USAGE.rst new file mode 100644 index 0000000000..ee41b9c759 --- /dev/null +++ b/fieldservice_route/readme/USAGE.rst @@ -0,0 +1,7 @@ +To use this module, you need to: + +* Go to Field Service +* Create or select an order +* Assign it to a worker and schedule it +* Go to Field Service > Dashboard > Day Routes. A new record has been created. + diff --git a/fieldservice_route/security/ir.model.access.csv b/fieldservice_route/security/ir.model.access.csv new file mode 100644 index 0000000000..163c5a29f6 --- /dev/null +++ b/fieldservice_route/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_fsm_route_user,fsm.route.user,model_fsm_route,fieldservice.group_fsm_user,1,1,0,0 +access_fsm_route_dispatcher,fsm.route.dispatcher,model_fsm_route,fieldservice.group_fsm_dispatcher,1,1,1,1 +access_fsm_route_day_user,fsm.route.day.user,model_fsm_route_day,fieldservice.group_fsm_user,1,1,0,0 +access_fsm_route_day_dispatcher,fsm.route.day.dispatcher,model_fsm_route_day,fieldservice.group_fsm_dispatcher,1,1,1,1 +access_fsm_route_dayroute_user,fsm.route.dayroute.user,model_fsm_route_dayroute,fieldservice.group_fsm_user,1,1,0,0 +access_fsm_route_dayroute_dispatcher,fsm.route.dayroute.dispatcher,model_fsm_route_dayroute,fieldservice.group_fsm_dispatcher,1,1,1,1 diff --git a/fieldservice_route/static/description/icon.png b/fieldservice_route/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 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 literal 0 HcmV?d00001 diff --git a/fieldservice_route/static/description/index.html b/fieldservice_route/static/description/index.html new file mode 100644 index 0000000000..fa256530f0 --- /dev/null +++ b/fieldservice_route/static/description/index.html @@ -0,0 +1,454 @@ + + + + + + +Field Service Route + + + +
    +

    Field Service Route

    + + +

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

    +

    A Field Service route is the sorted list of orders that one worker/vehicle will perform during a day.

    +

    This module allows you to manage your Field Service routes: when assigning an order to a worker and scheduling it, a route is automatically created for that worker and day.

    +

    Table of contents

    + +
    +

    Configuration

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service > Configuration > Stages
    • +
    • Define the workflow of your routes by creating new stages whose type is “Route”
    • +
    • Go to Field Service > Configuration > Routes
    • +
    • Create your routes by setting their name and selecting their territory
    • +
    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service
    • +
    • Create or select an order
    • +
    • Assign it to a worker and schedule it
    • +
    • Go to Field Service > Dashboard > Day Routes. A new record has been created.
    • +
    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    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 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_route/tests/__init__.py b/fieldservice_route/tests/__init__.py new file mode 100644 index 0000000000..71d63056f0 --- /dev/null +++ b/fieldservice_route/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import test_fsm_order diff --git a/fieldservice_route/tests/test_fsm_order.py b/fieldservice_route/tests/test_fsm_order.py new file mode 100644 index 0000000000..5e306437ec --- /dev/null +++ b/fieldservice_route/tests/test_fsm_order.py @@ -0,0 +1,36 @@ +# Copyright (C) 2019 Open Source Integrators +# Copyright (C) 2019 Serpent consulting Services +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import TransactionCase +from datetime import datetime + + +class FSMOrderRouteCase(TransactionCase): + + def setUp(self): + super(FSMOrderRouteCase, self).setUp() + self.fsm_stage_obj = self.env['fsm.stage'] + self.fsm_order_obj = self.env['fsm.order'] + self.fsm_route_obj = self.env['fsm.route'] + self.test_person = self.env.ref("fieldservice.test_person") + self.test_location = self.env.ref("fieldservice.test_location") + self.fsm_route_id = self.fsm_route_obj.create( + { + 'name': 'Demo Route', + 'fsm_person_id': self.test_person.id, + }) + self.test_location.fsm_route_id = self.fsm_route_id.id + self.date = datetime.now() + + def test_create_day_route(self): + order = self.fsm_order_obj.create({'location_id': + self.test_location.id, + 'person_id': self.test_person.id, + 'scheduled_date_start': self.date, + }) + self.assertEqual(order.fsm_route_id, self.test_location.fsm_route_id) + self.assertEqual(order.dayroute_id.person_id, order.person_id) + self.assertEqual(order.dayroute_id.date, + order.scheduled_date_start.date()) + self.assertEqual(order.dayroute_id.route_id, order.fsm_route_id) diff --git a/fieldservice_route/views/fsm_location.xml b/fieldservice_route/views/fsm_location.xml new file mode 100644 index 0000000000..8cd4bd0d50 --- /dev/null +++ b/fieldservice_route/views/fsm_location.xml @@ -0,0 +1,14 @@ + + + + fsm.location.form + fsm.location + + + + + + + + + diff --git a/fieldservice_route/views/fsm_order.xml b/fieldservice_route/views/fsm_order.xml new file mode 100644 index 0000000000..af0579ae41 --- /dev/null +++ b/fieldservice_route/views/fsm_order.xml @@ -0,0 +1,17 @@ + + + + fsm.order.form + fsm.order + + + + + + + + + + + + diff --git a/fieldservice_route/views/fsm_route.xml b/fieldservice_route/views/fsm_route.xml new file mode 100644 index 0000000000..7dc4de5c3d --- /dev/null +++ b/fieldservice_route/views/fsm_route.xml @@ -0,0 +1,48 @@ + + + + fsm.route.tree + fsm.route + + + + + + + + + + + + fsm.route.form + fsm.route + +
    + +
    +

    + +

    +
    + + + + +
    +
    +
    +
    + + + Routes + fsm.route + form + tree,form + +

    + Add Routes here. +

    +
    +
    + +
    diff --git a/fieldservice_route/views/fsm_route_day.xml b/fieldservice_route/views/fsm_route_day.xml new file mode 100644 index 0000000000..509be21162 --- /dev/null +++ b/fieldservice_route/views/fsm_route_day.xml @@ -0,0 +1,39 @@ + + + + Route Day + fsm.route.day + + + + + + + + + Route Day + fsm.route.day + +
    + + + + + +
    +
    +
    + + + Route Day + fsm.route.day + form + tree,form + +

    + Create a Route Day. +

    +
    +
    + +
    diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml new file mode 100644 index 0000000000..09c72660da --- /dev/null +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -0,0 +1,122 @@ + + + + fsm.route.dayroute.tree + fsm.route.dayroute + + + + + + + + + + + fsm.route.dayroute.form + fsm.route.dayroute + +
    +
    + +
    + +
    +

    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + Day Routes + fsm.route.dayroute + form + tree,form + +

    + Add Day Routes here. +

    +
    +
    + + + + fsm.route.graph + fsm.route.dayroute + + + + + + + + + fsm.route.pivot + fsm.route.dayroute + + + + + + + + + Day Routes + fsm.route.dayroute + form + graph,pivot + +

    + Day Routes Report +

    +
    +
    + +
    diff --git a/fieldservice_route/views/menu.xml b/fieldservice_route/views/menu.xml new file mode 100644 index 0000000000..11171fbb3b --- /dev/null +++ b/fieldservice_route/views/menu.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + From e3ed0ebb6b1f64dd07091ac6d886c0ec35ad393a Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 30 Dec 2019 16:34:46 -0600 Subject: [PATCH 252/631] [IMP] fieldservice_route --- .../views/fsm_route_dayroute.xml | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml index 09c72660da..2f26ba3770 100644 --- a/fieldservice_route/views/fsm_route_dayroute.xml +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -1,4 +1,4 @@ - + fsm.route.dayroute.tree @@ -8,6 +8,7 @@ + @@ -25,22 +26,30 @@ domain="[('stage_type', '=', 'route')]"/> +

    - - - - - - + + + + + + + + + + - - + + + + + - - - - - - - - - - - + + + + + + + + + + + + + From e909c5f92fd9192c90cabf0da70b1b3d38cd0a46 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 31 Dec 2019 08:22:08 -0600 Subject: [PATCH 253/631] [IMP] fieldservice_route --- fieldservice_route/__manifest__.py | 4 +--- fieldservice_route/i18n/fieldservice_route.pot | 10 ++++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/fieldservice_route/__manifest__.py b/fieldservice_route/__manifest__.py index 7d574e6503..e381a06aae 100644 --- a/fieldservice_route/__manifest__.py +++ b/fieldservice_route/__manifest__.py @@ -4,8 +4,7 @@ { 'name': 'Field Service Route', - 'summary': '''A Field Service route is the sorted list of orders that one - worker/vehicle will perform during a day.''', + 'summary': 'Organize the routes of each day.', 'version': '12.0.1.0.0', 'category': 'Field Service', 'license': 'AGPL-3', @@ -26,7 +25,6 @@ 'views/fsm_order.xml', 'views/menu.xml', ], - 'application': True, 'development_status': 'Beta', 'maintainers': [ 'max3903' diff --git a/fieldservice_route/i18n/fieldservice_route.pot b/fieldservice_route/i18n/fieldservice_route.pot index 64127504cd..6c1a2a6611 100644 --- a/fieldservice_route/i18n/fieldservice_route.pot +++ b/fieldservice_route/i18n/fieldservice_route.pot @@ -226,6 +226,11 @@ msgstr "" msgid "Planning" msgstr "" +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Positioning" +msgstr "" + #. module: fieldservice_route #: selection:fsm.stage,stage_type:0 #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__fsm_route_id @@ -296,6 +301,11 @@ msgstr "" msgid "Time before overtime (in hours)" msgstr "" +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Timing" +msgstr "" + #. module: fieldservice_route #: selection:fsm.route.day,name:0 msgid "Tuesday" From df179abdc40f8edde859b22965a56db40bae5023 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 4 Jan 2020 13:52:38 +0000 Subject: [PATCH 254/631] fieldservice_route 12.0.1.1.0 --- fieldservice_route/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_route/__manifest__.py b/fieldservice_route/__manifest__.py index e381a06aae..bc0bd15a2f 100644 --- a/fieldservice_route/__manifest__.py +++ b/fieldservice_route/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Field Service Route', 'summary': 'Organize the routes of each day.', - 'version': '12.0.1.0.0', + 'version': '12.0.1.1.0', 'category': 'Field Service', 'license': 'AGPL-3', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', From cd7ec453cc30821ab531cce95ca96f75585de251 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 6 Jan 2020 17:35:52 -0600 Subject: [PATCH 255/631] [FIX] fieldservice_route --- fieldservice_route/models/fsm_order.py | 43 +++++++++++++++---- .../models/fsm_route_dayroute.py | 18 +++++++- .../security/ir.model.access.csv | 6 +-- .../views/fsm_route_dayroute.xml | 2 +- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/fieldservice_route/models/fsm_order.py b/fieldservice_route/models/fsm_order.py index 359974ee85..6278b6ea12 100644 --- a/fieldservice_route/models/fsm_order.py +++ b/fieldservice_route/models/fsm_order.py @@ -8,17 +8,35 @@ class FSMOrder(models.Model): _inherit = 'fsm.order' + @api.model + def _get_default_person(self): + return self.fsm_route_id.fsm_person_id.id or False + dayroute_id = fields.Many2one('fsm.route.dayroute', string='Day Route', index=True) fsm_route_id = fields.Many2one(related="location_id.fsm_route_id", string='Route') + person_id = fields.Many2one( + 'fsm.person', string='Assigned To', index=True, + default=_get_default_person) + + def prepare_dayroute_values(self, person_id, date_start): + return { + 'person_id': person_id, + 'date': date_start, + 'route_id': self.fsm_route_id.id, + 'team_id': self.team_id.id, + 'order_ids': [(4, self.id)] + } + def _manage_fsm_route(self, vals): fsm_route_obj = self.env['fsm.route.dayroute'] for rec in self: old_route_id = False - person_id = vals.get('person_id') or rec.person_id.id + person_id = vals.get('person_id') or rec.person_id.id or \ + rec.fsm_route_id.fsm_person_id.id scheduled_date_start = vals.get('scheduled_date_start') or \ rec.scheduled_date_start fsm_route = fsm_route_obj.search([ @@ -31,17 +49,19 @@ def _manage_fsm_route(self, vals): if old_route_id and not old_route_id.order_ids: old_route_id.unlink() elif not fsm_route and person_id or scheduled_date_start: - fsm_route_obj.create({ - 'person_id': person_id, - 'date': scheduled_date_start, - 'route_id': rec.fsm_route_id.id, - 'order_ids': [(4, rec.id)] - }) + fsm_route_obj.create(rec.prepare_dayroute_values( + person_id, scheduled_date_start + )) if old_route_id and not old_route_id.order_ids: old_route_id.unlink() @api.model def create(self, vals): + if not vals.get('person_id'): + location = self.env['fsm.location'].browse(vals.get('location_id')) + vals.update({ + 'person_id': location.fsm_route_id.fsm_person_id.id, + }) res = super(FSMOrder, self).create(vals) if res.person_id and res.scheduled_date_start: res._manage_fsm_route(vals) @@ -50,6 +70,13 @@ def create(self, vals): @api.multi def write(self, vals): for rec in self: - if vals.get('person_id') or vals.get('scheduled_date_start'): + if vals.get('route_id', False): + route = self.env['fsm.route'].browse(vals.get('route_id')) + vals.update({ + 'person_id': route.person_id.id, + 'scheduled_date_start': route.date, + }) + if vals.get('person_id', False) or \ + vals.get('scheduled_date_start', False): rec._manage_fsm_route(vals) return super(FSMOrder, self).write(vals) diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index a18b6cb5e9..540fb2525c 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -1,14 +1,18 @@ # Copyright (C) 2019 Open Source Integrators # Copyright (C) 2019 Serpent consulting Services # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). - from odoo import api, fields, models, _ +from odoo.exceptions import UserError class FSMRouteDayRoute(models.Model): _name = 'fsm.route.dayroute' _description = 'Field Service Route Dayroute' + @api.model + def _get_default_person(self): + return self.route_id.fsm_person_id.id or False + @api.depends('route_id') def _compute_order_count(self): for rec in self: @@ -18,7 +22,8 @@ def _compute_order_count(self): name = fields.Char(string='Name', required=True, default=lambda self: _('New')) - person_id = fields.Many2one('fsm.person', string='Person') + person_id = fields.Many2one('fsm.person', string='Person', + default=_get_default_person) route_id = fields.Many2one('fsm.route', string='Route') date = fields.Date(string='Date') team_id = fields.Many2one('fsm.team', string='Team') @@ -61,3 +66,12 @@ def create(self, vals): vals['name'] = self.env['ir.sequence'].next_by_code( 'fsm.route.dayroute') or _('New') return super(FSMRouteDayRoute, self).create(vals) + + @api.constrains('date', 'route_id') + def check_day(self): + # Get the day of the week in english + dayname = self.date.strftime('%A').lower() + day = self.env.ref('fieldservice_route.fsm_route_day_' + dayname) + if day.id not in self.route_id.day_ids.ids: + raise UserError(_("The route %s does not run on %s!" % + self.route_id.name, day.name)) diff --git a/fieldservice_route/security/ir.model.access.csv b/fieldservice_route/security/ir.model.access.csv index 163c5a29f6..a243f72a56 100644 --- a/fieldservice_route/security/ir.model.access.csv +++ b/fieldservice_route/security/ir.model.access.csv @@ -1,7 +1,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_fsm_route_user,fsm.route.user,model_fsm_route,fieldservice.group_fsm_user,1,1,0,0 +access_fsm_route_user,fsm.route.user,model_fsm_route,fieldservice.group_fsm_user,1,0,0,0 access_fsm_route_dispatcher,fsm.route.dispatcher,model_fsm_route,fieldservice.group_fsm_dispatcher,1,1,1,1 -access_fsm_route_day_user,fsm.route.day.user,model_fsm_route_day,fieldservice.group_fsm_user,1,1,0,0 -access_fsm_route_day_dispatcher,fsm.route.day.dispatcher,model_fsm_route_day,fieldservice.group_fsm_dispatcher,1,1,1,1 +access_fsm_route_day_user,fsm.route.day.user,model_fsm_route_day,fieldservice.group_fsm_user,1,0,0,0 +access_fsm_route_day_dispatcher,fsm.route.day.dispatcher,model_fsm_route_day,fieldservice.group_fsm_manager,1,1,0,0 access_fsm_route_dayroute_user,fsm.route.dayroute.user,model_fsm_route_dayroute,fieldservice.group_fsm_user,1,1,0,0 access_fsm_route_dayroute_dispatcher,fsm.route.dayroute.dispatcher,model_fsm_route_dayroute,fieldservice.group_fsm_dispatcher,1,1,1,1 diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml index 2f26ba3770..d828981c9c 100644 --- a/fieldservice_route/views/fsm_route_dayroute.xml +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -35,7 +35,7 @@ - + From 65d6ab4ea22d7dac0ee0adeeaf48d96d991a7872 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 7 Jan 2020 09:14:26 -0600 Subject: [PATCH 256/631] [FIX] fieldservice_route --- fieldservice_route/models/fsm_order.py | 2 +- fieldservice_route/models/fsm_route_dayroute.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_route/models/fsm_order.py b/fieldservice_route/models/fsm_order.py index 6278b6ea12..a26e7545b7 100644 --- a/fieldservice_route/models/fsm_order.py +++ b/fieldservice_route/models/fsm_order.py @@ -36,7 +36,7 @@ def _manage_fsm_route(self, vals): for rec in self: old_route_id = False person_id = vals.get('person_id') or rec.person_id.id or \ - rec.fsm_route_id.fsm_person_id.id + rec.fsm_route_id.fsm_person_id.id scheduled_date_start = vals.get('scheduled_date_start') or \ rec.scheduled_date_start fsm_route = fsm_route_obj.search([ diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 540fb2525c..63971822a7 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -25,7 +25,7 @@ def _compute_order_count(self): person_id = fields.Many2one('fsm.person', string='Person', default=_get_default_person) route_id = fields.Many2one('fsm.route', string='Route') - date = fields.Date(string='Date') + date = fields.Date(string='Date', required=True) team_id = fields.Many2one('fsm.team', string='Team') stage_id = fields.Many2one('fsm.stage', string='Stage', domain="[('stage_type', '=', 'route')]", From e001f956760a03f192e17524ac2ed9a2965f82fd Mon Sep 17 00:00:00 2001 From: scampbell Date: Tue, 7 Jan 2020 09:55:35 -0800 Subject: [PATCH 257/631] [IMP] Fix Travis Redlight --- fieldservice_route/tests/test_fsm_order.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/fieldservice_route/tests/test_fsm_order.py b/fieldservice_route/tests/test_fsm_order.py index 5e306437ec..1498a7339f 100644 --- a/fieldservice_route/tests/test_fsm_order.py +++ b/fieldservice_route/tests/test_fsm_order.py @@ -15,13 +15,23 @@ def setUp(self): self.fsm_route_obj = self.env['fsm.route'] self.test_person = self.env.ref("fieldservice.test_person") self.test_location = self.env.ref("fieldservice.test_location") + self.date = datetime.now() + self.days = [ + self.env.ref('fieldservice_route.fsm_route_day_sunday').id, + self.env.ref('fieldservice_route.fsm_route_day_monday').id, + self.env.ref('fieldservice_route.fsm_route_day_tuesday').id, + self.env.ref('fieldservice_route.fsm_route_day_wednesday').id, + self.env.ref('fieldservice_route.fsm_route_day_thursday').id, + self.env.ref('fieldservice_route.fsm_route_day_friday').id, + self.env.ref('fieldservice_route.fsm_route_day_saturday').id + ] self.fsm_route_id = self.fsm_route_obj.create( { 'name': 'Demo Route', 'fsm_person_id': self.test_person.id, + 'day_ids': [(6, 0, self.days)] }) self.test_location.fsm_route_id = self.fsm_route_id.id - self.date = datetime.now() def test_create_day_route(self): order = self.fsm_order_obj.create({'location_id': From f04fa92b39f0ea4a6e01eb959288de3453f62f92 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Wed, 8 Jan 2020 18:30:49 +0530 Subject: [PATCH 258/631] [FIX] Travis --- fieldservice_route/tests/test_fsm_order.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fieldservice_route/tests/test_fsm_order.py b/fieldservice_route/tests/test_fsm_order.py index 1498a7339f..60f8ff597e 100644 --- a/fieldservice_route/tests/test_fsm_order.py +++ b/fieldservice_route/tests/test_fsm_order.py @@ -17,13 +17,13 @@ def setUp(self): self.test_location = self.env.ref("fieldservice.test_location") self.date = datetime.now() self.days = [ - self.env.ref('fieldservice_route.fsm_route_day_sunday').id, - self.env.ref('fieldservice_route.fsm_route_day_monday').id, - self.env.ref('fieldservice_route.fsm_route_day_tuesday').id, - self.env.ref('fieldservice_route.fsm_route_day_wednesday').id, - self.env.ref('fieldservice_route.fsm_route_day_thursday').id, - self.env.ref('fieldservice_route.fsm_route_day_friday').id, - self.env.ref('fieldservice_route.fsm_route_day_saturday').id + self.env.ref('fieldservice_route.fsm_route_day_sunday').id, + self.env.ref('fieldservice_route.fsm_route_day_monday').id, + self.env.ref('fieldservice_route.fsm_route_day_tuesday').id, + self.env.ref('fieldservice_route.fsm_route_day_wednesday').id, + self.env.ref('fieldservice_route.fsm_route_day_thursday').id, + self.env.ref('fieldservice_route.fsm_route_day_friday').id, + self.env.ref('fieldservice_route.fsm_route_day_saturday').id ] self.fsm_route_id = self.fsm_route_obj.create( { From db7676d829558a3ef6622ad03bac1b1d89071a8a Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 9 Jan 2020 08:05:04 -0800 Subject: [PATCH 259/631] [IMP] fieldservice_route --- .../models/fsm_route_dayroute.py | 21 ++++++++++++------- .../views/fsm_route_dayroute.xml | 3 ++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 63971822a7..565a035b1c 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -59,19 +59,26 @@ def _default_stage_id(self): return self.env['fsm.stage'].search([('stage_type', '=', 'route'), ('is_default', '=', True)], limit=1) + @api.onchange('route_id') + def _onchange_person(self): + self.fsm_person_id = self._get_default_person() @api.model def create(self, vals): if vals.get('name', _('New')) == _('New'): vals['name'] = self.env['ir.sequence'].next_by_code( 'fsm.route.dayroute') or _('New') - return super(FSMRouteDayRoute, self).create(vals) + return super().create(vals) @api.constrains('date', 'route_id') def check_day(self): - # Get the day of the week in english - dayname = self.date.strftime('%A').lower() - day = self.env.ref('fieldservice_route.fsm_route_day_' + dayname) - if day.id not in self.route_id.day_ids.ids: - raise UserError(_("The route %s does not run on %s!" % - self.route_id.name, day.name)) + for rec in self: + if rec.date and rec.route_id: + # Get the day of the week in english + dayname = rec.date.strftime('%A').lower() + day = self.env.ref( + 'fieldservice_route.fsm_route_day_' + dayname) + if day.id not in rec.route_id.day_ids.ids: + raise UserError(_( + "The route %s does not run on %s!" % + (rec.route_id.name, day.name))) diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml index d828981c9c..11c245b966 100644 --- a/fieldservice_route/views/fsm_route_dayroute.xml +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -6,6 +6,7 @@ + @@ -34,12 +35,12 @@
    + - From 4f9f6d88928232d3c3bb52b90f514e109289a0af Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 9 Jan 2020 14:23:52 -0800 Subject: [PATCH 260/631] [FIX] fieldservice_route --- fieldservice_route/models/fsm_route_dayroute.py | 1 + 1 file changed, 1 insertion(+) diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 565a035b1c..030b5ad6c7 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -59,6 +59,7 @@ def _default_stage_id(self): return self.env['fsm.stage'].search([('stage_type', '=', 'route'), ('is_default', '=', True)], limit=1) + @api.onchange('route_id') def _onchange_person(self): self.fsm_person_id = self._get_default_person() From e0991c38a7acf7ec3f4f2e8a76470a1a089b67f4 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 14 Jan 2020 09:20:18 -0600 Subject: [PATCH 261/631] [FIX] fieldservice_route --- fieldservice_route/models/fsm_order.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fieldservice_route/models/fsm_order.py b/fieldservice_route/models/fsm_order.py index a26e7545b7..112aa32993 100644 --- a/fieldservice_route/models/fsm_order.py +++ b/fieldservice_route/models/fsm_order.py @@ -76,7 +76,8 @@ def write(self, vals): 'person_id': route.person_id.id, 'scheduled_date_start': route.date, }) - if vals.get('person_id', False) or \ - vals.get('scheduled_date_start', False): + if (vals.get('person_id', False) or rec.person_id) and \ + (vals.get('scheduled_date_start', False) or + rec.scheduled_date_start): rec._manage_fsm_route(vals) return super(FSMOrder, self).write(vals) From ac4180994c32f1bdc96c0e54721fd915cfdd2b57 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 14 Jan 2020 10:03:20 -0600 Subject: [PATCH 262/631] [FIX] fieldservice_route --- .../i18n/fieldservice_route.pot | 17 +++++++++--- fieldservice_route/models/fsm_order.py | 27 ++++++++++--------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/fieldservice_route/i18n/fieldservice_route.pot b/fieldservice_route/i18n/fieldservice_route.pot index 6c1a2a6611..52b6af56c7 100644 --- a/fieldservice_route/i18n/fieldservice_route.pot +++ b/fieldservice_route/i18n/fieldservice_route.pot @@ -23,6 +23,11 @@ msgstr "" msgid "Add Routes here." msgstr "" +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__person_id +msgid "Assigned To" +msgstr "" + #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day msgid "Create a Route Day." @@ -187,9 +192,9 @@ msgid "Name" msgstr "" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:20 -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:60 -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:62 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:24 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:69 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:71 #, python-format msgid "New" msgstr "" @@ -291,6 +296,12 @@ msgstr "" msgid "Territory" msgstr "" +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:85 +#, python-format +msgid "The route %s does not run on %s!" +msgstr "" + #. module: fieldservice_route #: selection:fsm.route.day,name:0 msgid "Thursday" diff --git a/fieldservice_route/models/fsm_order.py b/fieldservice_route/models/fsm_order.py index 112aa32993..42367dbd9a 100644 --- a/fieldservice_route/models/fsm_order.py +++ b/fieldservice_route/models/fsm_order.py @@ -32,28 +32,29 @@ def prepare_dayroute_values(self, person_id, date_start): } def _manage_fsm_route(self, vals): - fsm_route_obj = self.env['fsm.route.dayroute'] + dayroute_obj = self.env['fsm.route.dayroute'] for rec in self: - old_route_id = False person_id = vals.get('person_id') or rec.person_id.id or \ rec.fsm_route_id.fsm_person_id.id scheduled_date_start = vals.get('scheduled_date_start') or \ rec.scheduled_date_start - fsm_route = fsm_route_obj.search([ + dayroute = dayroute_obj.search([ ('person_id', '=', person_id), ('date', '=', scheduled_date_start)], limit=1) - old_route_id = rec.dayroute_id - if fsm_route: - rec.dayroute_id = fsm_route.id - if old_route_id and not old_route_id.order_ids: - old_route_id.unlink() - elif not fsm_route and person_id or scheduled_date_start: - fsm_route_obj.create(rec.prepare_dayroute_values( + old_dayroute_id = rec.dayroute_id + if dayroute: + vals.update({ + 'dayroute_id': dayroute.id}) + if old_dayroute_id and not old_dayroute_id.order_ids: + old_dayroute_id.unlink() + elif not dayroute and person_id or scheduled_date_start: + dayroute_obj.create(rec.prepare_dayroute_values( person_id, scheduled_date_start )) - if old_route_id and not old_route_id.order_ids: - old_route_id.unlink() + if old_dayroute_id and not old_dayroute_id.order_ids: + old_dayroute_id.unlink() + return vals @api.model def create(self, vals): @@ -79,5 +80,5 @@ def write(self, vals): if (vals.get('person_id', False) or rec.person_id) and \ (vals.get('scheduled_date_start', False) or rec.scheduled_date_start): - rec._manage_fsm_route(vals) + vals = rec._manage_fsm_route(vals) return super(FSMOrder, self).write(vals) From 85cd00aeffed7ddd5abe091e24f9f19f033244fb Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 14 Jan 2020 18:10:16 +0000 Subject: [PATCH 263/631] fieldservice_route 12.0.1.2.0 --- fieldservice_route/__manifest__.py | 2 +- fieldservice_route/i18n/es_CL.po | 346 +++++++++++++++++++++++++++++ 2 files changed, 347 insertions(+), 1 deletion(-) create mode 100644 fieldservice_route/i18n/es_CL.po diff --git a/fieldservice_route/__manifest__.py b/fieldservice_route/__manifest__.py index bc0bd15a2f..7d621a52e4 100644 --- a/fieldservice_route/__manifest__.py +++ b/fieldservice_route/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Field Service Route', 'summary': 'Organize the routes of each day.', - 'version': '12.0.1.1.0', + 'version': '12.0.1.2.0', 'category': 'Field Service', 'license': 'AGPL-3', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', diff --git a/fieldservice_route/i18n/es_CL.po b/fieldservice_route/i18n/es_CL.po new file mode 100644 index 0000000000..d789d063ae --- /dev/null +++ b/fieldservice_route/i18n/es_CL.po @@ -0,0 +1,346 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_route +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-01-16 22:38+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_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute +msgid "Add Day Routes here." +msgstr "Agregue Rutas de Día aquí." + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route +msgid "Add Routes here." +msgstr "Agregar rutas aquí." + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__person_id +msgid "Assigned To" +msgstr "Asignado a" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day +msgid "Create a Route Day." +msgstr "Crea un día de ruta." + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date +msgid "Date" +msgstr "Fecha" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__dayroute_id +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Day Route" +msgstr "Ruta del día" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_report +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute_report +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_graph_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_pivot_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_tree +msgid "Day Routes" +msgstr "Rutas de día" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute_report +msgid "Day Routes Report" +msgstr "Informe de rutas diarias" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__day_ids +msgid "Days" +msgstr "Días" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__display_name +msgid "Display Name" +msgstr "Nombre para mostrar" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__end_location_id +msgid "End Location" +msgstr "Ubicación final" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Equipment" +msgstr "Equipamento" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_location +msgid "Field Service Location" +msgstr "Ubicación del servicio de campo" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_order +msgid "Field Service Order" +msgstr "Orden de Servicio de Campo" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route +msgid "Field Service Route" +msgstr "Ruta de Servicio de Campo" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route_dayroute +msgid "Field Service Route Dayroute" +msgstr "Ruta de servicio de campo Dayroute" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_stage +msgid "Field Service Stage" +msgstr "Etapa de Servicio de Campo" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Friday" +msgstr "Viernes" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__id +msgid "ID" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__last_location_id +msgid "Last Location" +msgstr "Última ubicación" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_date +msgid "Last Updated on" +msgstr "Ultima actualización en" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__latitude +msgid "Latitude" +msgstr "Latitud" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Location" +msgstr "Ubicación" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__longitude +msgid "Longitude" +msgstr "Longitud" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_allow_time +msgid "Maximal Allowable Time (in hours)" +msgstr "Tiempo máximo permitido (en horas)" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Monday" +msgstr "Lunes" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__name +msgid "Name" +msgstr "Nombre" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:24 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:69 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:71 +#, python-format +msgid "New" +msgstr "Nuevo" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_count +msgid "Number of Orders" +msgstr "Numero de Ordenes" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Order" +msgstr "Orden" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Orders" +msgstr "Pedidos" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__fsm_person_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__person_id +msgid "Person" +msgstr "Persona" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date_start_planned +msgid "Planned Start Time" +msgstr "Hora de Inicio Planificada" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Planning" +msgstr "Planificación" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Positioning" +msgstr "Posicionamiento" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__route_id +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Route" +msgstr "Ruta" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_day +#: model:ir.model,name:fieldservice_route.model_fsm_route_day +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_tree_view +msgid "Route Day" +msgstr "Día de la Ruta" + +#. module: fieldservice_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_day +msgid "Route Days" +msgstr "Días de Ruta" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_tree +msgid "Routes" +msgstr "Rutas" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Saturday" +msgstr "Sábado" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__stage_id +msgid "Stage" +msgstr "Etapa" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__start_location_id +msgid "Start Location" +msgstr "Lugar de Inicio" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Sunday" +msgstr "Domingo" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__team_id +msgid "Team" +msgstr "Equipo" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__territory_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__territory_id +msgid "Territory" +msgstr "Territorio" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:85 +#, python-format +msgid "The route %s does not run on %s!" +msgstr "La ruta %s no corre en %s!" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Thursday" +msgstr "Jueves" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__work_time +msgid "Time before overtime (in hours)" +msgstr "Tiempo antes de las horas extra (en horas)" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Timing" +msgstr "Sincronización" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Tuesday" +msgstr "Martes" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__stage_type +msgid "Type" +msgstr "Tipo" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Wednesday" +msgstr "Miércoles" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Worker" +msgstr "Trabajador" + +#. module: fieldservice_route +#: sql_constraint:fsm.route.dayroute:0 +msgid "You cannot create 2 day routes for the same worker on the same day!" +msgstr "¡No puede crear rutas de 2 días para el mismo trabajador el mismo día!" From 2479a13332b9437697c018275b0986ce2b264126 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 17 Jan 2020 15:13:01 -0600 Subject: [PATCH 264/631] [FIX] fieldservice_route: Issue with locale --- fieldservice_route/data/fsm_route_day_data.xml | 14 +++++++------- fieldservice_route/models/fsm_route_dayroute.py | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fieldservice_route/data/fsm_route_day_data.xml b/fieldservice_route/data/fsm_route_day_data.xml index c9d4a499a0..b4fa0f06f2 100644 --- a/fieldservice_route/data/fsm_route_day_data.xml +++ b/fieldservice_route/data/fsm_route_day_data.xml @@ -1,30 +1,30 @@ - + Monday - + Tuesday - + Wednesday - + Thursday - + Friday - + Saturday - + Sunday diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 030b5ad6c7..7c77e1f236 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -75,10 +75,10 @@ def create(self, vals): def check_day(self): for rec in self: if rec.date and rec.route_id: - # Get the day of the week in english - dayname = rec.date.strftime('%A').lower() + # Get the day of the week: Monday -> 0, Sunday -> 6 + day_index = rec.date.weekday() day = self.env.ref( - 'fieldservice_route.fsm_route_day_' + dayname) + 'fieldservice_route.fsm_route_day_' + day_index) if day.id not in rec.route_id.day_ids.ids: raise UserError(_( "The route %s does not run on %s!" % From 663c28bdd9621e1962389dacff3c01fbbe2b2e73 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 17 Jan 2020 15:26:06 -0600 Subject: [PATCH 265/631] [FIX] fieldservice_route --- fieldservice_route/models/fsm_route_dayroute.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 7c77e1f236..20cb4fb863 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -78,7 +78,7 @@ def check_day(self): # Get the day of the week: Monday -> 0, Sunday -> 6 day_index = rec.date.weekday() day = self.env.ref( - 'fieldservice_route.fsm_route_day_' + day_index) + 'fieldservice_route.fsm_route_day_' + str(day_index)) if day.id not in rec.route_id.day_ids.ids: raise UserError(_( "The route %s does not run on %s!" % From d851047c7ed71b8a80868f773e1931e272420cf3 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 17 Jan 2020 15:53:03 -0600 Subject: [PATCH 266/631] Update test_fsm_order.py --- fieldservice_route/tests/test_fsm_order.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fieldservice_route/tests/test_fsm_order.py b/fieldservice_route/tests/test_fsm_order.py index 60f8ff597e..b0ad3ac0c3 100644 --- a/fieldservice_route/tests/test_fsm_order.py +++ b/fieldservice_route/tests/test_fsm_order.py @@ -17,13 +17,13 @@ def setUp(self): self.test_location = self.env.ref("fieldservice.test_location") self.date = datetime.now() self.days = [ - self.env.ref('fieldservice_route.fsm_route_day_sunday').id, - self.env.ref('fieldservice_route.fsm_route_day_monday').id, - self.env.ref('fieldservice_route.fsm_route_day_tuesday').id, - self.env.ref('fieldservice_route.fsm_route_day_wednesday').id, - self.env.ref('fieldservice_route.fsm_route_day_thursday').id, - self.env.ref('fieldservice_route.fsm_route_day_friday').id, - self.env.ref('fieldservice_route.fsm_route_day_saturday').id + self.env.ref('fieldservice_route.fsm_route_day_0').id, + self.env.ref('fieldservice_route.fsm_route_day_1').id, + self.env.ref('fieldservice_route.fsm_route_day_2').id, + self.env.ref('fieldservice_route.fsm_route_day_3').id, + self.env.ref('fieldservice_route.fsm_route_day_4').id, + self.env.ref('fieldservice_route.fsm_route_day_5').id, + self.env.ref('fieldservice_route.fsm_route_day_6').id ] self.fsm_route_id = self.fsm_route_obj.create( { From 233bf78e15f082c0edfdfef8016be61404608865 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 28 Jan 2020 10:02:25 -0600 Subject: [PATCH 267/631] [ADD] fieldservice_route: Migration script --- fieldservice_route/__manifest__.py | 2 +- .../migrations/12.0.2.0.0/pre-migration.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 fieldservice_route/migrations/12.0.2.0.0/pre-migration.py diff --git a/fieldservice_route/__manifest__.py b/fieldservice_route/__manifest__.py index 7d621a52e4..c569e821b0 100644 --- a/fieldservice_route/__manifest__.py +++ b/fieldservice_route/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Field Service Route', 'summary': 'Organize the routes of each day.', - 'version': '12.0.1.2.0', + 'version': '12.0.2.0.0', 'category': 'Field Service', 'license': 'AGPL-3', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', diff --git a/fieldservice_route/migrations/12.0.2.0.0/pre-migration.py b/fieldservice_route/migrations/12.0.2.0.0/pre-migration.py new file mode 100644 index 0000000000..0088ff5c8a --- /dev/null +++ b/fieldservice_route/migrations/12.0.2.0.0/pre-migration.py @@ -0,0 +1,16 @@ +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def migrate(env, version): + if not version: + return + + index = 0 + for day in ('monday', 'tuesday', 'wednesday', 'thursday', 'friday', + 'saturday', 'sunday'): + env.execute("""UPDATE ir_model_data + SET name='fsm_route_day_%s' + WHERE name='fsm_route_day_%s' AND module='fieldservice_route';""" % + (index, day)) + index += 1 From 6f32bca296150406a52a4f6c8150eefba4084f82 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sat, 1 Feb 2020 19:13:25 -0600 Subject: [PATCH 268/631] [IMP] fieldservice_route --- fieldservice_route/models/fsm_route.py | 17 ++++++++++- .../models/fsm_route_dayroute.py | 30 ++++++++++++++++--- fieldservice_route/views/fsm_route.xml | 23 ++++++++++++-- .../views/fsm_route_dayroute.xml | 27 +++++++++++++++-- fieldservice_route/views/menu.xml | 23 +++++++++----- 5 files changed, 103 insertions(+), 17 deletions(-) diff --git a/fieldservice_route/models/fsm_route.py b/fieldservice_route/models/fsm_route.py index 56ae757c63..48f6ffd685 100644 --- a/fieldservice_route/models/fsm_route.py +++ b/fieldservice_route/models/fsm_route.py @@ -1,7 +1,6 @@ # Copyright (C) 2019 Open Source Integrators # Copyright (C) 2019 Serpent consulting Services # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). - from odoo import fields, models @@ -13,3 +12,19 @@ class FSMRoute(models.Model): territory_id = fields.Many2one('fsm.territory', string='Territory') fsm_person_id = fields.Many2one('fsm.person', string='Person') day_ids = fields.Many2many('fsm.route.day', string='Days') + max_order = fields.Integer('Maximum Orders', default=0, + help="Maximum number of orders per day route.") + + def run_on(self, date): + """ + :param date: date + :return: True if the route runs on the date, False otherwise. + """ + if date: + day_index = date.weekday() + day = self.env.ref( + 'fieldservice_route.fsm_route_day_' + str(day_index)) + if day in self.day_ids: + return True + else: + return False diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 20cb4fb863..01298abb3f 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -1,8 +1,9 @@ # Copyright (C) 2019 Open Source Integrators # Copyright (C) 2019 Serpent consulting Services # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from datetime import datetime from odoo import api, fields, models, _ -from odoo.exceptions import UserError +from odoo.exceptions import ValidationError class FSMRouteDayRoute(models.Model): @@ -13,6 +14,13 @@ class FSMRouteDayRoute(models.Model): def _get_default_person(self): return self.route_id.fsm_person_id.id or False + @api.model + def _get_default_date_start_planned(self): + if self.date: + return datetime.combine( + # TODO: Use the worker timezone and working schedule + self.date, datetime.strptime("8:00:01", '%H:%M:%S').time()) + @api.depends('route_id') def _compute_order_count(self): for rec in self: @@ -31,11 +39,14 @@ def _compute_order_count(self): domain="[('stage_type', '=', 'route')]", index=True, copy=False, default=lambda self: self._default_stage_id()) - territory_id = fields.Many2one('fsm.territory', string='Territory') + territory_id = fields.Many2one( + 'fsm.territory', related='route_id.territory_id', string='Territory') longitude = fields.Float("Longitude") latitude = fields.Float("Latitude") last_location_id = fields.Many2one('fsm.location', string='Last Location') - date_start_planned = fields.Datetime(string='Planned Start Time') + date_start_planned = fields.Datetime( + string='Planned Start Time', + default=_get_default_date_start_planned) start_location_id = fields.Many2one( 'fsm.location', string='Start Location') end_location_id = fields.Many2one('fsm.location', string='End Location') @@ -47,6 +58,9 @@ def _compute_order_count(self): string='Orders') order_count = fields.Integer(string='Number of Orders', compute=_compute_order_count) + order_max = fields.Integer( + related='route_id.max_order', string="Capacity", + help="Maximum numbers of orders that can be added to this day route.") _sql_constraints = [ ('fsm_route_dayroute_person_date_uniq', @@ -80,6 +94,14 @@ def check_day(self): day = self.env.ref( 'fieldservice_route.fsm_route_day_' + str(day_index)) if day.id not in rec.route_id.day_ids.ids: - raise UserError(_( + raise ValidationError(_( "The route %s does not run on %s!" % (rec.route_id.name, day.name))) + + @api.constrains('order_max', 'order_count') + def check_capacity(self): + for rec in self: + if rec.order_count > rec.order_max: + raise ValidationError(_( + "The day route is exceeding the maximum number of " + "orders of the route.")) diff --git a/fieldservice_route/views/fsm_route.xml b/fieldservice_route/views/fsm_route.xml index 7dc4de5c3d..7989570cc8 100644 --- a/fieldservice_route/views/fsm_route.xml +++ b/fieldservice_route/views/fsm_route.xml @@ -24,10 +24,27 @@ - - - + + + + + + + + + + + + + + + +
    diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml index 11c245b966..edf8293d08 100644 --- a/fieldservice_route/views/fsm_route_dayroute.xml +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -48,13 +48,14 @@ + + domain="[('dayroute_id', '=', False), ('fsm_route_id', '=', route_id)]"> @@ -90,7 +91,7 @@ Day Routes fsm.route.dayroute form - tree,form + tree,calendar,form

    Add Day Routes here. @@ -98,6 +99,28 @@ + + + fsm.route.dayroute.calendar + fsm.route.dayroute + + + + + + + + + + Day Routes + fsm.route.dayroute + form + calendar,tree + + fsm.route.graph diff --git a/fieldservice_route/views/menu.xml b/fieldservice_route/views/menu.xml index 11171fbb3b..96023f2019 100644 --- a/fieldservice_route/views/menu.xml +++ b/fieldservice_route/views/menu.xml @@ -1,28 +1,37 @@ - + + + + + - - + + + From 55cebe0aac6b7cf542ba85805a904a347eaedb8f Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sat, 1 Feb 2020 19:47:20 -0600 Subject: [PATCH 269/631] [FIX] fieldservice_route --- fieldservice_route/models/fsm_route_dayroute.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 01298abb3f..4a7e9ba6e6 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -101,7 +101,7 @@ def check_day(self): @api.constrains('order_max', 'order_count') def check_capacity(self): for rec in self: - if rec.order_count > rec.order_max: - raise ValidationError(_( - "The day route is exceeding the maximum number of " - "orders of the route.")) + if rec.order_count > rec.order_max: + raise ValidationError(_( + "The day route is exceeding the maximum number of " + "orders of the route.")) From 3ab97e0118aec2aaee49a962b274e6478ac138d4 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 6 Feb 2020 15:41:38 -0600 Subject: [PATCH 270/631] [FIX] fieldservice_route --- fieldservice_route/models/fsm_route.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_route/models/fsm_route.py b/fieldservice_route/models/fsm_route.py index 48f6ffd685..10070d1a2e 100644 --- a/fieldservice_route/models/fsm_route.py +++ b/fieldservice_route/models/fsm_route.py @@ -23,7 +23,7 @@ def run_on(self, date): if date: day_index = date.weekday() day = self.env.ref( - 'fieldservice_route.fsm_route_day_' + str(day_index)) + 'fieldservice_route.fsm_route_day_' + str(day_index)) if day in self.day_ids: return True else: From 5f67c0b0656df120569bd2e425a3bdb989aa4067 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sun, 9 Feb 2020 15:47:22 -0600 Subject: [PATCH 271/631] [FIX] fieldservice_route: Comments --- fieldservice_route/i18n/es_CL.po | 52 ++- .../i18n/fieldservice_route.pot | 48 ++- fieldservice_route/i18n/pt_BR.po | 387 ++++++++++++++++++ fieldservice_route/models/fsm_route.py | 5 +- .../models/fsm_route_dayroute.py | 6 +- .../views/fsm_route_dayroute.xml | 2 +- 6 files changed, 483 insertions(+), 17 deletions(-) create mode 100644 fieldservice_route/i18n/pt_BR.po diff --git a/fieldservice_route/i18n/es_CL.po b/fieldservice_route/i18n/es_CL.po index d789d063ae..24355a8be5 100644 --- a/fieldservice_route/i18n/es_CL.po +++ b/fieldservice_route/i18n/es_CL.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_route +# * fieldservice_route # msgid "" msgstr "" @@ -31,6 +31,12 @@ msgstr "Agregar rutas aquí." msgid "Assigned To" msgstr "Asignado a" +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Capacity" +msgstr "" + #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day msgid "Create a Route Day." @@ -63,9 +69,12 @@ msgstr "Ruta del día" #. module: fieldservice_route #: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_dash #: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_report +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_dash_dayroute #: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute #: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute_report +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_calendar #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_graph_view #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_pivot_view #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_tree @@ -182,6 +191,28 @@ msgstr "Longitud" msgid "Maximal Allowable Time (in hours)" msgstr "Tiempo máximo permitido (en horas)" +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Maximum" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order +#, fuzzy +#| msgid "Number of Orders" +msgid "Maximum Orders" +msgstr "Numero de Ordenes" + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route__max_order +msgid "Maximum number of orders per day route." +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route_dayroute__max_order +msgid "Maximum numbers of orders that can be added to this day route." +msgstr "" + #. module: fieldservice_route #: selection:fsm.route.day,name:0 msgid "Monday" @@ -195,9 +226,9 @@ msgid "Name" msgstr "Nombre" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:24 -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:69 -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:71 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:32 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:83 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:85 #, python-format msgid "New" msgstr "Nuevo" @@ -300,7 +331,13 @@ msgid "Territory" msgstr "Territorio" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:85 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:105 +#, python-format +msgid "The day route is exceeding the maximum number of orders of the route." +msgstr "" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:99 #, python-format msgid "The route %s does not run on %s!" msgstr "La ruta %s no corre en %s!" @@ -344,3 +381,8 @@ msgstr "Trabajador" #: sql_constraint:fsm.route.dayroute:0 msgid "You cannot create 2 day routes for the same worker on the same day!" msgstr "¡No puede crear rutas de 2 días para el mismo trabajador el mismo día!" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "orders per day route" +msgstr "" diff --git a/fieldservice_route/i18n/fieldservice_route.pot b/fieldservice_route/i18n/fieldservice_route.pot index 52b6af56c7..3e649b9170 100644 --- a/fieldservice_route/i18n/fieldservice_route.pot +++ b/fieldservice_route/i18n/fieldservice_route.pot @@ -28,6 +28,12 @@ msgstr "" msgid "Assigned To" msgstr "" +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Capacity" +msgstr "" + #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day msgid "Create a Route Day." @@ -60,9 +66,12 @@ msgstr "" #. module: fieldservice_route #: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_dash #: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_report +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_dash_dayroute #: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute #: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute_report +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_calendar #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_graph_view #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_pivot_view #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_tree @@ -179,6 +188,26 @@ msgstr "" msgid "Maximal Allowable Time (in hours)" msgstr "" +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Maximum" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order +msgid "Maximum Orders" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route__max_order +msgid "Maximum number of orders per day route." +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route_dayroute__max_order +msgid "Maximum numbers of orders that can be added to this day route." +msgstr "" + #. module: fieldservice_route #: selection:fsm.route.day,name:0 msgid "Monday" @@ -192,9 +221,9 @@ msgid "Name" msgstr "" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:24 -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:69 -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:71 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:32 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:83 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:85 #, python-format msgid "New" msgstr "" @@ -297,7 +326,13 @@ msgid "Territory" msgstr "" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:85 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:105 +#, python-format +msgid "The day route is exceeding the maximum number of orders of the route." +msgstr "" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:99 #, python-format msgid "The route %s does not run on %s!" msgstr "" @@ -342,3 +377,8 @@ msgstr "" msgid "You cannot create 2 day routes for the same worker on the same day!" msgstr "" +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "orders per day route" +msgstr "" + diff --git a/fieldservice_route/i18n/pt_BR.po b/fieldservice_route/i18n/pt_BR.po new file mode 100644 index 0000000000..03255450d0 --- /dev/null +++ b/fieldservice_route/i18n/pt_BR.po @@ -0,0 +1,387 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_route +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-02-10 15:33+0000\n" +"Last-Translator: Marcel Savegnago \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_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute +msgid "Add Day Routes here." +msgstr "Adicione Rotas do Dia aqui." + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route +msgid "Add Routes here." +msgstr "Adicione Rotas aqui." + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__person_id +msgid "Assigned To" +msgstr "Atribuído a" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Capacity" +msgstr "Capacidade" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day +msgid "Create a Route Day." +msgstr "Crie um Dia de Rota." + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date +msgid "Date" +msgstr "Data" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__dayroute_id +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Day Route" +msgstr "Rota do Dia" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_dash +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_report +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_dash_dayroute +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute_report +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_calendar +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_graph_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_pivot_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_tree +msgid "Day Routes" +msgstr "Rotas Diurnas" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute_report +msgid "Day Routes Report" +msgstr "Relatório de Rotas Diurnas" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__day_ids +msgid "Days" +msgstr "Dias" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__display_name +msgid "Display Name" +msgstr "Nome Exibido" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__end_location_id +msgid "End Location" +msgstr "Localização Final" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Equipment" +msgstr "Equipamento" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_location +msgid "Field Service Location" +msgstr "Localização do Serviço de Campo" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_order +msgid "Field Service Order" +msgstr "Ordem de Serviço de Campo" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route +msgid "Field Service Route" +msgstr "Rota de Serviço de Campo" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route_dayroute +msgid "Field Service Route Dayroute" +msgstr "Dia da Rota do Serviço de Campo" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_stage +msgid "Field Service Stage" +msgstr "Estágio do Serviço de Campo" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Friday" +msgstr "Sexta" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__id +msgid "ID" +msgstr "ID" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__last_location_id +msgid "Last Location" +msgstr "Última Localização" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute____last_update +msgid "Last Modified on" +msgstr "Última Modificação em" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__latitude +msgid "Latitude" +msgstr "Latitude" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Location" +msgstr "Localização" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__longitude +msgid "Longitude" +msgstr "Longitude" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_allow_time +msgid "Maximal Allowable Time (in hours)" +msgstr "Tempo Máximo Permitido (em horas)" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Maximum" +msgstr "Máximo" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order +msgid "Maximum Orders" +msgstr "Máximo de Ordens" + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route__max_order +msgid "Maximum number of orders per day route." +msgstr "Número máximo de ordens por rota diária." + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route_dayroute__max_order +msgid "Maximum numbers of orders that can be added to this day route." +msgstr "Números máximos de ordens que podem ser adicionados a este dia de rota." + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Monday" +msgstr "Segunda" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__name +msgid "Name" +msgstr "Nome" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:32 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:83 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:85 +#, python-format +msgid "New" +msgstr "Novo" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_count +msgid "Number of Orders" +msgstr "Número de Pedidos" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Order" +msgstr "Ordem" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Orders" +msgstr "Ordens" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__fsm_person_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__person_id +msgid "Person" +msgstr "Pessoa" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date_start_planned +msgid "Planned Start Time" +msgstr "Horário de Início Planejado" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Planning" +msgstr "Planejamento" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Positioning" +msgstr "Posicionamento" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__route_id +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Route" +msgstr "Rota" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_day +#: model:ir.model,name:fieldservice_route.model_fsm_route_day +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_tree_view +msgid "Route Day" +msgstr "Dia da Rota" + +#. module: fieldservice_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_day +msgid "Route Days" +msgstr "Dias de Rota" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_tree +msgid "Routes" +msgstr "Rotas" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Saturday" +msgstr "Sábado" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__stage_id +msgid "Stage" +msgstr "Estágio" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__start_location_id +msgid "Start Location" +msgstr "Localização Inical" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Sunday" +msgstr "Domingo" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__team_id +msgid "Team" +msgstr "Equipe" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__territory_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__territory_id +msgid "Territory" +msgstr "Território" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:105 +#, python-format +msgid "The day route is exceeding the maximum number of orders of the route." +msgstr "A rota do dia está excedendo o número máximo de ordens da rota." + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:99 +#, python-format +msgid "The route %s does not run on %s!" +msgstr "A rota %s não funciona em %s!" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Thursday" +msgstr "Quinta" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__work_time +msgid "Time before overtime (in hours)" +msgstr "Tempo antes da hora extra (em horas)" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Timing" +msgstr "Cronometragem" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Tuesday" +msgstr "Terça" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__stage_type +msgid "Type" +msgstr "Tipo" + +#. module: fieldservice_route +#: selection:fsm.route.day,name:0 +msgid "Wednesday" +msgstr "Quarta" + +#. module: fieldservice_route +#: selection:fsm.stage,stage_type:0 +msgid "Worker" +msgstr "Profissional" + +#. module: fieldservice_route +#: sql_constraint:fsm.route.dayroute:0 +msgid "You cannot create 2 day routes for the same worker on the same day!" +msgstr "" +"Você não pode criar rotas de 2 dias para o mesmo trabalhador no mesmo dia!" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "orders per day route" +msgstr "ordens por dia de rota" diff --git a/fieldservice_route/models/fsm_route.py b/fieldservice_route/models/fsm_route.py index 10070d1a2e..5fd7f9e4ee 100644 --- a/fieldservice_route/models/fsm_route.py +++ b/fieldservice_route/models/fsm_route.py @@ -24,7 +24,4 @@ def run_on(self, date): day_index = date.weekday() day = self.env.ref( 'fieldservice_route.fsm_route_day_' + str(day_index)) - if day in self.day_ids: - return True - else: - return False + return day in self.day_ids diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index 4a7e9ba6e6..f13b990d60 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -58,7 +58,7 @@ def _compute_order_count(self): string='Orders') order_count = fields.Integer(string='Number of Orders', compute=_compute_order_count) - order_max = fields.Integer( + max_order = fields.Integer( related='route_id.max_order', string="Capacity", help="Maximum numbers of orders that can be added to this day route.") @@ -98,10 +98,10 @@ def check_day(self): "The route %s does not run on %s!" % (rec.route_id.name, day.name))) - @api.constrains('order_max', 'order_count') + @api.constrains('max_order', 'order_count') def check_capacity(self): for rec in self: - if rec.order_count > rec.order_max: + if rec.order_count > rec.max_order: raise ValidationError(_( "The day route is exceeding the maximum number of " "orders of the route.")) diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml index edf8293d08..ed4f77c9af 100644 --- a/fieldservice_route/views/fsm_route_dayroute.xml +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -48,7 +48,7 @@ - + From a57d4936894c3d76e6260d130d107eaf6281c2b4 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 19 Mar 2020 17:55:50 -0600 Subject: [PATCH 272/631] [IMP] fieldservice_route --- .../i18n/fieldservice_route.pot | 18 +++- fieldservice_route/models/fsm_order.py | 86 +++++++++++-------- .../models/fsm_route_dayroute.py | 79 +++++++++-------- fieldservice_route/tests/test_fsm_order.py | 3 +- .../views/fsm_route_dayroute.xml | 3 +- 5 files changed, 116 insertions(+), 73 deletions(-) diff --git a/fieldservice_route/i18n/fieldservice_route.pot b/fieldservice_route/i18n/fieldservice_route.pot index 3e649b9170..86cb144f66 100644 --- a/fieldservice_route/i18n/fieldservice_route.pot +++ b/fieldservice_route/i18n/fieldservice_route.pot @@ -29,7 +29,11 @@ msgid "Assigned To" msgstr "" #. module: fieldservice_route -#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_remaining +msgid "Available Capacity" +msgstr "" + +#. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Capacity" msgstr "" @@ -193,6 +197,11 @@ msgstr "" msgid "Maximum" msgstr "" +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +msgid "Maximum Capacity" +msgstr "" + #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order msgid "Maximum Orders" @@ -327,12 +336,14 @@ msgstr "" #. module: fieldservice_route #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:105 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:116 #, python-format msgid "The day route is exceeding the maximum number of orders of the route." msgstr "" #. module: fieldservice_route #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:99 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:110 #, python-format msgid "The route %s does not run on %s!" msgstr "" @@ -373,8 +384,9 @@ msgid "Worker" msgstr "" #. module: fieldservice_route -#: sql_constraint:fsm.route.dayroute:0 -msgid "You cannot create 2 day routes for the same worker on the same day!" +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:22 +#, python-format +msgid "You must create a FSM team first." msgstr "" #. module: fieldservice_route diff --git a/fieldservice_route/models/fsm_order.py b/fieldservice_route/models/fsm_order.py index 42367dbd9a..50c461fbad 100644 --- a/fieldservice_route/models/fsm_order.py +++ b/fieldservice_route/models/fsm_order.py @@ -1,8 +1,9 @@ # Copyright (C) 2019 Open Source Integrators # Copyright (C) 2019 Serpent consulting Services # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). - +from datetime import datetime from odoo import api, fields, models +from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT class FSMOrder(models.Model): @@ -22,51 +23,68 @@ def _get_default_person(self): 'fsm.person', string='Assigned To', index=True, default=_get_default_person) - def prepare_dayroute_values(self, person_id, date_start): + def prepare_dayroute_values(self, values): + return { + 'person_id': values['person_id'], + 'date': values['date'], + 'route_id': values['route_id']} + + def _get_dayroute_values(self, vals): + date = False + if vals.get('scheduled_date_start'): + if type(vals.get('scheduled_date_start')) == str: + date = datetime.strptime(vals.get('scheduled_date_start'), + DEFAULT_SERVER_DATETIME_FORMAT).date() + elif isinstance(vals.get('scheduled_date_start'), datetime): + date = vals.get('scheduled_date_start').date() return { - 'person_id': person_id, - 'date': date_start, - 'route_id': self.fsm_route_id.id, - 'team_id': self.team_id.id, - 'order_ids': [(4, self.id)] + 'person_id': + vals.get('person_id') or self.person_id.id or + self.fsm_route_id.fsm_person_id.id, + 'date': date or self.scheduled_date_start.date(), + 'route_id': vals.get('fsm_route_id') or self.fsm_route_id.id, } + def _get_dayroute_domain(self, values): + domain = [('person_id', '=', values['person_id']), + ('date', '=', values['date']), + ('order_remaining', '>', 0)] + return domain + + def _can_create_dayroute(self, values): + return values['person_id'] and values['date'] + def _manage_fsm_route(self, vals): dayroute_obj = self.env['fsm.route.dayroute'] - for rec in self: - person_id = vals.get('person_id') or rec.person_id.id or \ - rec.fsm_route_id.fsm_person_id.id - scheduled_date_start = vals.get('scheduled_date_start') or \ - rec.scheduled_date_start - dayroute = dayroute_obj.search([ - ('person_id', '=', person_id), - ('date', '=', scheduled_date_start)], - limit=1) - old_dayroute_id = rec.dayroute_id - if dayroute: + values = self._get_dayroute_values(vals) + domain = self._get_dayroute_domain(values) + dayroute = dayroute_obj.search(domain, limit=1) + if dayroute: + vals.update({'dayroute_id': dayroute.id}) + else: + if self._can_create_dayroute(values): + dayroute = dayroute_obj.create( + self.prepare_dayroute_values(values)) vals.update({ 'dayroute_id': dayroute.id}) - if old_dayroute_id and not old_dayroute_id.order_ids: - old_dayroute_id.unlink() - elif not dayroute and person_id or scheduled_date_start: - dayroute_obj.create(rec.prepare_dayroute_values( - person_id, scheduled_date_start - )) - if old_dayroute_id and not old_dayroute_id.order_ids: - old_dayroute_id.unlink() + # If this was the last order of the dayroute, + # delete the dayroute + if self.dayroute_id and not self.dayroute_id.order_ids: + self.dayroute_id.unlink() return vals @api.model def create(self, vals): + location = self.env['fsm.location'].browse(vals.get('location_id')) + if not vals.get('fsm_route_id'): + vals.update({ + 'fsm_route_id': location.fsm_route_id.id}) if not vals.get('person_id'): - location = self.env['fsm.location'].browse(vals.get('location_id')) vals.update({ - 'person_id': location.fsm_route_id.fsm_person_id.id, - }) - res = super(FSMOrder, self).create(vals) - if res.person_id and res.scheduled_date_start: - res._manage_fsm_route(vals) - return res + 'person_id': location.fsm_route_id.fsm_person_id.id}) + if vals.get('person_id') and vals.get('scheduled_date_start'): + vals = self._manage_fsm_route(vals) + return super().create(vals) @api.multi def write(self, vals): @@ -81,4 +99,4 @@ def write(self, vals): (vals.get('scheduled_date_start', False) or rec.scheduled_date_start): vals = rec._manage_fsm_route(vals) - return super(FSMOrder, self).write(vals) + return super().write(vals) diff --git a/fieldservice_route/models/fsm_route_dayroute.py b/fieldservice_route/models/fsm_route_dayroute.py index f13b990d60..b361796589 100644 --- a/fieldservice_route/models/fsm_route_dayroute.py +++ b/fieldservice_route/models/fsm_route_dayroute.py @@ -4,37 +4,37 @@ from datetime import datetime from odoo import api, fields, models, _ from odoo.exceptions import ValidationError +from odoo.tools import DEFAULT_SERVER_DATE_FORMAT class FSMRouteDayRoute(models.Model): _name = 'fsm.route.dayroute' _description = 'Field Service Route Dayroute' - @api.model - def _get_default_person(self): - return self.route_id.fsm_person_id.id or False - - @api.model - def _get_default_date_start_planned(self): - if self.date: - return datetime.combine( - # TODO: Use the worker timezone and working schedule - self.date, datetime.strptime("8:00:01", '%H:%M:%S').time()) + def _default_team_id(self): + team_ids = self.env['fsm.team'].\ + search([('company_id', 'in', (self.env.user.company_id.id, + False))], + order='sequence asc', limit=1) + if team_ids: + return team_ids[0] + else: + raise ValidationError(_( + "You must create a FSM team first.")) - @api.depends('route_id') + @api.depends('route_id', 'order_ids') def _compute_order_count(self): for rec in self: - rec.order_count = 0 - if rec.order_ids: - rec.order_count = len(rec.order_ids) + rec.order_count = len(rec.order_ids) + rec.order_remaining = rec.max_order - rec.order_count - name = fields.Char(string='Name', required=True, + name = fields.Char(string='Name', required=True, copy=False, default=lambda self: _('New')) - person_id = fields.Many2one('fsm.person', string='Person', - default=_get_default_person) + person_id = fields.Many2one('fsm.person', string='Person') route_id = fields.Many2one('fsm.route', string='Route') date = fields.Date(string='Date', required=True) - team_id = fields.Many2one('fsm.team', string='Team') + team_id = fields.Many2one('fsm.team', string='Team', + default=lambda self: self._default_team_id()) stage_id = fields.Many2one('fsm.stage', string='Stage', domain="[('stage_type', '=', 'route')]", index=True, copy=False, @@ -44,9 +44,7 @@ def _compute_order_count(self): longitude = fields.Float("Longitude") latitude = fields.Float("Latitude") last_location_id = fields.Many2one('fsm.location', string='Last Location') - date_start_planned = fields.Datetime( - string='Planned Start Time', - default=_get_default_date_start_planned) + date_start_planned = fields.Datetime(string='Planned Start Time') start_location_id = fields.Many2one( 'fsm.location', string='Start Location') end_location_id = fields.Many2one('fsm.location', string='End Location') @@ -56,19 +54,14 @@ def _compute_order_count(self): default=10.0) order_ids = fields.One2many('fsm.order', 'dayroute_id', string='Orders') - order_count = fields.Integer(string='Number of Orders', - compute=_compute_order_count) + order_count = fields.Integer( + compute=_compute_order_count, string='Number of Orders', store=True) + order_remaining = fields.Integer( + compute=_compute_order_count, string='Available Capacity', store=True) max_order = fields.Integer( - related='route_id.max_order', string="Capacity", + related='route_id.max_order', string="Maximum Capacity", store=True, help="Maximum numbers of orders that can be added to this day route.") - _sql_constraints = [ - ('fsm_route_dayroute_person_date_uniq', - 'unique (person_id, date)', - "You cannot create 2 day routes for the same" - " worker on the same day!"), - ] - def _default_stage_id(self): return self.env['fsm.stage'].search([('stage_type', '=', 'route'), ('is_default', '=', True)], @@ -76,13 +69,31 @@ def _default_stage_id(self): @api.onchange('route_id') def _onchange_person(self): - self.fsm_person_id = self._get_default_person() + self.person_id = self.route_id.fsm_person_id.id + + @api.onchange('date') + def _onchange_date(self): + if self.date: + # TODO: Use the worker timezone and working schedule + self.date_start_planned = datetime.combine( + self.date, datetime.strptime("8:00:00", '%H:%M:%S').time()) @api.model def create(self, vals): if vals.get('name', _('New')) == _('New'): vals['name'] = self.env['ir.sequence'].next_by_code( 'fsm.route.dayroute') or _('New') + if not vals.get('date_start_planned', False) and \ + vals.get('date', False): + # TODO: Use the worker timezone and working schedule + date = vals.get('date') + if type(vals.get('date')) == str: + date = datetime.strptime(vals.get('date'), + DEFAULT_SERVER_DATE_FORMAT).date() + vals.update({ + 'date_start_planned': datetime.combine( + date, datetime.strptime("8:00:00", '%H:%M:%S').time()) + }) return super().create(vals) @api.constrains('date', 'route_id') @@ -98,10 +109,10 @@ def check_day(self): "The route %s does not run on %s!" % (rec.route_id.name, day.name))) - @api.constrains('max_order', 'order_count') + @api.constrains('route_id', 'max_order', 'order_count') def check_capacity(self): for rec in self: - if rec.order_count > rec.max_order: + if rec.route_id and rec.order_count > rec.max_order: raise ValidationError(_( "The day route is exceeding the maximum number of " "orders of the route.")) diff --git a/fieldservice_route/tests/test_fsm_order.py b/fieldservice_route/tests/test_fsm_order.py index b0ad3ac0c3..5bbb7de480 100644 --- a/fieldservice_route/tests/test_fsm_order.py +++ b/fieldservice_route/tests/test_fsm_order.py @@ -28,8 +28,9 @@ def setUp(self): self.fsm_route_id = self.fsm_route_obj.create( { 'name': 'Demo Route', + 'max_order': 10, 'fsm_person_id': self.test_person.id, - 'day_ids': [(6, 0, self.days)] + 'day_ids': [(6, 0, self.days)], }) self.test_location.fsm_route_id = self.fsm_route_id.id diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml index ed4f77c9af..132c0413ca 100644 --- a/fieldservice_route/views/fsm_route_dayroute.xml +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -50,6 +50,7 @@ + @@ -118,7 +119,7 @@ Day Routes fsm.route.dayroute form - calendar,tree + calendar,tree,form From 9b14ebaabce56d4af60c20f97251d855ca19d930 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 23 Mar 2020 19:20:08 +0000 Subject: [PATCH 273/631] fieldservice_route 12.0.2.1.0 --- fieldservice_route/__manifest__.py | 2 +- fieldservice_route/i18n/es_CL.po | 44 ++++++++++++------- .../i18n/fieldservice_route.pot | 2 - fieldservice_route/i18n/pt_BR.po | 34 ++++++++++---- 4 files changed, 55 insertions(+), 27 deletions(-) diff --git a/fieldservice_route/__manifest__.py b/fieldservice_route/__manifest__.py index c569e821b0..8155abee9b 100644 --- a/fieldservice_route/__manifest__.py +++ b/fieldservice_route/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Field Service Route', 'summary': 'Organize the routes of each day.', - 'version': '12.0.2.0.0', + 'version': '12.0.2.1.0', 'category': 'Field Service', 'license': 'AGPL-3', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', diff --git a/fieldservice_route/i18n/es_CL.po b/fieldservice_route/i18n/es_CL.po index 24355a8be5..eb7ed0936c 100644 --- a/fieldservice_route/i18n/es_CL.po +++ b/fieldservice_route/i18n/es_CL.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-01-16 22:38+0000\n" +"PO-Revision-Date: 2020-03-25 17:13+0000\n" "Last-Translator: Nelson Ramírez Sánchez \n" "Language-Team: none\n" "Language: es_CL\n" @@ -32,10 +32,14 @@ msgid "Assigned To" msgstr "Asignado a" #. module: fieldservice_route -#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_remaining +msgid "Available Capacity" +msgstr "Capacidad Disponible" + +#. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Capacity" -msgstr "" +msgstr "Capacidad" #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day @@ -194,24 +198,27 @@ msgstr "Tiempo máximo permitido (en horas)" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Maximum" -msgstr "" +msgstr "Máximo" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +msgid "Maximum Capacity" +msgstr "Capacidad Máxima" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order -#, fuzzy -#| msgid "Number of Orders" msgid "Maximum Orders" -msgstr "Numero de Ordenes" +msgstr "Pedidos Máximos" #. module: fieldservice_route #: model:ir.model.fields,help:fieldservice_route.field_fsm_route__max_order msgid "Maximum number of orders per day route." -msgstr "" +msgstr "Número máximo de pedidos por ruta diaria" #. module: fieldservice_route #: model:ir.model.fields,help:fieldservice_route.field_fsm_route_dayroute__max_order msgid "Maximum numbers of orders that can be added to this day route." -msgstr "" +msgstr "Número máximo de pedidos que se pueden agregar a esta ruta de día." #. module: fieldservice_route #: selection:fsm.route.day,name:0 @@ -331,13 +338,13 @@ msgid "Territory" msgstr "Territorio" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:105 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:116 #, python-format msgid "The day route is exceeding the maximum number of orders of the route." -msgstr "" +msgstr "La ruta del día excede el número máximo de pedidos de la ruta." #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:99 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:110 #, python-format msgid "The route %s does not run on %s!" msgstr "La ruta %s no corre en %s!" @@ -378,11 +385,16 @@ msgid "Worker" msgstr "Trabajador" #. module: fieldservice_route -#: sql_constraint:fsm.route.dayroute:0 -msgid "You cannot create 2 day routes for the same worker on the same day!" -msgstr "¡No puede crear rutas de 2 días para el mismo trabajador el mismo día!" +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:22 +#, python-format +msgid "You must create a FSM team first." +msgstr "Primero debe crear un equipo FSM." #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "orders per day route" -msgstr "" +msgstr "pedidos por día ruta" + +#~ msgid "You cannot create 2 day routes for the same worker on the same day!" +#~ msgstr "" +#~ "¡No puede crear rutas de 2 días para el mismo trabajador el mismo día!" diff --git a/fieldservice_route/i18n/fieldservice_route.pot b/fieldservice_route/i18n/fieldservice_route.pot index 86cb144f66..d4f1e149c3 100644 --- a/fieldservice_route/i18n/fieldservice_route.pot +++ b/fieldservice_route/i18n/fieldservice_route.pot @@ -335,14 +335,12 @@ msgid "Territory" msgstr "" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:105 #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:116 #, python-format msgid "The day route is exceeding the maximum number of orders of the route." msgstr "" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:99 #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:110 #, python-format msgid "The route %s does not run on %s!" diff --git a/fieldservice_route/i18n/pt_BR.po b/fieldservice_route/i18n/pt_BR.po index 03255450d0..19874f4fe0 100644 --- a/fieldservice_route/i18n/pt_BR.po +++ b/fieldservice_route/i18n/pt_BR.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_route +# * fieldservice_route # msgid "" msgstr "" @@ -32,7 +32,13 @@ msgid "Assigned To" msgstr "Atribuído a" #. module: fieldservice_route -#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_remaining +#, fuzzy +#| msgid "Capacity" +msgid "Available Capacity" +msgstr "Capacidade" + +#. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Capacity" msgstr "Capacidade" @@ -196,6 +202,13 @@ msgstr "Tempo Máximo Permitido (em horas)" msgid "Maximum" msgstr "Máximo" +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +#, fuzzy +#| msgid "Capacity" +msgid "Maximum Capacity" +msgstr "Capacidade" + #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order msgid "Maximum Orders" @@ -209,7 +222,8 @@ msgstr "Número máximo de ordens por rota diária." #. module: fieldservice_route #: model:ir.model.fields,help:fieldservice_route.field_fsm_route_dayroute__max_order msgid "Maximum numbers of orders that can be added to this day route." -msgstr "Números máximos de ordens que podem ser adicionados a este dia de rota." +msgstr "" +"Números máximos de ordens que podem ser adicionados a este dia de rota." #. module: fieldservice_route #: selection:fsm.route.day,name:0 @@ -329,13 +343,13 @@ msgid "Territory" msgstr "Território" #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:105 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:116 #, python-format msgid "The day route is exceeding the maximum number of orders of the route." msgstr "A rota do dia está excedendo o número máximo de ordens da rota." #. module: fieldservice_route -#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:99 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:110 #, python-format msgid "The route %s does not run on %s!" msgstr "A rota %s não funciona em %s!" @@ -376,12 +390,16 @@ msgid "Worker" msgstr "Profissional" #. module: fieldservice_route -#: sql_constraint:fsm.route.dayroute:0 -msgid "You cannot create 2 day routes for the same worker on the same day!" +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:22 +#, python-format +msgid "You must create a FSM team first." msgstr "" -"Você não pode criar rotas de 2 dias para o mesmo trabalhador no mesmo dia!" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "orders per day route" msgstr "ordens por dia de rota" + +#~ msgid "You cannot create 2 day routes for the same worker on the same day!" +#~ msgstr "" +#~ "Você não pode criar rotas de 2 dias para o mesmo trabalhador no mesmo dia!" From 46926c5d2f2c20eefbaed93170a080a12814f01a Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 27 Mar 2020 21:11:01 -0600 Subject: [PATCH 274/631] [IMP] fieldservice_route --- fieldservice_route/i18n/fieldservice_route.pot | 10 ++++++++++ .../views/fsm_route_dayroute.xml | 18 +++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/fieldservice_route/i18n/fieldservice_route.pot b/fieldservice_route/i18n/fieldservice_route.pot index d4f1e149c3..b0f667e524 100644 --- a/fieldservice_route/i18n/fieldservice_route.pot +++ b/fieldservice_route/i18n/fieldservice_route.pot @@ -33,11 +33,21 @@ msgstr "" msgid "Available Capacity" msgstr "" +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Cancel order" +msgstr "" + #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Capacity" msgstr "" +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Complete order" +msgstr "" + #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day msgid "Create a Route Day." diff --git a/fieldservice_route/views/fsm_route_dayroute.xml b/fieldservice_route/views/fsm_route_dayroute.xml index 132c0413ca..17d8f7f359 100644 --- a/fieldservice_route/views/fsm_route_dayroute.xml +++ b/fieldservice_route/views/fsm_route_dayroute.xml @@ -37,7 +37,8 @@ - + @@ -63,6 +64,15 @@ + - - [('stage_id', 'in', - (%(fieldservice.fsm_stage_new)d, - %(fieldservice_isp_flow.fsm_stage_confirmed)d, - %(fieldservice_isp_flow.fsm_stage_requested)d, - %(fieldservice_isp_flow.fsm_stage_assigned)d))] - - - - [('stage_id', 'in', - (%(fieldservice_isp_flow.fsm_stage_scheduled)d, - %(fieldservice_isp_flow.fsm_stage_enroute)d, - %(fieldservice_isp_flow.fsm_stage_started)d, - %(fieldservice.fsm_stage_completed)d))] - + From ca6f0c51d93874df4aa7664e363216febb36442e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 29 Nov 2019 20:33:18 +0000 Subject: [PATCH 294/631] fieldservice_isp_flow 12.0.1.1.0 Added translation using Weblate (Portuguese (Brazil)) [ADD] Spanish (es) translation Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (15 of 15 strings) Translation: field-service-12.0/field-service-12.0-fieldservice_isp_flow Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_isp_flow/pt_BR/ --- fieldservice_isp_flow/__manifest__.py | 2 +- fieldservice_isp_flow/i18n/es.po | 101 +++++++++++++++++++++++++ fieldservice_isp_flow/i18n/pt_BR.po | 102 ++++++++++++++++++++++++++ 3 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 fieldservice_isp_flow/i18n/es.po create mode 100644 fieldservice_isp_flow/i18n/pt_BR.po diff --git a/fieldservice_isp_flow/__manifest__.py b/fieldservice_isp_flow/__manifest__.py index dd46cbc7d9..a904bb553d 100644 --- a/fieldservice_isp_flow/__manifest__.py +++ b/fieldservice_isp_flow/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Flow for ISP', 'summary': 'Field Service workflow for Internet Service Providers', - 'version': '12.0.1.0.1', + 'version': '12.0.1.1.0', 'category': 'Field Service', 'author': 'Open Source Integrators, ' diff --git a/fieldservice_isp_flow/i18n/es.po b/fieldservice_isp_flow/i18n/es.po new file mode 100644 index 0000000000..effb8f77c2 --- /dev/null +++ b/fieldservice_isp_flow/i18n/es.po @@ -0,0 +1,101 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_isp_flow +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-22 04:35+0000\n" +"Last-Translator: Nelson Ramírez Sánchez \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 3.8\n" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Assign" +msgstr "Asignar" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:27 +#, python-format +msgid "Cannot move to Assigned until 'Assigned To' is filled in" +msgstr "No se puede mover a Asignado hasta que se complete 'Asignado a'" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:52 +#, python-format +msgid "Cannot move to Complete until 'Actual End' is filled in" +msgstr "No se puede mover a Completado hasta que se complete 'Fin Real'" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:55 +#, python-format +msgid "Cannot move to Complete until 'Resolution' is filled in" +msgstr "No se puede mover a Completo hasta que se complete 'Resolución'" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:17 +#, python-format +msgid "Cannot move to Requested until 'Request Workers' is filled in" +msgstr "" +"No se puede pasar a Solicitado hasta que se complete 'Solicitar trabajadores'" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:35 +#, python-format +msgid "Cannot move to Scheduled until both 'Assigned To' and 'Scheduled Start Date' are filled in" +msgstr "" +"No se puede mover a Programado hasta que se completen tanto 'Asignado a' " +"como 'Fecha de inicio programada'" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:45 +#, python-format +msgid "Cannot move to Start until 'Actual Start' is filled in" +msgstr "No se puede mover a Inicio hasta que se complete 'Inicio Real'" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Confirm" +msgstr "Confirmar" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "En Route" +msgstr "En Ruta" + +#. module: fieldservice_isp_flow +#: model:ir.model,name:fieldservice_isp_flow.model_fsm_order +msgid "Field Service Order" +msgstr "Orden de Servicio de Campo" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_search_view +msgid "Orders" +msgstr "Ordenes" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_search_view +msgid "Past Due Orders" +msgstr "Órdenes Vencidas" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Request" +msgstr "Solicitud" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Schedule" +msgstr "Calendario" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Start" +msgstr "Iniciar" diff --git a/fieldservice_isp_flow/i18n/pt_BR.po b/fieldservice_isp_flow/i18n/pt_BR.po new file mode 100644 index 0000000000..946f08b3ca --- /dev/null +++ b/fieldservice_isp_flow/i18n/pt_BR.po @@ -0,0 +1,102 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_isp_flow +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-02-05 22:13+0000\n" +"Last-Translator: Marcel Savegnago \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_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Assign" +msgstr "Atribuir" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:27 +#, python-format +msgid "Cannot move to Assigned until 'Assigned To' is filled in" +msgstr "Não pode passar para Atribuído até que 'Atribuído' seja preenchido" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:52 +#, python-format +msgid "Cannot move to Complete until 'Actual End' is filled in" +msgstr "Não pode passar para Completado até que ‘Fim Real’ seja preenchido" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:55 +#, python-format +msgid "Cannot move to Complete until 'Resolution' is filled in" +msgstr "Não pode passar para Concluído até que 'Resolução' seja preenchida" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:17 +#, python-format +msgid "Cannot move to Requested until 'Request Workers' is filled in" +msgstr "" +"Não pode mover para Solicitado até que ’Solicitar trabalhadores' seja " +"preenchido" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:35 +#, python-format +msgid "Cannot move to Scheduled until both 'Assigned To' and 'Scheduled Start Date' are filled in" +msgstr "" +"Não pode passar para Agendado até que tanto 'Atribuído' quanto 'Data de " +"início programada' sejam preenchidos" + +#. module: fieldservice_isp_flow +#: code:addons/fieldservice_isp_flow/models/fsm_order.py:45 +#, python-format +msgid "Cannot move to Start until 'Actual Start' is filled in" +msgstr "Não pode passar para Iniciado até que ‘Inicio Real seja preenchido" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Confirm" +msgstr "Confirmar" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "En Route" +msgstr "Em Rota" + +#. module: fieldservice_isp_flow +#: model:ir.model,name:fieldservice_isp_flow.model_fsm_order +msgid "Field Service Order" +msgstr "Ordem de Serviço de Campo" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_search_view +msgid "Orders" +msgstr "Ordens" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_search_view +msgid "Past Due Orders" +msgstr "Ordens Vencidas" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Request" +msgstr "Requisição" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Schedule" +msgstr "Cronograma" + +#. module: fieldservice_isp_flow +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_flow.fsm_order_form +msgid "Start" +msgstr "Iniciar" From 5d12afb9449b8d89e3c44d7989446c2b882d798f Mon Sep 17 00:00:00 2001 From: scampbell Date: Thu, 28 May 2020 12:45:44 -0700 Subject: [PATCH 295/631] [IMP] ISP Stage Notifications [IMP] Flake8 --- fieldservice_isp_flow/models/fsm_order.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/fieldservice_isp_flow/models/fsm_order.py b/fieldservice_isp_flow/models/fsm_order.py index df153e010c..fd89b2d82d 100644 --- a/fieldservice_isp_flow/models/fsm_order.py +++ b/fieldservice_isp_flow/models/fsm_order.py @@ -1,7 +1,7 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, _ +from odoo import api, models, _ from odoo.exceptions import ValidationError @@ -55,3 +55,24 @@ def action_complete(self): raise ValidationError(_("Cannot move to Complete " + "until 'Resolution' is filled in")) return super(FSMOrder, self).action_complete() + + @api.multi + def _track_subtype(self, init_values): + self.ensure_one() + if 'stage_id' in init_values: + if self.stage_id.id == self.env.\ + ref('fieldservice_isp_flow.fsm_stage_confirmed').id: + return 'fieldservice.mt_order_confirmed' + if self.stage_id.id == self.env.\ + ref('fieldservice_isp_flow.fsm_stage_scheduled').id: + return 'fieldservice.mt_order_scheduled' + if self.stage_id.id == self.env.\ + ref('fieldservice_isp_flow.fsm_stage_assigned').id: + return 'fieldservice.mt_order_assigned' + if self.stage_id.id == self.env.\ + ref('fieldservice_isp_flow.fsm_stage_enroute').id: + return 'fieldservice.mt_order_enroute' + if self.stage_id.id == self.env.\ + ref('fieldservice_isp_flow.fsm_stage_started').id: + return 'fieldservice.mt_order_started' + return super()._track_subtype(init_values) From ab921cc98ff581a48bf36a695c9ac433a4812507 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 3 Jun 2020 13:54:07 +0000 Subject: [PATCH 296/631] fieldservice_isp_flow 12.0.1.1.1 --- fieldservice_isp_flow/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_flow/__manifest__.py b/fieldservice_isp_flow/__manifest__.py index a904bb553d..1de6eb78dc 100644 --- a/fieldservice_isp_flow/__manifest__.py +++ b/fieldservice_isp_flow/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Flow for ISP', 'summary': 'Field Service workflow for Internet Service Providers', - 'version': '12.0.1.1.0', + 'version': '12.0.1.1.1', 'category': 'Field Service', 'author': 'Open Source Integrators, ' From e8ee9bdc10e36345698f343bd72b6605d69d80d9 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Thu, 11 Feb 2021 11:47:39 +0530 Subject: [PATCH 297/631] [14.0][MIG]fieldservice_isp_flow --- fieldservice_isp_flow/__manifest__.py | 34 +++-- fieldservice_isp_flow/models/fsm_order.py | 124 +++++++++++------- fieldservice_isp_flow/tests/__init__.py | 4 + .../tests/test_fsm_isp_flow.py | 116 ++++++++++++++++ fieldservice_isp_flow/views/fsm_order.xml | 113 +++++++++------- .../odoo/addons/fieldservice_isp_flow | 1 + setup/fieldservice_isp_flow/setup.py | 6 + 7 files changed, 286 insertions(+), 112 deletions(-) create mode 100644 fieldservice_isp_flow/tests/__init__.py create mode 100644 fieldservice_isp_flow/tests/test_fsm_isp_flow.py create mode 120000 setup/fieldservice_isp_flow/odoo/addons/fieldservice_isp_flow create mode 100644 setup/fieldservice_isp_flow/setup.py diff --git a/fieldservice_isp_flow/__manifest__.py b/fieldservice_isp_flow/__manifest__.py index 1de6eb78dc..149b33e44c 100644 --- a/fieldservice_isp_flow/__manifest__.py +++ b/fieldservice_isp_flow/__manifest__.py @@ -1,24 +1,22 @@ -# Copyright (C) 2019 - Akretion +# Copyright (C) 2021 - Akretion # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service - Flow for ISP', - 'summary': 'Field Service workflow for Internet Service Providers', - 'version': '12.0.1.1.1', - 'category': 'Field Service', - 'author': - 'Open Source Integrators, ' - 'Akretion, Odoo Community Association (OCA)', - 'website': 'https://github.com/OCA/field-service', - 'depends': [ - 'fieldservice', + "name": "Field Service - Flow for ISP", + "summary": "Field Service workflow for Internet Service Providers", + "version": "14.0.1.0.0", + "category": "Field Service", + "author": "Open Source Integrators, " "Akretion, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": [ + "fieldservice", ], - 'data': [ - 'data/fsm_stage.xml', - 'views/fsm_order.xml', + "data": [ + "data/fsm_stage.xml", + "views/fsm_order.xml", ], - 'application': False, - 'license': 'AGPL-3', - 'development_status': 'Beta', - 'maintainers': ['osi-scampbell'], + "application": False, + "license": "AGPL-3", + "development_status": "Beta", + "maintainers": ["osi-scampbell"], } diff --git a/fieldservice_isp_flow/models/fsm_order.py b/fieldservice_isp_flow/models/fsm_order.py index fd89b2d82d..5084550b8c 100644 --- a/fieldservice_isp_flow/models/fsm_order.py +++ b/fieldservice_isp_flow/models/fsm_order.py @@ -1,78 +1,110 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators +# Copyright (C) 2021 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, models, _ +from odoo import _, models from odoo.exceptions import ValidationError class FSMOrder(models.Model): - _inherit = 'fsm.order' + _inherit = "fsm.order" def action_confirm(self): - return self.write({'stage_id': self.env.ref( - 'fieldservice_isp_flow.fsm_stage_confirmed').id}) + return self.write( + {"stage_id": self.env.ref("fieldservice_isp_flow.fsm_stage_confirmed").id} + ) def action_request(self): if not self.person_ids: - raise ValidationError(_("Cannot move to Requested " + - "until 'Request Workers' is filled in")) - return self.write({'stage_id': self.env.ref( - 'fieldservice_isp_flow.fsm_stage_requested').id}) + raise ValidationError( + _("Cannot move to Requested " + "until 'Request Workers' is filled in") + ) + return self.write( + {"stage_id": self.env.ref("fieldservice_isp_flow.fsm_stage_requested").id} + ) def action_assign(self): if self.person_id: - return self.write({'stage_id': self.env.ref( - 'fieldservice_isp_flow.fsm_stage_assigned').id}) + return self.write( + { + "stage_id": self.env.ref( + "fieldservice_isp_flow.fsm_stage_assigned" + ).id + } + ) else: - raise ValidationError(_("Cannot move to Assigned " + - "until 'Assigned To' is filled in")) + raise ValidationError( + _("Cannot move to Assigned " + "until 'Assigned To' is filled in") + ) def action_schedule(self): if self.scheduled_date_start and self.person_id: - return self.write({'stage_id': self.env.ref( - 'fieldservice_isp_flow.fsm_stage_scheduled').id}) + return self.write( + { + "stage_id": self.env.ref( + "fieldservice_isp_flow.fsm_stage_scheduled" + ).id + } + ) else: - raise ValidationError(_("Cannot move to Scheduled " + - "until both 'Assigned To' and " + - "'Scheduled Start Date' are filled in")) + raise ValidationError( + _( + "Cannot move to Scheduled " + + "until both 'Assigned To' and " + + "'Scheduled Start Date' are filled in" + ) + ) def action_enroute(self): - return self.write({'stage_id': self.env.ref( - 'fieldservice_isp_flow.fsm_stage_enroute').id}) + return self.write( + {"stage_id": self.env.ref("fieldservice_isp_flow.fsm_stage_enroute").id} + ) def action_start(self): if not self.date_start: - raise ValidationError(_("Cannot move to Start " + - "until 'Actual Start' is filled in")) - return self.write({'stage_id': self.env.ref( - 'fieldservice_isp_flow.fsm_stage_started').id}) + raise ValidationError( + _("Cannot move to Start " + "until 'Actual Start' is filled in") + ) + return self.write( + {"stage_id": self.env.ref("fieldservice_isp_flow.fsm_stage_started").id} + ) def action_complete(self): if not self.date_end: - raise ValidationError(_("Cannot move to Complete " + - "until 'Actual End' is filled in")) + raise ValidationError( + _("Cannot move to Complete " + "until 'Actual End' is filled in") + ) if not self.resolution: - raise ValidationError(_("Cannot move to Complete " + - "until 'Resolution' is filled in")) + raise ValidationError( + _("Cannot move to Complete " + "until 'Resolution' is filled in") + ) return super(FSMOrder, self).action_complete() - @api.multi def _track_subtype(self, init_values): self.ensure_one() - if 'stage_id' in init_values: - if self.stage_id.id == self.env.\ - ref('fieldservice_isp_flow.fsm_stage_confirmed').id: - return 'fieldservice.mt_order_confirmed' - if self.stage_id.id == self.env.\ - ref('fieldservice_isp_flow.fsm_stage_scheduled').id: - return 'fieldservice.mt_order_scheduled' - if self.stage_id.id == self.env.\ - ref('fieldservice_isp_flow.fsm_stage_assigned').id: - return 'fieldservice.mt_order_assigned' - if self.stage_id.id == self.env.\ - ref('fieldservice_isp_flow.fsm_stage_enroute').id: - return 'fieldservice.mt_order_enroute' - if self.stage_id.id == self.env.\ - ref('fieldservice_isp_flow.fsm_stage_started').id: - return 'fieldservice.mt_order_started' - return super()._track_subtype(init_values) + if "stage_id" in init_values: + if ( + self.stage_id.id + == self.env.ref("fieldservice_isp_flow.fsm_stage_confirmed").id + ): + return self.env.ref("fieldservice.mt_order_confirmed") + if ( + self.stage_id.id + == self.env.ref("fieldservice_isp_flow.fsm_stage_scheduled").id + ): + return self.env.ref("fieldservice.mt_order_scheduled") + if ( + self.stage_id.id + == self.env.ref("fieldservice_isp_flow.fsm_stage_assigned").id + ): + return self.env.ref("fieldservice.mt_order_assigned") + if ( + self.stage_id.id + == self.env.ref("fieldservice_isp_flow.fsm_stage_enroute").id + ): + return self.env.ref("fieldservice.mt_order_enroute") + if ( + self.stage_id.id + == self.env.ref("fieldservice_isp_flow.fsm_stage_started").id + ): + return self.env.ref("fieldservice.mt_order_started") + return super(FSMOrder, self)._track_subtype(init_values) diff --git a/fieldservice_isp_flow/tests/__init__.py b/fieldservice_isp_flow/tests/__init__.py new file mode 100644 index 0000000000..292d750c1b --- /dev/null +++ b/fieldservice_isp_flow/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_isp_flow diff --git a/fieldservice_isp_flow/tests/test_fsm_isp_flow.py b/fieldservice_isp_flow/tests/test_fsm_isp_flow.py new file mode 100644 index 0000000000..623f4bfaa6 --- /dev/null +++ b/fieldservice_isp_flow/tests/test_fsm_isp_flow.py @@ -0,0 +1,116 @@ +# Copyright (C) 2021 - TODAY, Open Source Integrators +# 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 Form, TransactionCase + + +class FSMIspFlowCase(TransactionCase): + def setUp(self): + super(FSMIspFlowCase, self).setUp() + self.WorkOrder = self.env["fsm.order"] + self.Worker = self.env["fsm.person"] + view_id = "fieldservice.fsm_person_form" + with Form(self.Worker, view=view_id) as f: + f.name = "Worker A" + self.worker = f.save() + self.test_partner = self.env["res.partner"].create( + {"name": "Test Partner", "phone": "123", "email": "tp@email.com"} + ) + # create a Res Partner to be converted to FSM Location/Person + self.test_loc_partner = self.env["res.partner"].create( + {"name": "Test Loc Partner", "phone": "ABC", "email": "tlp@email.com"} + ) + self.test_location = self.env.ref("fieldservice.test_location") + self.init_values = { + "stage_id": self.env.ref("fieldservice_isp_flow.fsm_stage_confirmed").id + } + self.stage1 = self.env.ref("fieldservice_isp_flow.fsm_stage_confirmed") + self.stage2 = self.env.ref("fieldservice_isp_flow.fsm_stage_scheduled") + self.stage3 = self.env.ref("fieldservice_isp_flow.fsm_stage_assigned") + self.stage4 = self.env.ref("fieldservice_isp_flow.fsm_stage_enroute") + self.stage5 = self.env.ref("fieldservice_isp_flow.fsm_stage_started") + + def test_fsm_orders(self): + """Test creating new workorders, and test following functions.""" + # Create an Orders + hours_diff = 100 + date_start = fields.Datetime.today() + + order = self.WorkOrder.create( + { + "location_id": self.test_location.id, + "date_start": date_start, + "date_end": date_start + timedelta(hours=hours_diff), + "request_early": fields.Datetime.today(), + } + ) + order2 = self.WorkOrder.create( + { + "location_id": self.test_location.id, + "request_early": fields.Datetime.today(), + "person_id": self.worker.id, + "date_end": date_start + timedelta(hours=hours_diff), + "scheduled_date_start": date_start, + } + ) + order3 = self.WorkOrder.create( + { + "location_id": self.test_location.id, + "stage_id": self.stage1.id, + } + ) + order4 = self.WorkOrder.create( + { + "location_id": self.test_location.id, + "stage_id": self.stage2.id, + } + ) + order5 = self.WorkOrder.create( + { + "location_id": self.test_location.id, + "stage_id": self.stage3.id, + } + ) + order6 = self.WorkOrder.create( + { + "location_id": self.test_location.id, + "stage_id": self.stage4.id, + } + ) + order7 = self.WorkOrder.create( + { + "location_id": self.test_location.id, + "stage_id": self.stage5.id, + } + ) + order.action_confirm() + order.action_enroute() + order.action_start() + order2.action_assign() + order2.action_schedule() + order3._track_subtype(self.init_values) + order4._track_subtype(self.init_values) + order5._track_subtype(self.init_values) + order6._track_subtype(self.init_values) + order7._track_subtype(self.init_values) + order._track_subtype(self.init_values) + order._track_subtype(self.init_values) + data_dict = order2.action_schedule() + self.assertEqual(data_dict, True) + with self.assertRaises(ValidationError): + order2.action_complete() + with self.assertRaises(ValidationError): + order.action_request() + with self.assertRaises(ValidationError): + order.action_assign() + with self.assertRaises(ValidationError): + order.action_schedule() + with self.assertRaises(ValidationError): + order.date_end = False + order.action_complete() + with self.assertRaises(ValidationError): + order2.action_start() diff --git a/fieldservice_isp_flow/views/fsm_order.xml b/fieldservice_isp_flow/views/fsm_order.xml index b0359a4211..caf1ff5422 100644 --- a/fieldservice_isp_flow/views/fsm_order.xml +++ b/fieldservice_isp_flow/views/fsm_order.xml @@ -1,59 +1,75 @@ - + fsm.order.form fsm.order - + - + + fsm.order.tree fsm.order - + stage_id in ( @@ -76,14 +92,15 @@ fsm.order.search fsm.order - + - + diff --git a/setup/fieldservice_isp_flow/odoo/addons/fieldservice_isp_flow b/setup/fieldservice_isp_flow/odoo/addons/fieldservice_isp_flow new file mode 120000 index 0000000000..1bff0a58fa --- /dev/null +++ b/setup/fieldservice_isp_flow/odoo/addons/fieldservice_isp_flow @@ -0,0 +1 @@ +../../../../fieldservice_isp_flow \ No newline at end of file diff --git a/setup/fieldservice_isp_flow/setup.py b/setup/fieldservice_isp_flow/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/fieldservice_isp_flow/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 899b701d4012cf3f1bdafabdd5b22327808dc9d2 Mon Sep 17 00:00:00 2001 From: Patrick Wilson <36892066+patrickrwilson@users.noreply.github.com> Date: Wed, 5 May 2021 10:49:10 -0600 Subject: [PATCH 298/631] [14.0][MIG] fieldservice_agreement (Version 12.0 to 14.0) [MIG] Black [MIG] Added more coverage to tests [MIG] Add contract to dependancy Add maintainer Update CONTRIBUTORS.rst add eol --- fieldservice_agreement/__manifest__.py | 47 +++++------ fieldservice_agreement/models/__init__.py | 8 +- fieldservice_agreement/models/agreement.py | 62 +++++++------- .../models/fsm_equipment.py | 7 +- fieldservice_agreement/models/fsm_location.py | 23 +++--- fieldservice_agreement/models/fsm_order.py | 7 +- fieldservice_agreement/models/fsm_person.py | 38 +++++---- .../readme/CONTRIBUTORS.rst | 1 + .../tests/test_fsm_agreement.py | 82 +++++++++++-------- .../views/agreement_view.xml | 82 +++++++++++++------ .../views/fsm_equipment_view.xml | 27 +++--- fieldservice_agreement/views/fsm_location.xml | 10 +-- .../views/fsm_order_view.xml | 24 ++++-- fieldservice_agreement/views/fsm_person.xml | 22 +++-- oca_dependencies.txt | 1 + 15 files changed, 248 insertions(+), 193 deletions(-) diff --git a/fieldservice_agreement/__manifest__.py b/fieldservice_agreement/__manifest__.py index 4e819bef80..df29ae4ed7 100644 --- a/fieldservice_agreement/__manifest__.py +++ b/fieldservice_agreement/__manifest__.py @@ -2,31 +2,28 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service - Agreements', - 'summary': 'Manage Field Service agreements and contracts', - 'author': 'Open Source Integrators, ' - 'Odoo Community Association (OCA)', - 'website': 'https://github.com/OCA/field-service', - 'category': 'Field Service', - 'license': 'AGPL-3', - 'version': '12.0.1.0.0', - 'depends': [ - 'fieldservice', - 'agreement_serviceprofile', + "name": "Field Service - Agreements", + "summary": "Manage Field Service agreements and contracts", + "author": "Open Source Integrators, " "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "category": "Field Service", + "license": "AGPL-3", + "version": "14.0.1.0.0", + "depends": ["fieldservice", "agreement_serviceprofile"], + "data": [ + "views/fsm_order_view.xml", + "views/fsm_equipment_view.xml", + "views/agreement_view.xml", + "views/fsm_person.xml", + "views/fsm_location.xml", ], - 'data': [ - 'views/fsm_order_view.xml', - 'views/fsm_equipment_view.xml', - 'views/agreement_view.xml', - 'views/fsm_person.xml', - 'views/fsm_location.xml' - ], - 'installable': True, - 'development_status': 'Beta', - 'maintainers': [ - 'max3903', - 'bodedra', - 'smangukiya', - 'osi-scampbell' + "installable": True, + "development_status": "Beta", + "maintainers": [ + "max3903", + "bodedra", + "smangukiya", + "osi-scampbell", + "patrickrwilson", ], } diff --git a/fieldservice_agreement/models/__init__.py b/fieldservice_agreement/models/__init__.py index 98a54f21cc..07872822b7 100644 --- a/fieldservice_agreement/models/__init__.py +++ b/fieldservice_agreement/models/__init__.py @@ -1,9 +1,3 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import ( - agreement, - fsm_equipment, - fsm_location, - fsm_order, - fsm_person, -) +from . import agreement, fsm_equipment, fsm_location, fsm_order, fsm_person diff --git a/fieldservice_agreement/models/agreement.py b/fieldservice_agreement/models/agreement.py index 5154c7960f..df5c92fa76 100644 --- a/fieldservice_agreement/models/agreement.py +++ b/fieldservice_agreement/models/agreement.py @@ -1,60 +1,56 @@ # 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 import fields, models class Agreement(models.Model): - _inherit = 'agreement' + _inherit = "agreement" service_order_count = fields.Integer( - compute='_compute_service_order_count', - string='# Service Orders' + compute="_compute_service_order_count", string="# Service Orders" ) - equipment_count = fields.Integer('# Equipments', - compute='_compute_equipment_count') - fsm_location_id = fields.Many2one('fsm.location', string="FSM Location") + equipment_count = fields.Integer("# Equipments", compute="_compute_equipment_count") + fsm_location_id = fields.Many2one("fsm.location", string="FSM Location") - @api.multi def _compute_service_order_count(self): for agreement in self: - agreement.service_order_count = self.env['fsm.order'].search_count( - [('agreement_id', '=', agreement.id)]) + agreement.service_order_count = self.env["fsm.order"].search_count( + [("agreement_id", "=", agreement.id)] + ) - @api.multi def action_view_service_order(self): for agreement in self: - fsm_order_ids = self.env['fsm.order'].search( - [('agreement_id', '=', agreement.id)]) - action = self.env.ref( - 'fieldservice.action_fsm_operation_order').read()[0] + fsm_order_ids = self.env["fsm.order"].search( + [("agreement_id", "=", agreement.id)] + ) + action = self.env.ref("fieldservice.action_fsm_operation_order").read()[0] if len(fsm_order_ids) == 1: - action['views'] = [( - self.env.ref('fieldservice.fsm_order_form').id, - 'form')] - action['res_id'] = fsm_order_ids.ids[0] + action["views"] = [ + (self.env.ref("fieldservice.fsm_order_form").id, "form") + ] + action["res_id"] = fsm_order_ids.ids[0] else: - action['domain'] = [('id', 'in', fsm_order_ids.ids)] + action["domain"] = [("id", "in", fsm_order_ids.ids)] return action - @api.multi def _compute_equipment_count(self): for agreement in self: - agreement.equipment_count = self.env['fsm.equipment'].search_count( - [('agreement_id', '=', agreement.id)]) + agreement.equipment_count = self.env["fsm.equipment"].search_count( + [("agreement_id", "=", agreement.id)] + ) - @api.multi def action_view_fsm_equipment(self): for agreement in self: - equipment_ids = self.env['fsm.equipment'].search( - [('agreement_id', '=', agreement.id)]) - action = self.env.ref( - 'fieldservice.action_fsm_equipment').read()[0] + equipment_ids = self.env["fsm.equipment"].search( + [("agreement_id", "=", agreement.id)] + ) + action = self.env.ref("fieldservice.action_fsm_equipment").read()[0] if len(equipment_ids) == 1: - action['views'] = [( - self.env.ref('fieldservice.fsm_equipment_form_view').id, - 'form')] - action['res_id'] = equipment_ids.ids[0] + action["views"] = [ + (self.env.ref("fieldservice.fsm_equipment_form_view").id, "form") + ] + action["res_id"] = equipment_ids.ids[0] else: - action['domain'] = [('id', 'in', equipment_ids.ids)] + action["domain"] = [("id", "in", equipment_ids.ids)] return action diff --git a/fieldservice_agreement/models/fsm_equipment.py b/fieldservice_agreement/models/fsm_equipment.py index 235b538ab1..2410b54777 100644 --- a/fieldservice_agreement/models/fsm_equipment.py +++ b/fieldservice_agreement/models/fsm_equipment.py @@ -5,8 +5,7 @@ class FSMEquipment(models.Model): - _inherit = 'fsm.equipment' + _inherit = "fsm.equipment" - agreement_id = fields.Many2one('agreement', string='Agreement') - serviceprofile_id = fields.Many2one('agreement.serviceprofile', - 'Service Profile') + agreement_id = fields.Many2one("agreement", string="Agreement") + serviceprofile_id = fields.Many2one("agreement.serviceprofile", "Service Profile") diff --git a/fieldservice_agreement/models/fsm_location.py b/fieldservice_agreement/models/fsm_location.py index 7e7c258fe5..053ae93b16 100644 --- a/fieldservice_agreement/models/fsm_location.py +++ b/fieldservice_agreement/models/fsm_location.py @@ -1,25 +1,28 @@ # 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 import fields, models class FSMLocation(models.Model): - _inherit = 'fsm.location' + _inherit = "fsm.location" - serviceprofile_ids = fields.Many2many('agreement.serviceprofile', - string="Service Profiles", - compute='_compute_service_ids') + serviceprofile_ids = fields.Many2many( + "agreement.serviceprofile", + string="Service Profiles", + compute="_compute_service_ids", + ) - @api.multi def _compute_service_ids(self): for loc in self: - agreements = self.env['agreement'].\ - search([('fsm_location_id', '=', loc.id)]) + agreements = self.env["agreement"].search( + [("fsm_location_id", "=", loc.id)] + ) ids = [] for agree in agreements: - servpros = self.env['agreement.serviceprofile'].\ - search([('agreement_id', '=', agree.id)]) + servpros = self.env["agreement.serviceprofile"].search( + [("agreement_id", "=", agree.id)] + ) for ser in servpros: if ser.id not in ids: ids.append(ser.id) diff --git a/fieldservice_agreement/models/fsm_order.py b/fieldservice_agreement/models/fsm_order.py index 20d5f22470..a6e0151247 100644 --- a/fieldservice_agreement/models/fsm_order.py +++ b/fieldservice_agreement/models/fsm_order.py @@ -5,8 +5,7 @@ class FSMOrder(models.Model): - _inherit = 'fsm.order' + _inherit = "fsm.order" - agreement_id = fields.Many2one('agreement', string='Agreement') - serviceprofile_id = fields.Many2one('agreement.serviceprofile', - 'Service Profile') + agreement_id = fields.Many2one("agreement", string="Agreement") + serviceprofile_id = fields.Many2one("agreement.serviceprofile", "Service Profile") diff --git a/fieldservice_agreement/models/fsm_person.py b/fieldservice_agreement/models/fsm_person.py index 3dcebee5f6..7f12f32fb4 100644 --- a/fieldservice_agreement/models/fsm_person.py +++ b/fieldservice_agreement/models/fsm_person.py @@ -1,31 +1,37 @@ # Copyright (C) 2019 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields, models +from odoo import fields, models class FSMPerson(models.Model): - _inherit = 'fsm.person' + _inherit = "fsm.person" - agreement_count = fields.Integer(string='# of Agreements', - compute='_compute_agreements') + agreement_count = fields.Integer( + string="# of Agreements", compute="_compute_agreements" + ) def _compute_agreements(self): - self.agreement_count = self.env['agreement'].search_count([ - ('partner_id', '=', self.name)]) + self.agreement_count = self.env["agreement"].search_count( + [("partner_id", "=", self.name)] + ) - @api.multi def action_view_agreements(self): for person in self: - action = self.env.\ - ref('agreement_legal.agreement_operations_agreement').\ - read()[0] - agreements = self.env['agreement'].search( - [('partner_id', '=', person.partner_id.id)]) + action = self.env.ref( + "agreement_legal.agreement_operations_agreement" + ).read()[0] + agreements = self.env["agreement"].search( + [("partner_id", "=", person.partner_id.id)] + ) if len(agreements) == 1: - action['views'] = [(self.env.ref( - 'agreement_legal.partner_agreement_form_view').id, 'form')] - action['res_id'] = agreements.id + action["views"] = [ + ( + self.env.ref("agreement_legal.partner_agreement_form_view").id, + "form", + ) + ] + action["res_id"] = agreements.id else: - action['domain'] = [('id', 'in', agreements.ids)] + action["domain"] = [("id", "in", agreements.ids)] return action diff --git a/fieldservice_agreement/readme/CONTRIBUTORS.rst b/fieldservice_agreement/readme/CONTRIBUTORS.rst index ffd570ce46..a31aa4664e 100644 --- a/fieldservice_agreement/readme/CONTRIBUTORS.rst +++ b/fieldservice_agreement/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Bhavesh Odedra * Sandip Mangukiya * Serpent Consulting Services Pvt. Ltd. +* Patrick Wilson diff --git a/fieldservice_agreement/tests/test_fsm_agreement.py b/fieldservice_agreement/tests/test_fsm_agreement.py index 4dd9dbe19f..c3fc9b6418 100644 --- a/fieldservice_agreement/tests/test_fsm_agreement.py +++ b/fieldservice_agreement/tests/test_fsm_agreement.py @@ -2,23 +2,20 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import fields -from odoo.tests.common import TransactionCase, Form +from odoo.tests.common import Form, TransactionCase class FSMOrder(TransactionCase): - def setUp(self): super(FSMOrder, self).setUp() - self.Order = self.env['fsm.order'] - self.Agreement = self.env['agreement'] - self.Serviceprofile = self.env['agreement.serviceprofile'] - self.Equipment = self.env['fsm.equipment'] - self.test_location = self.env.ref('fieldservice.test_location') - self.agreement_type = self.env.\ - ref('agreement_legal.agreement_type_agreement') - self.test_person = self.env.ref('fieldservice.test_person') - self.service = self.env.ref( - 'product.product_product_1_product_template') + self.Order = self.env["fsm.order"] + self.Agreement = self.env["agreement"] + self.Serviceprofile = self.env["agreement.serviceprofile"] + self.Equipment = self.env["fsm.equipment"] + self.test_location = self.env.ref("fieldservice.test_location") + self.agreement_type = self.env.ref("agreement_legal.agreement_type_agreement") + self.test_person = self.env.ref("fieldservice.test_person") + self.service = self.env.ref("product.product_product_1_product_template") def test_fsm_agreement(self): """ @@ -28,51 +25,66 @@ def test_fsm_agreement(self): - Person (partner) can relate back to agreement correctly """ # Create agreement and assign to test location - view_id = ('agreement_legal.partner_agreement_form_view') + view_id = "agreement_legal.partner_agreement_form_view" with Form(self.Agreement, view=view_id) as f: - f.name = 'Test Agreement' + f.name = "Test Agreement" f.agreement_type_id = self.agreement_type - f.description = 'Test Agreement' + f.description = "Test Agreement" f.start_date = f.end_date = fields.Date.today() f.fsm_location_id = self.test_location f.partner_id = self.test_person.partner_id agreement = f.save() - profile = self.Serviceprofile.create({'name': 'Test Profile', - 'agreement_id': agreement.id, - 'product_id': self.service.id}) + profile = self.Serviceprofile.create( + { + "name": "Test Profile", + "agreement_id": agreement.id, + "product_id": self.service.id, + } + ) # Create 2 Orders, that link to this agreement vals = { - 'name': 'Order1', - 'location_id': self.test_location.id, - 'agreement_id': agreement.id + "name": "Order1", + "location_id": self.test_location.id, + "agreement_id": agreement.id, } order1 = self.Order.create(vals) + agreement._compute_service_order_count() + self.assertEqual(agreement.service_order_count, 1) + self.assertEqual(order1.id, agreement.action_view_service_order()["res_id"]) vals = { - 'name': 'Order2', - 'location_id': self.test_location.id, - 'agreement_id': agreement.id + "name": "Order2", + "location_id": self.test_location.id, + "agreement_id": agreement.id, } order2 = self.Order.create(vals) agreement._compute_service_order_count() self.assertEqual(agreement.service_order_count, 2) - self.assertEqual([order1.id, order2.id], - agreement.action_view_service_order()['domain'][0][2]) + self.assertEqual( + [order1.id, order2.id], + agreement.action_view_service_order()["domain"][0][2], + ) # Create 3 equipment, that link to this agreement vals = { - 'name': 'EQ1', - 'current_location_id': self.test_location.id, - 'agreement_id': agreement.id + "name": "EQ1", + "current_location_id": self.test_location.id, + "agreement_id": agreement.id, } equipment1 = self.Equipment.create(vals) - equipment2 = equipment1.copy({'name': 'EQ2'}) - equipment3 = equipment1.copy({'name': 'EQ3'}) + agreement._compute_service_order_count() + self.assertEqual(agreement.equipment_count, 1) + self.assertEqual(equipment1.id, agreement.action_view_fsm_equipment()["res_id"]) + equipment2 = equipment1.copy({"name": "EQ2"}) + equipment3 = equipment1.copy({"name": "EQ3"}) agreement._compute_equipment_count() self.assertEqual(agreement.equipment_count, 3) - self.assertEqual([equipment1.id, equipment2.id, equipment3.id], - agreement.action_view_fsm_equipment()['domain'][0][2]) + self.assertEqual( + [equipment1.id, equipment2.id, equipment3.id], + agreement.action_view_fsm_equipment()["domain"][0][2], + ) # Location's service profile display correctly self.assertEqual(self.test_location.serviceprofile_ids, profile) # Person (partner) can relate back to agreement correctly self.assertEqual(self.test_person.agreement_count, 1) - self.assertEqual(self.test_person.action_view_agreements()['res_id'], - agreement.id) + self.assertEqual( + self.test_person.action_view_agreements()["res_id"], agreement.id + ) diff --git a/fieldservice_agreement/views/agreement_view.xml b/fieldservice_agreement/views/agreement_view.xml index 051957d5e7..250de8d60f 100644 --- a/fieldservice_agreement/views/agreement_view.xml +++ b/fieldservice_agreement/views/agreement_view.xml @@ -1,30 +1,39 @@ + agreement.form.fsm.order.view agreement - +

    - -
    diff --git a/oca_dependencies.txt b/oca_dependencies.txt index c0772185a0..8587170ab9 100644 --- a/oca_dependencies.txt +++ b/oca_dependencies.txt @@ -1 +1,2 @@ +contract web From 5117441fbd2aa797cade3c727c7853338e531459 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 16:37:12 +0000 Subject: [PATCH 299/631] Added translation using Weblate (Turkish) --- fieldservice_route/i18n/tr.po | 392 ++++++++++++++++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 fieldservice_route/i18n/tr.po diff --git a/fieldservice_route/i18n/tr.po b/fieldservice_route/i18n/tr.po new file mode 100644 index 0000000000..d11fef762b --- /dev/null +++ b/fieldservice_route/i18n/tr.po @@ -0,0 +1,392 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_route +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute +msgid "Add Day Routes here." +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route +msgid "Add Routes here." +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__person_id +msgid "Assigned To" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_remaining +msgid "Available Capacity" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Cancel order" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Capacity" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Complete order" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day +msgid "Create a Route Day." +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_uid +msgid "Created by" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_date +msgid "Created on" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date +msgid "Date" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__dayroute_id +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Day Route" +msgstr "" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_dash +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute_report +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_dash_dayroute +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_dayroute_report +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_calendar +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_graph_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_pivot_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_tree +msgid "Day Routes" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute_report +msgid "Day Routes Report" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__day_ids +msgid "Days" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__display_name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__end_location_id +msgid "End Location" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route +msgid "Field Service Route" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_route_dayroute +msgid "Field Service Route Dayroute" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model,name:fieldservice_route.model_fsm_stage +msgid "Field Service Stage" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__friday +msgid "Friday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__id +msgid "ID" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__last_location_id +msgid "Last Location" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute____last_update +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_uid +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_date +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__latitude +msgid "Latitude" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__longitude +msgid "Longitude" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_allow_time +msgid "Maximal Allowable Time (in hours)" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Maximum" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order +msgid "Maximum Capacity" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order +msgid "Maximum Orders" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route__max_order +msgid "Maximum number of orders per day route." +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,help:fieldservice_route.field_fsm_route_dayroute__max_order +msgid "Maximum numbers of orders that can be added to this day route." +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__monday +msgid "Monday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__name +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__name +msgid "Name" +msgstr "" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 +#, python-format +msgid "New" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_count +msgid "Number of Orders" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__display_name +msgid "Order" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Orders" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__fsm_person_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__person_id +msgid "Person" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date_start_planned +msgid "Planned Start Time" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Planning" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Positioning" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__fsm_route_id +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__route_id +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_stage__stage_type__route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "Route" +msgstr "" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_day +#: model:ir.model,name:fieldservice_route.model_fsm_route_day +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_tree_view +msgid "Route Day" +msgstr "" + +#. module: fieldservice_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_day +msgid "Route Days" +msgstr "" + +#. module: fieldservice_route +#: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route +#: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_tree +msgid "Routes" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__saturday +msgid "Saturday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__stage_id +msgid "Stage" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__start_location_id +msgid "Start Location" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__sunday +msgid "Sunday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__team_id +msgid "Team" +msgstr "" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 +#, python-format +msgid "The day route is exceeding the maximum number of orders of the route." +msgstr "" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 +#, python-format +msgid "The route %s does not run on %s!" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__thursday +msgid "Thursday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__work_time +msgid "Time before overtime (in hours)" +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form +msgid "Timing" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__tuesday +msgid "Tuesday" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__stage_type +msgid "Type" +msgstr "" + +#. module: fieldservice_route +#: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__wednesday +msgid "Wednesday" +msgstr "" + +#. module: fieldservice_route +#: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 +#, python-format +msgid "You must create a FSM team first." +msgstr "" + +#. module: fieldservice_route +#: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form +msgid "orders per day route" +msgstr "" From c2d6fe0c987313406311a37d5536110cb3041b40 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 18:30:37 +0000 Subject: [PATCH 300/631] Translated using Weblate (Turkish) Currently translated at 7.6% (5 of 65 strings) Translation: field-service-14.0/field-service-14.0-fieldservice_route Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_route/tr/ --- fieldservice_route/i18n/tr.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fieldservice_route/i18n/tr.po b/fieldservice_route/i18n/tr.po index d11fef762b..67fc0f258a 100644 --- a/fieldservice_route/i18n/tr.po +++ b/fieldservice_route/i18n/tr.po @@ -6,38 +6,40 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-07-09 18:31+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_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute msgid "Add Day Routes here." -msgstr "" +msgstr "Buraya Günlük Rotaları ekleyin." #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route msgid "Add Routes here." -msgstr "" +msgstr "Rotaları buraya ekleyin." #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__person_id msgid "Assigned To" -msgstr "" +msgstr "Atanan" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_remaining msgid "Available Capacity" -msgstr "" +msgstr "Mevcut Kapasite" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form msgid "Cancel order" -msgstr "" +msgstr "Siparişi İptal Et" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form From 7e4ba3d5ae2be350f1f51b7e60d0342b906577e6 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 18:38:11 +0000 Subject: [PATCH 301/631] Translated using Weblate (Turkish) Currently translated at 7.1% (2 of 28 strings) Translation: field-service-14.0/field-service-14.0-base_territory Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-base_territory/tr/ --- base_territory/i18n/tr.po | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/base_territory/i18n/tr.po b/base_territory/i18n/tr.po index 1d7250166a..f7c68ece50 100644 --- a/base_territory/i18n/tr.po +++ b/base_territory/i18n/tr.po @@ -6,24 +6,26 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-07-09 18:38+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: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_territory__branch_id #: model_terms:ir.ui.view,arch_db:base_territory.res_branch_form_view msgid "Branch" -msgstr "" +msgstr "Şube" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__partner_id msgid "Branch Manager" -msgstr "" +msgstr "Şube Müdürü" #. module: base_territory #: model:ir.actions.act_window,name:base_territory.action_res_branch From defe89ca93e22fcca938acf4ef3e0a3aa61d5c50 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 18:40:53 +0000 Subject: [PATCH 302/631] Added translation using Weblate (Turkish) --- fieldservice_account_analytic/i18n/tr.po | 162 +++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 fieldservice_account_analytic/i18n/tr.po diff --git a/fieldservice_account_analytic/i18n/tr.po b/fieldservice_account_analytic/i18n/tr.po new file mode 100644 index 0000000000..9008fcd464 --- /dev/null +++ b/fieldservice_account_analytic/i18n/tr.po @@ -0,0 +1,162 @@ +# 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" +"Last-Translator: Automatically generated\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" + +#. 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.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__display_name +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_move_line__display_name +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__display_name +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_wizard__display_name +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__display_name +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__display_name +msgid "Display Name" +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: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.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__id +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_move_line__id +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location__id +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_wizard__id +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__id +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model,name:fieldservice_account_analytic.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: fieldservice_account_analytic +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line____last_update +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_move_line____last_update +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_location____last_update +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_wizard____last_update +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company____last_update +#: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_account_analytic +#: 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_fsm_order__display_name +msgid "Order" +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 "" From a99843350c4e520afdb12ee3c7f1d92b0d88592a Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 16:36:03 +0000 Subject: [PATCH 303/631] Translated using Weblate (Turkish) Currently translated at 56.5% (303 of 536 strings) Translation: field-service-14.0/field-service-14.0-fieldservice Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice/tr/ --- fieldservice/i18n/tr.po | 582 ++++++++++++++++++++-------------------- 1 file changed, 293 insertions(+), 289 deletions(-) diff --git a/fieldservice/i18n/tr.po b/fieldservice/i18n/tr.po index 5bda20ce73..8f30f49a13 100644 --- a/fieldservice/i18n/tr.po +++ b/fieldservice/i18n/tr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-06-26 17:48+0000\n" +"PO-Revision-Date: 2021-07-09 18:49+0000\n" "Last-Translator: Ediz Duman \n" "Language-Team: none\n" "Language: tr\n" @@ -113,13 +113,13 @@ msgstr "Bu iş ortağıyla ilgili bir Saha Servis Çalışanı zaten var." #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_account_payable_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_account_payable_id msgid "Account Payable" -msgstr "" +msgstr "Borç Hesabı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_account_receivable_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_account_receivable_id msgid "Account Receivable" -msgstr "" +msgstr "Alacak Hesabı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_needaction @@ -128,20 +128,20 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_needaction #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_needaction msgid "Action Needed" -msgstr "" +msgstr "Eylem Gerekli" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__active #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__active #: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__active msgid "Active" -msgstr "" +msgstr "Aktiv" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__active_lang_count #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__active_lang_count msgid "Active Lang Count" -msgstr "" +msgstr "Etkin Dil Sayısı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_ids @@ -150,7 +150,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_ids msgid "Activities" -msgstr "" +msgstr "Aktiviteler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_exception_decoration @@ -159,7 +159,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_exception_decoration #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_exception_decoration msgid "Activity Exception Decoration" -msgstr "" +msgstr "Aktivite İstisnası Dekorasyonu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_state @@ -168,7 +168,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_state #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_state msgid "Activity State" -msgstr "" +msgstr "Aktivite Durumu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_type_icon @@ -177,66 +177,66 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_type_icon #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_type_icon msgid "Activity Type Icon" -msgstr "" +msgstr "Aktivite Simge Türü" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__date_end msgid "Actual End" -msgstr "" +msgstr "Fiili Bitiş" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__date_start msgid "Actual Start" -msgstr "" +msgstr "Fiili Başlama" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__duration msgid "Actual duration" -msgstr "" +msgstr "Fiili Süre" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_order__duration msgid "Actual duration in hours" -msgstr "" +msgstr "Saat cinsinden gerçek süre" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_person msgid "Add Field Service Workers here." -msgstr "" +msgstr "Saha Servisi Çalışan'ları buraya ekleyin." #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_dash_equipment #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_equipment msgid "Add a Field Service Equipment here." -msgstr "" +msgstr "Buraya bir Saha Servis Ekipmanı ekleyin." #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_category msgid "Add a Field Service Worker Category here." -msgstr "" +msgstr "Buraya bir Saha Servisi Çalışanı Kategorisi ekleyin." #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view msgid "Add a description..." -msgstr "" +msgstr "Bir açıklama ekle..." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__additional_info #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__additional_info msgid "Additional info" -msgstr "" +msgstr "İlave Bilgisi" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Address" -msgstr "" +msgstr "Adres" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__type #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__type msgid "Address Type" -msgstr "" +msgstr "Adres Türü" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_order__state_name @@ -247,12 +247,12 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "All" -msgstr "" +msgstr "Hepsi" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.menu_fsm_operation_order msgid "All Orders" -msgstr "" +msgstr "Bütün Siparişler" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__lang @@ -277,17 +277,17 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__location_id msgid "Assigned Location" -msgstr "" +msgstr "Atanan Konum" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__person_id msgid "Assigned Operator" -msgstr "" +msgstr "Atanan Operatör" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__person_id msgid "Assigned To" -msgstr "" +msgstr "Atanan" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_attachment_count @@ -296,7 +296,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_attachment_count #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_attachment_count msgid "Attachment Count" -msgstr "" +msgstr "Ek Sayısı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -345,19 +345,19 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__bank_account_count #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__bank_account_count msgid "Bank" -msgstr "" +msgstr "Banak" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__bank_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__bank_ids msgid "Banks" -msgstr "" +msgstr "Bankalar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__barcode #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__barcode msgid "Barcode" -msgstr "" +msgstr "Barkon" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__is_blacklisted @@ -390,12 +390,12 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Branch" -msgstr "" +msgstr "Şube" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__branch_manager_id msgid "Branch Manager" -msgstr "" +msgstr "Şube Müdürü" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_crm @@ -406,12 +406,12 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.partner_wizard_view msgid "Cancel" -msgstr "" +msgstr "İptal" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Cancel Order" -msgstr "" +msgstr "Siparişi İptal Et" #. module: fieldservice #: code:addons/fieldservice/models/fsm_stage.py:0 @@ -434,17 +434,17 @@ msgstr "" #: model:ir.ui.menu,name:fieldservice.menu_hr_skill #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_category_tree_view msgid "Categories" -msgstr "" +msgstr "Kategoriler" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_category_form_view msgid "Category" -msgstr "" +msgstr "Kategori" #. module: fieldservice #: model:ir.model.constraint,message:fieldservice.constraint_fsm_category_name_uniq msgid "Category name already exists!" -msgstr "" +msgstr "Kategori adı zaten var!" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_change_management @@ -455,7 +455,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__channel_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__channel_ids msgid "Channels" -msgstr "" +msgstr "Kanallar" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -499,7 +499,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__child_ids #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view msgid "Children" -msgstr "" +msgstr "Alt" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_template__team_id @@ -513,7 +513,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "City" -msgstr "" +msgstr "Şehir" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_order__tag_ids @@ -523,7 +523,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__custom_color msgid "Color Code" -msgstr "" +msgstr "Renk Kodu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__color @@ -534,7 +534,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__color #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__color msgid "Color Index" -msgstr "" +msgstr "Renk İndeksi" #. module: fieldservice #: code:addons/fieldservice/models/fsm_stage.py:0 @@ -551,7 +551,7 @@ msgstr "" #. module: fieldservice #: model:ir.model,name:fieldservice.model_res_company msgid "Companies" -msgstr "" +msgstr "Şirketler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__ref_company_ids @@ -570,13 +570,13 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__company_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__company_id msgid "Company" -msgstr "" +msgstr "Firma" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__company_name #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__company_name msgid "Company Name" -msgstr "" +msgstr "Firma Adı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__commercial_company_name @@ -588,7 +588,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__company_type #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__company_type msgid "Company Type" -msgstr "" +msgstr "Firma Türü" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_gid @@ -629,28 +629,28 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Complete" -msgstr "" +msgstr "Tamamlayınız" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contact_address #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__contact_address msgid "Complete Address" -msgstr "" +msgstr "Tam Adresi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__complete_name msgid "Complete Name" -msgstr "" +msgstr "Tam Ad" #. module: fieldservice #: model:ir.model,name:fieldservice.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Yapılandırma Ayarları" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.config msgid "Configuration" -msgstr "" +msgstr "Yapılandırma" #. module: fieldservice #: model:ir.model,name:fieldservice.model_res_partner @@ -658,32 +658,32 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__contact_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__child_ids msgid "Contact" -msgstr "" +msgstr "Kontak" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view msgid "Contacts" -msgstr "" +msgstr "Kontaklar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contact_count msgid "Contacts Count" -msgstr "" +msgstr "Kontak Sayısı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.partner_wizard_view msgid "Convert" -msgstr "" +msgstr "Dönüştürme" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.partner_fsm_action msgid "Convert to FSM Record" -msgstr "" +msgstr "FSM Kaydına Dönüştür" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.partner_wizard_view msgid "Convert to a Field Service Worker or Location" -msgstr "" +msgstr "Saha Servisi Personeline veya Konumuna Dönüştür" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__payment_token_count @@ -704,7 +704,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Country" -msgstr "" +msgstr "Ülke" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -714,38 +714,38 @@ msgstr "" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_customer msgid "Create a Customer." -msgstr "" +msgstr "Müşteri Oluşturun." #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_location msgid "Create a Service Location" -msgstr "" +msgstr "Servis Konumu Oluşturun" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_stage msgid "Create a Stage." -msgstr "" +msgstr "Bir Aşama Oluşturun." #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_team_settings msgid "Create a new team" -msgstr "" +msgstr "Yeni bir ekip oluştur" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_tag msgid "Create a tag." -msgstr "" +msgstr "Etiket Oluştur." #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_dash_order #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_operation_order msgid "Create an Order." -msgstr "" +msgstr "Sipariş Oluşturun." #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_template msgid "Create an order template" -msgstr "" +msgstr "Bir sipariş şablonu oluşturun" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -755,7 +755,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_location_person msgid "Create the linked locations of a worker." -msgstr "" +msgstr "Bir çalışanın bağlantılı konumlarını oluşturun." #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -779,7 +779,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__create_uid #: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__create_uid msgid "Created by" -msgstr "" +msgstr "Oluşturan" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__create_date @@ -796,35 +796,35 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__create_date #: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__create_date msgid "Created on" -msgstr "" +msgstr "Oluşturulma" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__credit_limit #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__credit_limit msgid "Credit Limit" -msgstr "" +msgstr "Kredi Limiti" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__currency_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__currency_id msgid "Currency" -msgstr "" +msgstr "Para Birimi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__current_date msgid "Current Date" -msgstr "" +msgstr "Şimdiki Tarih" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__current_location_id msgid "Current Location" -msgstr "" +msgstr "Geçerli Konum" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_payment_term_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_payment_term_id msgid "Customer Payment Terms" -msgstr "" +msgstr "Müşteri Ödeme Koşulları" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__customer_rank @@ -836,28 +836,28 @@ msgstr "" #: model:ir.actions.act_window,name:fieldservice.action_fsm_customer #: model:ir.ui.menu,name:fieldservice.menu_fsm_customer msgid "Customers" -msgstr "" +msgstr "Müşteriler" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.dashboard msgid "Dashboard" -msgstr "" +msgstr "Gösterge Paneli" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__date #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__date msgid "Date" -msgstr "" +msgstr "Tarih" #. module: fieldservice #: model:fsm.team,name:fieldservice.fsm_team_default msgid "Default Team" -msgstr "" +msgstr "Varsayılan Takım" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_template__duration msgid "Default duration in hours" -msgstr "" +msgstr "Saat cinsinden varsayılan süre" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__trust @@ -869,7 +869,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_kanban_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_kanban_view msgid "Delete" -msgstr "" +msgstr "Sil" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__description @@ -880,7 +880,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form #: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document msgid "Description" -msgstr "" +msgstr "Açıklama" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__direction @@ -911,7 +911,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_res_partner__display_name #: model:ir.model.fields,field_description:fieldservice.field_res_territory__display_name msgid "Display Name" -msgstr "" +msgstr "Görünüm Adı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -925,18 +925,18 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "District" -msgstr "" +msgstr "İlçe" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__district_manager_id msgid "District Manager" -msgstr "" +msgstr "İlçe Müdürü" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "Done" -msgstr "" +msgstr "Biten" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_kanban_view @@ -947,17 +947,17 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Due Within 30 Days" -msgstr "" +msgstr "Son 30 Gün" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Due Within 7 Days" -msgstr "" +msgstr "Son 7 Gün" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__duration msgid "Duration" -msgstr "" +msgstr "Süre" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__request_early @@ -968,7 +968,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_kanban_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_kanban_view msgid "Edit" -msgstr "" +msgstr "Düzenle" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__partner_share @@ -984,13 +984,13 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__email #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__email msgid "Email" -msgstr "" +msgstr "Eposta" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__employee #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__employee msgid "Employee" -msgstr "" +msgstr "Personel" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__equipment_count @@ -1000,12 +1000,12 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_tree_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view msgid "Equipment" -msgstr "" +msgstr "Ekipman" #. module: fieldservice #: model:ir.model.constraint,message:fieldservice.constraint_fsm_equipment_name_uniq msgid "Equipment name already exists!" -msgstr "" +msgstr "Ekipman adı zaten var!" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_report_equipment @@ -1019,7 +1019,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Equipments" -msgstr "" +msgstr "Ekipmanlar" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_equipment @@ -1029,7 +1029,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Execution" -msgstr "" +msgstr "Yürütme" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_stage__legend_priority @@ -1051,43 +1051,43 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view msgid "FSM Equipment Name" -msgstr "" +msgstr "FSM Ekipman Adı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "FSM Location Builder" -msgstr "" +msgstr "FSM Konum Oluşturucu" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_graph_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_pivot_view msgid "FSM Locations" -msgstr "" +msgstr "FSM Konumları" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "FSM Order Name" -msgstr "" +msgstr "FSM Sipariş Adı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_calendar_view msgid "FSM Orders" -msgstr "" +msgstr "FSM Siparişleri" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_person_calendar_filter msgid "FSM Person Calendar Filter" -msgstr "" +msgstr "FSM Kişi Takvim Filtresi" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_wizard msgid "FSM Record Conversion" -msgstr "" +msgstr "FSM Kayıt Dönüştürme" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__fsm_person_id msgid "FSM Worker" -msgstr "" +msgstr "FSM Personeli" #. module: fieldservice #: model:ir.module.category,name:fieldservice.fsm @@ -1095,70 +1095,70 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_partner_fields #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Field Service" -msgstr "" +msgstr "Saha Servisi" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_category msgid "Field Service Category" -msgstr "" +msgstr "Saha Servis Kategorisi" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_dash_equipment #: model:ir.actions.act_window,name:fieldservice.action_fsm_equipment #: model:ir.model,name:fieldservice.model_fsm_equipment msgid "Field Service Equipment" -msgstr "" +msgstr "Saha Servis Ekipmanları" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_location msgid "Field Service Location" -msgstr "" +msgstr "Saha Servis Konumu" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_location_person msgid "Field Service Location Person Info" -msgstr "" +msgstr "Saha Servis Konum Kişi Bilgileri" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_order msgid "Field Service Order" -msgstr "" +msgstr "Saha Servis Siparişi" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_template msgid "Field Service Order Template" -msgstr "" +msgstr "Saha Servis Siparişi Şablonu" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_order_type msgid "Field Service Order Type" -msgstr "" +msgstr "Saha Servis Sipariş Türü" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_stage msgid "Field Service Stage" -msgstr "" +msgstr "Saha Servis Aşaması" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_tag msgid "Field Service Tag" -msgstr "" +msgstr "Saha Servis Etiketi" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_team msgid "Field Service Team" -msgstr "" +msgstr "Saha Servis Ekibi" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_person #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Field Service Worker" -msgstr "" +msgstr "Saha Servis Çalışanı" #. module: fieldservice #: model:ir.model,name:fieldservice.model_fsm_category msgid "Field Service Worker Category" -msgstr "" +msgstr "Saha Servis Çalışanı Kategorisi" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_person @@ -1167,7 +1167,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_tree #: model_terms:ir.ui.view,arch_db:fieldservice.res_territory_form_view_inherit msgid "Field Service Workers" -msgstr "" +msgstr "Saha Servis Çalışanları" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__phone_sanitized @@ -1176,6 +1176,8 @@ msgid "" "Field used to store sanitized phone number. Helps speeding up searches and " "comparisons." msgstr "" +"Temizlenmiş telefon numarasını saklamak için kullanılan alan. Aramaları ve " +"karşılaştırmaları hızlandırmaya yardımcı olur." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_account_position_id @@ -1186,7 +1188,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__fold msgid "Folded in Kanban" -msgstr "" +msgstr "Kanban'da katlanmış" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_follower_ids @@ -1195,7 +1197,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_follower_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_follower_ids msgid "Followers" -msgstr "" +msgstr "Takipçiler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_channel_ids @@ -1204,7 +1206,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_channel_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_channel_ids msgid "Followers (Channels)" -msgstr "" +msgstr "Takipçiler (Kanallar)" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_partner_ids @@ -1213,7 +1215,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_partner_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_partner_ids msgid "Followers (Partners)" -msgstr "" +msgstr "Takipçiler (Ortaklar)" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_type_icon @@ -1234,40 +1236,40 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__email_formatted #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__email_formatted msgid "Formatted Email" -msgstr "" +msgstr "Biçimlendirilmiş E-posta" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__full_name #: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__full_name msgid "Full Name" -msgstr "" +msgstr "Tam Adı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Future Orders" -msgstr "" +msgstr "Gelecek Siparişler" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view msgid "General Notes" -msgstr "" +msgstr "Genel Notlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_latitude #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_latitude msgid "Geo Latitude" -msgstr "" +msgstr "Coğrafi Enlem" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view msgid "Geo Location" -msgstr "" +msgstr "Coğrafi Konum" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_longitude #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_longitude msgid "Geo Longitude" -msgstr "" +msgstr "Coğrafi Boylam" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view @@ -1291,7 +1293,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Group By" -msgstr "" +msgstr "Grupla" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__has_unreconciled_entries @@ -1304,12 +1306,12 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__hide #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__hide msgid "Hide" -msgstr "" +msgstr "Gizle" #. module: fieldservice #: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__2 msgid "High" -msgstr "" +msgstr "Yüksek" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__id @@ -1345,7 +1347,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_exception_icon #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_exception_icon msgid "Icon" -msgstr "" +msgstr "İkon" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_exception_icon @@ -1412,7 +1414,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__image_1920 #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__image_1920 msgid "Image" -msgstr "" +msgstr "Görsel" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__image_1024 @@ -1460,7 +1462,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__industry_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__industry_id msgid "Industry" -msgstr "" +msgstr "Endüstri" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__todo @@ -1469,19 +1471,19 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_template_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document msgid "Instructions" -msgstr "" +msgstr "Talimatlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__internal_type #: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__internal_type msgid "Internal Type" -msgstr "" +msgstr "İç Tip" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__invoice_warn #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__invoice_warn msgid "Invoice" -msgstr "" +msgstr "Fatura" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__type @@ -1494,7 +1496,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_account msgid "Invoice your FSM orders" -msgstr "" +msgstr "FSM siparişlerinizi faturalandırın" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -1505,7 +1507,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__invoice_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__invoice_ids msgid "Invoices" -msgstr "" +msgstr "Faturalar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__is_button @@ -1519,13 +1521,13 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_is_follower #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_is_follower msgid "Is Follower" -msgstr "" +msgstr "Takipçi mi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__is_company #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__is_company msgid "Is a Company" -msgstr "" +msgstr "Bu bir Firmamı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_location @@ -1533,7 +1535,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_res_partner__fsm_location #: model:ir.model.fields,field_description:fieldservice.field_res_users__fsm_location msgid "Is a FS Location" -msgstr "" +msgstr "Bir FS Konumu mu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_person @@ -1541,7 +1543,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_res_partner__fsm_person #: model:ir.model.fields,field_description:fieldservice.field_res_users__fsm_person msgid "Is a FS Worker" -msgstr "" +msgstr "FS Çalışanı mı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__is_closed @@ -1557,19 +1559,19 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__function #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__function msgid "Job Position" -msgstr "" +msgstr "İş Pozisyonu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__journal_item_count #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__journal_item_count msgid "Journal Items" -msgstr "" +msgstr "Yevmiye Öğeleri" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__lang #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__lang msgid "Language" -msgstr "" +msgstr "Dil" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category____last_update @@ -1590,7 +1592,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_res_partner____last_update #: model:ir.model.fields,field_description:fieldservice.field_res_territory____last_update msgid "Last Modified on" -msgstr "" +msgstr "Son Düzenlenme" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__write_uid @@ -1607,7 +1609,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__write_uid #: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Son Güncelleyen" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__write_date @@ -1624,7 +1626,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__write_date #: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__write_date msgid "Last Updated on" -msgstr "" +msgstr "Son Güncellenme" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__calendar_last_notif_ack @@ -1650,7 +1652,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__request_late msgid "Latest Request Date" -msgstr "" +msgstr "Son Talep Tarihi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_repair @@ -1696,7 +1698,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__location_ids #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Linked Locations" -msgstr "" +msgstr "Bağlantılı Konumlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__location_id @@ -1708,44 +1710,44 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view msgid "Location" -msgstr "" +msgstr "Konum" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__location_directions #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Location Directions" -msgstr "" +msgstr "Konum Talimatlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__notes msgid "Location Notes" -msgstr "" +msgstr "Konum Notları" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_location_person msgid "Location Persons" -msgstr "" +msgstr "Konum Personelleri" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__phone msgid "Location Phone" -msgstr "" +msgstr "Konum Telefonu" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_location msgid "Location Reports." -msgstr "" +msgstr "Konum Raporları." #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_form_view msgid "Location Worker" -msgstr "" +msgstr "Konum Çalışanı" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.menu_fsm_location_person #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_tree_view msgid "Location Workers" -msgstr "" +msgstr "Konum Çalışanları" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_report_location @@ -1755,12 +1757,12 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_tree_view #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Locations" -msgstr "" +msgstr "Konumlar" #. module: fieldservice #: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__1 msgid "Low" -msgstr "" +msgstr "Düşük" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -2001,7 +2003,7 @@ msgstr "" #. module: fieldservice #: model:res.groups,name:fieldservice.group_fsm_manager msgid "Manager" -msgstr "" +msgstr "Yönetici" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -2011,18 +2013,18 @@ msgstr "" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.data msgid "Master Data" -msgstr "" +msgstr "Ana Veriler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__user_id msgid "Me" -msgstr "" +msgstr "Ben" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__meeting_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__meeting_ids msgid "Meetings" -msgstr "" +msgstr "Toplantılar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_has_error @@ -2046,14 +2048,14 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_ids msgid "Messages" -msgstr "" +msgstr "Mesajlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__mobile #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__mobile #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__mobile msgid "Mobile" -msgstr "" +msgstr "Mobil" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__my_activity_date_deadline @@ -2067,7 +2069,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "My Orders" -msgstr "" +msgstr "Siparişlerim" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__name @@ -2081,12 +2083,12 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__name #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__name msgid "Name" -msgstr "" +msgstr "Adı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "Need Assigned" -msgstr "" +msgstr "Atanan Gerekiyor" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban @@ -2097,7 +2099,7 @@ msgstr "" #: code:addons/fieldservice/models/fsm_order.py:0 #, python-format msgid "New" -msgstr "" +msgstr "Yeni" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_date_deadline @@ -2131,12 +2133,12 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Next Stage" -msgstr "" +msgstr "Sonraki Aşama" #. module: fieldservice #: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__0 msgid "Normal" -msgstr "" +msgstr "Normal" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__email_normalized @@ -2150,7 +2152,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__comment #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view msgid "Notes" -msgstr "" +msgstr "Notlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_needaction_counter @@ -2205,123 +2207,123 @@ msgstr "" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.operations msgid "Operations" -msgstr "" +msgstr "Operasyonlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__opportunity_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__opportunity_ids msgid "Opportunities" -msgstr "" +msgstr "Fırsatlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__opportunity_count msgid "Opportunity" -msgstr "" +msgstr "Fırsat" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__display_name #: model:ir.model.fields.selection,name:fieldservice.selection__fsm_stage__stage_type__order #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Order" -msgstr "" +msgstr "Sipariş" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_assigned msgid "Order Assigned" -msgstr "" +msgstr "Sipariş Atandı" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_cancelled msgid "Order Cancelled" -msgstr "" +msgstr "Servis İptal Edildi" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_completed msgid "Order Completed" -msgstr "" +msgstr "Servis Tamamlandı" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_confirmed msgid "Order Confirmed" -msgstr "" +msgstr "Sipariş Onaylandı" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_new msgid "Order Created" -msgstr "" +msgstr "Sipariş Oluşturuldu" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_enroute msgid "Order En Route" -msgstr "" +msgstr "Sipariş Yolda" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_scheduled msgid "Order Scheduled" -msgstr "" +msgstr "Sipariş Planlandı" #. module: fieldservice #: model:mail.message.subtype,name:fieldservice.mt_order_started msgid "Order Started" -msgstr "" +msgstr "Sipariş Başladı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_form #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_tree msgid "Order Team" -msgstr "" +msgstr "Sipariş Ekibi" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_template msgid "Order Templates" -msgstr "" +msgstr "Sipariş Şablonları" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_order_type #: model:ir.ui.menu,name:fieldservice.menu_fsm_order_type #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_type_tree_view msgid "Order Types" -msgstr "" +msgstr "Sipariş Türleri" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_assigned msgid "Order assigned" -msgstr "" +msgstr "Sipariş atanan" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_cancelled msgid "Order cancelled" -msgstr "" +msgstr "Sipariş iptal edildi" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_completed msgid "Order completed" -msgstr "" +msgstr "Sipariş tamamlandı" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_confirmed msgid "Order confirmed" -msgstr "" +msgstr "Sipariş onaylandı" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_new msgid "Order created" -msgstr "" +msgstr "Sipariş oluşturuldu" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_enroute msgid "Order en route" -msgstr "" +msgstr "Sipariş yolda" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_scheduled msgid "Order scheduled" -msgstr "" +msgstr "Sipariş planlandı" #. module: fieldservice #: model:mail.message.subtype,description:fieldservice.mt_order_started msgid "Order started" -msgstr "" +msgstr "Sipariş Başladı" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_dash_order @@ -2337,12 +2339,12 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "Orders" -msgstr "" +msgstr "Siparişler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__order_count msgid "Orders Count" -msgstr "" +msgstr "Sipariş Sayısı" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_order @@ -2362,7 +2364,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view msgid "Others" -msgstr "" +msgstr "Diğer" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__owned_by_id @@ -2382,7 +2384,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__owner_id #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view msgid "Owner" -msgstr "" +msgstr "Sahibi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_category__parent_id @@ -2390,13 +2392,13 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_parent_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__parent_id msgid "Parent" -msgstr "" +msgstr "Üst" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__parent_name #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__parent_name msgid "Parent name" -msgstr "" +msgstr "Üst Adı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contract_ids @@ -2414,13 +2416,13 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__debit_limit #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__debit_limit msgid "Payable Limit" -msgstr "" +msgstr "Borç Limit" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_payment_method_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_payment_method_id msgid "Payment Method" -msgstr "" +msgstr "Ödeme Şekli" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__payment_token_ids @@ -2433,7 +2435,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__phone #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__phone msgid "Phone" -msgstr "" +msgstr "Telefon" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__phone_sanitized_blacklisted @@ -2444,7 +2446,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Planning" -msgstr "" +msgstr "Planlama" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view @@ -2465,13 +2467,13 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Previous Stage" -msgstr "" +msgstr "Önceki Aşama" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_product_pricelist #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_product_pricelist msgid "Pricelist" -msgstr "" +msgstr "Fiyat Listesi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__territory_manager_id @@ -2482,7 +2484,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contact_id msgid "Primary Contact" -msgstr "" +msgstr "Birincil Kontak" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__service_location_id @@ -2495,7 +2497,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__priority msgid "Priority" -msgstr "" +msgstr "Öncelik" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__legend_priority @@ -2515,13 +2517,13 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__fsm_record_type msgid "Record Type" -msgstr "" +msgstr "Kayıt Türü" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__ref #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__ref msgid "Reference" -msgstr "" +msgstr "Referans" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__region_id @@ -2530,18 +2532,18 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Region" -msgstr "" +msgstr "Bölge" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__region_manager_id msgid "Region Manager" -msgstr "" +msgstr "Bölge Müdürü" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__parent_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__parent_id msgid "Related Company" -msgstr "" +msgstr "İlişkili Şirket" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__owner_id @@ -2557,28 +2559,28 @@ msgstr "" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.reporting msgid "Reporting" -msgstr "" +msgstr "Raporlama" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Request Workers" -msgstr "" +msgstr "Personel Talebi" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Requirements" -msgstr "" +msgstr "Gereksinimler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__resolution #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Resolution" -msgstr "" +msgstr "Çözüm" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document msgid "Resolution Notes" -msgstr "" +msgstr "Çözünürlük Notları" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_user_id @@ -2587,12 +2589,12 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_user_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_user_id msgid "Responsible User" -msgstr "" +msgstr "Sorumlu Kullanıcı" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Routes" -msgstr "" +msgstr "Rotalar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_has_sms_error @@ -2607,39 +2609,39 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__team_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__team_id msgid "Sales Team" -msgstr "" +msgstr "Satış Ekibi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__user_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__user_id msgid "Salesperson" -msgstr "" +msgstr "Satış Temsilcisi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__phone_sanitized #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__phone_sanitized msgid "Sanitized Number" -msgstr "" +msgstr "Arındırılmış Numarası" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form msgid "Schedule Details" -msgstr "" +msgstr "Planma Ayrıntıları" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__scheduled_date_end msgid "Scheduled End" -msgstr "" +msgstr "Planlanan Bitiş" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__scheduled_date_start msgid "Scheduled Start (ETA)" -msgstr "" +msgstr "Planlanan Başlama (ETA)" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__scheduled_duration msgid "Scheduled duration" -msgstr "" +msgstr "Planlanan Süre" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_order__scheduled_duration @@ -2685,6 +2687,8 @@ msgid "" "Select whether you want to convert this record to a Field\n" " Service Worker or Location." msgstr "" +"Bu kaydı bir Saha Servisine dönüştürmek isteyip istemediğinizi seçin\n" +" Çalışan veya Konum." #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__invoice_warn @@ -2717,23 +2721,23 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__sequence #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__sequence msgid "Sequence" -msgstr "" +msgstr "Sıra" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_location msgid "Service Locations" -msgstr "" +msgstr "Servis Konumları" #. module: fieldservice #: model:ir.actions.report,name:fieldservice.action_report_fsm_order msgid "Service Order" -msgstr "" +msgstr "Servis Siparişi" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_graph_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_pivot_view msgid "Service Orders" -msgstr "" +msgstr "Servis Siparişleri" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_stage__is_closed @@ -2745,7 +2749,7 @@ msgstr "" #: model:ir.ui.menu,name:fieldservice.settings #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "Settings" -msgstr "" +msgstr "Ayarlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_share @@ -2791,22 +2795,22 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_tree_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view msgid "Stage" -msgstr "" +msgstr "Aşama" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__custom_color msgid "Stage Color" -msgstr "" +msgstr "Aşama Rengi" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view msgid "Stage Description and Tooltips" -msgstr "" +msgstr "Aşama Tanımı ve Araç İpuçları" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__stage_name msgid "Stage Name" -msgstr "" +msgstr "Aşama Adı" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_stage @@ -2814,7 +2818,7 @@ msgstr "" #: model:ir.ui.menu,name:fieldservice.menu_fsm_stage #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_tree_view msgid "Stages" -msgstr "" +msgstr "Aşamalar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__state_id @@ -2843,36 +2847,36 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__street #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__street msgid "Street" -msgstr "" +msgstr "Cade" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Street 2..." -msgstr "" +msgstr "Adres 2..." #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Street..." -msgstr "" +msgstr "Adres..." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__street2 #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__street2 #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__street2 msgid "Street2" -msgstr "" +msgstr "Adres2" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sublocation_count msgid "Sub Locations" -msgstr "" +msgstr "Alt Konumlar" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view msgid "Sub-Locations" -msgstr "" +msgstr "Alt-Konumlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__supplier_rank @@ -2883,7 +2887,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.constraint,message:fieldservice.constraint_fsm_tag_name_uniq msgid "Tag name already exists!" -msgstr "" +msgstr "Etiket adı zaten var!" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_fsm_tag @@ -2892,35 +2896,35 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__category_id #: model:ir.ui.menu,name:fieldservice.menu_fsm_tag msgid "Tags" -msgstr "" +msgstr "Etiketler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__task_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__task_ids msgid "Tasks" -msgstr "" +msgstr "Görevler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__vat #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__vat msgid "Tax ID" -msgstr "" +msgstr "Vergi No" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__team_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_template__team_id msgid "Team" -msgstr "" +msgstr "Ekip" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_form msgid "Team Name" -msgstr "" +msgstr "Ekip Adı" #. module: fieldservice #: model:ir.model.constraint,message:fieldservice.constraint_fsm_team_name_uniq msgid "Team name already exists!" -msgstr "" +msgstr "Etiket adı zaten mevcut!" #. module: fieldservice #: model:ir.actions.act_window,name:fieldservice.action_team_dashboard @@ -2929,23 +2933,23 @@ msgstr "" #: model:ir.ui.menu,name:fieldservice.menu_fsm_dash_team #: model:ir.ui.menu,name:fieldservice.menu_fsm_team msgid "Teams" -msgstr "" +msgstr "Ekipler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__template_id msgid "Template" -msgstr "" +msgstr "Şablon" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.menu_fsm_template msgid "Templates" -msgstr "" +msgstr "Şablonlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__territory_ids #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "Territories" -msgstr "" +msgstr "Sahalar" #. module: fieldservice #: model:ir.model,name:fieldservice.model_res_territory @@ -2956,7 +2960,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Territory" -msgstr "" +msgstr "Saha" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__vat @@ -3056,7 +3060,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__tz #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__tz msgid "Timezone" -msgstr "" +msgstr "Saat Dilimi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__tz_offset @@ -3068,7 +3072,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__title #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__title msgid "Title" -msgstr "" +msgstr "Başlık" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban @@ -3079,47 +3083,47 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "To Do" -msgstr "" +msgstr "Yapılacak" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "To Schedule" -msgstr "" +msgstr "Planlama" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Today Orders" -msgstr "" +msgstr "Bugün Siparişler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__total_invoiced #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__total_invoiced msgid "Total Invoiced" -msgstr "" +msgstr "Toplam Faturalanan" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__debit #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__debit msgid "Total Payable" -msgstr "" +msgstr "Toplam Borç" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__credit #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__credit msgid "Total Receivable" -msgstr "" +msgstr "Toplam Alacak" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__credit #: model:ir.model.fields,help:fieldservice.field_fsm_person__credit msgid "Total amount this customer owes you." -msgstr "" +msgstr "Bu müşterinin size borçlu olduğu toplam tutar." #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__debit #: model:ir.model.fields,help:fieldservice.field_fsm_person__debit msgid "Total amount you have to pay to this vendor." -msgstr "" +msgstr "Bu tedarikçi ödemeniz gereken toplam tutar." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__type @@ -3128,7 +3132,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_type_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_search_view msgid "Type" -msgstr "" +msgstr "Tür" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_exception_decoration @@ -3137,12 +3141,12 @@ msgstr "" #: model:ir.model.fields,help:fieldservice.field_fsm_person__activity_exception_decoration #: model:ir.model.fields,help:fieldservice.field_fsm_team__activity_exception_decoration msgid "Type of the exception activity on record." -msgstr "" +msgstr "Kayıttaki istisna etkinliğinin türü." #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Unassigned" -msgstr "" +msgstr "Atanmamış" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_unread @@ -3151,7 +3155,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_unread #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_unread msgid "Unread Messages" -msgstr "" +msgstr "Okunmamış Mesajlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_unread_counter @@ -3165,12 +3169,12 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view msgid "Unscheduled" -msgstr "" +msgstr "Planlanmamış" #. module: fieldservice #: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__3 msgid "Urgent" -msgstr "" +msgstr "Acil" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_location_builder @@ -3217,7 +3221,7 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_stage__is_default msgid "Used a default stage" -msgstr "" +msgstr "Bu varsayılan Aşamasımı" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_stage__sequence @@ -3232,13 +3236,13 @@ msgstr "" #. module: fieldservice #: model:res.groups,name:fieldservice.group_fsm_user msgid "User" -msgstr "" +msgstr "Kullanıcı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__user_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__user_ids msgid "Users" -msgstr "" +msgstr "Kullanıcılar" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__currency_id @@ -3249,13 +3253,13 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Vehicles" -msgstr "" +msgstr "Araçlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_supplier_payment_term_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_supplier_payment_term_id msgid "Vendor Payment Terms" -msgstr "" +msgstr "Tedarikçi Ödeme Koşulları" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__website @@ -3299,12 +3303,12 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_search_view msgid "Worker" -msgstr "" +msgstr "Çalışan" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__person_phone msgid "Worker Phone" -msgstr "" +msgstr "Çalışan Telefonu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__person_ids @@ -3312,12 +3316,12 @@ msgstr "" #: model:ir.ui.menu,name:fieldservice.menu_fsm_person #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Workers" -msgstr "" +msgstr "Çalışanlar" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__calendar_id msgid "Working Schedule" -msgstr "" +msgstr "Çalışma Program" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view @@ -3336,7 +3340,7 @@ msgstr "" #: code:addons/fieldservice/models/fsm_order.py:0 #, python-format msgid "You cannot delete this order." -msgstr "" +msgstr "Bu siparişi silemezsiniz." #. module: fieldservice #: model:ir.model.constraint,message:fieldservice.constraint_fsm_person_calendar_filter_user_id_fsm_person_id_unique @@ -3359,31 +3363,31 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "ZIP" -msgstr "" +msgstr "PK" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__zip #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__zip #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__zip msgid "Zip" -msgstr "" +msgstr "Pk" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_tag_form_view msgid "tag" -msgstr "" +msgstr "etiket" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_tag_tree_view msgid "tags" -msgstr "" +msgstr "etiketler" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_template_form_view msgid "template" -msgstr "" +msgstr "şablon" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_template_tree_view msgid "templates" -msgstr "" +msgstr "şablonlar" From be9265d90c92c954e0b1728b0ad890d96740b74c Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 18:40:14 +0000 Subject: [PATCH 304/631] Translated using Weblate (Turkish) Currently translated at 100.0% (28 of 28 strings) Translation: field-service-14.0/field-service-14.0-base_territory Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-base_territory/tr/ --- base_territory/i18n/tr.po | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/base_territory/i18n/tr.po b/base_territory/i18n/tr.po index f7c68ece50..78cc942592 100644 --- a/base_territory/i18n/tr.po +++ b/base_territory/i18n/tr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-09 18:38+0000\n" +"PO-Revision-Date: 2021-07-09 18:49+0000\n" "Last-Translator: Ediz Duman \n" "Language-Team: none\n" "Language: tr\n" @@ -32,18 +32,18 @@ msgstr "Şube Müdürü" #: model:ir.ui.menu,name:base_territory.menu_res_branch #: model_terms:ir.ui.view,arch_db:base_territory.res_branch_tree_view msgid "Branches" -msgstr "" +msgstr "Şubeler" #. module: base_territory #: model:ir.model,name:base_territory.model_res_country #: model:ir.model.fields.selection,name:base_territory.selection__res_territory__type__country msgid "Country" -msgstr "" +msgstr "Ülke" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_territory__country_ids msgid "Country Names" -msgstr "" +msgstr "Ülke Adları" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__create_uid @@ -51,7 +51,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__create_uid #: model:ir.model.fields,field_description:base_territory.field_res_territory__create_uid msgid "Created by" -msgstr "" +msgstr "Oluşturan" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__create_date @@ -59,12 +59,12 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__create_date #: model:ir.model.fields,field_description:base_territory.field_res_territory__create_date msgid "Created on" -msgstr "" +msgstr "Oluşturulma" #. module: base_territory #: model_terms:ir.ui.view,arch_db:base_territory.res_territory_form_view msgid "Definition" -msgstr "" +msgstr "Tanım" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__description @@ -72,7 +72,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__description #: model:ir.model.fields,field_description:base_territory.field_res_territory__description msgid "Description" -msgstr "" +msgstr "Açıklama" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__display_name @@ -81,7 +81,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__display_name #: model:ir.model.fields,field_description:base_territory.field_res_territory__display_name msgid "Display Name" -msgstr "" +msgstr "Görünüm Adı" #. module: base_territory #: model:ir.model,name:base_territory.model_res_district @@ -89,19 +89,19 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_territory__district_id #: model_terms:ir.ui.view,arch_db:base_territory.res_district_form_view msgid "District" -msgstr "" +msgstr "İlçe" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_district__partner_id msgid "District Manager" -msgstr "" +msgstr "İlçe Müdürü" #. module: base_territory #: model:ir.actions.act_window,name:base_territory.action_res_district #: model:ir.ui.menu,name:base_territory.menu_res_district #: model_terms:ir.ui.view,arch_db:base_territory.res_district_tree_view msgid "Districts" -msgstr "" +msgstr "İlçeler" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__id @@ -110,7 +110,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__id #: model:ir.model.fields,field_description:base_territory.field_res_territory__id msgid "ID" -msgstr "" +msgstr "ID" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch____last_update @@ -119,7 +119,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region____last_update #: model:ir.model.fields,field_description:base_territory.field_res_territory____last_update msgid "Last Modified on" -msgstr "" +msgstr "Son Düzenlenme" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__write_uid @@ -127,7 +127,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__write_uid #: model:ir.model.fields,field_description:base_territory.field_res_territory__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Son Güncelleyen" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__write_date @@ -135,7 +135,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__write_date #: model:ir.model.fields,field_description:base_territory.field_res_territory__write_date msgid "Last Updated on" -msgstr "" +msgstr "Son Güncellenme" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_branch__name @@ -143,7 +143,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_region__name #: model:ir.model.fields,field_description:base_territory.field_res_territory__name msgid "Name" -msgstr "" +msgstr "Adı" #. module: base_territory #: model:ir.model,name:base_territory.model_res_region @@ -151,12 +151,12 @@ msgstr "" #: model:ir.model.fields,field_description:base_territory.field_res_territory__region_id #: model_terms:ir.ui.view,arch_db:base_territory.res_region_form_view msgid "Region" -msgstr "" +msgstr "Bölge" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_region__partner_id msgid "Region Manager" -msgstr "" +msgstr "Bölge Müdürü" #. module: base_territory #: model:ir.actions.act_window,name:base_territory.action_res_region @@ -164,43 +164,43 @@ msgstr "" #: model:ir.ui.menu,name:base_territory.menu_res_region #: model_terms:ir.ui.view,arch_db:base_territory.res_region_tree_view msgid "Regions" -msgstr "" +msgstr "Bölgeler" #. module: base_territory #: model:ir.model.fields.selection,name:base_territory.selection__res_territory__type__state msgid "State" -msgstr "" +msgstr "İl" #. module: base_territory #: model:ir.actions.act_window,name:base_territory.action_res_territory #: model:ir.ui.menu,name:base_territory.menu_res_territory #: model_terms:ir.ui.view,arch_db:base_territory.res_territory_tree_view msgid "Territories" -msgstr "" +msgstr "Sahalar" #. module: base_territory #: model:ir.model,name:base_territory.model_res_territory #: model:ir.model.fields,field_description:base_territory.field_res_country__territory_id #: model_terms:ir.ui.view,arch_db:base_territory.res_territory_form_view msgid "Territory" -msgstr "" +msgstr "Saha" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_territory__type msgid "Type" -msgstr "" +msgstr "Tür" #. module: base_territory #: model:ir.model.fields,field_description:base_territory.field_res_territory__zip_codes msgid "ZIP Codes" -msgstr "" +msgstr "Posta Kodları" #. module: base_territory #: model:ir.model.fields.selection,name:base_territory.selection__res_territory__type__zip msgid "Zip" -msgstr "" +msgstr "Pk" #. module: base_territory #: model:ir.model,name:base_territory.model_res_branch msgid "branch" -msgstr "" +msgstr "şube" From e72d2c5708c3466cd49d2373a41f54ec934acd11 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 18:37:27 +0000 Subject: [PATCH 305/631] Translated using Weblate (Turkish) Currently translated at 100.0% (65 of 65 strings) Translation: field-service-14.0/field-service-14.0-fieldservice_route Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_route/tr/ --- fieldservice_route/i18n/tr.po | 122 +++++++++++++++++----------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/fieldservice_route/i18n/tr.po b/fieldservice_route/i18n/tr.po index 67fc0f258a..64a976cf88 100644 --- a/fieldservice_route/i18n/tr.po +++ b/fieldservice_route/i18n/tr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-09 18:31+0000\n" +"PO-Revision-Date: 2021-07-09 18:49+0000\n" "Last-Translator: Ediz Duman \n" "Language-Team: none\n" "Language: tr\n" @@ -44,42 +44,42 @@ msgstr "Siparişi İptal Et" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Capacity" -msgstr "" +msgstr "Kapasite" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form msgid "Complete order" -msgstr "" +msgstr "Siparişi Tamamla" #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_day msgid "Create a Route Day." -msgstr "" +msgstr "Bir Rota Günü Oluşturun." #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_uid #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_uid #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_uid msgid "Created by" -msgstr "" +msgstr "Oluşturan" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__create_date #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__create_date #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__create_date msgid "Created on" -msgstr "" +msgstr "Oluşturulma" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date msgid "Date" -msgstr "" +msgstr "Tarih" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__dayroute_id #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form msgid "Day Route" -msgstr "" +msgstr "Gün Rotası" #. module: fieldservice_route #: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_dayroute @@ -93,17 +93,17 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_pivot_view #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_tree msgid "Day Routes" -msgstr "" +msgstr "Gün Rotaları" #. module: fieldservice_route #: model_terms:ir.actions.act_window,help:fieldservice_route.action_fsm_route_dayroute_report msgid "Day Routes Report" -msgstr "" +msgstr "Gün Rota Raporları" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__day_ids msgid "Days" -msgstr "" +msgstr "Gün" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__display_name @@ -112,42 +112,42 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__display_name #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__display_name msgid "Display Name" -msgstr "" +msgstr "Görünüm Adı" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__end_location_id msgid "End Location" -msgstr "" +msgstr "Bitiş Konumu" #. module: fieldservice_route #: model:ir.model,name:fieldservice_route.model_fsm_location msgid "Field Service Location" -msgstr "" +msgstr "Saha Servis Konumu" #. module: fieldservice_route #: model:ir.model,name:fieldservice_route.model_fsm_order msgid "Field Service Order" -msgstr "" +msgstr "Saha Servis Siparişi" #. module: fieldservice_route #: model:ir.model,name:fieldservice_route.model_fsm_route msgid "Field Service Route" -msgstr "" +msgstr "Saha Hizmet Rotası" #. module: fieldservice_route #: model:ir.model,name:fieldservice_route.model_fsm_route_dayroute msgid "Field Service Route Dayroute" -msgstr "" +msgstr "Saha Servis Günlük Rotası" #. module: fieldservice_route #: model:ir.model,name:fieldservice_route.model_fsm_stage msgid "Field Service Stage" -msgstr "" +msgstr "Saha Servis Aşaması" #. module: fieldservice_route #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__friday msgid "Friday" -msgstr "" +msgstr "Cuma" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__id @@ -157,12 +157,12 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__id #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__id msgid "ID" -msgstr "" +msgstr "ID" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__last_location_id msgid "Last Location" -msgstr "" +msgstr "Son Konum" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location____last_update @@ -172,73 +172,73 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute____last_update #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage____last_update msgid "Last Modified on" -msgstr "" +msgstr "Son Düzenlenme" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_uid #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_uid #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Son Güncelleyen" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__write_date #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__write_date #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__write_date msgid "Last Updated on" -msgstr "" +msgstr "Son Güncellenme" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__latitude msgid "Latitude" -msgstr "" +msgstr "Enlem" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__longitude msgid "Longitude" -msgstr "" +msgstr "Boylam" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_allow_time msgid "Maximal Allowable Time (in hours)" -msgstr "" +msgstr "İzin Verilen Maksimum Süre (saat olarak)" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Maximum" -msgstr "" +msgstr "Maksimum" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__max_order msgid "Maximum Capacity" -msgstr "" +msgstr "Maksimum Kapasite" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__max_order msgid "Maximum Orders" -msgstr "" +msgstr "Maksimum sipariş" #. module: fieldservice_route #: model:ir.model.fields,help:fieldservice_route.field_fsm_route__max_order msgid "Maximum number of orders per day route." -msgstr "" +msgstr "Günlük rota başına maksimum sipariş sayısı." #. module: fieldservice_route #: model:ir.model.fields,help:fieldservice_route.field_fsm_route_dayroute__max_order msgid "Maximum numbers of orders that can be added to this day route." -msgstr "" +msgstr "Bu günlük rotaya eklenebilecek maksimum sipariş sayısı." #. module: fieldservice_route #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__monday msgid "Monday" -msgstr "" +msgstr "Pazartesi" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__name #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_day__name #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__name msgid "Name" -msgstr "" +msgstr "Adı" #. module: fieldservice_route #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 @@ -247,44 +247,44 @@ msgstr "" #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 #, python-format msgid "New" -msgstr "" +msgstr "Yeni" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_count msgid "Number of Orders" -msgstr "" +msgstr "Sipariş Sayısı" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_order__display_name msgid "Order" -msgstr "" +msgstr "Sipariş" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__order_ids #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form msgid "Orders" -msgstr "" +msgstr "Siparişler" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route__fsm_person_id #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__person_id msgid "Person" -msgstr "" +msgstr "Personel" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__date_start_planned msgid "Planned Start Time" -msgstr "" +msgstr "Planlanan Başlangıç Zamanı" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form msgid "Planning" -msgstr "" +msgstr "Planlama" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form msgid "Positioning" -msgstr "" +msgstr "Konumlandırma" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_location__fsm_route_id @@ -293,7 +293,7 @@ msgstr "" #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_stage__stage_type__route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "Route" -msgstr "" +msgstr "Rota" #. module: fieldservice_route #: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route_day @@ -301,94 +301,94 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_form_view #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_day_tree_view msgid "Route Day" -msgstr "" +msgstr "Rota Gün" #. module: fieldservice_route #: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route_day msgid "Route Days" -msgstr "" +msgstr "Rota Günleri" #. module: fieldservice_route #: model:ir.actions.act_window,name:fieldservice_route.action_fsm_route #: model:ir.ui.menu,name:fieldservice_route.menu_fsm_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_tree msgid "Routes" -msgstr "" +msgstr "Rotalar" #. module: fieldservice_route #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__saturday msgid "Saturday" -msgstr "" +msgstr "Cumartesi" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__stage_id msgid "Stage" -msgstr "" +msgstr "Aşama" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__start_location_id msgid "Start Location" -msgstr "" +msgstr "Başlama Konumu" #. module: fieldservice_route #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__sunday msgid "Sunday" -msgstr "" +msgstr "Pazar" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__team_id msgid "Team" -msgstr "" +msgstr "Ekip" #. module: fieldservice_route #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 #, python-format msgid "The day route is exceeding the maximum number of orders of the route." -msgstr "" +msgstr "Günlük rota, rotanın maksimum sipariş sayısını aşıyor." #. module: fieldservice_route #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 #, python-format msgid "The route %s does not run on %s!" -msgstr "" +msgstr "%s rotası %s üzerinde çalışmıyor!" #. module: fieldservice_route #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__thursday msgid "Thursday" -msgstr "" +msgstr "Perşembe" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_route_dayroute__work_time msgid "Time before overtime (in hours)" -msgstr "" +msgstr "Fazla mesai öncesi süre (saat olarak)" #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_dayroute_form msgid "Timing" -msgstr "" +msgstr "Zamanlama" #. module: fieldservice_route #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__tuesday msgid "Tuesday" -msgstr "" +msgstr "Salı" #. module: fieldservice_route #: model:ir.model.fields,field_description:fieldservice_route.field_fsm_stage__stage_type msgid "Type" -msgstr "" +msgstr "Tür" #. module: fieldservice_route #: model:ir.model.fields.selection,name:fieldservice_route.selection__fsm_route_day__name__wednesday msgid "Wednesday" -msgstr "" +msgstr "Çarşamba" #. module: fieldservice_route #: code:addons/fieldservice_route/models/fsm_route_dayroute.py:0 #, python-format msgid "You must create a FSM team first." -msgstr "" +msgstr "Önce bir FSM ekibi oluşturmalısınız." #. module: fieldservice_route #: model_terms:ir.ui.view,arch_db:fieldservice_route.fsm_route_form msgid "orders per day route" -msgstr "" +msgstr "günlük rota siparişleri" From e0bf6d957bef7174bdb19dfdffc683d0d4eafca7 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 19:15:30 +0000 Subject: [PATCH 306/631] Added translation using Weblate (Turkish) --- fieldservice_account/i18n/tr.po | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 fieldservice_account/i18n/tr.po diff --git a/fieldservice_account/i18n/tr.po b/fieldservice_account/i18n/tr.po new file mode 100644 index 0000000000..337fdee3b8 --- /dev/null +++ b/fieldservice_account/i18n/tr.po @@ -0,0 +1,97 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move__display_name +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move_line__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_account_bank_statement_line__fsm_order_count +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move__fsm_order_count +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move_line__fsm_order_ids +#: model:ir.model.fields,field_description:fieldservice_account.field_account_payment__fsm_order_count +#: model_terms:ir.ui.view,arch_db:fieldservice_account.account_invoice_form +#: model_terms:ir.ui.view,arch_db:fieldservice_account.invoice_search_view_fso +msgid "FSM Orders" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model,name:fieldservice_account.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_account +#: model_terms:ir.ui.view,arch_db:fieldservice_account.vendor_bill_form_view_fso +msgid "Field Service Orders" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_account_bank_statement_line__fsm_order_ids +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move__fsm_order_ids +#: model:ir.model.fields,field_description:fieldservice_account.field_account_payment__fsm_order_ids +msgid "Field Service orders associated to this invoice" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move__id +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move_line__id +#: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__id +msgid "ID" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__invoice_count +msgid "Invoice Count" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__invoice_lines +msgid "Invoice Lines" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__invoice_ids +msgid "Invoices" +msgstr "" + +#. module: fieldservice_account +#: model_terms:ir.ui.view,arch_db:fieldservice_account.view_fsm_order_form_inherit_account +msgid "Invoices/Bills" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model,name:fieldservice_account.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model,name:fieldservice_account.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move____last_update +#: model:ir.model.fields,field_description:fieldservice_account.field_account_move_line____last_update +#: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_account +#: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__display_name +msgid "Order" +msgstr "" From 3b62ab8f88233e859f604a1edeebb52d21e11a8c Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Fri, 9 Jul 2021 18:54:14 +0000 Subject: [PATCH 307/631] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (536 of 536 strings) Translation: field-service-14.0/field-service-14.0-fieldservice Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice/es_AR/ --- fieldservice/i18n/es_AR.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice/i18n/es_AR.po b/fieldservice/i18n/es_AR.po index 98b0c48db1..e329cad7b7 100644 --- a/fieldservice/i18n/es_AR.po +++ b/fieldservice/i18n/es_AR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-06-09 22:49+0000\n" +"PO-Revision-Date: 2021-07-09 21:48+0000\n" "Last-Translator: Ignacio Buioli \n" "Language-Team: none\n" "Language: es_AR\n" @@ -2111,7 +2111,7 @@ msgstr "Celular" #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__my_activity_date_deadline #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__my_activity_date_deadline msgid "My Activity Deadline" -msgstr "" +msgstr "Mi Plazo de Actividad" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view From 02781df50c098e8924332b71efc50df6f1ee239f Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 19:08:55 +0000 Subject: [PATCH 308/631] Translated using Weblate (Turkish) Currently translated at 60.2% (323 of 536 strings) Translation: field-service-14.0/field-service-14.0-fieldservice Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice/tr/ --- fieldservice/i18n/tr.po | 49 +++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/fieldservice/i18n/tr.po b/fieldservice/i18n/tr.po index 8f30f49a13..a281917cf7 100644 --- a/fieldservice/i18n/tr.po +++ b/fieldservice/i18n/tr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-09 18:49+0000\n" +"PO-Revision-Date: 2021-07-09 21:48+0000\n" "Last-Translator: Ediz Duman \n" "Language-Team: none\n" "Language: tr\n" @@ -978,6 +978,9 @@ msgid "" "partner is a customer without access or with a limited access created for " "sharing data." msgstr "" +"Ya müşteri (kullanıcı değil), ya paylaşılan kullanıcı. Mevcut ortağın, " +"erişimi olmayan veya veri paylaşımı için sınırlı erişime sahip bir müşteri " +"olduğu belirtilir." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__email @@ -1024,7 +1027,7 @@ msgstr "Ekipmanlar" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_equipment msgid "Equipments Report" -msgstr "" +msgstr "Ekipman Raporu" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form @@ -1041,7 +1044,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document msgid "FS Order #" -msgstr "" +msgstr "FS Sipariş #" #. module: fieldservice #: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order_type__internal_type__fsm @@ -1183,7 +1186,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_account_position_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_account_position_id msgid "Fiscal Position" -msgstr "" +msgstr "Mali Pozisyon" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__fold @@ -1492,6 +1495,8 @@ msgid "" "Invoice & Delivery addresses are used in sales orders. Private addresses are " "only visible by authorized users." msgstr "" +"Satış siparişlerinde Fatura & Teslimat adresleri kullanılmaktadır. Özel " +"adresler yalnızca yetkili kullanıcılar tarafından görülebilir." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_account @@ -1501,7 +1506,7 @@ msgstr "FSM siparişlerinizi faturalandırın" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Invoice your Service Orders" -msgstr "" +msgstr "Servis Siparişlerinizi Faturalandırın" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__invoice_ids @@ -1527,7 +1532,7 @@ msgstr "Takipçi mi" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__is_company #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__is_company msgid "Is a Company" -msgstr "Bu bir Firmamı" +msgstr "Bu Firmamı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_location @@ -1535,7 +1540,7 @@ msgstr "Bu bir Firmamı" #: model:ir.model.fields,field_description:fieldservice.field_res_partner__fsm_location #: model:ir.model.fields,field_description:fieldservice.field_res_users__fsm_location msgid "Is a FS Location" -msgstr "Bir FS Konumu mu" +msgstr "FS Konumu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_person @@ -1543,7 +1548,7 @@ msgstr "Bir FS Konumu mu" #: model:ir.model.fields,field_description:fieldservice.field_res_partner__fsm_person #: model:ir.model.fields,field_description:fieldservice.field_res_users__fsm_person msgid "Is a FS Worker" -msgstr "FS Çalışanı mı" +msgstr "FS Çalışanı" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__is_closed @@ -1942,12 +1947,12 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Manage recurring orders" -msgstr "" +msgstr "Yinelenen siparişleri yönetin" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_route msgid "Manage routes" -msgstr "" +msgstr "Rotaları Yönet" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -1983,7 +1988,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form msgid "Manage templates" -msgstr "" +msgstr "Şablonları Yönet" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form @@ -2349,17 +2354,17 @@ msgstr "Sipariş Sayısı" #. module: fieldservice #: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_order msgid "Orders Reports." -msgstr "" +msgstr "Sipariş Raporları." #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__order_need_assign_count msgid "Orders to Assign" -msgstr "" +msgstr "Atanacak Siparişler" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_team__order_need_schedule_count msgid "Orders to Schedule" -msgstr "" +msgstr "Planlanacak Siparişler" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view @@ -2369,7 +2374,7 @@ msgstr "Diğer" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__owned_by_id msgid "Owned By" -msgstr "" +msgstr "Sahibi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__owned_location_ids @@ -2479,7 +2484,7 @@ msgstr "Fiyat Listesi" #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__territory_manager_id #: model:ir.model.fields,field_description:fieldservice.field_res_territory__person_id msgid "Primary Assignment" -msgstr "" +msgstr "Birinci Atama" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contact_id @@ -2492,7 +2497,7 @@ msgstr "Birincil Kontak" #: model:ir.model.fields,field_description:fieldservice.field_res_partner__service_location_id #: model:ir.model.fields,field_description:fieldservice.field_res_users__service_location_id msgid "Primary Service Location" -msgstr "" +msgstr "Birinci Servi Konumu" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__priority @@ -2548,13 +2553,13 @@ msgstr "İlişkili Şirket" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__owner_id msgid "Related Owner" -msgstr "" +msgstr "İlişkili Sahibi" #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_id msgid "Related Partner" -msgstr "" +msgstr "İlişkili İş Ortağı" #. module: fieldservice #: model:ir.ui.menu,name:fieldservice.reporting @@ -2651,7 +2656,7 @@ msgstr "" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view msgid "Search FSM Location" -msgstr "" +msgstr "FSM Konumunu Ara" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_search_view @@ -2827,7 +2832,7 @@ msgstr "Aşamalar" #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form msgid "State" -msgstr "" +msgstr "İl/Eyalet" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_state @@ -3077,7 +3082,7 @@ msgstr "Başlık" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban msgid "To Assign" -msgstr "" +msgstr "Atama" #. module: fieldservice #: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view From 61d86875a6ad5224ee353689b5db52fb6e663941 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Fri, 9 Jul 2021 19:00:06 +0000 Subject: [PATCH 309/631] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (25 of 25 strings) Translation: field-service-14.0/field-service-14.0-fieldservice_account_analytic Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_account_analytic/es_AR/ --- fieldservice_account_analytic/i18n/es_AR.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fieldservice_account_analytic/i18n/es_AR.po b/fieldservice_account_analytic/i18n/es_AR.po index 548dff7817..b229a143e8 100644 --- a/fieldservice_account_analytic/i18n/es_AR.po +++ b/fieldservice_account_analytic/i18n/es_AR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-09-10 08:00+0000\n" +"PO-Revision-Date: 2021-07-09 21:48+0000\n" "Last-Translator: Ignacio Buioli \n" "Language-Team: none\n" "Language: es_AR\n" @@ -14,7 +14,7 @@ msgstr "" "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" +"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 @@ -80,7 +80,7 @@ msgstr "Cliente" #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__display_name #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__display_name msgid "Display Name" -msgstr "" +msgstr "Mostrar Nombre" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id @@ -123,12 +123,12 @@ msgstr "Filtrar la Ubicación por Contacto en un Pedido FSM" #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__id #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__id msgid "ID" -msgstr "" +msgstr "ID" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_account_move_line msgid "Journal Item" -msgstr "" +msgstr "Apunte Contable" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line____last_update @@ -139,7 +139,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company____last_update #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings____last_update msgid "Last Modified on" -msgstr "" +msgstr "Última Modificación el" #. module: fieldservice_account_analytic #: code:addons/fieldservice_account_analytic/models/account_move.py:0 @@ -151,7 +151,7 @@ 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_fsm_order__display_name msgid "Order" -msgstr "" +msgstr "Pedido" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id From 7cb2ddd0a4c01190d45f3939a20d7113064d6474 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 19:22:33 +0000 Subject: [PATCH 310/631] Translated using Weblate (Turkish) Currently translated at 76.0% (19 of 25 strings) Translation: field-service-14.0/field-service-14.0-fieldservice_account_analytic Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_account_analytic/tr/ --- fieldservice_account_analytic/i18n/tr.po | 42 +++++++++++++----------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/fieldservice_account_analytic/i18n/tr.po b/fieldservice_account_analytic/i18n/tr.po index 9008fcd464..e0fa2a1d4c 100644 --- a/fieldservice_account_analytic/i18n/tr.po +++ b/fieldservice_account_analytic/i18n/tr.po @@ -6,39 +6,41 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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 "" +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 "" +msgstr "Analitik Hesap" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_account_analytic_line msgid "Analytic Line" -msgstr "" +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 "" +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 "" +msgstr "Fatura Konum" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__bill_to @@ -53,22 +55,22 @@ msgstr "" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_res_company msgid "Companies" -msgstr "" +msgstr "Şirketler" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Yapılandırma Ayarları" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__customer_id msgid "Contact" -msgstr "" +msgstr "Kontak" #. module: fieldservice_account_analytic #: model_terms:ir.ui.view,arch_db:fieldservice_account_analytic.fsm_location_search_view_analytic msgid "Customer" -msgstr "" +msgstr "Müşteri" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__display_name @@ -78,27 +80,27 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__display_name #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__display_name msgid "Display Name" -msgstr "" +msgstr "Görünüm Adı" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__fsm_order_id msgid "FSM Order" -msgstr "" +msgstr "FSM Siparişi" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_wizard msgid "FSM Record Conversion" -msgstr "" +msgstr "FSM Kayıt Dönüştürme" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_location msgid "Field Service Location" -msgstr "" +msgstr "Saha Servis Konumu" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_fsm_order msgid "Field Service Order" -msgstr "" +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 @@ -121,12 +123,12 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company__id #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings__id msgid "ID" -msgstr "" +msgstr "ID" #. module: fieldservice_account_analytic #: model:ir.model,name:fieldservice_account_analytic.model_account_move_line msgid "Journal Item" -msgstr "" +msgstr "Yevmiye Öğesi" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line____last_update @@ -137,7 +139,7 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_company____last_update #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_res_config_settings____last_update msgid "Last Modified on" -msgstr "" +msgstr "Son Düzenlenme" #. module: fieldservice_account_analytic #: code:addons/fieldservice_account_analytic/models/account_move.py:0 @@ -149,7 +151,7 @@ msgstr "" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__display_name msgid "Order" -msgstr "" +msgstr "Sipariş" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_account_analytic_line__product_id @@ -159,4 +161,4 @@ msgstr "" #. module: fieldservice_account_analytic #: model:ir.model.fields,field_description:fieldservice_account_analytic.field_fsm_order__total_cost msgid "Total Cost" -msgstr "" +msgstr "Toplam Tutar" From e67876b1225901a0336316781d605aca466434c3 Mon Sep 17 00:00:00 2001 From: Ediz Duman Date: Fri, 9 Jul 2021 19:21:52 +0000 Subject: [PATCH 311/631] Translated using Weblate (Turkish) Currently translated at 100.0% (14 of 14 strings) Translation: field-service-14.0/field-service-14.0-fieldservice_account Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_account/tr/ --- fieldservice_account/i18n/tr.po | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/fieldservice_account/i18n/tr.po b/fieldservice_account/i18n/tr.po index 337fdee3b8..62093a1cbf 100644 --- a/fieldservice_account/i18n/tr.po +++ b/fieldservice_account/i18n/tr.po @@ -6,19 +6,21 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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 #: model:ir.model.fields,field_description:fieldservice_account.field_account_move__display_name #: model:ir.model.fields,field_description:fieldservice_account.field_account_move_line__display_name msgid "Display Name" -msgstr "" +msgstr "Görünüm Adı" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_account_bank_statement_line__fsm_order_count @@ -28,70 +30,70 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fieldservice_account.account_invoice_form #: model_terms:ir.ui.view,arch_db:fieldservice_account.invoice_search_view_fso msgid "FSM Orders" -msgstr "" +msgstr "FSM Siparişleri" #. module: fieldservice_account #: model:ir.model,name:fieldservice_account.model_fsm_order msgid "Field Service Order" -msgstr "" +msgstr "Saha Servis Siparişi" #. module: fieldservice_account #: model_terms:ir.ui.view,arch_db:fieldservice_account.vendor_bill_form_view_fso msgid "Field Service Orders" -msgstr "" +msgstr "Saha Servis Siparişleri" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_account_bank_statement_line__fsm_order_ids #: model:ir.model.fields,field_description:fieldservice_account.field_account_move__fsm_order_ids #: model:ir.model.fields,field_description:fieldservice_account.field_account_payment__fsm_order_ids msgid "Field Service orders associated to this invoice" -msgstr "" +msgstr "Bu faturayla ilişkili Saha Servisi siparişleri" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_account_move__id #: model:ir.model.fields,field_description:fieldservice_account.field_account_move_line__id #: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__id msgid "ID" -msgstr "" +msgstr "ID" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__invoice_count msgid "Invoice Count" -msgstr "" +msgstr "Fatura Sayısı" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__invoice_lines msgid "Invoice Lines" -msgstr "" +msgstr "Fatura Satırları" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__invoice_ids msgid "Invoices" -msgstr "" +msgstr "Faturalar" #. module: fieldservice_account #: model_terms:ir.ui.view,arch_db:fieldservice_account.view_fsm_order_form_inherit_account msgid "Invoices/Bills" -msgstr "" +msgstr "M Faturalar/ T Faturalar" #. module: fieldservice_account #: model:ir.model,name:fieldservice_account.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Yevmiye Girişi" #. module: fieldservice_account #: model:ir.model,name:fieldservice_account.model_account_move_line msgid "Journal Item" -msgstr "" +msgstr "Yevmiye Öğesi" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_account_move____last_update #: model:ir.model.fields,field_description:fieldservice_account.field_account_move_line____last_update #: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order____last_update msgid "Last Modified on" -msgstr "" +msgstr "Son Düzenlenme" #. module: fieldservice_account #: model:ir.model.fields,field_description:fieldservice_account.field_fsm_order__display_name msgid "Order" -msgstr "" +msgstr "Sipariş" From 252c0b2fb4f210efc024079f8faaa140a9cf3316 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 9 Jul 2021 22:27:04 +0000 Subject: [PATCH 312/631] [UPD] Update fieldservice.pot --- fieldservice/i18n/fieldservice.pot | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/fieldservice/i18n/fieldservice.pot b/fieldservice/i18n/fieldservice.pot index b73f52da80..a182c1493f 100644 --- a/fieldservice/i18n/fieldservice.pot +++ b/fieldservice/i18n/fieldservice.pot @@ -818,6 +818,12 @@ msgstr "" msgid "Current Location" msgstr "" +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_stock_customer +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_stock_customer +msgid "Customer Location" +msgstr "" + #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_payment_term_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_payment_term_id @@ -2036,6 +2042,12 @@ msgstr "" msgid "Message for Invoice" msgstr "" +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__picking_warn_msg +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__picking_warn_msg +msgid "Message for Stock Picking" +msgstr "" + #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_ids #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_ids @@ -2688,7 +2700,9 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__invoice_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_location__picking_warn #: model:ir.model.fields,help:fieldservice.field_fsm_person__invoice_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_person__picking_warn msgid "" "Selecting the \"Warning\" option will notify user with the message, " "Selecting \"Blocking Message\" will throw an exception with the message and " @@ -2838,6 +2852,12 @@ msgid "" "Planned: Future activities." msgstr "" +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__picking_warn +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__picking_warn +msgid "Stock Picking" +msgstr "" + #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__street #: model:ir.model.fields,field_description:fieldservice.field_fsm_order__street @@ -2992,6 +3012,20 @@ msgid "" "the invoices & payments matching was performed." msgstr "" +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_stock_customer +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_stock_customer +msgid "" +"The stock location used as destination when sending goods to this contact." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_stock_supplier +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_stock_supplier +msgid "" +"The stock location used as source when receiving goods from this contact." +msgstr "" + #. module: fieldservice #: model:ir.model.constraint,message:fieldservice.constraint_fsm_location_person_location_person_uniq msgid "The worker is already linked to this location." @@ -3251,6 +3285,12 @@ msgstr "" msgid "Vehicles" msgstr "" +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_stock_supplier +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_stock_supplier +msgid "Vendor Location" +msgstr "" + #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_supplier_payment_term_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_supplier_payment_term_id From 59267b2ca5311c726eba824f1ef733749033a4ca Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 9 Jul 2021 22:27:08 +0000 Subject: [PATCH 313/631] [UPD] Update fieldservice_stock.pot --- .../i18n/fieldservice_stock.pot | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/fieldservice_stock/i18n/fieldservice_stock.pot b/fieldservice_stock/i18n/fieldservice_stock.pot index 8e5a953614..faaec04a3e 100644 --- a/fieldservice_stock/i18n/fieldservice_stock.pot +++ b/fieldservice_stock/i18n/fieldservice_stock.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -28,6 +28,17 @@ msgstr "" msgid "Delivery Orders" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__display_name +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_wizard__display_name +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__display_name +#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory__display_name +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__display_name +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__display_name +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_rule__display_name +msgid "Display Name" +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Done Quantity" @@ -51,6 +62,18 @@ msgstr "" msgid "Field Service Order" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location__id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_wizard__id +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group__id +#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory__id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move__id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking__id +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_rule__id +msgid "ID" +msgstr "" + #. module: fieldservice_stock #: model:ir.ui.menu,name:fieldservice_stock.menu_fsm_stock_inventory #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock @@ -63,6 +86,18 @@ msgstr "" msgid "Inventory Location" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_location____last_update +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_wizard____last_update +#: model:ir.model.fields,field_description:fieldservice_stock.field_procurement_group____last_update +#: model:ir.model.fields,field_description:fieldservice_stock.field_res_territory____last_update +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_move____last_update +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_picking____last_update +#: model:ir.model.fields,field_description:fieldservice_stock.field_stock_rule____last_update +msgid "Last Modified on" +msgstr "" + #. module: fieldservice_stock #: model_terms:ir.ui.view,arch_db:fieldservice_stock.view_fsm_order_form_inherit_stock msgid "Moves" @@ -73,6 +108,11 @@ msgstr "" msgid "Operations" msgstr "" +#. module: fieldservice_stock +#: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__display_name +msgid "Order" +msgstr "" + #. module: fieldservice_stock #: model:ir.model,name:fieldservice_stock.model_procurement_group #: model:ir.model.fields,field_description:fieldservice_stock.field_fsm_order__procurement_group_id From 9491303979a61ad791c9f1fcf5aae4586bd01caf Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 9 Jul 2021 22:31:30 +0000 Subject: [PATCH 314/631] [UPD] addons table in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index edda4dcf1d..d5528ebb8a 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ addon | version | summary [fieldservice_project](fieldservice_project/) | 14.0.1.0.0 | Create field service orders from a project or project task [fieldservice_route](fieldservice_route/) | 14.0.1.0.0 | Organize the routes of each day. [fieldservice_skill](fieldservice_skill/) | 14.0.1.0.0 | Manage your Field Service workers skills +[fieldservice_stock](fieldservice_stock/) | 14.0.1.0.0 | Integrate the logistics operations with Field Service [fieldservice_timeline](fieldservice_timeline/) | 14.0.1.1.1 | This module is a display timeline view of the Field Service order in Odoo. [//]: # (end addons) From 3b88b7decfa5b0f984bd93074aaa2157faa4179b Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 9 Jul 2021 22:31:36 +0000 Subject: [PATCH 315/631] [UPD] README.rst --- fieldservice_stock/static/description/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_stock/static/description/index.html b/fieldservice_stock/static/description/index.html index 02b650895c..a078fd0095 100644 --- a/fieldservice_stock/static/description/index.html +++ b/fieldservice_stock/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Stock - - -
    -

    Field Service - Sales

    - - -

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

    -

    - The module integrates the Field Service application with the Sales one and - allows you to sell products that generate field service orders. -

    -

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

    -
    -
    -

    Configuration

    -

    - Products must be configured properly in order to create field service orders - upon sale order confirmation. -

    -

    - The field service tracking of a product defines how it generates a field - service order if the product is sold via sale order. -

    -

    - To configure a product that generates a unique field service order on each - sale order line: -

    -
      -
    • Go to Sales > Catalog > Products
    • -
    • Create or select a product
    • -
    • - Set the Field Service Tracking to ???One FSM Order per Sale Order Line??? -
    • -
    • - Select the FSM Order Template that will be used for creating FSM Orders when - a Sale Order is confirmed with this product -
    • -
    -

    - To configure a product that generates a unique field service order for an - individual sale order: -

    -
      -
    • Go to Sales > Catalog > Products
    • -
    • Create or select a product
    • -
    • Set the Field Service Tracking to ???One FSM Order per Sale Order???
    • -
    • - Select the FSM Order Template that will be used for creating FSM Orders when - a Sale Order is confirmed with this product -
    • -
    -

    To setup a sales territory:

    -
      -
    • Go to Field Service > Master Data > Locations
    • -
    • Create or select a location
    • -
    • Go to the Sales tab and select the sales territory
    • -
    -
    -
    -

    Usage

    -
      -
    • Go to Sales
    • -
    • Create a new Quotation/Sale Order
    • -
    • Set the FSM Location to be used
    • -
    • - On a Sale Order Line, select a product configured for field service orders -
    • -
    • Confirm the Sale Order
    • -
    • Field Service orders linked to SO lines are created
    • -
    • -
      -
      - When a Field Service order is completed, the quantity delivered for its -
      -
      - linked sale order line will be updated to the quantity ordered, - indicating this line is ready for invoicing. -
      -
      -
    • -
    -
    -
    -

    Known issues / Roadmap

    -
      -
    • - Provide a mapping between an address and the branch and use it to set the - pricelist of a new partner -
    • -
    -
    -
    -

    Bug Tracker

    -

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

    -

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

    -
    -
    -

    Credits

    -
    -

    Authors

    -
      -
    • Open Source Integrators
    • -
    -
    -
    -

    Contributors

    - -
    -
    -

    Maintainers

    -

    This module is maintained by the OCA.

    - Odoo Community Association -

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

    -

    - Current - maintainers: -

    -

    - wolfhall - max3903 - brian10048 -

    -

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

    -

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

    -
    -
    -
    - +

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

    +

    The module integrates the Field Service application with the Sales one and +allows you to sell products that generate field service orders.

    +

    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

    +

    Products must be configured properly in order to create field service +orders upon sale order confirmation.

    +

    The field service tracking of a product defines how it generates a field service +order if the product is sold via sale order.

    +

    To configure a product that generates a unique field service order on each +sale order line:

    +
      +
    • Go to Sales > Catalog > Products
    • +
    • Create or select a product
    • +
    • Set the Field Service Tracking to ‘One FSM Order per Sale Order Line’
    • +
    • Select the FSM Order Template that will be used for creating FSM Orders when +a Sale Order is confirmed with this product
    • +
    +

    To configure a product that generates a unique field service order for +an individual sale order:

    +
      +
    • Go to Sales > Catalog > Products
    • +
    • Create or select a product
    • +
    • Set the Field Service Tracking to ‘One FSM Order per Sale Order’
    • +
    • Select the FSM Order Template that will be used for creating FSM Orders when +a Sale Order is confirmed with this product
    • +
    +

    To setup a sales territory:

    +
      +
    • Go to Field Service > Master Data > Locations
    • +
    • Create or select a location
    • +
    • Go to the Sales tab and select the sales territory
    • +
    +
    +
    +

    Usage

    +
      +
    • Go to Sales
    • +
    • Create a new Quotation/Sale Order
    • +
    • Set the FSM Location to be used
    • +
    • On a Sale Order Line, select a product configured for field service orders
    • +
    • Confirm the Sale Order
    • +
    • Field Service orders linked to SO lines are created
    • +
    • +
      When a Field Service order is completed, the quantity delivered for its
      +
      linked sale order line will be updated to the quantity ordered, indicating +this line is ready for invoicing.
      +
      +
    • +
    +
    +
    +

    Known issues / Roadmap

    +
      +
    • Provide a mapping between an address and the branch and use it to set the +pricelist of a new partner
    • +
    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

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

    +

    Current maintainers:

    +

    wolfhall max3903 brian10048

    +

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

    +

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

    +
    +
    + + diff --git a/fieldservice_sale/tests/__init__.py b/fieldservice_sale/tests/__init__.py index b37075e37e..e004260bd5 100644 --- a/fieldservice_sale/tests/__init__.py +++ b/fieldservice_sale/tests/__init__.py @@ -1,5 +1,5 @@ -# Copyright (C) 2019 Cl??ment Mombereau (Akretion) -# Copyright (C) 2020 Brian McMaster +# Copyright (C) 2019 Clément Mombereau (Akretion) +# Copyright (C) 2019 Brian McMaster # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) from . import ( diff --git a/fieldservice_sale/tests/test_fsm_sale_common.py b/fieldservice_sale/tests/test_fsm_sale_common.py index cf182afdd4..0ab2d2b9fa 100644 --- a/fieldservice_sale/tests/test_fsm_sale_common.py +++ b/fieldservice_sale/tests/test_fsm_sale_common.py @@ -1,9 +1,10 @@ # Copyright (C) 2019 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.addons.sale.tests.test_sale_common import TestCommonSaleNoChart +from odoo.addons.sale.tests.common import TestSaleCommonBase -class TestFSMSale(TestCommonSaleNoChart): + +class TestFSMSale(TestSaleCommonBase): @classmethod def setUpClass(cls): super(TestFSMSale, cls).setUpClass() @@ -18,7 +19,7 @@ def setUpFSMTemplates(cls): { "name": "Test FSM Template #1", "instructions": "These are the instructions for Template #1", - "hours": 2.25, + "duration": 2.25, } ) # Template 2 @@ -26,7 +27,7 @@ def setUpFSMTemplates(cls): { "name": "Test FSM Template #2", "instructions": "Template #2 requires a lot of work", - "hours": 4.5, + "duration": 4.5, } ) # Template 3 @@ -34,7 +35,7 @@ def setUpFSMTemplates(cls): { "name": "Test FSM Template #3", "instructions": "Complete the steps outlined for Template #3", - "hours": 0.75, + "duration": 0.75, } ) # Template 4 @@ -42,7 +43,7 @@ def setUpFSMTemplates(cls): { "name": "Test FSM Template #4", "instructions": "These notes apply to Template #4", - "hours": 0.75, + "duration": 0.75, } ) diff --git a/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py b/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py index 9c66f21fa2..49d2814601 100644 --- a/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py +++ b/fieldservice_sale/tests/test_fsm_sale_onchange_partner.py @@ -1,4 +1,4 @@ -# Copyright (C) 2019 Cl??ment Mombereau (Akretion) +# Copyright (C) 2019 Clément Mombereau (Akretion) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) from odoo.tests.common import TransactionCase @@ -16,11 +16,17 @@ def setUp(self): super(FSMSale, self).setUp() # create a parent company self.commercial_partner = self.env["res.partner"].create( - {"name": "Company Commercial Partner", "is_company": True} + { + "name": "Company Commercial Partner", + "is_company": True, + } ) # create a child partner self.partner = self.env["res.partner"].create( - {"name": "Child Partner", "parent_id": self.commercial_partner.id} + { + "name": "Child Partner", + "parent_id": self.commercial_partner.id, + } ) # create a child partner shipping address self.shipping_partner = self.env["res.partner"].create( diff --git a/fieldservice_sale/tests/test_fsm_sale_order.py b/fieldservice_sale/tests/test_fsm_sale_order.py index f04dd0a29b..4195ee5707 100644 --- a/fieldservice_sale/tests/test_fsm_sale_order.py +++ b/fieldservice_sale/tests/test_fsm_sale_order.py @@ -1,5 +1,6 @@ # Copyright (C) 2019 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import fields from .test_fsm_sale_common import TestFSMSale @@ -13,7 +14,15 @@ def setUpClass(cls): # Setup products that when sold will create some FSM orders cls.setUpFSMProducts() - + cls.partner_customer_usd = cls.env["res.partner"].create( + { + "name": "partner_a", + "company_id": False, + } + ) + cls.pricelist_usd = cls.env["product.pricelist"].search( + [("currency_id.name", "=", "USD")], limit=1 + ) # Create some sale orders that will use the above products SaleOrder = cls.env["sale.order"].with_context(tracking_disable=True) # create a generic Sale Order with one product @@ -173,7 +182,11 @@ def _fulfill_order(self, order): ).id, } ) - order.write({"employee_timesheet_ids": [(6, 0, timesheet.ids)]}) + order.write( + { + "employee_timesheet_ids": [(6, 0, timesheet.ids)], + } + ) return order def test_sale_order_1(self): @@ -202,7 +215,10 @@ def test_sale_order_1(self): if self._isp_account_installed(): fsm_order = self._fulfill_order(fsm_order) fsm_order.write( - {"date_end": fields.Datetime.today(), "resolution": "Work completed"} + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } ) fsm_order.action_complete() @@ -244,7 +260,10 @@ def test_sale_order_2(self): if self._isp_account_installed(): fsm_order = self._fulfill_order(fsm_order) fsm_order.write( - {"date_end": fields.Datetime.today(), "resolution": "Work completed"} + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } ) fsm_order.action_complete() # qty delivered should be updated @@ -297,7 +316,10 @@ def test_sale_order_3(self): if self._isp_account_installed(): fsm_order_1 = self._fulfill_order(fsm_order_1) fsm_order_1.write( - {"date_end": fields.Datetime.today(), "resolution": "Work completed"} + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } ) fsm_order_1.action_complete() self.assertTrue( @@ -307,7 +329,10 @@ def test_sale_order_3(self): if self._isp_account_installed(): fsm_order_2 = self._fulfill_order(fsm_order_2) fsm_order_2.write( - {"date_end": fields.Datetime.today(), "resolution": "Work completed"} + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } ) fsm_order_2.action_complete() self.assertTrue( @@ -319,7 +344,7 @@ def test_sale_order_3(self): invoices = self.sale_order_3._create_invoices() # 2 invoices created self.assertEqual( - len(invoices.ids), 2, "FSM Sale: Sale Order 3 should create 2 invoices" + len(invoices.ids), 1, "FSM Sale: Sale Order 3 should create 1 invoices" ) inv_fsm_orders = FSM_Order for inv in invoices: @@ -337,7 +362,7 @@ def test_sale_order_4(self): """Test sale order 4 flow from sale to invoice. - Two FSM orders linked to the Sale Order Lines should be created. - One FSM order linked to the Sale Order should be created. - - Three Invoices should be created (One for each FSM Order). + - One Invoices should be created (One for each FSM Order). """ sol1 = self.sol_service_per_line_4 sol2 = self.sol_service_per_line_5 @@ -377,7 +402,10 @@ def test_sale_order_4(self): if self._isp_account_installed(): fsm_order_1 = self._fulfill_order(fsm_order_1) fsm_order_1.write( - {"date_end": fields.Datetime.today(), "resolution": "Work completed"} + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } ) fsm_order_1.action_complete() self.assertTrue( @@ -387,7 +415,10 @@ def test_sale_order_4(self): if self._isp_account_installed(): fsm_order_2 = self._fulfill_order(fsm_order_2) fsm_order_2.write( - {"date_end": fields.Datetime.today(), "resolution": "Work completed"} + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } ) fsm_order_2.action_complete() self.assertTrue( @@ -397,7 +428,10 @@ def test_sale_order_4(self): if self._isp_account_installed(): fsm_order_3 = self._fulfill_order(fsm_order_3) fsm_order_3.write( - {"date_end": fields.Datetime.today(), "resolution": "Work completed"} + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } ) fsm_order_3.action_complete() # qty_delivered does not update for FSM orders linked only to the sale @@ -406,13 +440,5 @@ def test_sale_order_4(self): invoices = self.sale_order_4._create_invoices() # 3 invoices created self.assertEqual( - len(invoices.ids), 3, "FSM Sale: Sale Order 4 should create 3 invoices" - ) - inv_fsm_orders = FSM_Order - for inv in invoices: - inv_fsm_orders |= inv.fsm_order_ids - self.assertEqual( - len(inv_fsm_orders.ids), - 3, - "FSM Sale: There should be 3 orders for 3 invoices", + len(invoices.ids), 1, "FSM Sale: Sale Order 4 should create 1 invoice" ) diff --git a/fieldservice_sale/views/fsm_location.xml b/fieldservice_sale/views/fsm_location.xml index c8afa77643..299767e5b9 100644 --- a/fieldservice_sale/views/fsm_location.xml +++ b/fieldservice_sale/views/fsm_location.xml @@ -1,4 +1,5 @@ + fsm.location.form @@ -9,7 +10,6 @@ - diff --git a/fieldservice_sale/views/fsm_order.xml b/fieldservice_sale/views/fsm_order.xml index d19e4da8f1..92f9373b03 100644 --- a/fieldservice_sale/views/fsm_order.xml +++ b/fieldservice_sale/views/fsm_order.xml @@ -1,4 +1,5 @@ + fsm.order @@ -18,4 +19,5 @@ + diff --git a/fieldservice_sale/views/res_branch.xml b/fieldservice_sale/views/res_branch.xml deleted file mode 100644 index 9629a57a15..0000000000 --- a/fieldservice_sale/views/res_branch.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - res.branch.form.pricelist - res.branch - - - - - - - - diff --git a/fieldservice_sale/views/res_config_settings.xml b/fieldservice_sale/views/res_config_settings.xml index 7d57014d73..197f470666 100644 --- a/fieldservice_sale/views/res_config_settings.xml +++ b/fieldservice_sale/views/res_config_settings.xml @@ -1,8 +1,11 @@ + + - + + From c6db17db2fa6d891e02b266b153d646abbef4d75 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Tue, 26 Nov 2019 16:59:14 -0500 Subject: [PATCH 334/631] [IMP] fieldservice_account: Simplify module - This change removes most of the invoicing logic from fieldservice_account and puts it into its own module --- fieldservice_isp_account/README.rst | 121 +++++ fieldservice_isp_account/__init__.py | 4 + fieldservice_isp_account/__manifest__.py | 26 + .../data/time_products.xml | 36 ++ .../models/account_invoice_line.py | 34 ++ fieldservice_isp_account/models/fsm_order.py | 184 +++++++ fieldservice_isp_account/models/fsm_person.py | 29 ++ fieldservice_isp_account/readme/CONFIGURE.rst | 1 + .../readme/CONTRIBUTORS.rst | 3 + fieldservice_isp_account/readme/CREDITS.rst | 3 + .../readme/DESCRIPTION.rst | 4 + fieldservice_isp_account/readme/INSTALL.rst | 1 + fieldservice_isp_account/readme/USAGE.rst | 12 + .../static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 460 ++++++++++++++++++ fieldservice_isp_account/tests/__init__.py | 4 + .../tests/test_isp_account.py | 178 +++++++ fieldservice_isp_account/views/account.xml | 29 ++ fieldservice_isp_account/views/fsm_order.xml | 89 ++++ fieldservice_isp_account/views/fsm_person.xml | 21 + .../views/hr_timesheet.xml | 36 ++ 21 files changed, 1275 insertions(+) create mode 100644 fieldservice_isp_account/README.rst create mode 100644 fieldservice_isp_account/__init__.py create mode 100644 fieldservice_isp_account/__manifest__.py create mode 100644 fieldservice_isp_account/data/time_products.xml create mode 100644 fieldservice_isp_account/models/account_invoice_line.py create mode 100644 fieldservice_isp_account/models/fsm_order.py create mode 100644 fieldservice_isp_account/models/fsm_person.py create mode 100644 fieldservice_isp_account/readme/CONFIGURE.rst create mode 100644 fieldservice_isp_account/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_isp_account/readme/CREDITS.rst create mode 100644 fieldservice_isp_account/readme/DESCRIPTION.rst create mode 100644 fieldservice_isp_account/readme/INSTALL.rst create mode 100644 fieldservice_isp_account/readme/USAGE.rst create mode 100644 fieldservice_isp_account/static/description/icon.png create mode 100644 fieldservice_isp_account/static/description/index.html create mode 100644 fieldservice_isp_account/tests/__init__.py create mode 100644 fieldservice_isp_account/tests/test_isp_account.py create mode 100644 fieldservice_isp_account/views/account.xml create mode 100644 fieldservice_isp_account/views/fsm_order.xml create mode 100644 fieldservice_isp_account/views/fsm_person.xml create mode 100644 fieldservice_isp_account/views/hr_timesheet.xml diff --git a/fieldservice_isp_account/README.rst b/fieldservice_isp_account/README.rst new file mode 100644 index 0000000000..278e295c55 --- /dev/null +++ b/fieldservice_isp_account/README.rst @@ -0,0 +1,121 @@ +========================== +Field Service - Accounting +========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/12.0/fieldservice_account + :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-12-0/field-service-12-0-fieldservice_account + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the ability to track employee time and contractor +costs for Field Service Orders. It also adds functionality to create +a customer invoice and a vendor bill when a Field Service Order is +completed. + +**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 +===== + +To use the module: + +On a field service order, open the "Accounting" tab. Depending on +whether the logged in user or an employee or not, they will see +either a place to enter timesheet records or contractor costs. + +The total cost of the order is calculated based on the entries in +the employee timesheet entries and contractor costs. + +When an order is completed, a customer invoice will be generated for +the employee time and the contractor costs. A vendor bill will be +created for the contractor costs. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* Michael Allen +* Serpent Consulting Services Pvt. Ltd. + +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 + +Current `maintainer `__: + +|maintainer-osimallen| + +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_isp_account/__init__.py b/fieldservice_isp_account/__init__.py new file mode 100644 index 0000000000..66ca882fcc --- /dev/null +++ b/fieldservice_isp_account/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py new file mode 100644 index 0000000000..cd184a7c82 --- /dev/null +++ b/fieldservice_isp_account/__manifest__.py @@ -0,0 +1,26 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Field Service - ISP Accounting', + 'summary': """Invoice Field Service orders based on employee time + or contractor costs""", + 'version': '12.0.2.0.1', + 'category': 'Field Service', + 'author': 'Open Source Integrators, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/field-service', + 'depends': [ + 'fieldservice_account_analytic', + 'hr_timesheet', + ], + 'data': [ + 'data/time_products.xml', + 'views/account.xml', + 'views/fsm_order.xml', + 'views/fsm_person.xml', + 'views/hr_timesheet.xml', + ], + 'license': 'AGPL-3', + 'development_status': 'Beta', + 'maintainers': ['osimallen'], +} diff --git a/fieldservice_isp_account/data/time_products.xml b/fieldservice_isp_account/data/time_products.xml new file mode 100644 index 0000000000..96a1a4bee3 --- /dev/null +++ b/fieldservice_isp_account/data/time_products.xml @@ -0,0 +1,36 @@ + + + + + FSM Travel Time + + service + + + Travel time for Field Service + Employees + + + + + FSM Regular Time + + service + + + Regular time for Field Service + Employees + + + + + FSM Overtime + + service + + + Overtime for Field Service Employees + + + + diff --git a/fieldservice_isp_account/models/account_invoice_line.py b/fieldservice_isp_account/models/account_invoice_line.py new file mode 100644 index 0000000000..1f64c10bcb --- /dev/null +++ b/fieldservice_isp_account/models/account_invoice_line.py @@ -0,0 +1,34 @@ +# 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 AccountInvoiceLine(models.Model): + _inherit = "account.invoice.line" + + @api.onchange('product_id', 'quantity') + def onchange_product_id(self): + for line in self: + if line.fsm_order_id: + partner = line.fsm_order_id.person_id and\ + line.fsm_order_id.person_id.partner_id or False + if not partner: + raise ValidationError( + _("Please set the field service worker.")) + fpos = partner.property_account_position_id + tmpl = line.product_id.product_tmpl_id + if line.product_id: + accounts = tmpl.get_product_accounts() + supinfo = self.env['product.supplierinfo'].search( + [('name', '=', partner.id), + ('product_tmpl_id', '=', tmpl.id), + ('min_qty', '<=', line.quantity)], + order='min_qty DESC') + line.price_unit = \ + supinfo and supinfo[0].price or tmpl.standard_price + line.account_id = accounts.get('expense', False) + line.invoice_line_tax_ids = fpos.\ + map_tax(tmpl.supplier_taxes_id) + line.name = line.product_id.name diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py new file mode 100644 index 0000000000..9cd3454bb3 --- /dev/null +++ b/fieldservice_isp_account/models/fsm_order.py @@ -0,0 +1,184 @@ +# 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 + + +ACCOUNT_STAGES = [('draft', 'Draft'), + ('review', 'Needs Review'), + ('confirmed', 'Confirmed'), + ('invoiced', 'Fully Invoiced'), + ('no', 'Nothing Invoiced')] + + +class FSMOrder(models.Model): + _inherit = 'fsm.order' + + contractor_cost_ids = fields.One2many('account.invoice.line', + 'fsm_order_id', + string='Contractor Costs') + employee_timesheet_ids = fields.One2many('account.analytic.line', + "fsm_order_id", + string='Employee Timesheets') + employee = fields.Boolean(compute='_compute_employee') + contractor_total = fields.Float(compute='_compute_contractor_cost', + string='Contractor Cost Estimate') + employee_time_total = fields.Float(compute='_compute_employee_hours', + string='Total Employee Hours') + account_stage = fields.Selection(ACCOUNT_STAGES, string='Accounting Stage', + default='draft') + + def _compute_employee(self): + user = self.env['res.users'].browse(self.env.uid) + for order in self: + if user.employee_ids: + order.employee = True + + @api.depends('employee_timesheet_ids', 'contractor_cost_ids') + def _compute_total_cost(self): + super(self)._compute_total_cost() + for order in self: + order.total_cost = 0.0 + rate = 0 + for line in order.employee_timesheet_ids: + rate = line.employee_id.timesheet_cost + order.total_cost += line.unit_amount * rate + for cost in order.contractor_cost_ids: + order.total_cost += cost.price_unit * cost.quantity + + @api.depends('employee_timesheet_ids') + def _compute_employee_hours(self): + for order in self: + order.employee_time_total = 0.0 + for line in order.employee_timesheet_ids: + order.employee_time_total += line.unit_amount + + @api.depends('contractor_cost_ids') + def _compute_contractor_cost(self): + for order in self: + order.contractor_total = 0.0 + for cost in order.contractor_cost_ids: + order.contractor_total += cost.price_unit * cost.quantity + + def action_complete(self): + for order in self: + order.account_stage = 'review' + if self.person_id.supplier and not self.contractor_cost_ids: + raise ValidationError(_("Cannot move to Complete " + + "until 'Contractor Costs' is filled in")) + if not self.person_id.supplier and not self.employee_timesheet_ids: + raise ValidationError(_("Cannot move to Complete until " + + "'Employee Timesheets' is filled in")) + return super(FSMOrder, self).action_complete() + + def create_bills(self): + jrnl = self.env['account.journal'].search([ + ('company_id', '=', self.env.user.company_id.id), + ('type', '=', 'purchase'), + ('active', '=', True)], + limit=1) + fpos = self.customer_id.property_account_position_id + vals = { + 'partner_id': self.person_id.partner_id.id, + 'type': 'in_invoice', + 'journal_id': jrnl.id or False, + 'fiscal_position_id': fpos.id or False, + 'fsm_order_id': self.id + } + bill = self.env['account.invoice'].sudo().create(vals) + for line in self.contractor_cost_ids: + line.invoice_id = bill + bill.compute_taxes() + + def account_confirm(self): + for order in self: + contractor = order.person_id.partner_id.supplier + if order.contractor_cost_ids: + if contractor: + order.create_bills() + order.account_stage = 'confirmed' + else: + raise ValidationError(_("The worker assigned to this order" + " is not a supplier")) + if order.employee_timesheet_ids: + order.account_stage = 'confirmed' + + def account_create_invoice(self): + jrnl = self.env['account.journal'].search([ + ('company_id', '=', self.env.user.company_id.id), + ('type', '=', 'sale'), + ('active', '=', True)], + limit=1) + if self.bill_to == 'contact': + if not self.customer_id: + raise ValidationError(_("Contact empty")) + fpos = self.customer_id.property_account_position_id + vals = { + 'partner_id': self.customer_id.id, + 'type': 'out_invoice', + 'journal_id': jrnl.id or False, + 'fiscal_position_id': fpos.id or False, + 'fsm_order_id': self.id + } + invoice = self.env['account.invoice'].sudo().create(vals) + price_list = invoice.partner_id.property_product_pricelist + else: + fpos = self.location_id.customer_id.property_account_position_id + vals = { + 'partner_id': self.location_id.customer_id.id, + 'type': 'out_invoice', + 'journal_id': jrnl.id or False, + 'fiscal_position_id': fpos.id or False, + 'fsm_order_id': self.id + } + invoice = self.env['account.invoice'].sudo().create(vals) + price_list = invoice.partner_id.property_product_pricelist + for line in self.employee_timesheet_ids: + price = price_list.get_product_price(product=line.product_id, + quantity=line.unit_amount, + partner=invoice.partner_id, + date=False, + uom_id=False) + template = line.product_id.product_tmpl_id + accounts = template.get_product_accounts() + account = accounts['income'] + vals = { + 'product_id': line.product_id.id, + 'account_analytic_id': line.account_id.id, + 'quantity': line.unit_amount, + 'name': line.name, + 'price_unit': price, + 'account_id': account.id, + 'invoice_id': invoice.id + } + time_cost = self.env['account.invoice.line'].create(vals) + taxes = template.taxes_id + time_cost.invoice_line_tax_ids = fpos.map_tax(taxes) + for cost in self.contractor_cost_ids: + price = price_list.get_product_price(product=cost.product_id, + quantity=cost.quantity, + partner=invoice.partner_id, + date=False, + uom_id=False) + template = cost.product_id.product_tmpl_id + accounts = template.get_product_accounts() + account = accounts['income'] + vals = { + 'product_id': cost.product_id.id, + 'account_analytic_id': cost.account_analytic_id.id, + 'quantity': cost.quantity, + 'name': cost.name, + 'price_unit': price, + 'account_id': account.id, + 'invoice_id': invoice.id + } + con_cost = self.env['account.invoice.line'].create(vals) + taxes = template.taxes_id + con_cost.invoice_line_tax_ids = fpos.map_tax(taxes) + invoice.compute_taxes() + self.account_stage = 'invoiced' + return invoice + + def account_no_invoice(self): + self.account_stage = 'no' diff --git a/fieldservice_isp_account/models/fsm_person.py b/fieldservice_isp_account/models/fsm_person.py new file mode 100644 index 0000000000..1b75acfaa6 --- /dev/null +++ b/fieldservice_isp_account/models/fsm_person.py @@ -0,0 +1,29 @@ +# 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 FSMPerson(models.Model): + _inherit = 'fsm.person' + + bill_count = fields.Integer(string='Vendor Bills', + compute='_compute_vendor_bills') + + def _compute_vendor_bills(self): + self.bill_count = self.env['account.invoice'].search_count([ + ('partner_id', '=', self.partner_id.id)]) + + @api.multi + def action_view_bills(self): + for bill in self: + action = self.env.ref('account.action_invoice_tree1').read()[0] + vendor_bills = self.env['account.invoice'].search( + [('partner_id', '=', bill.partner_id.id)]) + if len(vendor_bills) == 1: + action['views'] = [ + (self.env.ref('account.invoice_form').id, 'form')] + action['res_id'] = vendor_bills.id + else: + action['domain'] = [('id', 'in', vendor_bills.ids)] + return action diff --git a/fieldservice_isp_account/readme/CONFIGURE.rst b/fieldservice_isp_account/readme/CONFIGURE.rst new file mode 100644 index 0000000000..89a40f9121 --- /dev/null +++ b/fieldservice_isp_account/readme/CONFIGURE.rst @@ -0,0 +1 @@ +No special configuration instructions. diff --git a/fieldservice_isp_account/readme/CONTRIBUTORS.rst b/fieldservice_isp_account/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..e9143c46f2 --- /dev/null +++ b/fieldservice_isp_account/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Michael Allen +* Serpent Consulting Services Pvt. Ltd. +* Brian McMaster diff --git a/fieldservice_isp_account/readme/CREDITS.rst b/fieldservice_isp_account/readme/CREDITS.rst new file mode 100644 index 0000000000..0eff0acf4e --- /dev/null +++ b/fieldservice_isp_account/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* Open Source Integrators diff --git a/fieldservice_isp_account/readme/DESCRIPTION.rst b/fieldservice_isp_account/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..127d578738 --- /dev/null +++ b/fieldservice_isp_account/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +This module adds the ability to track employee time and contractor +costs for Field Service Orders. It also adds functionality to create +a customer invoice and a vendor bill when a Field Service Order is +completed. diff --git a/fieldservice_isp_account/readme/INSTALL.rst b/fieldservice_isp_account/readme/INSTALL.rst new file mode 100644 index 0000000000..54fea7becb --- /dev/null +++ b/fieldservice_isp_account/readme/INSTALL.rst @@ -0,0 +1 @@ +No special installation instructions diff --git a/fieldservice_isp_account/readme/USAGE.rst b/fieldservice_isp_account/readme/USAGE.rst new file mode 100644 index 0000000000..c730bb37dd --- /dev/null +++ b/fieldservice_isp_account/readme/USAGE.rst @@ -0,0 +1,12 @@ +To use the module: + +On a field service order, open the "Accounting" tab. Depending on +whether the logged in user or an employee or not, they will see +either a place to enter timesheet records or contractor costs. + +The total cost of the order is calculated based on the entries in +the employee timesheet entries and contractor costs. + +When an order is completed, a customer invoice will be generated for +the employee time and the contractor costs. A vendor bill will be +created for the contractor costs. diff --git a/fieldservice_isp_account/static/description/icon.png b/fieldservice_isp_account/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 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 literal 0 HcmV?d00001 diff --git a/fieldservice_isp_account/static/description/index.html b/fieldservice_isp_account/static/description/index.html new file mode 100644 index 0000000000..be45db7518 --- /dev/null +++ b/fieldservice_isp_account/static/description/index.html @@ -0,0 +1,460 @@ + + + + + + +Field Service - Accounting + + + +
    +

    Field Service - Accounting

    + + +

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

    +

    This module adds the ability to track employee time and contractor +costs for Field Service Orders. It also adds functionality to create +a customer invoice and a vendor bill when a Field Service Order is +completed.

    +

    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

    +

    To use the module:

    +

    On a field service order, open the “Accounting” tab. Depending on +whether the logged in user or an employee or not, they will see +either a place to enter timesheet records or contractor costs.

    +

    The total cost of the order is calculated based on the entries in +the employee timesheet entries and contractor costs.

    +

    When an order is completed, a customer invoice will be generated for +the employee time and the contractor costs. A vendor bill will be +created for the contractor costs.

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Other credits

    +

    The development of this module has been financially supported by:

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

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

    +

    Current maintainer:

    +

    osimallen

    +

    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_isp_account/tests/__init__.py b/fieldservice_isp_account/tests/__init__.py new file mode 100644 index 0000000000..6446a7a2b2 --- /dev/null +++ b/fieldservice_isp_account/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import test_isp_account diff --git a/fieldservice_isp_account/tests/test_isp_account.py b/fieldservice_isp_account/tests/test_isp_account.py new file mode 100644 index 0000000000..60dd8b1de2 --- /dev/null +++ b/fieldservice_isp_account/tests/test_isp_account.py @@ -0,0 +1,178 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from odoo import fields +from odoo.addons.fieldservice_sale.tests.test_fsm_account import ( + FSMAccountCase +) +from odoo.exceptions import ValidationError + + +class FSMAccountCase(FSMAccountCase): + + def setUp(self): + super(FSMAccountCase, self).setUp() + self.test_person = self.env['fsm.person'].create({'name': 'Worker-1'}) + self.test_analytic = self.env.ref('analytic.analytic_administratif') + self.account_id = self.env['account.account'].create({ + 'code': 'NC1110', + 'name': 'Test Payable Account', + 'user_type_id': + self.env.ref('account.data_account_type_payable').id, + 'reconcile': True + }) + + def _create_workorder(self, bill_to, contractors, timesheets): + # Create a new work order + contractors = self.env['account.invoice.line'].create(contractors) + timesheets = self.env['account.analytic.line'].create(timesheets) + + order = self.env['fsm.order'].\ + create({ + 'location_id': self.test_location.id, + 'bill_to': bill_to, + 'person_id': self.test_person.id, + 'contractor_cost_ids': [(6, 0, contractors.ids)], + 'employee_timesheet_ids': [(6, 0, timesheets.ids)] + }) + order.person_ids += self.test_person + return order + + def _process_order_to_invoices(self, order): + # Change states + order.date_start = fields.Datetime.today() + order.date_end = fields.Datetime.today() + order.resolution = 'Done something!' + order.action_complete() + self.assertEqual(order.account_stage, 'review') + # Create vendor bill + # Vendor bill created from order's contractor + if not order.person_id.partner_id.supplier: + with self.assertRaises(ValidationError) as e: + order.account_confirm() + self.assertEqual( + e.exception.name, + "The worker assigned to this order is not a supplier") + order.person_id.partner_id.supplier = True + order.account_confirm() + self.assertEqual(order.account_stage, 'confirmed') + bill = self.AccountInvoice.search([('type', '=', 'in_invoice'), + ('fsm_order_id', '=', order.id)]) + self.assertEqual(len(bill), 1) + self.assertEqual(len(order.contractor_cost_ids), + len(bill.invoice_line_ids)) + # Customer invoice created from order's contractor and timehsheet + if order.bill_to == 'contact' and not order.customer_id: + with self.assertRaises(ValidationError): + order.account_create_invoice() + order.customer_id = self.test_loc_partner # Assign some partner + order.account_create_invoice() + self.assertEqual(order.account_stage, 'invoiced') + invoice = self.AccountInvoice.search([('type', '=', 'out_invoice'), + ('fsm_order_id', '=', order.id)]) + self.assertEqual(len(invoice), 1) + self.assertEqual( + len(order.contractor_cost_ids) + len(order.employee_timesheet_ids), + len(invoice.invoice_line_ids)) + return (bill, invoice) + + def test_fsm_order_exception(self): + """Create a new work order, error raised when + - If person_is is not set, but user try to add new contractor_cost_ids + - If analytic account is not set in location, + and user create contractor_cost_ids (account.move.line) + """ + # Test if the person_id is not selected, error when add contractor line + # Setup required data + self.test_location.analytic_account_id = self.test_analytic + # Create a new work order with contract = 500 and timesheet = 300 + self.env.ref('hr.employee_qdp').timesheet_cost = 20.0 + order = self.env['fsm.order'].\ + create({ + 'location_id': self.test_location.id, + 'person_id': self.test_person.id, + }) + order.person_id = self.test_person + + order.person_ids += self.test_person + order.date_start = fields.Datetime.today() + order.date_end = fields.Datetime.today() + order.resolution = 'Done something!' + with self.assertRaises(ValidationError) as e: + order.action_complete() + self.assertEqual(e.exception.name, + "Cannot move to Complete until " + "'Employee Timesheets' is filled in") + + def test_fsm_order_bill_to_location(self): + """Bill To Location, + invoice created is based on this order's location's partner + """ + # Setup required data + self.test_location.analytic_account_id = self.test_analytic + contractors = [{'name': 'contractor_line_1', + 'product_id': self.env.ref('product.expense_hotel').id, + 'account_id': self.account_id.id, + 'quantity': 2, + 'price_unit': 200}, ] + self.env.ref('hr.employee_qdp').timesheet_cost = 100 + timesheets = [{'name': 'timesheet_line_1', + 'employee_id': self.env.ref('hr.employee_qdp').id, + 'account_id': self.test_analytic.id, + 'product_id': self.env.ref('product.expense_hotel').id, + 'unit_amount': 6}, + {'name': 'timesheet_line_2', + 'employee_id': self.env.ref('hr.employee_qdp').id, + 'account_id': self.test_analytic.id, + 'product_id': self.env.ref('product.expense_hotel').id, + 'unit_amount': 4}, ] + order = self._create_workorder(bill_to='location', + contractors=contractors, + timesheets=timesheets) + order._compute_contractor_cost() + order._compute_employee_hours() + order._compute_total_cost() + self.assertEqual(order.contractor_total, 400) + self.assertEqual(order.employee_time_total, 10) # Hrs + self.assertEqual(order.total_cost, 1400) + # Testing not working "Need to Configure Chart of Accounts" + # bill, invoice = self._process_order_to_invoices(order) + # self.assertEqual(bill.partner_id, order.person_id.partner_id) + # self.assertEqual(invoice.partner_id, order.location_id.customer_id) + + def test_fsm_order_bill_to_contact(self): + """Bill To Contact, + invoice created is based on this order's contact + """ + # Setup required data + self.test_location.analytic_account_id = self.test_analytic + # Create a new work order with contract = 500 and timesheet = 300 + contractors = [{'name': 'contractor_line_2', + 'product_id': self.env.ref('product.expense_hotel').id, + 'account_id': self.account_id.id, + 'quantity': 2, + 'price_unit': 100}, + {'name': 'contractor_line_3', + 'product_id': self.env.ref('product.expense_hotel').id, + 'account_id': self.account_id.id, + 'quantity': 1, + 'price_unit': 300}, ] + self.env.ref('hr.employee_qdp').timesheet_cost = 20.0 + timesheets = [{'name': 'timesheet_line_3', + 'employee_id': self.env.ref('hr.employee_qdp').id, + 'account_id': self.test_analytic.id, + 'product_id': self.env.ref('product.expense_hotel').id, + 'unit_amount': 10}, ] + order = self._create_workorder(bill_to='contact', + contractors=contractors, + timesheets=timesheets) + order._compute_contractor_cost() + order._compute_employee_hours() + order._compute_total_cost() + self.assertEqual(order.contractor_total, 500) + self.assertEqual(order.employee_time_total, 10) # Hrs + self.assertEqual(order.total_cost, 700) + # Testing not working "Need to Configure Chart of Accounts" + # bill, invoice = self._process_order_to_invoices(order) + # self.assertEqual(bill.partner_id, order.person_id.partner_id) + # self.assertEqual(invoice.partner_id, order.customer_id) diff --git a/fieldservice_isp_account/views/account.xml b/fieldservice_isp_account/views/account.xml new file mode 100644 index 0000000000..3e7aeb49e5 --- /dev/null +++ b/fieldservice_isp_account/views/account.xml @@ -0,0 +1,29 @@ + + + + + Service Orders + fsm.order + form + tree,form + + +

    + No Field Service Orders to review. +

    +
    +
    + + + + + +
    diff --git a/fieldservice_isp_account/views/fsm_order.xml b/fieldservice_isp_account/views/fsm_order.xml new file mode 100644 index 0000000000..4540901734 --- /dev/null +++ b/fieldservice_isp_account/views/fsm_order.xml @@ -0,0 +1,89 @@ + + + + fsm.order.form.isp.account + fsm.order + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + fsm.order.search + fsm.order + + + + + + + + +
    diff --git a/fieldservice_isp_account/views/fsm_person.xml b/fieldservice_isp_account/views/fsm_person.xml new file mode 100644 index 0000000000..0f2a42a1a5 --- /dev/null +++ b/fieldservice_isp_account/views/fsm_person.xml @@ -0,0 +1,21 @@ + + + + fsm.person.form.isp.account + fsm.person + + +
    + +
    +
    +
    + +
    diff --git a/fieldservice_isp_account/views/hr_timesheet.xml b/fieldservice_isp_account/views/hr_timesheet.xml new file mode 100644 index 0000000000..25ebf8b849 --- /dev/null +++ b/fieldservice_isp_account/views/hr_timesheet.xml @@ -0,0 +1,36 @@ + + + + My Timesheets + account.analytic.line + tree,form + [('user_id', '=', uid)] + { + "search_default_week":1, + } + + +

    + Record a new activity +

    + You can register and track your workings hours by project every + day. Every time spent on a project will become a cost and can be re-invoiced to + customers if required. +

    +
    +
    + + + + account.analytic.line.timesheet.user + + + [('user_id', '=', user.id), ('project_id', '!=', False)] + + + + + + + +
    From b9516f8317df801b952cbb07472a6f2313dee9e0 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Mon, 2 Dec 2019 17:32:47 -0500 Subject: [PATCH 335/631] [FIX] fieldservice_account: tests and travis --- fieldservice_isp_account/models/__init__.py | 7 +++++++ fieldservice_isp_account/models/fsm_order.py | 2 +- fieldservice_isp_account/tests/test_isp_account.py | 2 +- fieldservice_isp_account/views/fsm_order.xml | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 fieldservice_isp_account/models/__init__.py diff --git a/fieldservice_isp_account/models/__init__.py b/fieldservice_isp_account/models/__init__.py new file mode 100644 index 0000000000..19e859522b --- /dev/null +++ b/fieldservice_isp_account/models/__init__.py @@ -0,0 +1,7 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + account_invoice_line, + fsm_order, + fsm_person, +) diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py index 9cd3454bb3..4b0637fd24 100644 --- a/fieldservice_isp_account/models/fsm_order.py +++ b/fieldservice_isp_account/models/fsm_order.py @@ -37,7 +37,7 @@ def _compute_employee(self): @api.depends('employee_timesheet_ids', 'contractor_cost_ids') def _compute_total_cost(self): - super(self)._compute_total_cost() + super()._compute_total_cost() for order in self: order.total_cost = 0.0 rate = 0 diff --git a/fieldservice_isp_account/tests/test_isp_account.py b/fieldservice_isp_account/tests/test_isp_account.py index 60dd8b1de2..a12cc2de8d 100644 --- a/fieldservice_isp_account/tests/test_isp_account.py +++ b/fieldservice_isp_account/tests/test_isp_account.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) from odoo import fields -from odoo.addons.fieldservice_sale.tests.test_fsm_account import ( +from odoo.addons.fieldservice_account.tests.test_fsm_account import ( FSMAccountCase ) from odoo.exceptions import ValidationError diff --git a/fieldservice_isp_account/views/fsm_order.xml b/fieldservice_isp_account/views/fsm_order.xml index 4540901734..469e19c4c4 100644 --- a/fieldservice_isp_account/views/fsm_order.xml +++ b/fieldservice_isp_account/views/fsm_order.xml @@ -3,7 +3,8 @@ fsm.order.form.isp.account fsm.order - +
    From c3f62416c295cc52e7d87fbe4bc6e99fc8e7c6db Mon Sep 17 00:00:00 2001 From: brian10048 Date: Thu, 5 Dec 2019 13:28:31 -0500 Subject: [PATCH 336/631] [IMP] fieldservice_account: Update maintainers --- fieldservice_isp_account/README.rst | 38 ++-- fieldservice_isp_account/__manifest__.py | 6 +- .../i18n/fieldservice_isp_account.pot | 214 ++++++++++++++++++ .../static/description/index.html | 23 +- 4 files changed, 250 insertions(+), 31 deletions(-) create mode 100644 fieldservice_isp_account/i18n/fieldservice_isp_account.pot diff --git a/fieldservice_isp_account/README.rst b/fieldservice_isp_account/README.rst index 278e295c55..cb1c58ed6b 100644 --- a/fieldservice_isp_account/README.rst +++ b/fieldservice_isp_account/README.rst @@ -1,6 +1,6 @@ -========================== -Field Service - Accounting -========================== +============================== +Field Service - ISP Accounting +============================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! @@ -14,10 +14,10 @@ Field Service - Accounting :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/12.0/fieldservice_account + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_isp_account :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-12-0/field-service-12-0-fieldservice_account + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_isp_account :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/264/12.0 @@ -43,25 +43,22 @@ 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 +No special configuration instructions. Usage ===== To use the module: -On a field service order, open the "Accounting" tab. Depending on -whether the logged in user or an employee or not, they will see +On a field service order, open the "Accounting" tab. Depending on +whether the logged in user or an employee or not, they will see either a place to enter timesheet records or contractor costs. -The total cost of the order is calculated based on the entries in +The total cost of the order is calculated based on the entries in the employee timesheet entries and contractor costs. When an order is completed, a customer invoice will be generated for -the employee time and the contractor costs. A vendor bill will be +the employee time and the contractor costs. A vendor bill will be created for the contractor costs. Bug Tracker @@ -70,7 +67,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -87,6 +84,7 @@ Contributors * Michael Allen * Serpent Consulting Services Pvt. Ltd. +* Brian McMaster Other credits ~~~~~~~~~~~~~ @@ -111,11 +109,17 @@ 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 `maintainer `__: +Current `maintainers `__: -|maintainer-osimallen| +|maintainer-osimallen| |maintainer-brian10048| |maintainer-bodedra| -This module is part of the `OCA/field-service `_ project on GitHub. +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_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index cd184a7c82..5e18a8cd60 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -22,5 +22,9 @@ ], 'license': 'AGPL-3', 'development_status': 'Beta', - 'maintainers': ['osimallen'], + 'maintainers': [ + 'osimallen', + 'brian10048', + 'bodedra', + ], } diff --git a/fieldservice_isp_account/i18n/fieldservice_isp_account.pot b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot new file mode 100644 index 0000000000..8777744e96 --- /dev/null +++ b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot @@ -0,0 +1,214 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_isp_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__account_stage +msgid "Accounting Stage" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:68 +#, python-format +msgid "Cannot move to Complete until 'Contractor Costs' is filled in" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:71 +#, python-format +msgid "Cannot move to Complete until 'Employee Timesheets' is filled in" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Confirm" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Confirmed" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:115 +#, python-format +msgid "Contact empty" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_total +msgid "Contractor Cost Estimate" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_cost_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Contractor Costs" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Create Invoice" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Draft" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Duration" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee +msgid "Employee" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_timesheet_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Employee Timesheets" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_overtime +msgid "FSM Overtime" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_regular_time +msgid "FSM Regular Time" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_travel_time +msgid "FSM Travel Time" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_person +msgid "Field Service Worker" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Fully Invoiced" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,uom_name:fieldservice_isp_account.field_service_travel_time +msgid "Hour(s)" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_search_view +msgid "Needs Review" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.actions.act_window,help:fieldservice_isp_account.action_account_fsm_order +msgid "No Field Service Orders to review." +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "No Invoice" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Nothing Invoiced" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_operations +msgid "Operations" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_overtime +msgid "Overtime for Field Service Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#, python-format +msgid "Please set the field service worker." +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_regular_time +msgid "Regular time for Field Service\n" +" Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.actions.act_window,name:fieldservice_isp_account.action_account_fsm_order +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_fsm_order +msgid "Service Orders" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:102 +#, python-format +msgid "The worker assigned to this order is not a supplier" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Timesheet Activities" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_time_total +msgid "Total Employee Hours" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_travel_time +msgid "Travel time for Field Service\n" +" Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_person_form_isp_account +msgid "Vendor Bills" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_travel_time +msgid "kg" +msgstr "" + diff --git a/fieldservice_isp_account/static/description/index.html b/fieldservice_isp_account/static/description/index.html index be45db7518..04cc1226d9 100644 --- a/fieldservice_isp_account/static/description/index.html +++ b/fieldservice_isp_account/static/description/index.html @@ -4,7 +4,7 @@ -Field Service - Accounting +Field Service - ISP Accounting -
    -

    Field Service - Accounting

    +
    +

    Field Service - ISP Accounting

    -

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

    +

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

    This module adds the ability to track employee time and contractor costs for Field Service Orders. It also adds functionality to create a customer invoice and a vendor bill when a Field Service Order is @@ -394,11 +394,7 @@

    Installation

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

    No special configuration instructions.

    Usage

    @@ -417,7 +413,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -433,6 +429,7 @@

    Contributors

    @@ -449,9 +446,9 @@

    Maintainers

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

    -

    Current maintainer:

    -

    osimallen

    -

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

    +

    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.

    From c37673712bbab91b2a6e0e3452941f4cb6a6d467 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 5 Dec 2019 19:10:27 +0000 Subject: [PATCH 337/631] fieldservice_isp_account 12.0.2.0.2 --- fieldservice_isp_account/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 5e18a8cd60..e527f23850 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - ISP Accounting', 'summary': """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.0.1', + 'version': '12.0.2.0.2', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', From a7d63465e01c04f3f18e2d7ac572b9ffbb6a365d Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 11 Dec 2019 15:17:47 -0800 Subject: [PATCH 338/631] [IMP] Search Company ID --- fieldservice_isp_account/i18n/fieldservice_isp_account.pot | 4 ++-- fieldservice_isp_account/models/fsm_order.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fieldservice_isp_account/i18n/fieldservice_isp_account.pot b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot index 8777744e96..c633f9becc 100644 --- a/fieldservice_isp_account/i18n/fieldservice_isp_account.pot +++ b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot @@ -41,7 +41,7 @@ msgid "Confirmed" msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/fsm_order.py:115 +#: code:addons/fieldservice_isp_account/models/fsm_order.py:116 #, python-format msgid "Contact empty" msgstr "" @@ -177,7 +177,7 @@ msgid "Service Orders" msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/fsm_order.py:102 +#: code:addons/fieldservice_isp_account/models/fsm_order.py:103 #, python-format msgid "The worker assigned to this order is not a supplier" msgstr "" diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py index 4b0637fd24..a203ac7d83 100644 --- a/fieldservice_isp_account/models/fsm_order.py +++ b/fieldservice_isp_account/models/fsm_order.py @@ -84,7 +84,8 @@ def create_bills(self): 'type': 'in_invoice', 'journal_id': jrnl.id or False, 'fiscal_position_id': fpos.id or False, - 'fsm_order_id': self.id + 'fsm_order_id': self.id, + 'company_id': self.env.user.company_id.id } bill = self.env['account.invoice'].sudo().create(vals) for line in self.contractor_cost_ids: @@ -130,7 +131,8 @@ def account_create_invoice(self): 'type': 'out_invoice', 'journal_id': jrnl.id or False, 'fiscal_position_id': fpos.id or False, - 'fsm_order_id': self.id + 'fsm_order_id': self.id, + 'company_id': self.env.user.company_id.id } invoice = self.env['account.invoice'].sudo().create(vals) price_list = invoice.partner_id.property_product_pricelist From f36653ac2207153d121a2acc7247ba478ff4fddc Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 13 Dec 2019 16:11:49 -0600 Subject: [PATCH 339/631] [FIX] fieldservice_isp_account: Show the header at the top --- fieldservice_isp_account/views/fsm_order.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fieldservice_isp_account/views/fsm_order.xml b/fieldservice_isp_account/views/fsm_order.xml index 469e19c4c4..1565e1b6fd 100644 --- a/fieldservice_isp_account/views/fsm_order.xml +++ b/fieldservice_isp_account/views/fsm_order.xml @@ -3,10 +3,10 @@ fsm.order.form.isp.account fsm.order - - +
    -
    + From c5fecd8b9dfe6202487f2ff460cff01bcf148072 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 16 Dec 2019 18:42:45 +0000 Subject: [PATCH 340/631] fieldservice_isp_account 12.0.2.1.0 --- fieldservice_isp_account/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index e527f23850..1084f8ee4f 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - ISP Accounting', 'summary': """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.0.2', + 'version': '12.0.2.1.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', From eba54e0dd235778febb652ddd993e82700337ec4 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 26 Dec 2019 14:39:09 -0600 Subject: [PATCH 341/631] [IMP] fieldservice_isp_account: m2m between fsm.order and invoice --- fieldservice_isp_account/i18n/es_CL.po | 220 +++++++++++++++++++ fieldservice_isp_account/i18n/pt_BR.po | 214 ++++++++++++++++++ fieldservice_isp_account/models/fsm_order.py | 12 +- 3 files changed, 441 insertions(+), 5 deletions(-) create mode 100644 fieldservice_isp_account/i18n/es_CL.po create mode 100644 fieldservice_isp_account/i18n/pt_BR.po diff --git a/fieldservice_isp_account/i18n/es_CL.po b/fieldservice_isp_account/i18n/es_CL.po new file mode 100644 index 0000000000..8c1be242e8 --- /dev/null +++ b/fieldservice_isp_account/i18n/es_CL.po @@ -0,0 +1,220 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_isp_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-01-16 22:38+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_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__account_stage +msgid "Accounting Stage" +msgstr "Etapa Contable" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:68 +#, python-format +msgid "Cannot move to Complete until 'Contractor Costs' is filled in" +msgstr "" +"No se puede pasar a Completado hasta que se completen los 'Costos del " +"contratista'" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:71 +#, python-format +msgid "Cannot move to Complete until 'Employee Timesheets' is filled in" +msgstr "" +"No se puede mover a Completado hasta que se completen las 'Hojas de tiempo " +"de empleado'" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Confirm" +msgstr "Confirmar" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Confirmed" +msgstr "Confirmado" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:116 +#, python-format +msgid "Contact empty" +msgstr "Contacto Vacío" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_total +msgid "Contractor Cost Estimate" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_cost_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Contractor Costs" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Create Invoice" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Draft" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Duration" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee +msgid "Employee" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_timesheet_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Employee Timesheets" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_overtime +msgid "FSM Overtime" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_regular_time +msgid "FSM Regular Time" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_travel_time +msgid "FSM Travel Time" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_person +msgid "Field Service Worker" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Fully Invoiced" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,uom_name:fieldservice_isp_account.field_service_travel_time +msgid "Hour(s)" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_search_view +msgid "Needs Review" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.actions.act_window,help:fieldservice_isp_account.action_account_fsm_order +msgid "No Field Service Orders to review." +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "No Invoice" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Nothing Invoiced" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_operations +msgid "Operations" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_overtime +msgid "Overtime for Field Service Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#, python-format +msgid "Please set the field service worker." +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_regular_time +msgid "Regular time for Field Service\n" +" Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.actions.act_window,name:fieldservice_isp_account.action_account_fsm_order +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_fsm_order +msgid "Service Orders" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:103 +#, python-format +msgid "The worker assigned to this order is not a supplier" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Timesheet Activities" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_time_total +msgid "Total Employee Hours" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_travel_time +msgid "Travel time for Field Service\n" +" Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_person_form_isp_account +msgid "Vendor Bills" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_travel_time +msgid "kg" +msgstr "" diff --git a/fieldservice_isp_account/i18n/pt_BR.po b/fieldservice_isp_account/i18n/pt_BR.po new file mode 100644 index 0000000000..799dc78b97 --- /dev/null +++ b/fieldservice_isp_account/i18n/pt_BR.po @@ -0,0 +1,214 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_isp_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__account_stage +msgid "Accounting Stage" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:68 +#, python-format +msgid "Cannot move to Complete until 'Contractor Costs' is filled in" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:71 +#, python-format +msgid "Cannot move to Complete until 'Employee Timesheets' is filled in" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Confirm" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Confirmed" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:116 +#, python-format +msgid "Contact empty" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_total +msgid "Contractor Cost Estimate" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_cost_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Contractor Costs" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Create Invoice" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Draft" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Duration" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee +msgid "Employee" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_timesheet_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Employee Timesheets" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_overtime +msgid "FSM Overtime" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_regular_time +msgid "FSM Regular Time" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_travel_time +msgid "FSM Travel Time" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_person +msgid "Field Service Worker" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Fully Invoiced" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,uom_name:fieldservice_isp_account.field_service_travel_time +msgid "Hour(s)" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_search_view +msgid "Needs Review" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.actions.act_window,help:fieldservice_isp_account.action_account_fsm_order +msgid "No Field Service Orders to review." +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "No Invoice" +msgstr "" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Nothing Invoiced" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_operations +msgid "Operations" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_overtime +msgid "Overtime for Field Service Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#, python-format +msgid "Please set the field service worker." +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_regular_time +msgid "Regular time for Field Service\n" +" Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.actions.act_window,name:fieldservice_isp_account.action_account_fsm_order +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_fsm_order +msgid "Service Orders" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:103 +#, python-format +msgid "The worker assigned to this order is not a supplier" +msgstr "" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Timesheet Activities" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_time_total +msgid "Total Employee Hours" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_travel_time +msgid "Travel time for Field Service\n" +" Employees\n" +" " +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_person_form_isp_account +msgid "Vendor Bills" +msgstr "" + +#. module: fieldservice_isp_account +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_travel_time +msgid "kg" +msgstr "" diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py index a203ac7d83..6afa1cb878 100644 --- a/fieldservice_isp_account/models/fsm_order.py +++ b/fieldservice_isp_account/models/fsm_order.py @@ -84,7 +84,7 @@ def create_bills(self): 'type': 'in_invoice', 'journal_id': jrnl.id or False, 'fiscal_position_id': fpos.id or False, - 'fsm_order_id': self.id, + 'fsm_order_ids': [(4, self.id)], 'company_id': self.env.user.company_id.id } bill = self.env['account.invoice'].sudo().create(vals) @@ -120,7 +120,7 @@ def account_create_invoice(self): 'type': 'out_invoice', 'journal_id': jrnl.id or False, 'fiscal_position_id': fpos.id or False, - 'fsm_order_id': self.id + 'fsm_order_ids': [(4, self.id)], } invoice = self.env['account.invoice'].sudo().create(vals) price_list = invoice.partner_id.property_product_pricelist @@ -131,7 +131,7 @@ def account_create_invoice(self): 'type': 'out_invoice', 'journal_id': jrnl.id or False, 'fiscal_position_id': fpos.id or False, - 'fsm_order_id': self.id, + 'fsm_order_ids': [(4, self.id)], 'company_id': self.env.user.company_id.id } invoice = self.env['account.invoice'].sudo().create(vals) @@ -152,7 +152,8 @@ def account_create_invoice(self): 'name': line.name, 'price_unit': price, 'account_id': account.id, - 'invoice_id': invoice.id + 'invoice_id': invoice.id, + 'fsm_order_id': self.id, } time_cost = self.env['account.invoice.line'].create(vals) taxes = template.taxes_id @@ -173,7 +174,8 @@ def account_create_invoice(self): 'name': cost.name, 'price_unit': price, 'account_id': account.id, - 'invoice_id': invoice.id + 'invoice_id': invoice.id, + 'fsm_order_id': self.id, } con_cost = self.env['account.invoice.line'].create(vals) taxes = template.taxes_id From 5875282656855ee011f223244c1156a211a7c774 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 17 Jan 2020 01:02:50 +0000 Subject: [PATCH 342/631] fieldservice_isp_account 12.0.2.1.1 --- fieldservice_isp_account/__manifest__.py | 2 +- fieldservice_isp_account/i18n/pt_BR.po | 58 ++++++++++++------------ 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 1084f8ee4f..36f7423042 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - ISP Accounting', 'summary': """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.1.0', + 'version': '12.0.2.1.1', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_isp_account/i18n/pt_BR.po b/fieldservice_isp_account/i18n/pt_BR.po index 799dc78b97..ec32197ce9 100644 --- a/fieldservice_isp_account/i18n/pt_BR.po +++ b/fieldservice_isp_account/i18n/pt_BR.po @@ -6,18 +6,20 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-02-10 15:33+0000\n" +"Last-Translator: Marcel Savegnago \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_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__account_stage msgid "Accounting Stage" -msgstr "" +msgstr "Etapa Contábil" #. module: fieldservice_isp_account #: code:addons/fieldservice_isp_account/models/fsm_order.py:68 @@ -34,49 +36,49 @@ msgstr "" #. module: fieldservice_isp_account #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account msgid "Confirm" -msgstr "" +msgstr "Confirmar" #. module: fieldservice_isp_account #: selection:fsm.order,account_stage:0 msgid "Confirmed" -msgstr "" +msgstr "Confirmado" #. module: fieldservice_isp_account #: code:addons/fieldservice_isp_account/models/fsm_order.py:116 #, python-format msgid "Contact empty" -msgstr "" +msgstr "Contato Vazio" #. module: fieldservice_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_total msgid "Contractor Cost Estimate" -msgstr "" +msgstr "Estimativa de Custos do Contratante" #. module: fieldservice_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_cost_ids #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account msgid "Contractor Costs" -msgstr "" +msgstr "Custos do Contratante" #. module: fieldservice_isp_account #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account msgid "Create Invoice" -msgstr "" +msgstr "Criar Fatura" #. module: fieldservice_isp_account #: selection:fsm.order,account_stage:0 msgid "Draft" -msgstr "" +msgstr "Provisório" #. module: fieldservice_isp_account #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account msgid "Duration" -msgstr "" +msgstr "Duração" #. module: fieldservice_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee msgid "Employee" -msgstr "" +msgstr "Funcionario" #. module: fieldservice_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_timesheet_ids @@ -102,55 +104,55 @@ msgstr "" #. module: fieldservice_isp_account #: model:ir.model,name:fieldservice_isp_account.model_fsm_order msgid "Field Service Order" -msgstr "" +msgstr "Ordem de Serviço de Campo" #. module: fieldservice_isp_account #: model:ir.model,name:fieldservice_isp_account.model_fsm_person msgid "Field Service Worker" -msgstr "" +msgstr "Trabalhador do Serviço de Campo" #. module: fieldservice_isp_account #: selection:fsm.order,account_stage:0 msgid "Fully Invoiced" -msgstr "" +msgstr "Totalmente Faturado" #. module: fieldservice_isp_account #: model:product.template,uom_name:fieldservice_isp_account.field_service_overtime #: model:product.template,uom_name:fieldservice_isp_account.field_service_regular_time #: model:product.template,uom_name:fieldservice_isp_account.field_service_travel_time msgid "Hour(s)" -msgstr "" +msgstr "Hora(s)" #. module: fieldservice_isp_account #: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line msgid "Invoice Line" -msgstr "" +msgstr "Linha de Fatura" #. module: fieldservice_isp_account #: selection:fsm.order,account_stage:0 #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_search_view msgid "Needs Review" -msgstr "" +msgstr "Necessita de Revisão" #. module: fieldservice_isp_account #: model_terms:ir.actions.act_window,help:fieldservice_isp_account.action_account_fsm_order msgid "No Field Service Orders to review." -msgstr "" +msgstr "Sem Ordens de Serviço de Campo para revisar." #. module: fieldservice_isp_account #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account msgid "No Invoice" -msgstr "" +msgstr "Sem Fatura" #. module: fieldservice_isp_account #: selection:fsm.order,account_stage:0 msgid "Nothing Invoiced" -msgstr "" +msgstr "Nada Faturado" #. module: fieldservice_isp_account #: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_operations msgid "Operations" -msgstr "" +msgstr "Operações" #. module: fieldservice_isp_account #: model:product.template,description_sale:fieldservice_isp_account.field_service_overtime @@ -162,7 +164,7 @@ msgstr "" #: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 #, python-format msgid "Please set the field service worker." -msgstr "" +msgstr "Por favor, selecione o trabalhador do serviço de campo." #. module: fieldservice_isp_account #: model:product.template,description_sale:fieldservice_isp_account.field_service_regular_time @@ -175,23 +177,23 @@ msgstr "" #: model:ir.actions.act_window,name:fieldservice_isp_account.action_account_fsm_order #: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_fsm_order msgid "Service Orders" -msgstr "" +msgstr "Ordens de Serviço" #. module: fieldservice_isp_account #: code:addons/fieldservice_isp_account/models/fsm_order.py:103 #, python-format msgid "The worker assigned to this order is not a supplier" -msgstr "" +msgstr "O trabalhador designado para esta ordem não é um fornecedor" #. module: fieldservice_isp_account #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account msgid "Timesheet Activities" -msgstr "" +msgstr "Atividades da Planilha de Tempo" #. module: fieldservice_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_time_total msgid "Total Employee Hours" -msgstr "" +msgstr "Carga Horária Total do Empregado" #. module: fieldservice_isp_account #: model:product.template,description_sale:fieldservice_isp_account.field_service_travel_time @@ -204,11 +206,11 @@ msgstr "" #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_person_form_isp_account msgid "Vendor Bills" -msgstr "" +msgstr "# Contas de Fornecedores" #. module: fieldservice_isp_account #: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_overtime #: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_regular_time #: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_travel_time msgid "kg" -msgstr "" +msgstr "kg" From 29f1bab935a057af66b501b10de7969a62d8d8de Mon Sep 17 00:00:00 2001 From: scampbell Date: Thu, 2 Apr 2020 09:18:09 -0700 Subject: [PATCH 343/631] [IMP] Default Set Project and Task [IMP] Add Project + Task to View for Context --- fieldservice_isp_account/__manifest__.py | 1 + fieldservice_isp_account/views/fsm_order.xml | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 36f7423042..5a511cf3d8 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -11,6 +11,7 @@ 'website': 'https://github.com/OCA/field-service', 'depends': [ 'fieldservice_account_analytic', + 'fieldservice_project', 'hr_timesheet', ], 'data': [ diff --git a/fieldservice_isp_account/views/fsm_order.xml b/fieldservice_isp_account/views/fsm_order.xml index 1565e1b6fd..fb57aa3643 100644 --- a/fieldservice_isp_account/views/fsm_order.xml +++ b/fieldservice_isp_account/views/fsm_order.xml @@ -50,7 +50,7 @@ - + @@ -63,6 +63,8 @@ + + From 1cbc7dd884252fcc6d63e694d9f12d4ffa4642b7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 3 Apr 2020 07:16:05 +0000 Subject: [PATCH 344/631] fieldservice_isp_account 12.0.2.2.0 --- fieldservice_isp_account/__manifest__.py | 2 +- fieldservice_isp_account/i18n/es_AR.po | 228 +++++++++++++++++++++++ fieldservice_isp_account/i18n/pt_BR.po | 22 ++- 3 files changed, 245 insertions(+), 7 deletions(-) create mode 100644 fieldservice_isp_account/i18n/es_AR.po diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 5a511cf3d8..9d92829615 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - ISP Accounting', 'summary': """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.1.1', + 'version': '12.0.2.2.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_isp_account/i18n/es_AR.po b/fieldservice_isp_account/i18n/es_AR.po new file mode 100644 index 0000000000..2c5c799966 --- /dev/null +++ b/fieldservice_isp_account/i18n/es_AR.po @@ -0,0 +1,228 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_isp_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-21 05:19+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 3.10\n" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__account_stage +msgid "Accounting Stage" +msgstr "Etapa de Contabilidad" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:68 +#, python-format +msgid "Cannot move to Complete until 'Contractor Costs' is filled in" +msgstr "" +"No se puede pasar a Completo hasta que se completen los 'Costos del " +"Contratista'" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:71 +#, python-format +msgid "Cannot move to Complete until 'Employee Timesheets' is filled in" +msgstr "" +"No se puede mover a Completado hasta que se completen el 'Parte de Horas del " +"Empleado'" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Confirm" +msgstr "Confirmar" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Confirmed" +msgstr "Confirmado" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:116 +#, python-format +msgid "Contact empty" +msgstr "Contacto vacío" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_total +msgid "Contractor Cost Estimate" +msgstr "Estimación de Costos del Contratistas" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_cost_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Contractor Costs" +msgstr "Costos del Contratistas" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Create Invoice" +msgstr "Crear Factura" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Draft" +msgstr "Borrador" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Duration" +msgstr "Duración" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee +msgid "Employee" +msgstr "Empleado" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_timesheet_ids +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Employee Timesheets" +msgstr "Parte de Horas del Empleado" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_overtime +msgid "FSM Overtime" +msgstr "Horas Extra FSM" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_regular_time +msgid "FSM Regular Time" +msgstr "Tiempo Regular FSM" + +#. module: fieldservice_isp_account +#: model:product.template,name:fieldservice_isp_account.field_service_travel_time +msgid "FSM Travel Time" +msgstr "Tiempo de Viaje FSM" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_order +msgid "Field Service Order" +msgstr "Pedido de Servicio de Campo" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_person +msgid "Field Service Worker" +msgstr "Trabajador de Servicio de Campo" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Fully Invoiced" +msgstr "Completamente Facturado" + +#. module: fieldservice_isp_account +#: model:product.template,uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,uom_name:fieldservice_isp_account.field_service_travel_time +msgid "Hour(s)" +msgstr "Hora(s)" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +msgid "Invoice Line" +msgstr "Línea de Factura" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_search_view +msgid "Needs Review" +msgstr "Necesita Revisión" + +#. module: fieldservice_isp_account +#: model_terms:ir.actions.act_window,help:fieldservice_isp_account.action_account_fsm_order +msgid "No Field Service Orders to review." +msgstr "No hay Pedidos de Servicio de Campo para revisar." + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "No Invoice" +msgstr "No hay Factura" + +#. module: fieldservice_isp_account +#: selection:fsm.order,account_stage:0 +msgid "Nothing Invoiced" +msgstr "Nada que Facturar" + +#. module: fieldservice_isp_account +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_operations +msgid "Operations" +msgstr "Operaciones" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_overtime +msgid "Overtime for Field Service Employees\n" +" " +msgstr "" +"Horas Extra para los Empleados de Servicio de Campo\n" +" " + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#, python-format +msgid "Please set the field service worker." +msgstr "Por favor configure el trabajador de servicio de campo." + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_regular_time +msgid "Regular time for Field Service\n" +" Employees\n" +" " +msgstr "" +"Tiempo regular para Empleados de Servicio de\n" +" Campo\n" +" " + +#. module: fieldservice_isp_account +#: model:ir.actions.act_window,name:fieldservice_isp_account.action_account_fsm_order +#: model:ir.ui.menu,name:fieldservice_isp_account.menu_account_fsm_order +msgid "Service Orders" +msgstr "Pedidos de Servicio" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:103 +#, python-format +msgid "The worker assigned to this order is not a supplier" +msgstr "El trabajador asignado a este pedido no es un proveedor" + +#. module: fieldservice_isp_account +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account +msgid "Timesheet Activities" +msgstr "Actividades de Parte de Horas" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_time_total +msgid "Total Employee Hours" +msgstr "Total de Horas de Empleados" + +#. module: fieldservice_isp_account +#: model:product.template,description_sale:fieldservice_isp_account.field_service_travel_time +msgid "Travel time for Field Service\n" +" Employees\n" +" " +msgstr "" +"Tiempo de viaje para Empleados de Servicio de\n" +" Campo\n" +" " + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_person_form_isp_account +msgid "Vendor Bills" +msgstr "Cuentas de Vendedor" + +#. module: fieldservice_isp_account +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_overtime +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_regular_time +#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_travel_time +msgid "kg" +msgstr "kg" diff --git a/fieldservice_isp_account/i18n/pt_BR.po b/fieldservice_isp_account/i18n/pt_BR.po index ec32197ce9..bcf8c1ad34 100644 --- a/fieldservice_isp_account/i18n/pt_BR.po +++ b/fieldservice_isp_account/i18n/pt_BR.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-02-10 15:33+0000\n" -"Last-Translator: Marcel Savegnago \n" +"PO-Revision-Date: 2020-06-17 16:19+0000\n" +"Last-Translator: Fernando Colus \n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" @@ -26,12 +26,16 @@ msgstr "Etapa Contábil" #, python-format msgid "Cannot move to Complete until 'Contractor Costs' is filled in" msgstr "" +"Não é possível mover para \"Concluído\" até que \"Custos do contratante\" " +"seja preenchido" #. module: fieldservice_isp_account #: code:addons/fieldservice_isp_account/models/fsm_order.py:71 #, python-format msgid "Cannot move to Complete until 'Employee Timesheets' is filled in" msgstr "" +"Não é possível mover para \"Concluído\" até que o \"Quadro de horários dos " +"funcionários\" seja preenchido" #. module: fieldservice_isp_account #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account @@ -84,22 +88,22 @@ msgstr "Funcionario" #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__employee_timesheet_ids #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_form_isp_account msgid "Employee Timesheets" -msgstr "" +msgstr "Quadro de horários dos funcionários" #. module: fieldservice_isp_account #: model:product.template,name:fieldservice_isp_account.field_service_overtime msgid "FSM Overtime" -msgstr "" +msgstr "Horas Extras do FSM (Field Service Management)" #. module: fieldservice_isp_account #: model:product.template,name:fieldservice_isp_account.field_service_regular_time msgid "FSM Regular Time" -msgstr "" +msgstr "Horário Regular do FSM (Field Service Management)" #. module: fieldservice_isp_account #: model:product.template,name:fieldservice_isp_account.field_service_travel_time msgid "FSM Travel Time" -msgstr "" +msgstr "Tempo de Viagem do FSM (Field Service Management)" #. module: fieldservice_isp_account #: model:ir.model,name:fieldservice_isp_account.model_fsm_order @@ -159,6 +163,8 @@ msgstr "Operações" msgid "Overtime for Field Service Employees\n" " " msgstr "" +"Horas extras para funcionários de serviço de campo\n" +" " #. module: fieldservice_isp_account #: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 @@ -172,6 +178,8 @@ msgid "Regular time for Field Service\n" " Employees\n" " " msgstr "" +"Horário regular para funcionários do serviço de campo\n" +" " #. module: fieldservice_isp_account #: model:ir.actions.act_window,name:fieldservice_isp_account.action_account_fsm_order @@ -201,6 +209,8 @@ msgid "Travel time for Field Service\n" " Employees\n" " " msgstr "" +"Horário regular para funcionários do serviço de campo\n" +" " #. module: fieldservice_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count From bc377aa2a6f295d29def583f8187b7c18a04d601 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Mon, 24 Aug 2020 23:02:23 +0530 Subject: [PATCH 345/631] [IMP] Gave Access to portal user. --- fieldservice_isp_account/__manifest__.py | 1 + fieldservice_isp_account/security/ir.model.access.csv | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 fieldservice_isp_account/security/ir.model.access.csv diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 9d92829615..f870512525 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -15,6 +15,7 @@ 'hr_timesheet', ], 'data': [ + 'security/ir.model.access.csv', 'data/time_products.xml', 'views/account.xml', 'views/fsm_order.xml', diff --git a/fieldservice_isp_account/security/ir.model.access.csv b/fieldservice_isp_account/security/ir.model.access.csv new file mode 100644 index 0000000000..8da6f134f1 --- /dev/null +++ b/fieldservice_isp_account/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_hr_employee_portal,access.hr.employee.portal,hr.model_hr_employee,base.group_portal,1,0,0,0 From a174d5e0a3cbd90f494a6d20184bd853d9418762 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 24 Aug 2020 18:26:20 +0000 Subject: [PATCH 346/631] fieldservice_isp_account 12.0.2.3.0 --- fieldservice_isp_account/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index f870512525..d03e863709 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - ISP Accounting', 'summary': """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.2.0', + 'version': '12.0.2.3.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', From 1a7b71a371c694b9a97b2fd3f2b6b3f37abe33e0 Mon Sep 17 00:00:00 2001 From: scampbell Date: Thu, 10 Sep 2020 16:15:12 -0700 Subject: [PATCH 347/631] [FIX] FSM Invoice Double Timesheet Entry --- fieldservice_isp_account/models/fsm_order.py | 40 ++++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py index 6afa1cb878..8c30f292b5 100644 --- a/fieldservice_isp_account/models/fsm_order.py +++ b/fieldservice_isp_account/models/fsm_order.py @@ -136,50 +136,50 @@ def account_create_invoice(self): } invoice = self.env['account.invoice'].sudo().create(vals) price_list = invoice.partner_id.property_product_pricelist - for line in self.employee_timesheet_ids: - price = price_list.get_product_price(product=line.product_id, - quantity=line.unit_amount, + for cost in self.contractor_cost_ids: + price = price_list.get_product_price(product=cost.product_id, + quantity=cost.quantity, partner=invoice.partner_id, date=False, uom_id=False) - template = line.product_id.product_tmpl_id + template = cost.product_id.product_tmpl_id accounts = template.get_product_accounts() account = accounts['income'] vals = { - 'product_id': line.product_id.id, - 'account_analytic_id': line.account_id.id, - 'quantity': line.unit_amount, - 'name': line.name, + 'product_id': cost.product_id.id, + 'account_analytic_id': cost.account_analytic_id.id, + 'quantity': cost.quantity, + 'name': cost.name, 'price_unit': price, 'account_id': account.id, 'invoice_id': invoice.id, 'fsm_order_id': self.id, } - time_cost = self.env['account.invoice.line'].create(vals) + con_cost = self.env['account.invoice.line'].create(vals) taxes = template.taxes_id - time_cost.invoice_line_tax_ids = fpos.map_tax(taxes) - for cost in self.contractor_cost_ids: - price = price_list.get_product_price(product=cost.product_id, - quantity=cost.quantity, + con_cost.invoice_line_tax_ids = fpos.map_tax(taxes) + for line in self.employee_timesheet_ids: + price = price_list.get_product_price(product=line.product_id, + quantity=line.unit_amount, partner=invoice.partner_id, date=False, uom_id=False) - template = cost.product_id.product_tmpl_id + template = line.product_id.product_tmpl_id accounts = template.get_product_accounts() account = accounts['income'] vals = { - 'product_id': cost.product_id.id, - 'account_analytic_id': cost.account_analytic_id.id, - 'quantity': cost.quantity, - 'name': cost.name, + 'product_id': line.product_id.id, + 'account_analytic_id': line.account_id.id, + 'quantity': line.unit_amount, + 'name': line.name, 'price_unit': price, 'account_id': account.id, 'invoice_id': invoice.id, 'fsm_order_id': self.id, } - con_cost = self.env['account.invoice.line'].create(vals) + time_cost = self.env['account.invoice.line'].create(vals) taxes = template.taxes_id - con_cost.invoice_line_tax_ids = fpos.map_tax(taxes) + time_cost.invoice_line_tax_ids = fpos.map_tax(taxes) invoice.compute_taxes() self.account_stage = 'invoiced' return invoice From 8f7a01a5929992dbe46e77a786b5c6fbb7b486b9 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 21 Sep 2020 18:13:18 +0000 Subject: [PATCH 348/631] fieldservice_isp_account 12.0.2.3.1 --- fieldservice_isp_account/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index d03e863709..c9cb774058 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - ISP Accounting', 'summary': """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.3.0', + 'version': '12.0.2.3.1', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', From ddf41e97dafd7eb6476e89c17ea13f6d704b1a19 Mon Sep 17 00:00:00 2001 From: scampbell Date: Mon, 5 Oct 2020 11:04:28 -0700 Subject: [PATCH 349/631] [IMP] No Update Data .xml --- fieldservice_isp_account/data/time_products.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_account/data/time_products.xml b/fieldservice_isp_account/data/time_products.xml index 96a1a4bee3..1ae004dc90 100644 --- a/fieldservice_isp_account/data/time_products.xml +++ b/fieldservice_isp_account/data/time_products.xml @@ -1,5 +1,5 @@ - + FSM Travel Time From e614bab024f17e9a09dfa212d37f1c6de98f043a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 5 Oct 2020 18:58:10 +0000 Subject: [PATCH 350/631] fieldservice_isp_account 12.0.2.3.2 --- fieldservice_isp_account/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index c9cb774058..16e18a2c70 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Field Service - ISP Accounting', 'summary': """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.3.1', + 'version': '12.0.2.3.2', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', From bec759e888e3d01c8c1e662a0dc1e1fa705736c7 Mon Sep 17 00:00:00 2001 From: Benoit Aimont Date: Wed, 28 Apr 2021 09:41:22 +0200 Subject: [PATCH 351/631] [IMP] fieldservice_isp_account: black, isort, prettier --- fieldservice_isp_account/__manifest__.py | 44 ++-- .../data/time_products.xml | 24 +- .../models/account_invoice_line.py | 35 +-- fieldservice_isp_account/models/fsm_order.py | 214 ++++++++++-------- fieldservice_isp_account/models/fsm_person.py | 24 +- .../tests/test_isp_account.py | 191 +++++++++------- fieldservice_isp_account/views/account.xml | 29 ++- fieldservice_isp_account/views/fsm_order.xml | 137 ++++++----- fieldservice_isp_account/views/fsm_person.xml | 19 +- .../views/hr_timesheet.xml | 55 ++--- 10 files changed, 418 insertions(+), 354 deletions(-) diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 16e18a2c70..55cc326f83 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -2,31 +2,27 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service - ISP Accounting', - 'summary': """Invoice Field Service orders based on employee time + "name": "Field Service - ISP Accounting", + "summary": """Invoice Field Service orders based on employee time or contractor costs""", - 'version': '12.0.2.3.2', - 'category': 'Field Service', - 'author': 'Open Source Integrators, Odoo Community Association (OCA)', - 'website': 'https://github.com/OCA/field-service', - 'depends': [ - 'fieldservice_account_analytic', - 'fieldservice_project', - 'hr_timesheet', + "version": "12.0.2.3.2", + "category": "Field Service", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": [ + "fieldservice_account_analytic", + "fieldservice_project", + "hr_timesheet", ], - 'data': [ - 'security/ir.model.access.csv', - 'data/time_products.xml', - 'views/account.xml', - 'views/fsm_order.xml', - 'views/fsm_person.xml', - 'views/hr_timesheet.xml', - ], - 'license': 'AGPL-3', - 'development_status': 'Beta', - 'maintainers': [ - 'osimallen', - 'brian10048', - 'bodedra', + "data": [ + "security/ir.model.access.csv", + "data/time_products.xml", + "views/account.xml", + "views/fsm_order.xml", + "views/fsm_person.xml", + "views/hr_timesheet.xml", ], + "license": "AGPL-3", + "development_status": "Beta", + "maintainers": ["osimallen", "brian10048", "bodedra"], } diff --git a/fieldservice_isp_account/data/time_products.xml b/fieldservice_isp_account/data/time_products.xml index 1ae004dc90..27fb994a25 100644 --- a/fieldservice_isp_account/data/time_products.xml +++ b/fieldservice_isp_account/data/time_products.xml @@ -1,36 +1,32 @@ - + - FSM Travel Time - + service - - + + Travel time for Field Service Employees - FSM Regular Time - + service - - + + Regular time for Field Service Employees - FSM Overtime - + service - - + + Overtime for Field Service Employees - diff --git a/fieldservice_isp_account/models/account_invoice_line.py b/fieldservice_isp_account/models/account_invoice_line.py index 1f64c10bcb..9a59be9fc0 100644 --- a/fieldservice_isp_account/models/account_invoice_line.py +++ b/fieldservice_isp_account/models/account_invoice_line.py @@ -1,34 +1,39 @@ # 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 import _, api, models from odoo.exceptions import ValidationError class AccountInvoiceLine(models.Model): _inherit = "account.invoice.line" - @api.onchange('product_id', 'quantity') + @api.onchange("product_id", "quantity") def onchange_product_id(self): for line in self: if line.fsm_order_id: - partner = line.fsm_order_id.person_id and\ - line.fsm_order_id.person_id.partner_id or False + partner = ( + line.fsm_order_id.person_id + and line.fsm_order_id.person_id.partner_id + or False + ) if not partner: - raise ValidationError( - _("Please set the field service worker.")) + raise ValidationError(_("Please set the field service worker.")) fpos = partner.property_account_position_id tmpl = line.product_id.product_tmpl_id if line.product_id: accounts = tmpl.get_product_accounts() - supinfo = self.env['product.supplierinfo'].search( - [('name', '=', partner.id), - ('product_tmpl_id', '=', tmpl.id), - ('min_qty', '<=', line.quantity)], - order='min_qty DESC') - line.price_unit = \ + supinfo = self.env["product.supplierinfo"].search( + [ + ("name", "=", partner.id), + ("product_tmpl_id", "=", tmpl.id), + ("min_qty", "<=", line.quantity), + ], + order="min_qty DESC", + ) + line.price_unit = ( supinfo and supinfo[0].price or tmpl.standard_price - line.account_id = accounts.get('expense', False) - line.invoice_line_tax_ids = fpos.\ - map_tax(tmpl.supplier_taxes_id) + ) + line.account_id = accounts.get("expense", False) + line.invoice_line_tax_ids = fpos.map_tax(tmpl.supplier_taxes_id) line.name = line.product_id.name diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py index 8c30f292b5..81c3af3aa1 100644 --- a/fieldservice_isp_account/models/fsm_order.py +++ b/fieldservice_isp_account/models/fsm_order.py @@ -1,41 +1,45 @@ # 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 import _, api, fields, models from odoo.exceptions import ValidationError - -ACCOUNT_STAGES = [('draft', 'Draft'), - ('review', 'Needs Review'), - ('confirmed', 'Confirmed'), - ('invoiced', 'Fully Invoiced'), - ('no', 'Nothing Invoiced')] +ACCOUNT_STAGES = [ + ("draft", "Draft"), + ("review", "Needs Review"), + ("confirmed", "Confirmed"), + ("invoiced", "Fully Invoiced"), + ("no", "Nothing Invoiced"), +] class FSMOrder(models.Model): - _inherit = 'fsm.order' + _inherit = "fsm.order" - contractor_cost_ids = fields.One2many('account.invoice.line', - 'fsm_order_id', - string='Contractor Costs') - employee_timesheet_ids = fields.One2many('account.analytic.line', - "fsm_order_id", - string='Employee Timesheets') - employee = fields.Boolean(compute='_compute_employee') - contractor_total = fields.Float(compute='_compute_contractor_cost', - string='Contractor Cost Estimate') - employee_time_total = fields.Float(compute='_compute_employee_hours', - string='Total Employee Hours') - account_stage = fields.Selection(ACCOUNT_STAGES, string='Accounting Stage', - default='draft') + contractor_cost_ids = fields.One2many( + "account.invoice.line", "fsm_order_id", string="Contractor Costs" + ) + employee_timesheet_ids = fields.One2many( + "account.analytic.line", "fsm_order_id", string="Employee Timesheets" + ) + employee = fields.Boolean(compute="_compute_employee") + contractor_total = fields.Float( + compute="_compute_contractor_cost", string="Contractor Cost Estimate" + ) + employee_time_total = fields.Float( + compute="_compute_employee_hours", string="Total Employee Hours" + ) + account_stage = fields.Selection( + ACCOUNT_STAGES, string="Accounting Stage", default="draft" + ) def _compute_employee(self): - user = self.env['res.users'].browse(self.env.uid) + user = self.env["res.users"].browse(self.env.uid) for order in self: if user.employee_ids: order.employee = True - @api.depends('employee_timesheet_ids', 'contractor_cost_ids') + @api.depends("employee_timesheet_ids", "contractor_cost_ids") def _compute_total_cost(self): super()._compute_total_cost() for order in self: @@ -47,14 +51,14 @@ def _compute_total_cost(self): for cost in order.contractor_cost_ids: order.total_cost += cost.price_unit * cost.quantity - @api.depends('employee_timesheet_ids') + @api.depends("employee_timesheet_ids") def _compute_employee_hours(self): for order in self: order.employee_time_total = 0.0 for line in order.employee_timesheet_ids: order.employee_time_total += line.unit_amount - @api.depends('contractor_cost_ids') + @api.depends("contractor_cost_ids") def _compute_contractor_cost(self): for order in self: order.contractor_total = 0.0 @@ -63,31 +67,39 @@ def _compute_contractor_cost(self): def action_complete(self): for order in self: - order.account_stage = 'review' + order.account_stage = "review" if self.person_id.supplier and not self.contractor_cost_ids: - raise ValidationError(_("Cannot move to Complete " + - "until 'Contractor Costs' is filled in")) + raise ValidationError( + _("Cannot move to Complete " + "until 'Contractor Costs' is filled in") + ) if not self.person_id.supplier and not self.employee_timesheet_ids: - raise ValidationError(_("Cannot move to Complete until " + - "'Employee Timesheets' is filled in")) + raise ValidationError( + _( + "Cannot move to Complete until " + + "'Employee Timesheets' is filled in" + ) + ) return super(FSMOrder, self).action_complete() def create_bills(self): - jrnl = self.env['account.journal'].search([ - ('company_id', '=', self.env.user.company_id.id), - ('type', '=', 'purchase'), - ('active', '=', True)], - limit=1) + jrnl = self.env["account.journal"].search( + [ + ("company_id", "=", self.env.user.company_id.id), + ("type", "=", "purchase"), + ("active", "=", True), + ], + limit=1, + ) fpos = self.customer_id.property_account_position_id vals = { - 'partner_id': self.person_id.partner_id.id, - 'type': 'in_invoice', - 'journal_id': jrnl.id or False, - 'fiscal_position_id': fpos.id or False, - 'fsm_order_ids': [(4, self.id)], - 'company_id': self.env.user.company_id.id + "partner_id": self.person_id.partner_id.id, + "type": "in_invoice", + "journal_id": jrnl.id or False, + "fiscal_position_id": fpos.id or False, + "fsm_order_ids": [(4, self.id)], + "company_id": self.env.user.company_id.id, } - bill = self.env['account.invoice'].sudo().create(vals) + bill = self.env["account.invoice"].sudo().create(vals) for line in self.contractor_cost_ids: line.invoice_id = bill bill.compute_taxes() @@ -98,91 +110,99 @@ def account_confirm(self): if order.contractor_cost_ids: if contractor: order.create_bills() - order.account_stage = 'confirmed' + order.account_stage = "confirmed" else: - raise ValidationError(_("The worker assigned to this order" - " is not a supplier")) + raise ValidationError( + _("The worker assigned to this order" " is not a supplier") + ) if order.employee_timesheet_ids: - order.account_stage = 'confirmed' + order.account_stage = "confirmed" def account_create_invoice(self): - jrnl = self.env['account.journal'].search([ - ('company_id', '=', self.env.user.company_id.id), - ('type', '=', 'sale'), - ('active', '=', True)], - limit=1) - if self.bill_to == 'contact': + jrnl = self.env["account.journal"].search( + [ + ("company_id", "=", self.env.user.company_id.id), + ("type", "=", "sale"), + ("active", "=", True), + ], + limit=1, + ) + if self.bill_to == "contact": if not self.customer_id: raise ValidationError(_("Contact empty")) fpos = self.customer_id.property_account_position_id vals = { - 'partner_id': self.customer_id.id, - 'type': 'out_invoice', - 'journal_id': jrnl.id or False, - 'fiscal_position_id': fpos.id or False, - 'fsm_order_ids': [(4, self.id)], + "partner_id": self.customer_id.id, + "type": "out_invoice", + "journal_id": jrnl.id or False, + "fiscal_position_id": fpos.id or False, + "fsm_order_ids": [(4, self.id)], } - invoice = self.env['account.invoice'].sudo().create(vals) + invoice = self.env["account.invoice"].sudo().create(vals) price_list = invoice.partner_id.property_product_pricelist else: fpos = self.location_id.customer_id.property_account_position_id vals = { - 'partner_id': self.location_id.customer_id.id, - 'type': 'out_invoice', - 'journal_id': jrnl.id or False, - 'fiscal_position_id': fpos.id or False, - 'fsm_order_ids': [(4, self.id)], - 'company_id': self.env.user.company_id.id + "partner_id": self.location_id.customer_id.id, + "type": "out_invoice", + "journal_id": jrnl.id or False, + "fiscal_position_id": fpos.id or False, + "fsm_order_ids": [(4, self.id)], + "company_id": self.env.user.company_id.id, } - invoice = self.env['account.invoice'].sudo().create(vals) + invoice = self.env["account.invoice"].sudo().create(vals) price_list = invoice.partner_id.property_product_pricelist for cost in self.contractor_cost_ids: - price = price_list.get_product_price(product=cost.product_id, - quantity=cost.quantity, - partner=invoice.partner_id, - date=False, - uom_id=False) + price = price_list.get_product_price( + product=cost.product_id, + quantity=cost.quantity, + partner=invoice.partner_id, + date=False, + uom_id=False, + ) template = cost.product_id.product_tmpl_id accounts = template.get_product_accounts() - account = accounts['income'] + account = accounts["income"] vals = { - 'product_id': cost.product_id.id, - 'account_analytic_id': cost.account_analytic_id.id, - 'quantity': cost.quantity, - 'name': cost.name, - 'price_unit': price, - 'account_id': account.id, - 'invoice_id': invoice.id, - 'fsm_order_id': self.id, + "product_id": cost.product_id.id, + "account_analytic_id": cost.account_analytic_id.id, + "quantity": cost.quantity, + "name": cost.name, + "price_unit": price, + "account_id": account.id, + "invoice_id": invoice.id, + "fsm_order_id": self.id, } - con_cost = self.env['account.invoice.line'].create(vals) + con_cost = self.env["account.invoice.line"].create(vals) taxes = template.taxes_id con_cost.invoice_line_tax_ids = fpos.map_tax(taxes) for line in self.employee_timesheet_ids: - price = price_list.get_product_price(product=line.product_id, - quantity=line.unit_amount, - partner=invoice.partner_id, - date=False, - uom_id=False) + price = price_list.get_product_price( + product=line.product_id, + quantity=line.unit_amount, + partner=invoice.partner_id, + date=False, + uom_id=False, + ) template = line.product_id.product_tmpl_id accounts = template.get_product_accounts() - account = accounts['income'] + account = accounts["income"] vals = { - 'product_id': line.product_id.id, - 'account_analytic_id': line.account_id.id, - 'quantity': line.unit_amount, - 'name': line.name, - 'price_unit': price, - 'account_id': account.id, - 'invoice_id': invoice.id, - 'fsm_order_id': self.id, + "product_id": line.product_id.id, + "account_analytic_id": line.account_id.id, + "quantity": line.unit_amount, + "name": line.name, + "price_unit": price, + "account_id": account.id, + "invoice_id": invoice.id, + "fsm_order_id": self.id, } - time_cost = self.env['account.invoice.line'].create(vals) + time_cost = self.env["account.invoice.line"].create(vals) taxes = template.taxes_id time_cost.invoice_line_tax_ids = fpos.map_tax(taxes) invoice.compute_taxes() - self.account_stage = 'invoiced' + self.account_stage = "invoiced" return invoice def account_no_invoice(self): - self.account_stage = 'no' + self.account_stage = "no" diff --git a/fieldservice_isp_account/models/fsm_person.py b/fieldservice_isp_account/models/fsm_person.py index 1b75acfaa6..49ea2a9cc7 100644 --- a/fieldservice_isp_account/models/fsm_person.py +++ b/fieldservice_isp_account/models/fsm_person.py @@ -5,25 +5,25 @@ class FSMPerson(models.Model): - _inherit = 'fsm.person' + _inherit = "fsm.person" - bill_count = fields.Integer(string='Vendor Bills', - compute='_compute_vendor_bills') + bill_count = fields.Integer(string="Vendor Bills", compute="_compute_vendor_bills") def _compute_vendor_bills(self): - self.bill_count = self.env['account.invoice'].search_count([ - ('partner_id', '=', self.partner_id.id)]) + self.bill_count = self.env["account.invoice"].search_count( + [("partner_id", "=", self.partner_id.id)] + ) @api.multi def action_view_bills(self): for bill in self: - action = self.env.ref('account.action_invoice_tree1').read()[0] - vendor_bills = self.env['account.invoice'].search( - [('partner_id', '=', bill.partner_id.id)]) + action = self.env.ref("account.action_invoice_tree1").read()[0] + vendor_bills = self.env["account.invoice"].search( + [("partner_id", "=", bill.partner_id.id)] + ) if len(vendor_bills) == 1: - action['views'] = [ - (self.env.ref('account.invoice_form').id, 'form')] - action['res_id'] = vendor_bills.id + action["views"] = [(self.env.ref("account.invoice_form").id, "form")] + action["res_id"] = vendor_bills.id else: - action['domain'] = [('id', 'in', vendor_bills.ids)] + action["domain"] = [("id", "in", vendor_bills.ids)] return action diff --git a/fieldservice_isp_account/tests/test_isp_account.py b/fieldservice_isp_account/tests/test_isp_account.py index a12cc2de8d..8347ca24a8 100644 --- a/fieldservice_isp_account/tests/test_isp_account.py +++ b/fieldservice_isp_account/tests/test_isp_account.py @@ -2,39 +2,39 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) from odoo import fields -from odoo.addons.fieldservice_account.tests.test_fsm_account import ( - FSMAccountCase -) from odoo.exceptions import ValidationError +from odoo.addons.fieldservice_account.tests.test_fsm_account import FSMAccountCase -class FSMAccountCase(FSMAccountCase): +class FSMAccountCase(FSMAccountCase): def setUp(self): super(FSMAccountCase, self).setUp() - self.test_person = self.env['fsm.person'].create({'name': 'Worker-1'}) - self.test_analytic = self.env.ref('analytic.analytic_administratif') - self.account_id = self.env['account.account'].create({ - 'code': 'NC1110', - 'name': 'Test Payable Account', - 'user_type_id': - self.env.ref('account.data_account_type_payable').id, - 'reconcile': True - }) + self.test_person = self.env["fsm.person"].create({"name": "Worker-1"}) + self.test_analytic = self.env.ref("analytic.analytic_administratif") + self.account_id = self.env["account.account"].create( + { + "code": "NC1110", + "name": "Test Payable Account", + "user_type_id": self.env.ref("account.data_account_type_payable").id, + "reconcile": True, + } + ) def _create_workorder(self, bill_to, contractors, timesheets): # Create a new work order - contractors = self.env['account.invoice.line'].create(contractors) - timesheets = self.env['account.analytic.line'].create(timesheets) + contractors = self.env["account.invoice.line"].create(contractors) + timesheets = self.env["account.analytic.line"].create(timesheets) - order = self.env['fsm.order'].\ - create({ - 'location_id': self.test_location.id, - 'bill_to': bill_to, - 'person_id': self.test_person.id, - 'contractor_cost_ids': [(6, 0, contractors.ids)], - 'employee_timesheet_ids': [(6, 0, timesheets.ids)] - }) + order = self.env["fsm.order"].create( + { + "location_id": self.test_location.id, + "bill_to": bill_to, + "person_id": self.test_person.id, + "contractor_cost_ids": [(6, 0, contractors.ids)], + "employee_timesheet_ids": [(6, 0, timesheets.ids)], + } + ) order.person_ids += self.test_person return order @@ -42,38 +42,40 @@ def _process_order_to_invoices(self, order): # Change states order.date_start = fields.Datetime.today() order.date_end = fields.Datetime.today() - order.resolution = 'Done something!' + order.resolution = "Done something!" order.action_complete() - self.assertEqual(order.account_stage, 'review') + self.assertEqual(order.account_stage, "review") # Create vendor bill # Vendor bill created from order's contractor if not order.person_id.partner_id.supplier: with self.assertRaises(ValidationError) as e: order.account_confirm() self.assertEqual( - e.exception.name, - "The worker assigned to this order is not a supplier") + e.exception.name, "The worker assigned to this order is not a supplier" + ) order.person_id.partner_id.supplier = True order.account_confirm() - self.assertEqual(order.account_stage, 'confirmed') - bill = self.AccountInvoice.search([('type', '=', 'in_invoice'), - ('fsm_order_id', '=', order.id)]) + self.assertEqual(order.account_stage, "confirmed") + bill = self.AccountInvoice.search( + [("type", "=", "in_invoice"), ("fsm_order_id", "=", order.id)] + ) self.assertEqual(len(bill), 1) - self.assertEqual(len(order.contractor_cost_ids), - len(bill.invoice_line_ids)) + self.assertEqual(len(order.contractor_cost_ids), len(bill.invoice_line_ids)) # Customer invoice created from order's contractor and timehsheet - if order.bill_to == 'contact' and not order.customer_id: + if order.bill_to == "contact" and not order.customer_id: with self.assertRaises(ValidationError): order.account_create_invoice() order.customer_id = self.test_loc_partner # Assign some partner order.account_create_invoice() - self.assertEqual(order.account_stage, 'invoiced') - invoice = self.AccountInvoice.search([('type', '=', 'out_invoice'), - ('fsm_order_id', '=', order.id)]) + self.assertEqual(order.account_stage, "invoiced") + invoice = self.AccountInvoice.search( + [("type", "=", "out_invoice"), ("fsm_order_id", "=", order.id)] + ) self.assertEqual(len(invoice), 1) self.assertEqual( len(order.contractor_cost_ids) + len(order.employee_timesheet_ids), - len(invoice.invoice_line_ids)) + len(invoice.invoice_line_ids), + ) return (bill, invoice) def test_fsm_order_exception(self): @@ -86,23 +88,22 @@ def test_fsm_order_exception(self): # Setup required data self.test_location.analytic_account_id = self.test_analytic # Create a new work order with contract = 500 and timesheet = 300 - self.env.ref('hr.employee_qdp').timesheet_cost = 20.0 - order = self.env['fsm.order'].\ - create({ - 'location_id': self.test_location.id, - 'person_id': self.test_person.id, - }) + self.env.ref("hr.employee_qdp").timesheet_cost = 20.0 + order = self.env["fsm.order"].create( + {"location_id": self.test_location.id, "person_id": self.test_person.id} + ) order.person_id = self.test_person order.person_ids += self.test_person order.date_start = fields.Datetime.today() order.date_end = fields.Datetime.today() - order.resolution = 'Done something!' + order.resolution = "Done something!" with self.assertRaises(ValidationError) as e: order.action_complete() - self.assertEqual(e.exception.name, - "Cannot move to Complete until " - "'Employee Timesheets' is filled in") + self.assertEqual( + e.exception.name, + "Cannot move to Complete until " "'Employee Timesheets' is filled in", + ) def test_fsm_order_bill_to_location(self): """Bill To Location, @@ -110,25 +111,35 @@ def test_fsm_order_bill_to_location(self): """ # Setup required data self.test_location.analytic_account_id = self.test_analytic - contractors = [{'name': 'contractor_line_1', - 'product_id': self.env.ref('product.expense_hotel').id, - 'account_id': self.account_id.id, - 'quantity': 2, - 'price_unit': 200}, ] - self.env.ref('hr.employee_qdp').timesheet_cost = 100 - timesheets = [{'name': 'timesheet_line_1', - 'employee_id': self.env.ref('hr.employee_qdp').id, - 'account_id': self.test_analytic.id, - 'product_id': self.env.ref('product.expense_hotel').id, - 'unit_amount': 6}, - {'name': 'timesheet_line_2', - 'employee_id': self.env.ref('hr.employee_qdp').id, - 'account_id': self.test_analytic.id, - 'product_id': self.env.ref('product.expense_hotel').id, - 'unit_amount': 4}, ] - order = self._create_workorder(bill_to='location', - contractors=contractors, - timesheets=timesheets) + contractors = [ + { + "name": "contractor_line_1", + "product_id": self.env.ref("product.expense_hotel").id, + "account_id": self.account_id.id, + "quantity": 2, + "price_unit": 200, + }, + ] + self.env.ref("hr.employee_qdp").timesheet_cost = 100 + timesheets = [ + { + "name": "timesheet_line_1", + "employee_id": self.env.ref("hr.employee_qdp").id, + "account_id": self.test_analytic.id, + "product_id": self.env.ref("product.expense_hotel").id, + "unit_amount": 6, + }, + { + "name": "timesheet_line_2", + "employee_id": self.env.ref("hr.employee_qdp").id, + "account_id": self.test_analytic.id, + "product_id": self.env.ref("product.expense_hotel").id, + "unit_amount": 4, + }, + ] + order = self._create_workorder( + bill_to="location", contractors=contractors, timesheets=timesheets + ) order._compute_contractor_cost() order._compute_employee_hours() order._compute_total_cost() @@ -147,25 +158,35 @@ def test_fsm_order_bill_to_contact(self): # Setup required data self.test_location.analytic_account_id = self.test_analytic # Create a new work order with contract = 500 and timesheet = 300 - contractors = [{'name': 'contractor_line_2', - 'product_id': self.env.ref('product.expense_hotel').id, - 'account_id': self.account_id.id, - 'quantity': 2, - 'price_unit': 100}, - {'name': 'contractor_line_3', - 'product_id': self.env.ref('product.expense_hotel').id, - 'account_id': self.account_id.id, - 'quantity': 1, - 'price_unit': 300}, ] - self.env.ref('hr.employee_qdp').timesheet_cost = 20.0 - timesheets = [{'name': 'timesheet_line_3', - 'employee_id': self.env.ref('hr.employee_qdp').id, - 'account_id': self.test_analytic.id, - 'product_id': self.env.ref('product.expense_hotel').id, - 'unit_amount': 10}, ] - order = self._create_workorder(bill_to='contact', - contractors=contractors, - timesheets=timesheets) + contractors = [ + { + "name": "contractor_line_2", + "product_id": self.env.ref("product.expense_hotel").id, + "account_id": self.account_id.id, + "quantity": 2, + "price_unit": 100, + }, + { + "name": "contractor_line_3", + "product_id": self.env.ref("product.expense_hotel").id, + "account_id": self.account_id.id, + "quantity": 1, + "price_unit": 300, + }, + ] + self.env.ref("hr.employee_qdp").timesheet_cost = 20.0 + timesheets = [ + { + "name": "timesheet_line_3", + "employee_id": self.env.ref("hr.employee_qdp").id, + "account_id": self.test_analytic.id, + "product_id": self.env.ref("product.expense_hotel").id, + "unit_amount": 10, + }, + ] + order = self._create_workorder( + bill_to="contact", contractors=contractors, timesheets=timesheets + ) order._compute_contractor_cost() order._compute_employee_hours() order._compute_total_cost() diff --git a/fieldservice_isp_account/views/account.xml b/fieldservice_isp_account/views/account.xml index 3e7aeb49e5..20ab239899 100644 --- a/fieldservice_isp_account/views/account.xml +++ b/fieldservice_isp_account/views/account.xml @@ -1,29 +1,28 @@ - Service Orders fsm.order form tree,form - +

    No Field Service Orders to review.

    - - - - - + +
    diff --git a/fieldservice_isp_account/views/fsm_order.xml b/fieldservice_isp_account/views/fsm_order.xml index fb57aa3643..2563e4e60c 100644 --- a/fieldservice_isp_account/views/fsm_order.xml +++ b/fieldservice_isp_account/views/fsm_order.xml @@ -1,92 +1,117 @@ - fsm.order.form.isp.account fsm.order - +
    -
    - - - - - - - + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - - + +
    - fsm.order.search fsm.order - + - + -
    diff --git a/fieldservice_isp_account/views/fsm_person.xml b/fieldservice_isp_account/views/fsm_person.xml index 0f2a42a1a5..37f0116cae 100644 --- a/fieldservice_isp_account/views/fsm_person.xml +++ b/fieldservice_isp_account/views/fsm_person.xml @@ -1,21 +1,20 @@ - fsm.person.form.isp.account fsm.person - +
    -
    -
    diff --git a/fieldservice_isp_account/views/hr_timesheet.xml b/fieldservice_isp_account/views/hr_timesheet.xml index 25ebf8b849..e49a277dae 100644 --- a/fieldservice_isp_account/views/hr_timesheet.xml +++ b/fieldservice_isp_account/views/hr_timesheet.xml @@ -1,36 +1,39 @@ - - My Timesheets - account.analytic.line - tree,form - [('user_id', '=', uid)] - { + My Timesheets + account.analytic.line + tree,form + [('user_id', '=', uid)] + { "search_default_week":1, } - - -

    + + +

    Record a new activity -

    +

    +

    You can register and track your workings hours by project every day. Every time spent on a project will become a cost and can be re-invoiced to customers if required.

    -
    -
    - - - - account.analytic.line.timesheet.user - - - [('user_id', '=', user.id), ('project_id', '!=', False)] - - - - - - - +
    +
    + + + account.analytic.line.timesheet.user + + + [('user_id', '=', user.id), ('project_id', '!=', False)] + + + + + + From 00e86234195412a41000ffed28e775f5574f9803 Mon Sep 17 00:00:00 2001 From: Benoit Aimont Date: Wed, 28 Apr 2021 09:57:44 +0200 Subject: [PATCH 352/631] [MIG] fieldservice_isp_account: Migration to 13.0 --- fieldservice_isp_account/README.rst | 14 +- fieldservice_isp_account/__manifest__.py | 3 +- fieldservice_isp_account/i18n/es_AR.po | 6 +- fieldservice_isp_account/i18n/es_CL.po | 6 +- .../i18n/fieldservice_isp_account.pot | 6 +- fieldservice_isp_account/i18n/pt_BR.po | 6 +- fieldservice_isp_account/models/__init__.py | 2 +- .../models/account_invoice_line.py | 39 ------ fieldservice_isp_account/models/fsm_order.py | 131 ++++++++++++------ .../models/fsm_order_cost.py | 24 ++++ fieldservice_isp_account/models/fsm_person.py | 9 +- .../security/fsm_order_cost.xml | 23 +++ .../static/description/index.html | 6 +- .../tests/test_isp_account.py | 69 +++++---- fieldservice_isp_account/views/account.xml | 1 - fieldservice_isp_account/views/fsm_order.xml | 22 ++- 16 files changed, 209 insertions(+), 158 deletions(-) delete mode 100644 fieldservice_isp_account/models/account_invoice_line.py create mode 100644 fieldservice_isp_account/models/fsm_order_cost.py create mode 100644 fieldservice_isp_account/security/fsm_order_cost.xml diff --git a/fieldservice_isp_account/README.rst b/fieldservice_isp_account/README.rst index cb1c58ed6b..5b7501afeb 100644 --- a/fieldservice_isp_account/README.rst +++ b/fieldservice_isp_account/README.rst @@ -14,16 +14,16 @@ Field Service - ISP Accounting :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/12.0/fieldservice_isp_account + :target: https://github.com/OCA/field-service/tree/13.0/fieldservice_isp_account :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-12-0/field-service-12-0-fieldservice_isp_account + :target: https://translation.odoo-community.org/projects/field-service-13-0/field-service-13-0-fieldservice_isp_account :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/12.0 + :target: https://runbot.odoo-community.org/runbot/264/13.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module adds the ability to track employee time and contractor costs for Field Service Orders. It also adds functionality to create @@ -67,7 +67,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -118,8 +118,8 @@ promote its widespread use. Current `maintainers `__: -|maintainer-osimallen| |maintainer-brian10048| |maintainer-bodedra| +|maintainer-osimallen| |maintainer-brian10048| |maintainer-bodedra| -This module is part of the `OCA/field-service `_ project on GitHub. +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_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 55cc326f83..3c0f211449 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ "name": "Field Service - ISP Accounting", "summary": """Invoice Field Service orders based on employee time or contractor costs""", - "version": "12.0.2.3.2", + "version": "13.0.1.0.0", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", "website": "https://github.com/OCA/field-service", @@ -15,6 +15,7 @@ "hr_timesheet", ], "data": [ + "security/fsm_order_cost.xml", "security/ir.model.access.csv", "data/time_products.xml", "views/account.xml", diff --git a/fieldservice_isp_account/i18n/es_AR.po b/fieldservice_isp_account/i18n/es_AR.po index 2c5c799966..32b7a899ee 100644 --- a/fieldservice_isp_account/i18n/es_AR.po +++ b/fieldservice_isp_account/i18n/es_AR.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2020-07-21 05:19+0000\n" "Last-Translator: Ignacio Buioli \n" @@ -128,7 +128,7 @@ msgid "Hour(s)" msgstr "Hora(s)" #. module: fieldservice_isp_account -#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +#: model:ir.model,name:fieldservice_isp_account.model_account_move_line msgid "Invoice Line" msgstr "Línea de Factura" @@ -167,7 +167,7 @@ msgstr "" " " #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#: code:addons/fieldservice_isp_account/models/account_move_line.py:19 #, python-format msgid "Please set the field service worker." msgstr "Por favor configure el trabajador de servicio de campo." diff --git a/fieldservice_isp_account/i18n/es_CL.po b/fieldservice_isp_account/i18n/es_CL.po index 8c1be242e8..25b3c15534 100644 --- a/fieldservice_isp_account/i18n/es_CL.po +++ b/fieldservice_isp_account/i18n/es_CL.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2020-01-16 22:38+0000\n" "Last-Translator: Nelson Ramírez Sánchez \n" @@ -128,7 +128,7 @@ msgid "Hour(s)" msgstr "" #. module: fieldservice_isp_account -#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +#: model:ir.model,name:fieldservice_isp_account.model_account_move_line msgid "Invoice Line" msgstr "" @@ -165,7 +165,7 @@ msgid "Overtime for Field Service Employees\n" msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#: code:addons/fieldservice_isp_account/models/account_move_line.py:19 #, python-format msgid "Please set the field service worker." msgstr "" diff --git a/fieldservice_isp_account/i18n/fieldservice_isp_account.pot b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot index c633f9becc..8c87b45cf6 100644 --- a/fieldservice_isp_account/i18n/fieldservice_isp_account.pot +++ b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -121,7 +121,7 @@ msgid "Hour(s)" msgstr "" #. module: fieldservice_isp_account -#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +#: model:ir.model,name:fieldservice_isp_account.model_account_move_line msgid "Invoice Line" msgstr "" @@ -158,7 +158,7 @@ msgid "Overtime for Field Service Employees\n" msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#: code:addons/fieldservice_isp_account/models/account_move_line.py:19 #, python-format msgid "Please set the field service worker." msgstr "" diff --git a/fieldservice_isp_account/i18n/pt_BR.po b/fieldservice_isp_account/i18n/pt_BR.po index bcf8c1ad34..907151e7dc 100644 --- a/fieldservice_isp_account/i18n/pt_BR.po +++ b/fieldservice_isp_account/i18n/pt_BR.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2020-06-17 16:19+0000\n" "Last-Translator: Fernando Colus \n" @@ -128,7 +128,7 @@ msgid "Hour(s)" msgstr "Hora(s)" #. module: fieldservice_isp_account -#: model:ir.model,name:fieldservice_isp_account.model_account_invoice_line +#: model:ir.model,name:fieldservice_isp_account.model_account_move_line msgid "Invoice Line" msgstr "Linha de Fatura" @@ -167,7 +167,7 @@ msgstr "" " " #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/account_invoice_line.py:19 +#: code:addons/fieldservice_isp_account/models/account_move_line.py:19 #, python-format msgid "Please set the field service worker." msgstr "Por favor, selecione o trabalhador do serviço de campo." diff --git a/fieldservice_isp_account/models/__init__.py b/fieldservice_isp_account/models/__init__.py index 19e859522b..a2be44257e 100644 --- a/fieldservice_isp_account/models/__init__.py +++ b/fieldservice_isp_account/models/__init__.py @@ -1,7 +1,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ( - account_invoice_line, fsm_order, fsm_person, ) +from . import fsm_order_cost diff --git a/fieldservice_isp_account/models/account_invoice_line.py b/fieldservice_isp_account/models/account_invoice_line.py deleted file mode 100644 index 9a59be9fc0..0000000000 --- a/fieldservice_isp_account/models/account_invoice_line.py +++ /dev/null @@ -1,39 +0,0 @@ -# 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 AccountInvoiceLine(models.Model): - _inherit = "account.invoice.line" - - @api.onchange("product_id", "quantity") - def onchange_product_id(self): - for line in self: - if line.fsm_order_id: - partner = ( - line.fsm_order_id.person_id - and line.fsm_order_id.person_id.partner_id - or False - ) - if not partner: - raise ValidationError(_("Please set the field service worker.")) - fpos = partner.property_account_position_id - tmpl = line.product_id.product_tmpl_id - if line.product_id: - accounts = tmpl.get_product_accounts() - supinfo = self.env["product.supplierinfo"].search( - [ - ("name", "=", partner.id), - ("product_tmpl_id", "=", tmpl.id), - ("min_qty", "<=", line.quantity), - ], - order="min_qty DESC", - ) - line.price_unit = ( - supinfo and supinfo[0].price or tmpl.standard_price - ) - line.account_id = accounts.get("expense", False) - line.invoice_line_tax_ids = fpos.map_tax(tmpl.supplier_taxes_id) - line.name = line.product_id.name diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py index 81c3af3aa1..68762b024e 100644 --- a/fieldservice_isp_account/models/fsm_order.py +++ b/fieldservice_isp_account/models/fsm_order.py @@ -17,7 +17,7 @@ class FSMOrder(models.Model): _inherit = "fsm.order" contractor_cost_ids = fields.One2many( - "account.invoice.line", "fsm_order_id", string="Contractor Costs" + "fsm.order.cost", "fsm_order_id", string="Contractor Costs" ) employee_timesheet_ids = fields.One2many( "account.analytic.line", "fsm_order_id", string="Employee Timesheets" @@ -38,6 +38,8 @@ def _compute_employee(self): for order in self: if user.employee_ids: order.employee = True + else: + order.employee = False @api.depends("employee_timesheet_ids", "contractor_cost_ids") def _compute_total_cost(self): @@ -68,11 +70,11 @@ def _compute_contractor_cost(self): def action_complete(self): for order in self: order.account_stage = "review" - if self.person_id.supplier and not self.contractor_cost_ids: + if self.person_id.supplier_rank and not self.contractor_cost_ids: raise ValidationError( _("Cannot move to Complete " + "until 'Contractor Costs' is filled in") ) - if not self.person_id.supplier and not self.employee_timesheet_ids: + if not self.person_id.supplier_rank and not self.employee_timesheet_ids: raise ValidationError( _( "Cannot move to Complete until " @@ -84,29 +86,51 @@ def action_complete(self): def create_bills(self): jrnl = self.env["account.journal"].search( [ - ("company_id", "=", self.env.user.company_id.id), + ("company_id", "=", self.env.company.id), ("type", "=", "purchase"), ("active", "=", True), ], limit=1, ) - fpos = self.customer_id.property_account_position_id + fpos = self.person_id.partner_id.property_account_position_id + invoice_line_vals = [] + for cost in self.contractor_cost_ids: + template = cost.product_id.product_tmpl_id + accounts = template.get_product_accounts() + account = accounts["expense"] + taxes = template.supplier_taxes_id + tax_ids = fpos.map_tax(taxes) + invoice_line_vals.append( + ( + 0, + 0, + { + "analytic_account_id": self.location_id.analytic_account_id.id, + "product_id": cost.product_id.id, + "quantity": cost.quantity, + "name": cost.product_id.display_name, + "price_unit": cost.price_unit, + "account_id": account.id, + "fsm_order_ids": [(4, self.id)], + "tax_ids": [(6, 0, tax_ids.ids)], + }, + ) + ) vals = { "partner_id": self.person_id.partner_id.id, "type": "in_invoice", "journal_id": jrnl.id or False, "fiscal_position_id": fpos.id or False, "fsm_order_ids": [(4, self.id)], - "company_id": self.env.user.company_id.id, + "company_id": self.env.company.id, + "invoice_line_ids": invoice_line_vals, } - bill = self.env["account.invoice"].sudo().create(vals) - for line in self.contractor_cost_ids: - line.invoice_id = bill - bill.compute_taxes() + bill = self.env["account.move"].sudo().create(vals) + bill._recompute_tax_lines() def account_confirm(self): for order in self: - contractor = order.person_id.partner_id.supplier + contractor = order.person_id.partner_id.supplier_rank if order.contractor_cost_ids: if contractor: order.create_bills() @@ -121,7 +145,7 @@ def account_confirm(self): def account_create_invoice(self): jrnl = self.env["account.journal"].search( [ - ("company_id", "=", self.env.user.company_id.id), + ("company_id", "=", self.env.company.id), ("type", "=", "sale"), ("active", "=", True), ], @@ -131,76 +155,91 @@ def account_create_invoice(self): if not self.customer_id: raise ValidationError(_("Contact empty")) fpos = self.customer_id.property_account_position_id - vals = { + invoice_vals = { "partner_id": self.customer_id.id, "type": "out_invoice", "journal_id": jrnl.id or False, "fiscal_position_id": fpos.id or False, "fsm_order_ids": [(4, self.id)], } - invoice = self.env["account.invoice"].sudo().create(vals) - price_list = invoice.partner_id.property_product_pricelist + price_list = self.customer_id.property_product_pricelist + else: fpos = self.location_id.customer_id.property_account_position_id - vals = { + invoice_vals = { "partner_id": self.location_id.customer_id.id, "type": "out_invoice", "journal_id": jrnl.id or False, "fiscal_position_id": fpos.id or False, "fsm_order_ids": [(4, self.id)], - "company_id": self.env.user.company_id.id, + "company_id": self.env.company.id, } - invoice = self.env["account.invoice"].sudo().create(vals) - price_list = invoice.partner_id.property_product_pricelist + price_list = self.location_id.customer_id.property_product_pricelist + + invoice_line_vals = [] for cost in self.contractor_cost_ids: price = price_list.get_product_price( product=cost.product_id, quantity=cost.quantity, - partner=invoice.partner_id, + partner=invoice_vals.get("partner_id"), date=False, uom_id=False, ) template = cost.product_id.product_tmpl_id accounts = template.get_product_accounts() account = accounts["income"] - vals = { - "product_id": cost.product_id.id, - "account_analytic_id": cost.account_analytic_id.id, - "quantity": cost.quantity, - "name": cost.name, - "price_unit": price, - "account_id": account.id, - "invoice_id": invoice.id, - "fsm_order_id": self.id, - } - con_cost = self.env["account.invoice.line"].create(vals) taxes = template.taxes_id - con_cost.invoice_line_tax_ids = fpos.map_tax(taxes) + tax_ids = fpos.map_tax(taxes) + invoice_line_vals.append( + ( + 0, + 0, + { + "product_id": cost.product_id.id, + "analytic_account_id": self.location_id.analytic_account_id.id, + "quantity": cost.quantity, + "name": cost.product_id.display_name, + "price_unit": price, + "account_id": account.id, + "fsm_order_ids": [(4, self.id)], + "tax_ids": [(6, 0, tax_ids.ids)], + }, + ) + ) for line in self.employee_timesheet_ids: price = price_list.get_product_price( product=line.product_id, quantity=line.unit_amount, - partner=invoice.partner_id, + partner=invoice_vals.get("partner_id"), date=False, uom_id=False, ) template = line.product_id.product_tmpl_id accounts = template.get_product_accounts() account = accounts["income"] - vals = { - "product_id": line.product_id.id, - "account_analytic_id": line.account_id.id, - "quantity": line.unit_amount, - "name": line.name, - "price_unit": price, - "account_id": account.id, - "invoice_id": invoice.id, - "fsm_order_id": self.id, - } - time_cost = self.env["account.invoice.line"].create(vals) taxes = template.taxes_id - time_cost.invoice_line_tax_ids = fpos.map_tax(taxes) - invoice.compute_taxes() + tax_ids = fpos.map_tax(taxes) + invoice_line_vals.append( + ( + 0, + 0, + { + "product_id": line.product_id.id, + "analytic_account_id": line.account_id.id, + "quantity": line.unit_amount, + "name": line.name, + "price_unit": price, + "account_id": account.id, + "fsm_order_ids": [(4, self.id)], + "tax_ids": [(6, 0, tax_ids.ids)], + }, + ) + ) + + invoice_vals.update({"invoice_line_ids": invoice_line_vals}) + invoice = self.env["account.move"].sudo().create(invoice_vals) + + invoice._recompute_tax_lines() self.account_stage = "invoiced" return invoice diff --git a/fieldservice_isp_account/models/fsm_order_cost.py b/fieldservice_isp_account/models/fsm_order_cost.py new file mode 100644 index 0000000000..1eff39731e --- /dev/null +++ b/fieldservice_isp_account/models/fsm_order_cost.py @@ -0,0 +1,24 @@ +# Copyright 2021 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class FsmOrderCost(models.Model): + + _name = "fsm.order.cost" + _description = "Fsm Order Cost" + + fsm_order_id = fields.Many2one(comodel_name="fsm.order", required=True,) + price_unit = fields.Float(string="Unit Price", required=True,) + quantity = fields.Float(string="Quantity", required=True, default=1,) + product_id = fields.Many2one( + comodel_name="product.product", string="Product", required=True, + ) + + @api.onchange("product_id") + def onchange_product_id(self): + for cost in self: + if not cost.product_id: + continue + cost.price_unit = cost.product_id.standard_price diff --git a/fieldservice_isp_account/models/fsm_person.py b/fieldservice_isp_account/models/fsm_person.py index 49ea2a9cc7..d88787a80a 100644 --- a/fieldservice_isp_account/models/fsm_person.py +++ b/fieldservice_isp_account/models/fsm_person.py @@ -1,7 +1,7 @@ # 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 import fields, models class FSMPerson(models.Model): @@ -10,19 +10,18 @@ class FSMPerson(models.Model): bill_count = fields.Integer(string="Vendor Bills", compute="_compute_vendor_bills") def _compute_vendor_bills(self): - self.bill_count = self.env["account.invoice"].search_count( + self.bill_count = self.env["account.move"].search_count( [("partner_id", "=", self.partner_id.id)] ) - @api.multi def action_view_bills(self): for bill in self: action = self.env.ref("account.action_invoice_tree1").read()[0] - vendor_bills = self.env["account.invoice"].search( + vendor_bills = self.env["account.move"].search( [("partner_id", "=", bill.partner_id.id)] ) if len(vendor_bills) == 1: - action["views"] = [(self.env.ref("account.invoice_form").id, "form")] + action["views"] = [(self.env.ref("account.view_move_form").id, "form")] action["res_id"] = vendor_bills.id else: action["domain"] = [("id", "in", vendor_bills.ids)] diff --git a/fieldservice_isp_account/security/fsm_order_cost.xml b/fieldservice_isp_account/security/fsm_order_cost.xml new file mode 100644 index 0000000000..e8d0ef7fcb --- /dev/null +++ b/fieldservice_isp_account/security/fsm_order_cost.xml @@ -0,0 +1,23 @@ + + + + + fsm.order.cost access base user + + + + + + + + + fsm.order.cost access fieldservice user + + + + + + + + diff --git a/fieldservice_isp_account/static/description/index.html b/fieldservice_isp_account/static/description/index.html index 04cc1226d9..1dab785e80 100644 --- a/fieldservice_isp_account/static/description/index.html +++ b/fieldservice_isp_account/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - ISP Accounting

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    This module adds the ability to track employee time and contractor costs for Field Service Orders. It also adds functionality to create a customer invoice and a vendor bill when a Field Service Order is @@ -413,7 +413,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -448,7 +448,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    osimallen brian10048 bodedra

    -

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

    +

    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_isp_account/tests/test_isp_account.py b/fieldservice_isp_account/tests/test_isp_account.py index 8347ca24a8..cf600c26ac 100644 --- a/fieldservice_isp_account/tests/test_isp_account.py +++ b/fieldservice_isp_account/tests/test_isp_account.py @@ -3,27 +3,42 @@ from odoo import fields from odoo.exceptions import ValidationError +from odoo.tests import SavepointCase -from odoo.addons.fieldservice_account.tests.test_fsm_account import FSMAccountCase - -class FSMAccountCase(FSMAccountCase): - def setUp(self): - super(FSMAccountCase, self).setUp() - self.test_person = self.env["fsm.person"].create({"name": "Worker-1"}) - self.test_analytic = self.env.ref("analytic.analytic_administratif") - self.account_id = self.env["account.account"].create( +class FSMISPAccountCase(SavepointCase): + @classmethod + def setUpClass(cls): + super(FSMISPAccountCase, cls).setUpClass() + cls.AccountMoveLine = cls.env["account.move.line"] + cls.test_person = cls.env["fsm.person"].create({"name": "Worker-1"}) + cls.test_analytic = cls.env.ref("analytic.analytic_administratif") + cls.account_id = cls.env["account.account"].create( { "code": "NC1110", "name": "Test Payable Account", - "user_type_id": self.env.ref("account.data_account_type_payable").id, + "user_type_id": cls.env.ref("account.data_account_type_payable").id, "reconcile": True, } ) + # create a Res Partner to be converted to FSM Location/Person + cls.test_loc_partner = cls.env["res.partner"].create( + {"name": "Test Loc Partner", "phone": "ABC", "email": "tlp@email.com"} + ) + # create expected FSM Location to compare to converted FSM Location + 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, + "customer_id": cls.test_loc_partner.id, + } + ) def _create_workorder(self, bill_to, contractors, timesheets): # Create a new work order - contractors = self.env["account.invoice.line"].create(contractors) timesheets = self.env["account.analytic.line"].create(timesheets) order = self.env["fsm.order"].create( @@ -31,10 +46,13 @@ def _create_workorder(self, bill_to, contractors, timesheets): "location_id": self.test_location.id, "bill_to": bill_to, "person_id": self.test_person.id, - "contractor_cost_ids": [(6, 0, contractors.ids)], "employee_timesheet_ids": [(6, 0, timesheets.ids)], } ) + for contractor in contractors: + contractor.update({"fsm_order_id": order.id}) + contractors = self.env["fsm.order.cost"].create(contractors) + order.write({"contractor_cost_ids": [(6, 0, contractors.ids)]}) order.person_ids += self.test_person return order @@ -47,18 +65,18 @@ def _process_order_to_invoices(self, order): self.assertEqual(order.account_stage, "review") # Create vendor bill # Vendor bill created from order's contractor - if not order.person_id.partner_id.supplier: + if not order.person_id.partner_id.supplier_rank: with self.assertRaises(ValidationError) as e: order.account_confirm() self.assertEqual( e.exception.name, "The worker assigned to this order is not a supplier" ) - order.person_id.partner_id.supplier = True + order.person_id.partner_id.supplier_rank = True order.account_confirm() self.assertEqual(order.account_stage, "confirmed") - bill = self.AccountInvoice.search( - [("type", "=", "in_invoice"), ("fsm_order_id", "=", order.id)] - ) + bill = self.AccountMoveLine.search( + [("fsm_order_ids", "in", order.id)] + ).move_id.filtered(lambda i: i.type == "in_invoice") self.assertEqual(len(bill), 1) self.assertEqual(len(order.contractor_cost_ids), len(bill.invoice_line_ids)) # Customer invoice created from order's contractor and timehsheet @@ -68,9 +86,9 @@ def _process_order_to_invoices(self, order): order.customer_id = self.test_loc_partner # Assign some partner order.account_create_invoice() self.assertEqual(order.account_stage, "invoiced") - invoice = self.AccountInvoice.search( - [("type", "=", "out_invoice"), ("fsm_order_id", "=", order.id)] - ) + invoice = self.AccountMoveLine.search( + [("fsm_order_ids", "in", order.id)] + ).move_id.filtered(lambda i: i.type == "out_invoice") self.assertEqual(len(invoice), 1) self.assertEqual( len(order.contractor_cost_ids) + len(order.employee_timesheet_ids), @@ -113,9 +131,7 @@ def test_fsm_order_bill_to_location(self): self.test_location.analytic_account_id = self.test_analytic contractors = [ { - "name": "contractor_line_1", "product_id": self.env.ref("product.expense_hotel").id, - "account_id": self.account_id.id, "quantity": 2, "price_unit": 200, }, @@ -146,10 +162,9 @@ def test_fsm_order_bill_to_location(self): self.assertEqual(order.contractor_total, 400) self.assertEqual(order.employee_time_total, 10) # Hrs self.assertEqual(order.total_cost, 1400) - # Testing not working "Need to Configure Chart of Accounts" - # bill, invoice = self._process_order_to_invoices(order) - # self.assertEqual(bill.partner_id, order.person_id.partner_id) - # self.assertEqual(invoice.partner_id, order.location_id.customer_id) + bill, invoice = self._process_order_to_invoices(order) + self.assertEqual(bill.partner_id, order.person_id.partner_id) + self.assertEqual(invoice.partner_id, order.location_id.customer_id) def test_fsm_order_bill_to_contact(self): """Bill To Contact, @@ -160,16 +175,12 @@ def test_fsm_order_bill_to_contact(self): # Create a new work order with contract = 500 and timesheet = 300 contractors = [ { - "name": "contractor_line_2", "product_id": self.env.ref("product.expense_hotel").id, - "account_id": self.account_id.id, "quantity": 2, "price_unit": 100, }, { - "name": "contractor_line_3", "product_id": self.env.ref("product.expense_hotel").id, - "account_id": self.account_id.id, "quantity": 1, "price_unit": 300, }, diff --git a/fieldservice_isp_account/views/account.xml b/fieldservice_isp_account/views/account.xml index 20ab239899..d9fd69d762 100644 --- a/fieldservice_isp_account/views/account.xml +++ b/fieldservice_isp_account/views/account.xml @@ -3,7 +3,6 @@ Service Orders fsm.order - form tree,form diff --git a/fieldservice_isp_account/views/fsm_order.xml b/fieldservice_isp_account/views/fsm_order.xml index 2563e4e60c..1625294076 100644 --- a/fieldservice_isp_account/views/fsm_order.xml +++ b/fieldservice_isp_account/views/fsm_order.xml @@ -42,20 +42,9 @@ - - - - - - - + + + @@ -90,6 +79,11 @@ /> + From d7e4a5ed41d5ee92142db2866fdd8f503ef28710 Mon Sep 17 00:00:00 2001 From: Benoit Aimont Date: Mon, 7 Jun 2021 16:47:05 +0200 Subject: [PATCH 353/631] [IMP] a field name customer_id in fieldservice_account_analytic should have a string Customer --- fieldservice_isp_account/models/fsm_order.py | 4 ++-- fieldservice_isp_account/tests/test_isp_account.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fieldservice_isp_account/models/fsm_order.py b/fieldservice_isp_account/models/fsm_order.py index 68762b024e..0e954dd9f9 100644 --- a/fieldservice_isp_account/models/fsm_order.py +++ b/fieldservice_isp_account/models/fsm_order.py @@ -151,9 +151,9 @@ def account_create_invoice(self): ], limit=1, ) - if self.bill_to == "contact": + if self.bill_to == "customer": if not self.customer_id: - raise ValidationError(_("Contact empty")) + raise ValidationError(_("Customer empty")) fpos = self.customer_id.property_account_position_id invoice_vals = { "partner_id": self.customer_id.id, diff --git a/fieldservice_isp_account/tests/test_isp_account.py b/fieldservice_isp_account/tests/test_isp_account.py index cf600c26ac..4e5b7ec76e 100644 --- a/fieldservice_isp_account/tests/test_isp_account.py +++ b/fieldservice_isp_account/tests/test_isp_account.py @@ -80,7 +80,7 @@ def _process_order_to_invoices(self, order): self.assertEqual(len(bill), 1) self.assertEqual(len(order.contractor_cost_ids), len(bill.invoice_line_ids)) # Customer invoice created from order's contractor and timehsheet - if order.bill_to == "contact" and not order.customer_id: + if order.bill_to == "customer" and not order.customer_id: with self.assertRaises(ValidationError): order.account_create_invoice() order.customer_id = self.test_loc_partner # Assign some partner @@ -196,7 +196,7 @@ def test_fsm_order_bill_to_contact(self): }, ] order = self._create_workorder( - bill_to="contact", contractors=contractors, timesheets=timesheets + bill_to="customer", contractors=contractors, timesheets=timesheets ) order._compute_contractor_cost() order._compute_employee_hours() From 793e2a2dbeed4c0611f634233bb145090c65581b Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Wed, 9 Jun 2021 16:46:22 +0530 Subject: [PATCH 354/631] [14.0][FIX] Travis --- fieldservice_isp_account/__manifest__.py | 2 +- .../models/fsm_order_cost.py | 20 +++++++++++++++---- .../odoo/addons/fieldservice_isp_account | 1 + setup/fieldservice_isp_account/setup.py | 6 ++++++ 4 files changed, 24 insertions(+), 5 deletions(-) create mode 120000 setup/fieldservice_isp_account/odoo/addons/fieldservice_isp_account create mode 100644 setup/fieldservice_isp_account/setup.py diff --git a/fieldservice_isp_account/__manifest__.py b/fieldservice_isp_account/__manifest__.py index 3c0f211449..8eeee3e01d 100644 --- a/fieldservice_isp_account/__manifest__.py +++ b/fieldservice_isp_account/__manifest__.py @@ -5,7 +5,7 @@ "name": "Field Service - ISP Accounting", "summary": """Invoice Field Service orders based on employee time or contractor costs""", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", "website": "https://github.com/OCA/field-service", diff --git a/fieldservice_isp_account/models/fsm_order_cost.py b/fieldservice_isp_account/models/fsm_order_cost.py index 1eff39731e..9dca40a230 100644 --- a/fieldservice_isp_account/models/fsm_order_cost.py +++ b/fieldservice_isp_account/models/fsm_order_cost.py @@ -9,11 +9,23 @@ class FsmOrderCost(models.Model): _name = "fsm.order.cost" _description = "Fsm Order Cost" - fsm_order_id = fields.Many2one(comodel_name="fsm.order", required=True,) - price_unit = fields.Float(string="Unit Price", required=True,) - quantity = fields.Float(string="Quantity", required=True, default=1,) + fsm_order_id = fields.Many2one( + comodel_name="fsm.order", + required=True, + ) + price_unit = fields.Float( + string="Unit Price", + required=True, + ) + quantity = fields.Float( + string="Quantity", + required=True, + default=1, + ) product_id = fields.Many2one( - comodel_name="product.product", string="Product", required=True, + comodel_name="product.product", + string="Product", + required=True, ) @api.onchange("product_id") diff --git a/setup/fieldservice_isp_account/odoo/addons/fieldservice_isp_account b/setup/fieldservice_isp_account/odoo/addons/fieldservice_isp_account new file mode 120000 index 0000000000..9914338c7c --- /dev/null +++ b/setup/fieldservice_isp_account/odoo/addons/fieldservice_isp_account @@ -0,0 +1 @@ +../../../../fieldservice_isp_account \ No newline at end of file diff --git a/setup/fieldservice_isp_account/setup.py b/setup/fieldservice_isp_account/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/fieldservice_isp_account/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From d0701917c46025e48b14e4bfa8884ac3ef4b06b3 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 12 Jul 2021 12:16:41 +0000 Subject: [PATCH 355/631] [UPD] Update fieldservice.pot --- fieldservice/i18n/fieldservice.pot | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/fieldservice/i18n/fieldservice.pot b/fieldservice/i18n/fieldservice.pot index 8d29a912f9..7287fb2f4f 100644 --- a/fieldservice/i18n/fieldservice.pot +++ b/fieldservice/i18n/fieldservice.pot @@ -2066,6 +2066,12 @@ msgstr "" msgid "Message for Invoice" msgstr "" +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_warn_msg +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_warn_msg +msgid "Message for Sales Order" +msgstr "" + #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__picking_warn_msg #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__picking_warn_msg @@ -2651,12 +2657,30 @@ msgstr "" msgid "SMS Delivery error" msgstr "" +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_order_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_order_count +msgid "Sale Order Count" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_order_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_order_ids +msgid "Sales Order" +msgstr "" + #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__team_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__team_id msgid "Sales Team" msgstr "" +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_warn +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_warn +msgid "Sales Warnings" +msgstr "" + #. module: fieldservice #: model:ir.model.fields,field_description:fieldservice.field_fsm_location__user_id #: model:ir.model.fields,field_description:fieldservice.field_fsm_person__user_id @@ -2737,8 +2761,10 @@ msgstr "" #. module: fieldservice #: model:ir.model.fields,help:fieldservice.field_fsm_location__invoice_warn #: model:ir.model.fields,help:fieldservice.field_fsm_location__picking_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_location__sale_warn #: model:ir.model.fields,help:fieldservice.field_fsm_person__invoice_warn #: model:ir.model.fields,help:fieldservice.field_fsm_person__picking_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_person__sale_warn msgid "" "Selecting the \"Warning\" option will notify user with the message, " "Selecting \"Blocking Message\" will throw an exception with the message and " From c732f172415faba730d878e385e7c1fff5fd2175 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 12 Jul 2021 12:16:46 +0000 Subject: [PATCH 356/631] [UPD] Update fieldservice_sale.pot --- fieldservice_sale/i18n/fieldservice_sale.pot | 131 +++++++------------ 1 file changed, 50 insertions(+), 81 deletions(-) diff --git a/fieldservice_sale/i18n/fieldservice_sale.pot b/fieldservice_sale/i18n/fieldservice_sale.pot index 9326106b9a..8737075df8 100644 --- a/fieldservice_sale/i18n/fieldservice_sale.pot +++ b/fieldservice_sale/i18n/fieldservice_sale.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale +# * fieldservice_sale # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,48 +20,29 @@ msgstr "" #. module: fieldservice_sale #: model:ir.model.fields,help:fieldservice_sale.field_sale_order_line__qty_delivered_method -msgid "According to product configuration, the delivered quantity can be automatically computed by mechanism :\n" +msgid "" +"According to product configuration, the delivered quantity can be automatically computed by mechanism :\n" " - Manual: the quantity is set manually on the line\n" " - Analytic From expenses: the quantity is the quantity sum from posted expenses\n" " - Timesheet: the quantity is the sum of hours recorded on tasks linked to this sale line\n" " - Stock Moves: the quantity comes from confirmed pickings\n" -"" -msgstr "" - -#. module: fieldservice_sale -#: selection:sale.order.line,qty_delivered_method:0 -msgid "Analytic From Expenses" -msgstr "" - -#. module: fieldservice_sale -#: selection:product.template,field_service_tracking:0 -msgid "Create a recurring order" msgstr "" #. module: fieldservice_sale -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale.selection__product_template__field_service_tracking__sale msgid "Create one FSM order per sale order" msgstr "" #. module: fieldservice_sale -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale.selection__product_template__field_service_tracking__line msgid "Create one FSM order per sale order line" msgstr "" -#. module: fieldservice_sale -#: model:ir.model.fields,field_description:fieldservice_sale.field_fsm_branch__pricelist_id -msgid "Default Pricelist" -msgstr "" - -#. module: fieldservice_sale -#: model:ir.model.fields,help:fieldservice_sale.field_fsm_branch__pricelist_id -msgid "Default pricelist for new customers of this branch." -msgstr "" - #. module: fieldservice_sale #: model:ir.model.fields,help:fieldservice_sale.field_product_product__field_service_tracking #: model:ir.model.fields,help:fieldservice_sale.field_product_template__field_service_tracking -msgid "Determines what happens upon sale order confirmation:\n" +msgid "" +"Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" " - Per Sale Order: One FSM Order will be created for the sale.\n" " - Per Sale Order Line: One FSM Order for each sale order line\n" @@ -69,12 +50,19 @@ msgid "Determines what happens upon sale order confirmation:\n" msgstr "" #. module: fieldservice_sale -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields,field_description:fieldservice_sale.field_product_template__display_name +#: model:ir.model.fields,field_description:fieldservice_sale.field_sale_order__display_name +#: model:ir.model.fields,field_description:fieldservice_sale.field_sale_order_line__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_sale +#: model:ir.model.fields.selection,name:fieldservice_sale.selection__product_template__field_service_tracking__no msgid "Don't create FSM order" msgstr "" #. module: fieldservice_sale -#: code:addons/fieldservice_sale/models/sale_order.py:131 +#: code:addons/fieldservice_sale/models/sale_order.py:0 #, python-format msgid "FSM Location must be set" msgstr "" @@ -85,29 +73,26 @@ msgstr "" msgid "FSM Orders" msgstr "" -#. module: fieldservice_sale -#: model:ir.model,name:fieldservice_sale.model_fsm_location -msgid "Field Service Location" -msgstr "" - #. module: fieldservice_sale #: model:ir.model,name:fieldservice_sale.model_fsm_order -#: selection:sale.order.line,qty_delivered_method:0 +#: model:ir.model.fields.selection,name:fieldservice_sale.selection__sale_order_line__qty_delivered_method__field_service msgid "Field Service Order" msgstr "" #. module: fieldservice_sale -#: code:addons/fieldservice_sale/models/sale_order_line.py:87 +#: code:addons/fieldservice_sale/models/sale_order_line.py:0 #, python-format -msgid "Field Service Order Created (%s): %s\n" " " msgstr "" #. module: fieldservice_sale -#: code:addons/fieldservice_sale/models/sale_order.py:86 +#: code:addons/fieldservice_sale/models/sale_order.py:0 #, python-format -msgid "Field Service Order Created: %s\n" " " msgstr "" @@ -124,7 +109,7 @@ msgid "Field Service Order generated by the sales order item" msgstr "" #. module: fieldservice_sale -#: selection:product.template,service_type:0 +#: model:ir.model.fields.selection,name:fieldservice_sale.selection__product_template__service_type__field msgid "Field Service Orders" msgstr "" @@ -140,19 +125,26 @@ msgid "Field Service orders associated to this sale" msgstr "" #. module: fieldservice_sale -#: selection:sale.order.line,qty_delivered_method:0 -msgid "Manual" +#: model:ir.model.fields,field_description:fieldservice_sale.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice_sale.field_product_template__id +#: model:ir.model.fields,field_description:fieldservice_sale.field_sale_order__id +#: model:ir.model.fields,field_description:fieldservice_sale.field_sale_order_line__id +msgid "ID" msgstr "" #. module: fieldservice_sale -#: selection:product.template,service_type:0 -msgid "Manually set quantities on order" +#: model:ir.model.fields,field_description:fieldservice_sale.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice_sale.field_product_template____last_update +#: model:ir.model.fields,field_description:fieldservice_sale.field_sale_order____last_update +#: model:ir.model.fields,field_description:fieldservice_sale.field_sale_order_line____last_update +msgid "Last Modified on" msgstr "" #. module: fieldservice_sale #: model:ir.model.fields,help:fieldservice_sale.field_product_product__service_type #: model:ir.model.fields,help:fieldservice_sale.field_product_template__service_type -msgid "Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n" +msgid "" +"Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n" "Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n" "Create a task and track hours: Create a task on the sales order validation and track the work hours." msgstr "" @@ -163,6 +155,7 @@ msgid "Method to update delivered qty" msgstr "" #. module: fieldservice_sale +#: model:ir.model.fields,field_description:fieldservice_sale.field_fsm_order__display_name #: model:ir.model.fields,field_description:fieldservice_sale.field_sale_order_line__fsm_order_id msgid "Order" msgstr "" @@ -188,13 +181,13 @@ msgid "Sale Line" msgstr "" #. module: fieldservice_sale -#: model:ir.model,name:fieldservice_sale.model_sale_order -msgid "Sale Order" +#: model_terms:ir.ui.view,arch_db:fieldservice_sale.fsm_location_form_view +msgid "Sales" msgstr "" #. module: fieldservice_sale -#: model_terms:ir.ui.view,arch_db:fieldservice_sale.fsm_location_form_view -msgid "Sales" +#: model:ir.model,name:fieldservice_sale.model_sale_order +msgid "Sales Order" msgstr "" #. module: fieldservice_sale @@ -203,16 +196,11 @@ msgid "Sales Order Line" msgstr "" #. module: fieldservice_sale -#: code:addons/fieldservice_sale/models/fsm_order.py:21 +#: code:addons/fieldservice_sale/models/fsm_order.py:0 #, python-format msgid "Sales Orders" msgstr "" -#. module: fieldservice_sale -#: model:ir.model.fields,field_description:fieldservice_sale.field_fsm_location__sales_territory_id -msgid "Sales Territory" -msgstr "" - #. module: fieldservice_sale #: model:ir.model.fields,help:fieldservice_sale.field_product_product__fsm_order_template_id #: model:ir.model.fields,help:fieldservice_sale.field_product_template__fsm_order_template_id @@ -225,44 +213,25 @@ msgid "Service Location" msgstr "" #. module: fieldservice_sale -#: selection:sale.order.line,qty_delivered_method:0 -msgid "Stock Moves" -msgstr "" - -#. module: fieldservice_sale -#: code:addons/fieldservice_sale/models/sale_order.py:92 +#: code:addons/fieldservice_sale/models/sale_order.py:0 #, python-format -msgid "This order has been created from: %s\n" " " msgstr "" #. module: fieldservice_sale -#: code:addons/fieldservice_sale/models/sale_order_line.py:93 +#: code:addons/fieldservice_sale/models/sale_order_line.py:0 #, python-format -msgid "This order has been created from: %s (%s)\n" " " msgstr "" -#. module: fieldservice_sale -#: selection:sale.order.line,qty_delivered_method:0 -msgid "Timesheets" -msgstr "" - -#. module: fieldservice_sale -#: selection:product.template,service_type:0 -msgid "Timesheets on project (one fare per SO/Project)" -msgstr "" - #. module: fieldservice_sale #: model:ir.model.fields,field_description:fieldservice_sale.field_product_product__service_type #: model:ir.model.fields,field_description:fieldservice_sale.field_product_template__service_type msgid "Track Service" msgstr "" - -#. module: fieldservice_sale -#: model:ir.model,name:fieldservice_sale.model_fsm_branch -msgid "branch" -msgstr "" - From 3545ce79b1a42a7296b67ec2f3fb18556ecec788 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 12 Jul 2021 12:21:47 +0000 Subject: [PATCH 357/631] [UPD] addons table in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e2be8b7d51..26bb07afbf 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ addon | version | summary [fieldservice_partner_multi_relation](fieldservice_partner_multi_relation/) | 14.0.1.0.0 | Manage relations between contacts, companies and locations [fieldservice_project](fieldservice_project/) | 14.0.1.0.0 | Create field service orders from a project or project task [fieldservice_route](fieldservice_route/) | 14.0.1.0.0 | Organize the routes of each day. +[fieldservice_sale](fieldservice_sale/) | 14.0.1.0.0 | Sell field services. [fieldservice_skill](fieldservice_skill/) | 14.0.1.0.0 | Manage your Field Service workers skills [fieldservice_stock](fieldservice_stock/) | 14.0.1.0.0 | Integrate the logistics operations with Field Service [fieldservice_timeline](fieldservice_timeline/) | 14.0.1.1.1 | This module is a display timeline view of the Field Service order in Odoo. From 589d2cc49569084f3eafb48171300cd059f3387e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 12 Jul 2021 12:21:50 +0000 Subject: [PATCH 358/631] [UPD] README.rst --- fieldservice_sale/static/description/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_sale/static/description/index.html b/fieldservice_sale/static/description/index.html index 3f0825c3a6..b04fdf957f 100644 --- a/fieldservice_sale/static/description/index.html +++ b/fieldservice_sale/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Sales + + +
    +

    Field Service - Stock Equipment

    + + +

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

    +

    This module is an add-on for the Field Service application in Odoo. +It allows you to track your FSM Equipments in stock moves.

    +

    Table of contents

    + +
    +

    Configuration

    +

    Products can be automatically converted into FSM Equipments. +This is only available only for products tracked by serial number. +This needs to be enabled both on Operation Types and Products. +For example, we may want to create the FSM Equipment on Delivery, +or on Receipts.

    +

    To enable on Products:

    +
      +
    • Go to Inventory > Master Data > Products
    • +
    • Open the Product form, Inventory tab
    • +
    • On the “Traceability” section, make sure +“Tracking” is set to “By Unique Serial Number”
    • +
    • Enable the “Creates FSM Equipment” checkbox
    • +
    +

    To enable on Operation Types:

    +
      +
    • Go to Inventory > Configuration > Operation Types
    • +
    • Select the intended Operation Type (“Receipts” for example)
    • +
    • On the “Traceability” section, enable the +“Create FSM Equipment” checkbox
    • +
    +
    +
    +

    Usage

    +

    A completed stock move for a properly configured Product on a configured +stock Operation Type will automatically create a field service equipment.

    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    • Brian McMaster
    • +
    +
    +
    +

    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:

    +

    brian10048 wolfhall max3903 smangukiya

    +

    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_equipment_stock/tests/__init__.py b/fieldservice_equipment_stock/tests/__init__.py new file mode 100644 index 0000000000..50a5826fe6 --- /dev/null +++ b/fieldservice_equipment_stock/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2020 - TODAY, Marcel Savegnago (Escodoo) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import test_fsm_equipment diff --git a/fieldservice_equipment_stock/tests/test_fsm_equipment.py b/fieldservice_equipment_stock/tests/test_fsm_equipment.py new file mode 100644 index 0000000000..c6488b2598 --- /dev/null +++ b/fieldservice_equipment_stock/tests/test_fsm_equipment.py @@ -0,0 +1,44 @@ +# Copyright (C) 2020 - TODAY, Marcel Savegnago (Escodoo) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.tests.common import TransactionCase + + +class TestFSMEquipment(TransactionCase): + + def setUp(self): + super(TestFSMEquipment, self).setUp() + self.Equipment = self.env['fsm.equipment'] + self.stock_location = self.env.ref('stock.stock_location_customers') + + product1 = self.env['product.product'].create({ + 'name': 'Product A', + 'type': 'product', + 'tracking': 'serial', + }) + lot1 = self.env['stock.production.lot'].create({ + 'name': 'serial1', + 'product_id': product1.id, + }) + self.env['stock.quant'].create({ + 'product_id': product1.id, + 'location_id': self.stock_location.id, + 'quantity': 1.0, + 'lot_id': lot1.id, + }) + + self.equipment = self.Equipment.create({ + 'name': 'Equipment 1', + 'product_id': product1.id, + 'lot_id': lot1.id, + 'current_stock_location_id': self.stock_location.id, + }) + + def test_onchange_product(self): + equipment = self.equipment + equipment._onchange_product() + self.assertFalse(equipment.current_stock_location_id) + + def test_compute_current_stock_loc_id(self): + equipment = self.equipment + equipment._compute_current_stock_loc_id() + self.assertTrue(equipment.current_stock_location_id == self.stock_location) diff --git a/fieldservice_equipment_stock/views/fsm_equipment.xml b/fieldservice_equipment_stock/views/fsm_equipment.xml new file mode 100644 index 0000000000..1ce8ae287f --- /dev/null +++ b/fieldservice_equipment_stock/views/fsm_equipment.xml @@ -0,0 +1,33 @@ + + + + + fsm.equipment.form.stock + fsm.equipment + + + + + + + + + + + + + + fsm.equipment.model + fsm.equipment + + + + + + + + diff --git a/fieldservice_equipment_stock/views/product_template.xml b/fieldservice_equipment_stock/views/product_template.xml new file mode 100644 index 0000000000..6b9d6f36e3 --- /dev/null +++ b/fieldservice_equipment_stock/views/product_template.xml @@ -0,0 +1,16 @@ + + + + + product.template + + + + + + + + + diff --git a/fieldservice_equipment_stock/views/stock_picking_type.xml b/fieldservice_equipment_stock/views/stock_picking_type.xml new file mode 100644 index 0000000000..d197e10f6a --- /dev/null +++ b/fieldservice_equipment_stock/views/stock_picking_type.xml @@ -0,0 +1,16 @@ + + + + + stock.picking.type + + + + + + + + + + + diff --git a/fieldservice_equipment_stock/views/stock_production_lot.xml b/fieldservice_equipment_stock/views/stock_production_lot.xml new file mode 100644 index 0000000000..4f23b37cad --- /dev/null +++ b/fieldservice_equipment_stock/views/stock_production_lot.xml @@ -0,0 +1,24 @@ + + + + + stock.production.lot + + + + + + + + + + + + {'search_default_group_by_product': 1, + 'default_product_id': context.get('product_id', False)} + + + + From a651b6f13074f412a46022a116c0134f221eaf20 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 9 Mar 2021 22:53:52 +0000 Subject: [PATCH 363/631] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 fieldservice_equipment_stock/static/description/icon.png diff --git a/fieldservice_equipment_stock/static/description/icon.png b/fieldservice_equipment_stock/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From f90caeb24fbeeaa30961269f3f54866a0285a645 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 12 Jul 2021 17:06:16 +0000 Subject: [PATCH 364/631] [UPD] Update fieldservice_isp_account.pot --- .../i18n/fieldservice_isp_account.pot | 122 +++++++++++++----- 1 file changed, 88 insertions(+), 34 deletions(-) diff --git a/fieldservice_isp_account/i18n/fieldservice_isp_account.pot b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot index 8c87b45cf6..65cd0f0391 100644 --- a/fieldservice_isp_account/i18n/fieldservice_isp_account.pot +++ b/fieldservice_isp_account/i18n/fieldservice_isp_account.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_isp_account +# * fieldservice_isp_account # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,13 +19,13 @@ msgid "Accounting Stage" msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/fsm_order.py:68 +#: code:addons/fieldservice_isp_account/models/fsm_order.py:0 #, python-format msgid "Cannot move to Complete until 'Contractor Costs' is filled in" msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/fsm_order.py:71 +#: code:addons/fieldservice_isp_account/models/fsm_order.py:0 #, python-format msgid "Cannot move to Complete until 'Employee Timesheets' is filled in" msgstr "" @@ -36,16 +36,10 @@ msgid "Confirm" msgstr "" #. module: fieldservice_isp_account -#: selection:fsm.order,account_stage:0 +#: model:ir.model.fields.selection,name:fieldservice_isp_account.selection__fsm_order__account_stage__confirmed msgid "Confirmed" msgstr "" -#. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/fsm_order.py:116 -#, python-format -msgid "Contact empty" -msgstr "" - #. module: fieldservice_isp_account #: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__contractor_total msgid "Contractor Cost Estimate" @@ -63,7 +57,29 @@ msgid "Create Invoice" msgstr "" #. module: fieldservice_isp_account -#: selection:fsm.order,account_stage:0 +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__create_uid +msgid "Created by" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__create_date +msgid "Created on" +msgstr "" + +#. module: fieldservice_isp_account +#: code:addons/fieldservice_isp_account/models/fsm_order.py:0 +#, python-format +msgid "Customer empty" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__display_name +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields.selection,name:fieldservice_isp_account.selection__fsm_order__account_stage__draft msgid "Draft" msgstr "" @@ -109,7 +125,17 @@ msgid "Field Service Worker" msgstr "" #. module: fieldservice_isp_account -#: selection:fsm.order,account_stage:0 +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__fsm_order_id +msgid "Fsm Order" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model,name:fieldservice_isp_account.model_fsm_order_cost +msgid "Fsm Order Cost" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields.selection,name:fieldservice_isp_account.selection__fsm_order__account_stage__invoiced msgid "Fully Invoiced" msgstr "" @@ -117,16 +143,35 @@ msgstr "" #: model:product.template,uom_name:fieldservice_isp_account.field_service_overtime #: model:product.template,uom_name:fieldservice_isp_account.field_service_regular_time #: model:product.template,uom_name:fieldservice_isp_account.field_service_travel_time -msgid "Hour(s)" +msgid "Hours" msgstr "" #. module: fieldservice_isp_account -#: model:ir.model,name:fieldservice_isp_account.model_account_move_line -msgid "Invoice Line" +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__id +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__id +msgid "ID" msgstr "" #. module: fieldservice_isp_account -#: selection:fsm.order,account_stage:0 +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost____last_update +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields.selection,name:fieldservice_isp_account.selection__fsm_order__account_stage__review #: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_order_search_view msgid "Needs Review" msgstr "" @@ -142,7 +187,7 @@ msgid "No Invoice" msgstr "" #. module: fieldservice_isp_account -#: selection:fsm.order,account_stage:0 +#: model:ir.model.fields.selection,name:fieldservice_isp_account.selection__fsm_order__account_stage__no msgid "Nothing Invoiced" msgstr "" @@ -151,21 +196,32 @@ msgstr "" msgid "Operations" msgstr "" +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order__display_name +msgid "Order" +msgstr "" + #. module: fieldservice_isp_account #: model:product.template,description_sale:fieldservice_isp_account.field_service_overtime -msgid "Overtime for Field Service Employees\n" +msgid "" +"Overtime for Field Service Employees\n" " " msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/account_move_line.py:19 -#, python-format -msgid "Please set the field service worker." +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__product_id +msgid "Product" +msgstr "" + +#. module: fieldservice_isp_account +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__quantity +msgid "Quantity" msgstr "" #. module: fieldservice_isp_account #: model:product.template,description_sale:fieldservice_isp_account.field_service_regular_time -msgid "Regular time for Field Service\n" +msgid "" +"Regular time for Field Service\n" " Employees\n" " " msgstr "" @@ -177,7 +233,7 @@ msgid "Service Orders" msgstr "" #. module: fieldservice_isp_account -#: code:addons/fieldservice_isp_account/models/fsm_order.py:103 +#: code:addons/fieldservice_isp_account/models/fsm_order.py:0 #, python-format msgid "The worker assigned to this order is not a supplier" msgstr "" @@ -194,21 +250,19 @@ msgstr "" #. module: fieldservice_isp_account #: model:product.template,description_sale:fieldservice_isp_account.field_service_travel_time -msgid "Travel time for Field Service\n" +msgid "" +"Travel time for Field Service\n" " Employees\n" " " msgstr "" #. module: fieldservice_isp_account -#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count -#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_person_form_isp_account -msgid "Vendor Bills" +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_order_cost__price_unit +msgid "Unit Price" msgstr "" #. module: fieldservice_isp_account -#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_overtime -#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_regular_time -#: model:product.template,weight_uom_name:fieldservice_isp_account.field_service_travel_time -msgid "kg" +#: model:ir.model.fields,field_description:fieldservice_isp_account.field_fsm_person__bill_count +#: model_terms:ir.ui.view,arch_db:fieldservice_isp_account.fsm_person_form_isp_account +msgid "Vendor Bills" msgstr "" - From 176f0e59ca582aa856a99346c5e4381aaff6632b Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 12 Jul 2021 17:11:45 +0000 Subject: [PATCH 365/631] [UPD] addons table in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 26bb07afbf..16d18b9422 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ addon | version | summary [fieldservice_account_analytic](fieldservice_account_analytic/) | 14.0.1.0.0 | Track analytic accounts on Field Service locations and orders [fieldservice_crm](fieldservice_crm/) | 14.0.1.0.0 | Create Field Service orders from the CRM [fieldservice_distribution](fieldservice_distribution/) | 14.0.1.0.0 | Manage your distribution structure +[fieldservice_isp_account](fieldservice_isp_account/) | 14.0.1.0.0 | Invoice Field Service orders based on employee time or contractor costs [fieldservice_isp_flow](fieldservice_isp_flow/) | 14.0.1.0.0 | Field Service workflow for Internet Service Providers [fieldservice_partner_multi_relation](fieldservice_partner_multi_relation/) | 14.0.1.0.0 | Manage relations between contacts, companies and locations [fieldservice_project](fieldservice_project/) | 14.0.1.0.0 | Create field service orders from a project or project task From 1c70755de0e27a55d7846ac0d37d92f3475ede8d Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 12 Jul 2021 17:11:47 +0000 Subject: [PATCH 366/631] [UPD] README.rst --- fieldservice_isp_account/static/description/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_isp_account/static/description/index.html b/fieldservice_isp_account/static/description/index.html index 64c1bc8af0..c29ed6e229 100644 --- a/fieldservice_isp_account/static/description/index.html +++ b/fieldservice_isp_account/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - ISP Accounting + + +
    +

    Field Service Activity

    + + +

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

    +

    A Field Service Activity gives the user the ability to define a list of tasks/activities on a service order

    +

    The user can add tasks/activities to the FSM order to the ones created from the template.

    +

    Table of contents

    + +
    +

    Configuration

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service > Settings > Manage Activites
    • +
    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service
    • +
    • Create or select an FSM Order
    • +
    • Add as many Activites as needed
    • +
    • Alternatively, add Activites to a Template
    • +
    • Add Template to FSM Order, Activites will be copied over
    • +
    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    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:

    +

    max3903 osi-scampbell

    +

    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_activity/tests/__init__.py b/fieldservice_activity/tests/__init__.py new file mode 100644 index 0000000000..f3db523154 --- /dev/null +++ b/fieldservice_activity/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2019, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_fsm_activity diff --git a/fieldservice_activity/tests/test_fsm_activity.py b/fieldservice_activity/tests/test_fsm_activity.py new file mode 100644 index 0000000000..2b24b31076 --- /dev/null +++ b/fieldservice_activity/tests/test_fsm_activity.py @@ -0,0 +1,69 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from datetime import datetime +from odoo.tests.common import TransactionCase, Form +from odoo.exceptions import ValidationError + + +class TestFSMActivity(TransactionCase): + + def setUp(self): + super().setUp() + self.Order = self.env['fsm.order'] + self.test_location = self.env.ref('fieldservice.test_location') + self.Activity = self.env['fsm.activity'] + + def test_fsm_activity(self): + """ Test creating new activites, and moving them along thier stages, + - Don't move FSM Order to complete if Required Activity in 'To Do' + - Check completed_by is saved + - Check completed_on is saved + """ + # Create an Orders + view_id = ('fieldservice.fsm_order_form') + with Form(self.Order, view=view_id) as f: + f.location_id = self.test_location + order = f.save() + order_id = order.id + self.Activity.create(self.get_activity_vals('Activity 1', + False, + 'Ref 1', + order_id)) + self.Activity.create(self.get_activity_vals('Activity 2', + False, + 'Ref 2', + order_id)) + self.Activity.create(self.get_activity_vals('Activity 3', + True, + 'Ref 3', + order_id)) + # Test action_done() + order.order_activity_ids[0].action_done() + self.assertEqual(order.order_activity_ids[0]. + completed_on.replace(microsecond=0), + datetime.now().replace(microsecond=0)) + self.assertEqual(order.order_activity_ids[0].completed_by, + self.env.user) + self.assertEqual(order.order_activity_ids[0].state, + 'done') + # Test action_cancel() + order.order_activity_ids[1].action_cancel() + self.assertEqual(order.order_activity_ids[1].state, + 'cancel') + + # Test Reqired Activity + with self.assertRaises(ValidationError): + order.action_complete() + + order.order_activity_ids[2].action_done() + order.action_complete() + self.assertEqual(order.stage_id.id, + self.env.ref('fieldservice.fsm_stage_completed').id) + + def get_activity_vals(self, name, required, ref, order_id): + return { + 'name': name, + 'required': required, + 'ref': ref, + 'fsm_order_id': order_id + } diff --git a/fieldservice_activity/views/fsm_order.xml b/fieldservice_activity/views/fsm_order.xml new file mode 100644 index 0000000000..fa5142146e --- /dev/null +++ b/fieldservice_activity/views/fsm_order.xml @@ -0,0 +1,30 @@ + + + + + fsm.order.form.activity + fsm.order + + + + + + + + + + + + + + + + + + + + + + From 7ae30b6af1b53d25c8e402835049ba29e4d93775 Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 17 Jul 2019 16:53:55 -0700 Subject: [PATCH 403/631] [IMP] Bug #266 False ETA Error [IMP] Bug #265 Linked Location Search Error [IMP] Bug #272 Rate Not Declared [IMP] Bug #263 equipment_count Wrong [IMP] Bug #277 Worker Pricelists Computed Wrong [IMP] Flake8 + Remove Debug --- fieldservice_purchase/models/fsm_person.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_purchase/models/fsm_person.py b/fieldservice_purchase/models/fsm_person.py index d023142fad..0416bae480 100644 --- a/fieldservice_purchase/models/fsm_person.py +++ b/fieldservice_purchase/models/fsm_person.py @@ -16,13 +16,13 @@ class FSMPerson(models.Model): def _compute_pricelist_count(self): for worker in self: worker.pricelist_count = self.env['product.supplierinfo'].\ - search_count([('id', '=', worker.id)]) + search_count([('name', '=', worker.name)]) @api.multi def action_view_pricelists(self): for worker in self: pricelist = self.env['product.supplierinfo'].search( - [('id', '=', worker.id)]) + [('name', '=', worker.name)]) action = self.env.ref( 'product.product_supplierinfo_type_action').read()[0] if len(pricelist) == 1: From d3f18925bae9ed73dea01b947fe4fb4671e34e62 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 18 Jul 2019 12:16:54 -0500 Subject: [PATCH 404/631] Update fsm_person.py [UPD] README.rst [UPD] Update fieldservice_purchase.pot Added translation using Weblate (German) Translated using Weblate (German) Currently translated at 100.0% (3 of 3 strings) Translation: field-service-12.0/field-service-12.0-fieldservice_purchase Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_purchase/de/ Added translation using Weblate (Portuguese (Brazil)) Added translation using Weblate (Spanish (Chile)) Translated using Weblate (Spanish (Chile)) Currently translated at 100.0% (3 of 3 strings) Translation: field-service-12.0/field-service-12.0-fieldservice_purchase Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_purchase/es_CL/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3 of 3 strings) Translation: field-service-12.0/field-service-12.0-fieldservice_purchase Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_purchase/pt_BR/ --- fieldservice_purchase/i18n/de.po | 32 +++++++++++++++++++ fieldservice_purchase/i18n/es_CL.po | 32 +++++++++++++++++++ .../i18n/fieldservice_purchase.pot | 30 +++++++++++++++++ fieldservice_purchase/i18n/pt_BR.po | 32 +++++++++++++++++++ fieldservice_purchase/models/fsm_person.py | 4 +-- .../static/description/index.html | 2 +- 6 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 fieldservice_purchase/i18n/de.po create mode 100644 fieldservice_purchase/i18n/es_CL.po create mode 100644 fieldservice_purchase/i18n/fieldservice_purchase.pot create mode 100644 fieldservice_purchase/i18n/pt_BR.po diff --git a/fieldservice_purchase/i18n/de.po b/fieldservice_purchase/i18n/de.po new file mode 100644 index 0000000000..bd6e1f8409 --- /dev/null +++ b/fieldservice_purchase/i18n/de.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_purchase +#: model:ir.model.fields,field_description:fieldservice_purchase.field_fsm_person__pricelist_count +msgid "# Pricelists" +msgstr "# Preislisten" + +#. module: fieldservice_purchase +#: model:ir.model,name:fieldservice_purchase.model_fsm_person +msgid "Field Service Worker" +msgstr "Service-Mitarbeiter" + +#. module: fieldservice_purchase +#: model_terms:ir.ui.view,arch_db:fieldservice_purchase.fsm_person_form_view_pricelists +msgid "Pricelists" +msgstr "Preislisten" diff --git a/fieldservice_purchase/i18n/es_CL.po b/fieldservice_purchase/i18n/es_CL.po new file mode 100644 index 0000000000..23aae602b3 --- /dev/null +++ b/fieldservice_purchase/i18n/es_CL.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-01-16 22:38+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_purchase +#: model:ir.model.fields,field_description:fieldservice_purchase.field_fsm_person__pricelist_count +msgid "# Pricelists" +msgstr "# Lista de Precios" + +#. module: fieldservice_purchase +#: model:ir.model,name:fieldservice_purchase.model_fsm_person +msgid "Field Service Worker" +msgstr "Trabajador de Servicio de Campo" + +#. module: fieldservice_purchase +#: model_terms:ir.ui.view,arch_db:fieldservice_purchase.fsm_person_form_view_pricelists +msgid "Pricelists" +msgstr "Lista de Precios" diff --git a/fieldservice_purchase/i18n/fieldservice_purchase.pot b/fieldservice_purchase/i18n/fieldservice_purchase.pot new file mode 100644 index 0000000000..523774d1e1 --- /dev/null +++ b/fieldservice_purchase/i18n/fieldservice_purchase.pot @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_purchase +#: model:ir.model.fields,field_description:fieldservice_purchase.field_fsm_person__pricelist_count +msgid "# Pricelists" +msgstr "" + +#. module: fieldservice_purchase +#: model:ir.model,name:fieldservice_purchase.model_fsm_person +msgid "Field Service Worker" +msgstr "" + +#. module: fieldservice_purchase +#: model_terms:ir.ui.view,arch_db:fieldservice_purchase.fsm_person_form_view_pricelists +msgid "Pricelists" +msgstr "" + diff --git a/fieldservice_purchase/i18n/pt_BR.po b/fieldservice_purchase/i18n/pt_BR.po new file mode 100644 index 0000000000..4a2b75f733 --- /dev/null +++ b/fieldservice_purchase/i18n/pt_BR.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-02-05 11:13+0000\n" +"Last-Translator: Marcel Savegnago \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_purchase +#: model:ir.model.fields,field_description:fieldservice_purchase.field_fsm_person__pricelist_count +msgid "# Pricelists" +msgstr "# Listas de Preço" + +#. module: fieldservice_purchase +#: model:ir.model,name:fieldservice_purchase.model_fsm_person +msgid "Field Service Worker" +msgstr "Trabalhador de Serviço de Campo" + +#. module: fieldservice_purchase +#: model_terms:ir.ui.view,arch_db:fieldservice_purchase.fsm_person_form_view_pricelists +msgid "Pricelists" +msgstr "Listas de Preço" diff --git a/fieldservice_purchase/models/fsm_person.py b/fieldservice_purchase/models/fsm_person.py index 0416bae480..d8fab2471d 100644 --- a/fieldservice_purchase/models/fsm_person.py +++ b/fieldservice_purchase/models/fsm_person.py @@ -16,13 +16,13 @@ class FSMPerson(models.Model): def _compute_pricelist_count(self): for worker in self: worker.pricelist_count = self.env['product.supplierinfo'].\ - search_count([('name', '=', worker.name)]) + search_count([('name', '=', worker.partner_id.id)]) @api.multi def action_view_pricelists(self): for worker in self: pricelist = self.env['product.supplierinfo'].search( - [('name', '=', worker.name)]) + [('name', '=', worker.partner_id.id)]) action = self.env.ref( 'product.product_supplierinfo_type_action').read()[0] if len(pricelist) == 1: diff --git a/fieldservice_purchase/static/description/index.html b/fieldservice_purchase/static/description/index.html index 2ca2ca129b..5f8f6fb3f9 100644 --- a/fieldservice_purchase/static/description/index.html +++ b/fieldservice_purchase/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Purchase + + +
    +

    Field Service - Stock

    + + +

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

    +

    This module is an add-on for the Field Service application in Odoo. +It provides inventory and stock operations.

    +

    Table of contents

    + +
    +

    Installation

    +

    You will first need to install:

    +
      +
    • fieldservice
    • +
    +

    Then go to Field Service > Configuration > Settings +Enable the ‘Use Odoo Stock Logistics’ option under Integrations

    +
    +
    +

    Configuration

    +

    To configure this module, you need to:

    +
      +
    • Set Inventory Locations for FSM Locations and FSM Vehicles
    • +
    • Verify procurement routes
    • +
    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Create a new field service order
    • +
    • Under the Materials tab, add products with quantity
    • +
    • Confirm an order to create stock moves
    • +
    • Validate stock moves in the Inventory app
    • +
    • Quantities Delivered on FSM Order Line will be updated based on move
    • +
    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    • Brian McMaster
    • +
    +
    +
    +

    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:

    +

    brian10048 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_vehicle_stock/views/fsm_vehicle.xml b/fieldservice_vehicle_stock/views/fsm_vehicle.xml new file mode 100644 index 0000000000..84b559e8f0 --- /dev/null +++ b/fieldservice_vehicle_stock/views/fsm_vehicle.xml @@ -0,0 +1,14 @@ + + + + + fsm.vehicle + + + + + + + + + From f59593d3a02c41ea3a25b6ce2d187ea111289bd8 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 13 Dec 2018 19:48:34 -0600 Subject: [PATCH 421/631] [ADD] Security --- fieldservice_vehicle_stock/README.rst | 14 +++++++------- fieldservice_vehicle_stock/__manifest__.py | 5 +++-- fieldservice_vehicle_stock/models/fsm_order.py | 8 ++++---- .../static/description/index.html | 12 ++++++------ 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/fieldservice_vehicle_stock/README.rst b/fieldservice_vehicle_stock/README.rst index 3510cd588b..69824b38c6 100644 --- a/fieldservice_vehicle_stock/README.rst +++ b/fieldservice_vehicle_stock/README.rst @@ -1,6 +1,6 @@ -===================== -Field Service - Stock -===================== +============================== +Field Service Vehicles - Stock +============================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! @@ -14,10 +14,10 @@ Field Service - Stock :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/11.0/fieldservice_stock + :target: https://github.com/OCA/field-service/tree/11.0/fieldservice_vehicle_stock :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-11-0/field-service-11-0-fieldservice_stock + :target: https://translation.odoo-community.org/projects/field-service-11-0/field-service-11-0-fieldservice_vehicle_stock :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/264/11.0 @@ -74,7 +74,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -126,6 +126,6 @@ Current `maintainers `__: |maintainer-brian10048| |maintainer-wolfhall| |maintainer-max3903| -This module is part of the `OCA/field-service `_ project on GitHub. +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_vehicle_stock/__manifest__.py b/fieldservice_vehicle_stock/__manifest__.py index 61606beca9..fcff212eb6 100644 --- a/fieldservice_vehicle_stock/__manifest__.py +++ b/fieldservice_vehicle_stock/__manifest__.py @@ -2,8 +2,8 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service Vehicle - Stock', - 'summary': 'Inventory and Stock Operations for Field Service with Vehicles', + 'name': 'Field Service Vehicles - Stock', + 'summary': 'Inventory Operations for Field Service with Vehicles', 'version': '11.0.0.0.1', 'category': 'Field Service', 'author': "Open Source Integrators, " @@ -19,6 +19,7 @@ 'views/fsm_vehicle.xml', ], 'installable': True, + 'auto_install': True, 'license': 'AGPL-3', 'development_status': 'Beta', 'maintainers': [ diff --git a/fieldservice_vehicle_stock/models/fsm_order.py b/fieldservice_vehicle_stock/models/fsm_order.py index 1de91cf089..c3bebf5cb1 100644 --- a/fieldservice_vehicle_stock/models/fsm_order.py +++ b/fieldservice_vehicle_stock/models/fsm_order.py @@ -9,9 +9,9 @@ class FSMOrderLine(models.Model): @api.multi def _prepare_procurement_values(self, group_id=False): - values = super(self, FSMOrderLine)._prepare_procurement_values(group_id) - values.update({ - 'route_ids': self.env.ref( - 'fieldservice_vehicle_stock.route_stock_to_vehicle_to_location') + values = super(self, FSMOrderLine).\ + _prepare_procurement_values(group_id) + values.update({'route_ids': self.env.ref( + 'fieldservice_vehicle_stock.route_stock_to_vehicle_to_location') }) return values diff --git a/fieldservice_vehicle_stock/static/description/index.html b/fieldservice_vehicle_stock/static/description/index.html index 7cf0406b5e..241e84ec55 100644 --- a/fieldservice_vehicle_stock/static/description/index.html +++ b/fieldservice_vehicle_stock/static/description/index.html @@ -4,7 +4,7 @@ -Field Service - Stock +Field Service Vehicles - Stock -
    -

    Field Service - Stock

    +
    +

    Field Service Vehicles - Stock

    -

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

    +

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

    This module is an add-on for the Field Service application in Odoo. It provides inventory and stock operations.

    Table of contents

    @@ -425,7 +425,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -459,7 +459,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    brian10048 wolfhall max3903

    -

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

    +

    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.

    From dea1a2640be0799f367964937009093158815300 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 14 Dec 2018 17:18:12 -0600 Subject: [PATCH 422/631] [FIX] External ID --- fieldservice_vehicle_stock/__manifest__.py | 2 +- fieldservice_vehicle_stock/views/fsm_vehicle.xml | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fieldservice_vehicle_stock/__manifest__.py b/fieldservice_vehicle_stock/__manifest__.py index fcff212eb6..f620c4f18c 100644 --- a/fieldservice_vehicle_stock/__manifest__.py +++ b/fieldservice_vehicle_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service Vehicles - Stock', 'summary': 'Inventory Operations for Field Service with Vehicles', - 'version': '11.0.0.0.1', + 'version': '11.0.0.1.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_vehicle_stock/views/fsm_vehicle.xml b/fieldservice_vehicle_stock/views/fsm_vehicle.xml index 84b559e8f0..65629362c6 100644 --- a/fieldservice_vehicle_stock/views/fsm_vehicle.xml +++ b/fieldservice_vehicle_stock/views/fsm_vehicle.xml @@ -3,10 +3,12 @@ fsm.vehicle - + - + From f91f5768b29f1e1458c87cb0ff91d562a17acddd Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Mon, 31 Dec 2018 02:55:09 -0800 Subject: [PATCH 423/631] [FIX] fieldservice_vehicle_stock --- fieldservice_vehicle_stock/models/fsm_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_vehicle_stock/models/fsm_order.py b/fieldservice_vehicle_stock/models/fsm_order.py index c3bebf5cb1..197ea0f684 100644 --- a/fieldservice_vehicle_stock/models/fsm_order.py +++ b/fieldservice_vehicle_stock/models/fsm_order.py @@ -9,7 +9,7 @@ class FSMOrderLine(models.Model): @api.multi def _prepare_procurement_values(self, group_id=False): - values = super(self, FSMOrderLine).\ + values = super(FSMOrderLine, self).\ _prepare_procurement_values(group_id) values.update({'route_ids': self.env.ref( 'fieldservice_vehicle_stock.route_stock_to_vehicle_to_location') From 53a440e6dd4d391df172b9cd3382cd93a082b966 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 7 Jan 2019 20:39:56 -0600 Subject: [PATCH 424/631] [IMP] Rename field --- fieldservice_vehicle_stock/models/fsm_vehicle.py | 5 +++-- fieldservice_vehicle_stock/views/fsm_vehicle.xml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fieldservice_vehicle_stock/models/fsm_vehicle.py b/fieldservice_vehicle_stock/models/fsm_vehicle.py index 06d78920d9..56a4747458 100644 --- a/fieldservice_vehicle_stock/models/fsm_vehicle.py +++ b/fieldservice_vehicle_stock/models/fsm_vehicle.py @@ -7,5 +7,6 @@ class FSMVehicle(models.Model): _inherit = 'fsm.vehicle' - inventory_location = fields.Many2one('stock.location', - 'Inventory Location') + inventory_location_id = fields.Many2one('stock.location', + string='Inventory Location', + required=True) diff --git a/fieldservice_vehicle_stock/views/fsm_vehicle.xml b/fieldservice_vehicle_stock/views/fsm_vehicle.xml index 65629362c6..7c6fd8fe4f 100644 --- a/fieldservice_vehicle_stock/views/fsm_vehicle.xml +++ b/fieldservice_vehicle_stock/views/fsm_vehicle.xml @@ -7,7 +7,7 @@ ref="fieldservice_vehicle.fsm_vehicle_form_view"/> - From 79d5fd76e084fcb95c5385c7c857e7dde7365c08 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Mon, 8 Apr 2019 18:50:34 +0530 Subject: [PATCH 425/631] [MIG][WIP][12.0] fieldservice_vehicle_stock --- fieldservice_vehicle_stock/README.rst | 11 +- fieldservice_vehicle_stock/__manifest__.py | 2 +- .../data/fsm_stock_data.xml | 100 +++++++++++------- .../models/fsm_order.py | 6 +- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 +- 6 files changed, 75 insertions(+), 52 deletions(-) diff --git a/fieldservice_vehicle_stock/README.rst b/fieldservice_vehicle_stock/README.rst index 69824b38c6..c92cc7fb7e 100644 --- a/fieldservice_vehicle_stock/README.rst +++ b/fieldservice_vehicle_stock/README.rst @@ -14,13 +14,13 @@ Field Service Vehicles - Stock :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/11.0/fieldservice_vehicle_stock + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_vehicle_stock :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-11-0/field-service-11-0-fieldservice_vehicle_stock + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_vehicle_stock :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -74,7 +74,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -91,6 +91,7 @@ Contributors ~~~~~~~~~~~~ * Brian McMaster +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -126,6 +127,6 @@ Current `maintainers `__: |maintainer-brian10048| |maintainer-wolfhall| |maintainer-max3903| -This module is part of the `OCA/field-service `_ project on GitHub. +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_vehicle_stock/__manifest__.py b/fieldservice_vehicle_stock/__manifest__.py index f620c4f18c..9090431683 100644 --- a/fieldservice_vehicle_stock/__manifest__.py +++ b/fieldservice_vehicle_stock/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service Vehicles - Stock', 'summary': 'Inventory Operations for Field Service with Vehicles', - 'version': '11.0.0.1.0', + 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Brian McMaster, " diff --git a/fieldservice_vehicle_stock/data/fsm_stock_data.xml b/fieldservice_vehicle_stock/data/fsm_stock_data.xml index 18816805e5..c8dbf9ff4f 100644 --- a/fieldservice_vehicle_stock/data/fsm_stock_data.xml +++ b/fieldservice_vehicle_stock/data/fsm_stock_data.xml @@ -1,24 +1,22 @@ - - - Vehicle - view - - + + Vehicle + view + + - - Storage - internal - - - + + Storage + internal + + + - - + Vehicle Loading @@ -29,11 +27,14 @@ Vehicle Loading - + internal - - + + @@ -44,38 +45,48 @@ - + Location Delivery - + outgoing - + - + Stock to Vehicle to Location 3 + True - + Vehicle → Location - move + pull - + make_to_order - + - + Warehouse → Vehicle - move + pull make_to_stock - + @@ -93,22 +104,27 @@ - + Location Pickup - + internal - + - + Warehouse → Vehicle - move + pull make_to_stock - + @@ -119,20 +135,24 @@ 5 - + Vehicle Returns internal - - + + - + Vehicle → Warehouse - - + push + + manual diff --git a/fieldservice_vehicle_stock/models/fsm_order.py b/fieldservice_vehicle_stock/models/fsm_order.py index 197ea0f684..6f263f8024 100644 --- a/fieldservice_vehicle_stock/models/fsm_order.py +++ b/fieldservice_vehicle_stock/models/fsm_order.py @@ -4,12 +4,12 @@ from odoo import api, models -class FSMOrderLine(models.Model): - _inherit = 'fsm.order.line' +class StockRequest(models.Model): + _inherit = 'stock.request' @api.multi def _prepare_procurement_values(self, group_id=False): - values = super(FSMOrderLine, self).\ + values = super(StockRequest, self).\ _prepare_procurement_values(group_id) values.update({'route_ids': self.env.ref( 'fieldservice_vehicle_stock.route_stock_to_vehicle_to_location') diff --git a/fieldservice_vehicle_stock/readme/CONTRIBUTORS.rst b/fieldservice_vehicle_stock/readme/CONTRIBUTORS.rst index 39ef3fa3d7..7ecd842208 100644 --- a/fieldservice_vehicle_stock/readme/CONTRIBUTORS.rst +++ b/fieldservice_vehicle_stock/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Brian McMaster +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_vehicle_stock/static/description/index.html b/fieldservice_vehicle_stock/static/description/index.html index 241e84ec55..e6ee657497 100644 --- a/fieldservice_vehicle_stock/static/description/index.html +++ b/fieldservice_vehicle_stock/static/description/index.html @@ -367,7 +367,7 @@

    Field Service Vehicles - Stock

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    This module is an add-on for the Field Service application in Odoo. It provides inventory and stock operations.

    Table of contents

    @@ -425,7 +425,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -441,6 +441,7 @@

    Authors

    Contributors

    @@ -459,7 +460,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    brian10048 wolfhall max3903

    -

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

    +

    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.

    From 88574cb6fb5377af954b67905fa3980b7a9e017b Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 10 May 2019 08:37:44 -0700 Subject: [PATCH 426/631] [IMP] Remove Unnecessary Fields --- fieldservice_vehicle_stock/data/fsm_stock_data.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/fieldservice_vehicle_stock/data/fsm_stock_data.xml b/fieldservice_vehicle_stock/data/fsm_stock_data.xml index c8dbf9ff4f..cf367a3d61 100644 --- a/fieldservice_vehicle_stock/data/fsm_stock_data.xml +++ b/fieldservice_vehicle_stock/data/fsm_stock_data.xml @@ -60,7 +60,6 @@ model='stock.location.route'> Stock to Vehicle to Location 3 - True
    From 3602c0ac2b2a26294efce107ccff9987f1ffdec0 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 27 Jun 2019 15:26:46 -0500 Subject: [PATCH 427/631] [FIX] fieldservice_vehicle_stock: Allow worker to deliver from order --- fieldservice_vehicle_stock/__manifest__.py | 2 ++ .../data/fsm_stock_data.xml | 4 +-- fieldservice_vehicle_stock/models/__init__.py | 2 +- .../models/fsm_order.py | 17 ---------- .../models/stock_request.py | 33 +++++++++++++++++++ .../security/ir.model.access.csv | 4 +++ .../static/description/index.html | 2 +- .../views/fsm_order.xml | 29 ++++++++++++++++ .../views/fsm_vehicle.xml | 1 - 9 files changed, 71 insertions(+), 23 deletions(-) delete mode 100644 fieldservice_vehicle_stock/models/fsm_order.py create mode 100644 fieldservice_vehicle_stock/models/stock_request.py create mode 100644 fieldservice_vehicle_stock/security/ir.model.access.csv create mode 100644 fieldservice_vehicle_stock/views/fsm_order.xml diff --git a/fieldservice_vehicle_stock/__manifest__.py b/fieldservice_vehicle_stock/__manifest__.py index 9090431683..594536418f 100644 --- a/fieldservice_vehicle_stock/__manifest__.py +++ b/fieldservice_vehicle_stock/__manifest__.py @@ -15,8 +15,10 @@ 'fieldservice_stock', ], 'data': [ + 'security/ir.model.access.csv', 'data/fsm_stock_data.xml', 'views/fsm_vehicle.xml', + 'views/fsm_order.xml', ], 'installable': True, 'auto_install': True, diff --git a/fieldservice_vehicle_stock/data/fsm_stock_data.xml b/fieldservice_vehicle_stock/data/fsm_stock_data.xml index cf367a3d61..d8c6384521 100644 --- a/fieldservice_vehicle_stock/data/fsm_stock_data.xml +++ b/fieldservice_vehicle_stock/data/fsm_stock_data.xml @@ -1,4 +1,3 @@ - @@ -14,7 +13,6 @@ - @@ -150,7 +148,7 @@ model="stock.rule"> Vehicle → Warehouse push - + manual diff --git a/fieldservice_vehicle_stock/models/__init__.py b/fieldservice_vehicle_stock/models/__init__.py index 9f7a2707cf..1cd7f6d75d 100644 --- a/fieldservice_vehicle_stock/models/__init__.py +++ b/fieldservice_vehicle_stock/models/__init__.py @@ -3,5 +3,5 @@ from . import ( fsm_vehicle, - fsm_order, + stock_request, ) diff --git a/fieldservice_vehicle_stock/models/fsm_order.py b/fieldservice_vehicle_stock/models/fsm_order.py deleted file mode 100644 index 6f263f8024..0000000000 --- a/fieldservice_vehicle_stock/models/fsm_order.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 2018 - TODAY, Brian McMaster -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import api, models - - -class StockRequest(models.Model): - _inherit = 'stock.request' - - @api.multi - def _prepare_procurement_values(self, group_id=False): - values = super(StockRequest, self).\ - _prepare_procurement_values(group_id) - values.update({'route_ids': self.env.ref( - 'fieldservice_vehicle_stock.route_stock_to_vehicle_to_location') - }) - return values diff --git a/fieldservice_vehicle_stock/models/stock_request.py b/fieldservice_vehicle_stock/models/stock_request.py new file mode 100644 index 0000000000..30db152c62 --- /dev/null +++ b/fieldservice_vehicle_stock/models/stock_request.py @@ -0,0 +1,33 @@ +# Copyright (C) 2018 - TODAY, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class StockRequest(models.Model): + _inherit = 'stock.request' + + @api.multi + def action_assign(self): + for rec in self: + for move in rec.move_ids: + if move.picking_id.picking_type_id == self.env.ref( + 'fieldservice_vehicle_stock.' + 'picking_type_vehicle_to_location'): + return move.picking_id.action_assign() + + @api.multi + def action_deliver(self): + for rec in self: + for move in rec.move_ids: + if move.picking_id.picking_type_id == self.env.ref( + 'fieldservice_vehicle_stock.' + 'picking_type_vehicle_to_location'): + return move.picking_id.action_done() + + def action_show_details(self): + for move in self.move_ids: + if move.picking_id.picking_type_id == self.env.ref( + 'fieldservice_vehicle_stock.' + 'picking_type_vehicle_to_location'): + return move.action_show_details() diff --git a/fieldservice_vehicle_stock/security/ir.model.access.csv b/fieldservice_vehicle_stock/security/ir.model.access.csv new file mode 100644 index 0000000000..5c9a60e0d6 --- /dev/null +++ b/fieldservice_vehicle_stock/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_stock_picking_fsm_user,stock.picking.fsm.user,stock.model_stock_picking,fieldservice.group_fsm_user,1,1,1,0 +access_stock_move_fsm_user,stock.move.fsm.user,stock.model_stock_move,fieldservice.group_fsm_user,1,1,1,0 +access_stock_move_line_fsm_user,stock.move.line.fsm.user,stock.model_stock_move_line,fieldservice.group_fsm_user,1,1,1,0 diff --git a/fieldservice_vehicle_stock/static/description/index.html b/fieldservice_vehicle_stock/static/description/index.html index e6ee657497..fa18fa81fe 100644 --- a/fieldservice_vehicle_stock/static/description/index.html +++ b/fieldservice_vehicle_stock/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service Vehicles - Stock + + +
    +

    Field Service - Accounting Payment

    + + +

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

    +

    This module allows the worker to accept payments during his work at the location.

    +

    Table of contents

    + +
    +

    Installation

    +

    No special installation instructions

    +
    +
    +

    Configuration

    +

    No special configuration instructions.

    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service
    • +
    • Select or create a Field Service order
    • +
    • Click on the “Register Payment” button
    • +
    • Select the Payment Method
    • +
    • Enter the amount
    • +
    • Validate
    • +
    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Other credits

    +

    The development of this module has been financially supported by:

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

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

    +

    Current 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_account_payment/views/account_payment_view.xml b/fieldservice_account_payment/views/account_payment_view.xml new file mode 100644 index 0000000000..b7048080be --- /dev/null +++ b/fieldservice_account_payment/views/account_payment_view.xml @@ -0,0 +1,14 @@ + + + + account.payment.invoice.form + account.payment + + + + + + + + + diff --git a/fieldservice_account_payment/views/fsm_order.xml b/fieldservice_account_payment/views/fsm_order.xml new file mode 100644 index 0000000000..a87d723a8e --- /dev/null +++ b/fieldservice_account_payment/views/fsm_order.xml @@ -0,0 +1,16 @@ + + + + fsm.order + + +
    +
    + + - - + +
    +
    + +
    diff --git a/fieldservice_account_payment/views/account_payment_view.xml b/fieldservice_account_payment/views/account_payment_view.xml deleted file mode 100644 index b7048080be..0000000000 --- a/fieldservice_account_payment/views/account_payment_view.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - account.payment.invoice.form - account.payment - - - - - - - - - From a958bbc04f9c1e740cd6c818fb3a04f666142eca Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sat, 21 Dec 2019 15:57:06 -0600 Subject: [PATCH 448/631] [FIX] fieldservice_account_payment --- fieldservice_account_payment/models/account_payment.py | 2 +- fieldservice_account_payment/views/account_payment.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_account_payment/models/account_payment.py b/fieldservice_account_payment/models/account_payment.py index 3ae792acb3..ae6de8a0f5 100644 --- a/fieldservice_account_payment/models/account_payment.py +++ b/fieldservice_account_payment/models/account_payment.py @@ -14,7 +14,7 @@ class AccountPayment(models.Model): string='FSM Order Count', compute='_compute_fsm_order_count', readonly=True) - @api.depends('payment_ids') + @api.depends('fsm_order_ids') def _compute_fsm_order_count(self): for payment in self: payment.fsm_order_count = len(payment.fsm_order_ids) diff --git a/fieldservice_account_payment/views/account_payment.xml b/fieldservice_account_payment/views/account_payment.xml index ef6c966668..4147b23792 100644 --- a/fieldservice_account_payment/views/account_payment.xml +++ b/fieldservice_account_payment/views/account_payment.xml @@ -3,7 +3,7 @@ account.payment.invoice.form account.payment - +
    + diff --git a/fieldservice_vehicle/views/fsm_vehicle.xml b/fieldservice_vehicle/views/fsm_vehicle.xml index 5ebcc63547..f487be7e11 100644 --- a/fieldservice_vehicle/views/fsm_vehicle.xml +++ b/fieldservice_vehicle/views/fsm_vehicle.xml @@ -34,7 +34,6 @@ Field Service Vehicles fsm.vehicle - form tree,form

    @@ -64,7 +63,6 @@ Vehicles fsm.vehicle - form graph,pivot

    From f4d1f3f7ab3c047d2308632d4734c5973d086ef5 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 19 Apr 2021 13:38:26 +0530 Subject: [PATCH 478/631] [14.0][MIG] fieldservice_vehicle --- fieldservice_vehicle/__manifest__.py | 2 +- setup/fieldservice_vehicle/odoo/addons/fieldservice_vehicle | 1 + setup/fieldservice_vehicle/setup.py | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 120000 setup/fieldservice_vehicle/odoo/addons/fieldservice_vehicle create mode 100644 setup/fieldservice_vehicle/setup.py diff --git a/fieldservice_vehicle/__manifest__.py b/fieldservice_vehicle/__manifest__.py index 66a10633d4..43a1626cbd 100644 --- a/fieldservice_vehicle/__manifest__.py +++ b/fieldservice_vehicle/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Field Service Vehicles", "summary": "Manage Field Service vehicles and assign drivers", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", "website": "https://github.com/OCA/field-service", diff --git a/setup/fieldservice_vehicle/odoo/addons/fieldservice_vehicle b/setup/fieldservice_vehicle/odoo/addons/fieldservice_vehicle new file mode 120000 index 0000000000..c8b6dc755f --- /dev/null +++ b/setup/fieldservice_vehicle/odoo/addons/fieldservice_vehicle @@ -0,0 +1 @@ +../../../../fieldservice_vehicle \ No newline at end of file diff --git a/setup/fieldservice_vehicle/setup.py b/setup/fieldservice_vehicle/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/fieldservice_vehicle/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From dc9dff9b38221800f1afeb41601b8a2d9d02f4c4 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Sun, 10 Feb 2019 20:25:11 -0500 Subject: [PATCH 479/631] [IMP] fieldservice_substatus add settings for feildservice_substatus module add base for fieldservice_substatus module --- fieldservice_substatus/__init__.py | 4 ++ fieldservice_substatus/__manifest__.py | 27 +++++++++ fieldservice_substatus/models/__init__.py | 6 ++ .../models/fsm_stage_status.py | 11 ++++ fieldservice_substatus/readme/CONFIGURE.rst | 6 ++ .../readme/CONTRIBUTORS.rst | 1 + fieldservice_substatus/readme/CREDITS.rst | 3 + fieldservice_substatus/readme/DESCRIPTION.rst | 10 ++++ fieldservice_substatus/readme/INSTALL.rst | 4 ++ fieldservice_substatus/readme/ROADMAP.rst | 2 + fieldservice_substatus/readme/USAGE.rst | 9 +++ .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 17808 bytes .../views/fsm_stage_status.xml | 53 ++++++++++++++++++ 14 files changed, 139 insertions(+) create mode 100644 fieldservice_substatus/__init__.py create mode 100644 fieldservice_substatus/__manifest__.py create mode 100644 fieldservice_substatus/models/__init__.py create mode 100644 fieldservice_substatus/models/fsm_stage_status.py create mode 100644 fieldservice_substatus/readme/CONFIGURE.rst create mode 100644 fieldservice_substatus/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_substatus/readme/CREDITS.rst create mode 100644 fieldservice_substatus/readme/DESCRIPTION.rst create mode 100644 fieldservice_substatus/readme/INSTALL.rst create mode 100644 fieldservice_substatus/readme/ROADMAP.rst create mode 100644 fieldservice_substatus/readme/USAGE.rst create mode 100644 fieldservice_substatus/security/ir.model.access.csv create mode 100644 fieldservice_substatus/static/description/icon.png create mode 100644 fieldservice_substatus/views/fsm_stage_status.xml diff --git a/fieldservice_substatus/__init__.py b/fieldservice_substatus/__init__.py new file mode 100644 index 0000000000..9c361e1f77 --- /dev/null +++ b/fieldservice_substatus/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_substatus/__manifest__.py b/fieldservice_substatus/__manifest__.py new file mode 100644 index 0000000000..f8e90d8232 --- /dev/null +++ b/fieldservice_substatus/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Field Service - Sub-Status', + 'summary': 'Sub-statuses for Field Service Orders', + 'version': '11.0.0.0.1', + 'category': 'Field Service', + 'author': "Open Source Integrators, " + "Brian McMaster, " + "Odoo Community Association (OCA)", + 'website': 'https://github.com/OCA/field-service', + 'depends': [ + 'fieldservice', + ], + 'data': [ + 'security/ir.model.access.csv', + 'views/fsm_stage_status.xml', + ], + 'installable': True, + 'license': 'AGPL-3', + 'development_status': 'Beta', + 'maintainers': [ + 'max3903', + 'brian10048', + ], +} diff --git a/fieldservice_substatus/models/__init__.py b/fieldservice_substatus/models/__init__.py new file mode 100644 index 0000000000..20b277bdc3 --- /dev/null +++ b/fieldservice_substatus/models/__init__.py @@ -0,0 +1,6 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + fsm_stage_status, +) diff --git a/fieldservice_substatus/models/fsm_stage_status.py b/fieldservice_substatus/models/fsm_stage_status.py new file mode 100644 index 0000000000..3bc5463427 --- /dev/null +++ b/fieldservice_substatus/models/fsm_stage_status.py @@ -0,0 +1,11 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class FSMStageStatus(models.Model): + _name = 'fsm.stage.status' + _description = 'Order Sub-Status' + + name = fields.Char(string='Name', required=True) diff --git a/fieldservice_substatus/readme/CONFIGURE.rst b/fieldservice_substatus/readme/CONFIGURE.rst new file mode 100644 index 0000000000..084e18710d --- /dev/null +++ b/fieldservice_substatus/readme/CONFIGURE.rst @@ -0,0 +1,6 @@ +To configure this module, you need to: + +* Go to Field Service > Configuration > Orders > Sub-Statuses +* Create your list of sub-statuses +* Go to Field Service > Configuration > Orders > Stages +* Select a stage and set the default sub-statuses as well as the potential sub-statuses diff --git a/fieldservice_substatus/readme/CONTRIBUTORS.rst b/fieldservice_substatus/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..39ef3fa3d7 --- /dev/null +++ b/fieldservice_substatus/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Brian McMaster diff --git a/fieldservice_substatus/readme/CREDITS.rst b/fieldservice_substatus/readme/CREDITS.rst new file mode 100644 index 0000000000..0eff0acf4e --- /dev/null +++ b/fieldservice_substatus/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* Open Source Integrators diff --git a/fieldservice_substatus/readme/DESCRIPTION.rst b/fieldservice_substatus/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..4b0dacb87c --- /dev/null +++ b/fieldservice_substatus/readme/DESCRIPTION.rst @@ -0,0 +1,10 @@ +Odoo and the Field Service App do not provide a way to track what is required + and/or missing at the different stages of the FSM order process. Some + organizations needs a way to track documentation, materials, signature + and various activities. + +This module allows you to have a list of sub-statuses and set them as default + or potential sub-statuses on each FSM stage. The stage configuration will drive: + + * the sub-status set when entering a stage + * the list of potential sub-statuses available depending on the stage diff --git a/fieldservice_substatus/readme/INSTALL.rst b/fieldservice_substatus/readme/INSTALL.rst new file mode 100644 index 0000000000..c010f8f6a2 --- /dev/null +++ b/fieldservice_substatus/readme/INSTALL.rst @@ -0,0 +1,4 @@ +To install Field Service and have the mapping features, you need to install GeoEngine. + +Please refer to the installation instructions available at: +https://github.com/OCA/geospatial/tree/11.0/base_geoengine diff --git a/fieldservice_substatus/readme/ROADMAP.rst b/fieldservice_substatus/readme/ROADMAP.rst new file mode 100644 index 0000000000..f607015959 --- /dev/null +++ b/fieldservice_substatus/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +The roadmap of the Field Service application is documented on +`Github `_. diff --git a/fieldservice_substatus/readme/USAGE.rst b/fieldservice_substatus/readme/USAGE.rst new file mode 100644 index 0000000000..2393273604 --- /dev/null +++ b/fieldservice_substatus/readme/USAGE.rst @@ -0,0 +1,9 @@ +To use this module, you need to: + +* Go to Field Service > Operations > Orders +* Create a new service order. + * The sub-status is set to the default sub-status of the New stage. + * The list of sub-statuses is filtered based on the potential sub-statuses + of the New stage. +* Move the service order in the process. The sub-status is set and filtered + according to the stage. \ No newline at end of file diff --git a/fieldservice_substatus/security/ir.model.access.csv b/fieldservice_substatus/security/ir.model.access.csv new file mode 100644 index 0000000000..8e30fa334c --- /dev/null +++ b/fieldservice_substatus/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_fsm_stage_status_fsm_user,fsm.stage.status.user,model_fsm_stage_status,fieldservice.group_fsm_user,1,0,0,0 +access_fsm_stage_status_fsm_manager,fsm.stage.status.manager,model_fsm_stage_status,fieldservice.group_fsm_manager,1,1,1,1 diff --git a/fieldservice_substatus/static/description/icon.png b/fieldservice_substatus/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 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 literal 0 HcmV?d00001 diff --git a/fieldservice_substatus/views/fsm_stage_status.xml b/fieldservice_substatus/views/fsm_stage_status.xml new file mode 100644 index 0000000000..d4b1a51573 --- /dev/null +++ b/fieldservice_substatus/views/fsm_stage_status.xml @@ -0,0 +1,53 @@ + + + + + + Order Sub-Status + fsm.stage.status + + + + + + + + + Order Sub-Status + fsm.stage.status + +

    + + + + + + + + + +
    +
    +
    + + + Order Sub-Status + fsm.stage.status + + form + tree,form + +

    + Create an order sub-status. +

    +
    +
    + + + +
    From ec13d0388baaea8b34bceb02659ca93c929bcbf1 Mon Sep 17 00:00:00 2001 From: Bhavesh Odedra Date: Wed, 13 Feb 2019 13:24:32 +0530 Subject: [PATCH 480/631] [IMP] Complete fieldservice_substatus --- fieldservice_substatus/README.rst | 144 ++++++ fieldservice_substatus/__init__.py | 16 +- fieldservice_substatus/__manifest__.py | 13 +- .../data/fsm_stage_status.xml | 9 + fieldservice_substatus/models/__init__.py | 4 +- fieldservice_substatus/models/fsm_order.py | 25 + fieldservice_substatus/models/fsm_stage.py | 21 + .../models/fsm_stage_status.py | 15 +- .../readme/CONTRIBUTORS.rst | 1 + fieldservice_substatus/readme/DESCRIPTION.rst | 12 +- fieldservice_substatus/readme/USAGE.rst | 8 +- .../static/description/index.html | 480 ++++++++++++++++++ fieldservice_substatus/views/fsm_order.xml | 18 + fieldservice_substatus/views/fsm_stage.xml | 16 + 14 files changed, 766 insertions(+), 16 deletions(-) create mode 100644 fieldservice_substatus/README.rst create mode 100644 fieldservice_substatus/data/fsm_stage_status.xml create mode 100644 fieldservice_substatus/models/fsm_order.py create mode 100644 fieldservice_substatus/models/fsm_stage.py create mode 100644 fieldservice_substatus/static/description/index.html create mode 100644 fieldservice_substatus/views/fsm_order.xml create mode 100644 fieldservice_substatus/views/fsm_stage.xml diff --git a/fieldservice_substatus/README.rst b/fieldservice_substatus/README.rst new file mode 100644 index 0000000000..684f00c9f6 --- /dev/null +++ b/fieldservice_substatus/README.rst @@ -0,0 +1,144 @@ +========================== +Field Service - Sub-Status +========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/11.0/fieldservice_substatus + :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-11-0/field-service-11-0-fieldservice_substatus + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Odoo and the Field Service App do not provide a way to track what is required +and/or missing at the different stages of the FSM order process. Some +organizations needs a way to track documentation, materials, signature +and various activities. + +This module allows you to have a list of sub-statuses and set them as default +or potential sub-statuses on each FSM stage. The stage configuration will drive: + +* the sub-status set when entering a stage +* the list of potential sub-statuses available depending on the stage + +**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/11.0/base_geoengine + +Configuration +============= + +To configure this module, you need to: + +* Go to Field Service > Configuration > Orders > Sub-Statuses +* Create your list of sub-statuses +* Go to Field Service > Configuration > Orders > Stages +* Select a stage and set the default sub-statuses as well as the potential sub-statuses + +Usage +===== + +To use this module, you need to: + +* Go to Field Service > Operations > Orders +* Create a new service order. + + * The sub-status is set to the default sub-status of the New stage. + * The list of sub-statuses is filtered based on the potential sub-statuses + of the New stage. + +* Move the service order in the process. The sub-status is set and filtered + according to the 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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators +* Brian McMaster + +Contributors +~~~~~~~~~~~~ + +* Brian McMaster +* Bhavesh Odedra + +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-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 +.. |maintainer-brian10048| image:: https://github.com/brian10048.png?size=40px + :target: https://github.com/brian10048 + :alt: brian10048 +.. |maintainer-bodedra| image:: https://github.com/bodedra.png?size=40px + :target: https://github.com/bodedra + :alt: bodedra + +Current `maintainers `__: + +|maintainer-max3903| |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_substatus/__init__.py b/fieldservice_substatus/__init__.py index 9c361e1f77..db4b94224e 100644 --- a/fieldservice_substatus/__init__.py +++ b/fieldservice_substatus/__init__.py @@ -1,4 +1,18 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators +# Copyright (C) 2019 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models + + +def post_init_fsm(cr, registry): + cr.execute("""UPDATE fsm_stage + SET sub_stage_id = (SELECT id FROM fsm_stage_status LIMIT 1) + WHERE sub_stage_id IS NULL""") + cr.execute("""UPDATE fsm_order + SET sub_stage_id = (SELECT id FROM fsm_stage_status LIMIT 1) + WHERE sub_stage_id IS NULL""") + cr.execute("""ALTER TABLE fsm_stage + ALTER COLUMN sub_stage_id SET NOT NULL""") + cr.execute("""ALTER TABLE fsm_order + ALTER COLUMN sub_stage_id SET NOT NULL""") + return True diff --git a/fieldservice_substatus/__manifest__.py b/fieldservice_substatus/__manifest__.py index f8e90d8232..3c094188a7 100644 --- a/fieldservice_substatus/__manifest__.py +++ b/fieldservice_substatus/__manifest__.py @@ -1,4 +1,4 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators, Brian McMaster +# Copyright (C) 2019 - TODAY, Open Source Integrators, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { @@ -6,16 +6,19 @@ 'summary': 'Sub-statuses for Field Service Orders', 'version': '11.0.0.0.1', 'category': 'Field Service', - 'author': "Open Source Integrators, " - "Brian McMaster, " - "Odoo Community Association (OCA)", + 'author': 'Open Source Integrators, ' + 'Brian McMaster, ' + 'Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', 'depends': [ 'fieldservice', ], 'data': [ + 'data/fsm_stage_status.xml', 'security/ir.model.access.csv', 'views/fsm_stage_status.xml', + 'views/fsm_stage.xml', + 'views/fsm_order.xml' ], 'installable': True, 'license': 'AGPL-3', @@ -23,5 +26,7 @@ 'maintainers': [ 'max3903', 'brian10048', + 'bodedra' ], + 'post_init_hook': 'post_init_fsm', } diff --git a/fieldservice_substatus/data/fsm_stage_status.xml b/fieldservice_substatus/data/fsm_stage_status.xml new file mode 100644 index 0000000000..171c5533c5 --- /dev/null +++ b/fieldservice_substatus/data/fsm_stage_status.xml @@ -0,0 +1,9 @@ + + + + + + Default + + + diff --git a/fieldservice_substatus/models/__init__.py b/fieldservice_substatus/models/__init__.py index 20b277bdc3..41dc4b7356 100644 --- a/fieldservice_substatus/models/__init__.py +++ b/fieldservice_substatus/models/__init__.py @@ -1,6 +1,8 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators, Brian McMaster +# Copyright (C) 2019 - TODAY, Open Source Integrators, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ( fsm_stage_status, + fsm_stage, + fsm_order ) diff --git a/fieldservice_substatus/models/fsm_order.py b/fieldservice_substatus/models/fsm_order.py new file mode 100644 index 0000000000..d3e6eb59df --- /dev/null +++ b/fieldservice_substatus/models/fsm_order.py @@ -0,0 +1,25 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields + +from odoo.addons.base_geoengine import geo_model + + +class FSMOrder(geo_model.GeoModel): + _inherit = 'fsm.order' + + sub_stage_id = fields.Many2one( + 'fsm.stage.status', + string='Sub-Status', + required=True, + default=lambda self: self._default_stage_id().sub_stage_id) + + @api.multi + def write(self, vals): + if 'stage_id' in vals: + sub_stage_id = self.env['fsm.stage'].browse( + vals.get('stage_id')).sub_stage_id + if sub_stage_id: + vals.update({'sub_stage_id': sub_stage_id.id}) + return super().write(vals) diff --git a/fieldservice_substatus/models/fsm_stage.py b/fieldservice_substatus/models/fsm_stage.py new file mode 100644 index 0000000000..97dcc91e91 --- /dev/null +++ b/fieldservice_substatus/models/fsm_stage.py @@ -0,0 +1,21 @@ +# Copyright (C) 2019 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class FSMStage(models.Model): + _inherit = 'fsm.stage' + + sub_stage_id = fields.Many2one('fsm.stage.status', + string='Default Sub-Status', + required=True) + sub_stage_ids = fields.Many2many('fsm.stage.status', 'fsm_sub_stage_rel', + 'fsm_stage_id', + 'sub_stage_id', + string='Potential Sub-Statuses') + + @api.onchange('sub_stage_id') + def onchange_sub_stage_id(self): + if self.sub_stage_id: + self.sub_stage_ids = [(6, 0, [self.sub_stage_id.id])] diff --git a/fieldservice_substatus/models/fsm_stage_status.py b/fieldservice_substatus/models/fsm_stage_status.py index 3bc5463427..7462bdbdec 100644 --- a/fieldservice_substatus/models/fsm_stage_status.py +++ b/fieldservice_substatus/models/fsm_stage_status.py @@ -1,4 +1,4 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators, Brian McMaster +# Copyright (C) 2019 - TODAY, Open Source Integrators, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models @@ -9,3 +9,16 @@ class FSMStageStatus(models.Model): _description = 'Order Sub-Status' name = fields.Char(string='Name', required=True) + + @api.model + def _search(self, args, offset=0, limit=None, order=None, count=False, + access_rights_uid=None): + context = self._context or {} + if context.get('fsm_order_stage_id'): + stage_id = self.env['fsm.stage'].browse(context.get( + 'fsm_order_stage_id')) + sub_stage_ids = stage_id.sub_stage_id + stage_id.sub_stage_ids + if sub_stage_ids: + args = [('id', 'in', sub_stage_ids.ids)] + return super()._search(args, offset, limit, order, count=count, + access_rights_uid=access_rights_uid) diff --git a/fieldservice_substatus/readme/CONTRIBUTORS.rst b/fieldservice_substatus/readme/CONTRIBUTORS.rst index 39ef3fa3d7..e8af61409a 100644 --- a/fieldservice_substatus/readme/CONTRIBUTORS.rst +++ b/fieldservice_substatus/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Brian McMaster +* Bhavesh Odedra diff --git a/fieldservice_substatus/readme/DESCRIPTION.rst b/fieldservice_substatus/readme/DESCRIPTION.rst index 4b0dacb87c..f0e674b25f 100644 --- a/fieldservice_substatus/readme/DESCRIPTION.rst +++ b/fieldservice_substatus/readme/DESCRIPTION.rst @@ -1,10 +1,10 @@ Odoo and the Field Service App do not provide a way to track what is required - and/or missing at the different stages of the FSM order process. Some - organizations needs a way to track documentation, materials, signature - and various activities. +and/or missing at the different stages of the FSM order process. Some +organizations needs a way to track documentation, materials, signature +and various activities. This module allows you to have a list of sub-statuses and set them as default - or potential sub-statuses on each FSM stage. The stage configuration will drive: +or potential sub-statuses on each FSM stage. The stage configuration will drive: - * the sub-status set when entering a stage - * the list of potential sub-statuses available depending on the stage +* the sub-status set when entering a stage +* the list of potential sub-statuses available depending on the stage diff --git a/fieldservice_substatus/readme/USAGE.rst b/fieldservice_substatus/readme/USAGE.rst index 2393273604..fdacec8660 100644 --- a/fieldservice_substatus/readme/USAGE.rst +++ b/fieldservice_substatus/readme/USAGE.rst @@ -1,9 +1,11 @@ To use this module, you need to: * Go to Field Service > Operations > Orders -* Create a new service order. +* Create a new service order. + * The sub-status is set to the default sub-status of the New stage. * The list of sub-statuses is filtered based on the potential sub-statuses - of the New stage. + of the New stage. + * Move the service order in the process. The sub-status is set and filtered - according to the stage. \ No newline at end of file + according to the stage. diff --git a/fieldservice_substatus/static/description/index.html b/fieldservice_substatus/static/description/index.html new file mode 100644 index 0000000000..c1983860e7 --- /dev/null +++ b/fieldservice_substatus/static/description/index.html @@ -0,0 +1,480 @@ + + + + + + +Field Service - Sub-Status + + + +
    +

    Field Service - Sub-Status

    + + +

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

    +

    Odoo and the Field Service App do not provide a way to track what is required +and/or missing at the different stages of the FSM order process. Some +organizations needs a way to track documentation, materials, signature +and various activities.

    +

    This module allows you to have a list of sub-statuses and set them as default +or potential sub-statuses on each FSM stage. The stage configuration will drive:

    +
      +
    • the sub-status set when entering a stage
    • +
    • the list of potential sub-statuses available depending on the stage
    • +
    +

    Table of contents

    + +
    +

    Installation

    +

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

    +

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

    +
    +
    +

    Configuration

    +

    To configure this module, you need to:

    +
      +
    • Go to Field Service > Configuration > Orders > Sub-Statuses
    • +
    • Create your list of sub-statuses
    • +
    • Go to Field Service > Configuration > Orders > Stages
    • +
    • Select a stage and set the default sub-statuses as well as the potential sub-statuses
    • +
    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service > Operations > Orders
    • +
    • Create a new service order.
        +
      • The sub-status is set to the default sub-status of the New stage.
      • +
      • The list of sub-statuses is filtered based on the potential sub-statuses +of the New stage.
      • +
      +
    • +
    • Move the service order in the process. The sub-status is set and filtered +according to the 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 smashing it by providing a detailed and welcomed +feedback.

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    • Brian McMaster
    • +
    +
    +
    +

    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:

    +

    max3903 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_substatus/views/fsm_order.xml b/fieldservice_substatus/views/fsm_order.xml new file mode 100644 index 0000000000..f2dd9f4066 --- /dev/null +++ b/fieldservice_substatus/views/fsm_order.xml @@ -0,0 +1,18 @@ + + + + + + fsm.sub.stage.order.form + fsm.order + + + + + + + + + diff --git a/fieldservice_substatus/views/fsm_stage.xml b/fieldservice_substatus/views/fsm_stage.xml new file mode 100644 index 0000000000..0e0d59ebaf --- /dev/null +++ b/fieldservice_substatus/views/fsm_stage.xml @@ -0,0 +1,16 @@ + + + + + + fsm.sub.stage.form + fsm.stage + + + + + + + + + From 251c53481dc2ba02e0f9d24e9077a608b1673f3f Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Mon, 22 Apr 2019 18:58:21 +0530 Subject: [PATCH 481/631] [MIG][12.0] fieldservice_substatus --- fieldservice_substatus/README.rst | 11 ++++++----- fieldservice_substatus/__init__.py | 1 - fieldservice_substatus/__manifest__.py | 2 +- fieldservice_substatus/models/__init__.py | 1 - fieldservice_substatus/models/fsm_order.py | 8 +++----- fieldservice_substatus/models/fsm_stage_status.py | 5 +++-- fieldservice_substatus/readme/CONTRIBUTORS.rst | 1 + fieldservice_substatus/static/description/index.html | 7 ++++--- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/fieldservice_substatus/README.rst b/fieldservice_substatus/README.rst index 684f00c9f6..59d72bdc49 100644 --- a/fieldservice_substatus/README.rst +++ b/fieldservice_substatus/README.rst @@ -14,13 +14,13 @@ Field Service - Sub-Status :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/11.0/fieldservice_substatus + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_substatus :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-11-0/field-service-11-0-fieldservice_substatus + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_substatus :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -86,7 +86,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -104,6 +104,7 @@ Contributors * Brian McMaster * Bhavesh Odedra +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -139,6 +140,6 @@ Current `maintainers `__: |maintainer-max3903| |maintainer-brian10048| |maintainer-bodedra| -This module is part of the `OCA/field-service `_ project on GitHub. +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_substatus/__init__.py b/fieldservice_substatus/__init__.py index db4b94224e..754592b26e 100644 --- a/fieldservice_substatus/__init__.py +++ b/fieldservice_substatus/__init__.py @@ -1,4 +1,3 @@ -# Copyright (C) 2019 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models diff --git a/fieldservice_substatus/__manifest__.py b/fieldservice_substatus/__manifest__.py index 3c094188a7..ef83b41fa2 100644 --- a/fieldservice_substatus/__manifest__.py +++ b/fieldservice_substatus/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Sub-Status', 'summary': 'Sub-statuses for Field Service Orders', - 'version': '11.0.0.0.1', + 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': 'Open Source Integrators, ' 'Brian McMaster, ' diff --git a/fieldservice_substatus/models/__init__.py b/fieldservice_substatus/models/__init__.py index 41dc4b7356..1bac61402e 100644 --- a/fieldservice_substatus/models/__init__.py +++ b/fieldservice_substatus/models/__init__.py @@ -1,4 +1,3 @@ -# Copyright (C) 2019 - TODAY, Open Source Integrators, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ( diff --git a/fieldservice_substatus/models/fsm_order.py b/fieldservice_substatus/models/fsm_order.py index d3e6eb59df..7cfe69e397 100644 --- a/fieldservice_substatus/models/fsm_order.py +++ b/fieldservice_substatus/models/fsm_order.py @@ -1,12 +1,10 @@ # Copyright (C) 2019 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields +from odoo import api, fields, models -from odoo.addons.base_geoengine import geo_model - -class FSMOrder(geo_model.GeoModel): +class FSMOrder(models.Model): _inherit = 'fsm.order' sub_stage_id = fields.Many2one( @@ -22,4 +20,4 @@ def write(self, vals): vals.get('stage_id')).sub_stage_id if sub_stage_id: vals.update({'sub_stage_id': sub_stage_id.id}) - return super().write(vals) + return super(FSMOrder, self).write(vals) diff --git a/fieldservice_substatus/models/fsm_stage_status.py b/fieldservice_substatus/models/fsm_stage_status.py index 7462bdbdec..20b0c0fe0a 100644 --- a/fieldservice_substatus/models/fsm_stage_status.py +++ b/fieldservice_substatus/models/fsm_stage_status.py @@ -20,5 +20,6 @@ def _search(self, args, offset=0, limit=None, order=None, count=False, sub_stage_ids = stage_id.sub_stage_id + stage_id.sub_stage_ids if sub_stage_ids: args = [('id', 'in', sub_stage_ids.ids)] - return super()._search(args, offset, limit, order, count=count, - access_rights_uid=access_rights_uid) + return super(FSMStageStatus, self)._search( + args, offset, limit, order, count=count, + access_rights_uid=access_rights_uid) diff --git a/fieldservice_substatus/readme/CONTRIBUTORS.rst b/fieldservice_substatus/readme/CONTRIBUTORS.rst index e8af61409a..2b032ef01a 100644 --- a/fieldservice_substatus/readme/CONTRIBUTORS.rst +++ b/fieldservice_substatus/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Brian McMaster * Bhavesh Odedra +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_substatus/static/description/index.html b/fieldservice_substatus/static/description/index.html index c1983860e7..30c3f4a73b 100644 --- a/fieldservice_substatus/static/description/index.html +++ b/fieldservice_substatus/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Sub-Status

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    Odoo and the Field Service App do not provide a way to track what is required and/or missing at the different stages of the FSM order process. Some organizations needs a way to track documentation, materials, signature @@ -436,7 +436,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -453,6 +453,7 @@

    Contributors

    @@ -471,7 +472,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    max3903 brian10048 bodedra

    -

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

    +

    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.

    From 2208d06c3cd2849663272b2eec7f8190f24861f5 Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 1 May 2019 13:45:10 -0700 Subject: [PATCH 482/631] [IMP] Substages Only Orders --- fieldservice_substatus/views/fsm_stage.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_substatus/views/fsm_stage.xml b/fieldservice_substatus/views/fsm_stage.xml index 0e0d59ebaf..af54f4a048 100644 --- a/fieldservice_substatus/views/fsm_stage.xml +++ b/fieldservice_substatus/views/fsm_stage.xml @@ -8,8 +8,8 @@ - - + +
    From a952c2c533ba5f791fcc1aeee95fae8d781922b9 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 3 May 2019 09:43:54 -0700 Subject: [PATCH 483/631] [IMP] #59 Substatus Visible NonDebug --- fieldservice_substatus/views/fsm_stage_status.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_substatus/views/fsm_stage_status.xml b/fieldservice_substatus/views/fsm_stage_status.xml index d4b1a51573..4bb2fbeeb9 100644 --- a/fieldservice_substatus/views/fsm_stage_status.xml +++ b/fieldservice_substatus/views/fsm_stage_status.xml @@ -48,6 +48,6 @@ action="action_fsm_stage_status" parent="fieldservice.menu_fsm_config_order" sequence="21" - groups="base.group_no_one"/> + groups="fieldservice.group_fsm_substatus"/>
    From 61e3ea65086fc76e736b408e4d595af009589555 Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 3 May 2019 12:54:19 -0700 Subject: [PATCH 484/631] [IMP] #108 sub_stage_id Default Val --- fieldservice_substatus/models/fsm_stage.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fieldservice_substatus/models/fsm_stage.py b/fieldservice_substatus/models/fsm_stage.py index 97dcc91e91..3ab4c833ca 100644 --- a/fieldservice_substatus/models/fsm_stage.py +++ b/fieldservice_substatus/models/fsm_stage.py @@ -7,9 +7,15 @@ class FSMStage(models.Model): _inherit = 'fsm.stage' + @api.model + def _default_sub_stage(self): + ret = self.env['fsm.stage.status'].search([('name', '=', 'Default')]) + return ret + sub_stage_id = fields.Many2one('fsm.stage.status', string='Default Sub-Status', - required=True) + required=True, + default=_default_sub_stage) sub_stage_ids = fields.Many2many('fsm.stage.status', 'fsm_sub_stage_rel', 'fsm_stage_id', 'sub_stage_id', From ec4596609acf57d3f1ed7c149157f434f55e853a Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 10 May 2019 15:39:30 -0700 Subject: [PATCH 485/631] [IMP] Store Substage ID --- fieldservice_substatus/models/fsm_stage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/fieldservice_substatus/models/fsm_stage.py b/fieldservice_substatus/models/fsm_stage.py index 3ab4c833ca..04d7ba0651 100644 --- a/fieldservice_substatus/models/fsm_stage.py +++ b/fieldservice_substatus/models/fsm_stage.py @@ -15,6 +15,7 @@ def _default_sub_stage(self): sub_stage_id = fields.Many2one('fsm.stage.status', string='Default Sub-Status', required=True, + store=True, default=_default_sub_stage) sub_stage_ids = fields.Many2many('fsm.stage.status', 'fsm_sub_stage_rel', 'fsm_stage_id', From 0177fb522fc4a1ad3c1091b701905224d4808c0e Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 10 May 2019 17:10:06 -0700 Subject: [PATCH 486/631] [ADD] FSM Substage Data --- fieldservice_substatus/data/fsm_stage.xml | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 fieldservice_substatus/data/fsm_stage.xml diff --git a/fieldservice_substatus/data/fsm_stage.xml b/fieldservice_substatus/data/fsm_stage.xml new file mode 100644 index 0000000000..87338e3d00 --- /dev/null +++ b/fieldservice_substatus/data/fsm_stage.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From e2adb2ca84bee31b09c8bfe5f859d6ab9bef9c5a Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 10 May 2019 19:13:24 -0500 Subject: [PATCH 487/631] Update fsm_stage.xml --- fieldservice_substatus/data/fsm_stage.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_substatus/data/fsm_stage.xml b/fieldservice_substatus/data/fsm_stage.xml index 87338e3d00..b627b91a04 100644 --- a/fieldservice_substatus/data/fsm_stage.xml +++ b/fieldservice_substatus/data/fsm_stage.xml @@ -36,4 +36,4 @@ - \ No newline at end of file + From 8cc33cf403676b16bdfffd6ed82c7f7c5c0a8999 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 24 May 2019 16:37:36 -0500 Subject: [PATCH 488/631] [REM] fieldservice_substatus: Data --- fieldservice_substatus/data/fsm_stage.xml | 39 ----------------------- 1 file changed, 39 deletions(-) delete mode 100644 fieldservice_substatus/data/fsm_stage.xml diff --git a/fieldservice_substatus/data/fsm_stage.xml b/fieldservice_substatus/data/fsm_stage.xml deleted file mode 100644 index b627b91a04..0000000000 --- a/fieldservice_substatus/data/fsm_stage.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 89f7699add43c062735f200d72b4c73055f28a61 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sat, 25 May 2019 16:23:05 -0500 Subject: [PATCH 489/631] [FIX] fieldservice_substatus: Travis and Runbot errors --- fieldservice_substatus/__init__.py | 14 ------- fieldservice_substatus/__manifest__.py | 4 +- fieldservice_substatus/data/fsm_stage.xml | 39 +++++++++++++++++++ fieldservice_substatus/models/fsm_stage.py | 1 - .../static/description/index.html | 2 +- fieldservice_substatus/views/fsm_stage.xml | 2 +- 6 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 fieldservice_substatus/data/fsm_stage.xml diff --git a/fieldservice_substatus/__init__.py b/fieldservice_substatus/__init__.py index 754592b26e..69f7babdfb 100644 --- a/fieldservice_substatus/__init__.py +++ b/fieldservice_substatus/__init__.py @@ -1,17 +1,3 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models - - -def post_init_fsm(cr, registry): - cr.execute("""UPDATE fsm_stage - SET sub_stage_id = (SELECT id FROM fsm_stage_status LIMIT 1) - WHERE sub_stage_id IS NULL""") - cr.execute("""UPDATE fsm_order - SET sub_stage_id = (SELECT id FROM fsm_stage_status LIMIT 1) - WHERE sub_stage_id IS NULL""") - cr.execute("""ALTER TABLE fsm_stage - ALTER COLUMN sub_stage_id SET NOT NULL""") - cr.execute("""ALTER TABLE fsm_order - ALTER COLUMN sub_stage_id SET NOT NULL""") - return True diff --git a/fieldservice_substatus/__manifest__.py b/fieldservice_substatus/__manifest__.py index ef83b41fa2..5d58633888 100644 --- a/fieldservice_substatus/__manifest__.py +++ b/fieldservice_substatus/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sub-Status', - 'summary': 'Sub-statuses for Field Service Orders', + 'summary': 'Add sub-statuses to Field Service orders', 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': 'Open Source Integrators, ' @@ -15,6 +15,7 @@ ], 'data': [ 'data/fsm_stage_status.xml', + 'data/fsm_stage.xml', 'security/ir.model.access.csv', 'views/fsm_stage_status.xml', 'views/fsm_stage.xml', @@ -28,5 +29,4 @@ 'brian10048', 'bodedra' ], - 'post_init_hook': 'post_init_fsm', } diff --git a/fieldservice_substatus/data/fsm_stage.xml b/fieldservice_substatus/data/fsm_stage.xml new file mode 100644 index 0000000000..b627b91a04 --- /dev/null +++ b/fieldservice_substatus/data/fsm_stage.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fieldservice_substatus/models/fsm_stage.py b/fieldservice_substatus/models/fsm_stage.py index 04d7ba0651..a8da111b51 100644 --- a/fieldservice_substatus/models/fsm_stage.py +++ b/fieldservice_substatus/models/fsm_stage.py @@ -14,7 +14,6 @@ def _default_sub_stage(self): sub_stage_id = fields.Many2one('fsm.stage.status', string='Default Sub-Status', - required=True, store=True, default=_default_sub_stage) sub_stage_ids = fields.Many2many('fsm.stage.status', 'fsm_sub_stage_rel', diff --git a/fieldservice_substatus/static/description/index.html b/fieldservice_substatus/static/description/index.html index 30c3f4a73b..fcbd827ffb 100644 --- a/fieldservice_substatus/static/description/index.html +++ b/fieldservice_substatus/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Sub-Status + + +
    +

    Field Service - Sales

    + + +

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

    +

    The module integrates the Field Service application with the Sales one and +allows you to sell field service products.

    +

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

    +
    +
    +

    Configuration

    +

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

    +
      +
    • Go to Sales > Catalog > Products
    • +
    • Create or select a product
    • +
    • Set the Product Type to ‘Service’ under General Information tab
    • +
    • Under Invoicing tab, set the Field Service Tracking option
    • +
    • Select the FSM Order Template that will be used for creating FSM Orders when +a Sale Order is confirmed with this product
    • +
    +

    To setup a sales territory:

    +
      +
    • Go to Field Service > Master Data > Locations
    • +
    • Create or select a location
    • +
    • Go to the Sales tab and select the sales territory
    • +
    +
    +
    +

    Usage

    +
      +
    • Go to Sales
    • +
    • Create a new Quotation/Sale Order
    • +
    • Set the FSM Location to be used
    • +
    • On a Sale Order Line, select a product configured for field service orders
    • +
    • Confirm the Sale Order
    • +
    • Field Service orders linked to SO lines are created
    • +
    • +
      When a Field Service order is completed, the quantity delivered for its
      +
      linked sale order line will be updated to the quantity ordered, indicating +this line is ready for invoicing.
      +
      +
    • +
    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

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

    +

    Current maintainers:

    +

    wolfhall max3903 brian10048

    +

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

    +

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

    +
    +
    +
    + + From 069981029af36fcff0b2b261f12aa65e88c969a0 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Fri, 6 Dec 2019 08:32:16 -0500 Subject: [PATCH 518/631] [IMP] fieldservice_sale_stock: Auto Install module --- fieldservice_sale_stock/__manifest__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py index 5286658789..22c39ca41c 100644 --- a/fieldservice_sale_stock/__manifest__.py +++ b/fieldservice_sale_stock/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sale Stock', - 'version': '12.0.0.1.0', + 'version': '12.0.1.0.0', 'summary': 'Sell stockable items linked to field service orders.', 'category': 'Field Service', 'author': 'Brian McMaster, Odoo Community Association (OCA)', @@ -20,4 +20,5 @@ 'brian10048', ], 'installable': True, + 'auto_install': True, } From df92ef58f04805711fc58d0b713fde87b41d2ddb Mon Sep 17 00:00:00 2001 From: brian10048 Date: Fri, 6 Dec 2019 09:59:24 -0500 Subject: [PATCH 519/631] [FIX] fieldservice_sale Consumable and Storable product types were not generating field services --- fieldservice_sale_stock/models/sale_order.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index e91eefe162..69420597c9 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -17,9 +17,9 @@ def _link_pickings_to_fsm(self): pickings.write({'fsm_order_id': fsm_order.id}) @api.multi - def action_confirm(self): + def _action_confirm(self): """ On SO confirmation, link the fsm order on the pickings created by the sale order """ - result = super().action_confirm() + result = super()._action_confirm() self._link_pickings_to_fsm() return result From c9b46a6cf5170ba56642083c5e3a07221ae57731 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 10 Dec 2019 09:28:08 -0600 Subject: [PATCH 520/631] [FIX] fieldservice_sale_stock: Expecting one result --- fieldservice_sale_stock/README.rst | 48 ++++++------------ .../i18n/fieldservice_sale_stock.pot | 20 ++++++++ fieldservice_sale_stock/models/sale_order.py | 5 +- .../static/description/index.html | 49 ++++++------------- 4 files changed, 55 insertions(+), 67 deletions(-) create mode 100644 fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot diff --git a/fieldservice_sale_stock/README.rst b/fieldservice_sale_stock/README.rst index 9bf6f8719e..ef394251e2 100644 --- a/fieldservice_sale_stock/README.rst +++ b/fieldservice_sale_stock/README.rst @@ -1,6 +1,6 @@ -===================== -Field Service - Sales -===================== +========================== +Field Service - Sale Stock +========================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! @@ -14,10 +14,10 @@ Field Service - Sales :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/12.0/fieldservice_sale + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_sale_stock :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-12-0/field-service-12-0-fieldservice_sale + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_sale_stock :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/264/12.0 @@ -25,8 +25,8 @@ Field Service - Sales |badge1| |badge2| |badge3| |badge4| |badge5| -The module integrates the Field Service application with the Sales one and -allows you to sell field service products. +This module links pickings created by a sale order to the field +service order created by the sale order. **Table of contents** @@ -44,20 +44,13 @@ https://github.com/OCA/geospatial/tree/12.0/base_geoengine Configuration ============= -To setup a product for quoting and selling field service orders: +Configure a storable product that generates a unique field service order for +an individual sale order: * Go to Sales > Catalog > Products * Create or select a product -* Set the Product Type to 'Service' under General Information tab -* Under Invoicing tab, set the Field Service Tracking option -* Select the FSM Order Template that will be used for creating FSM Orders when - a Sale Order is confirmed with this product - -To setup a sales territory: - -* Go to Field Service > Master Data > Locations -* Create or select a location -* Go to the Sales tab and select the sales territory +* Set the type to 'Storable' +* Set the Service Policy to 'Per Sale Order' Usage ===== @@ -68,9 +61,8 @@ Usage * On a Sale Order Line, select a product configured for field service orders * Confirm the Sale Order * Field Service orders linked to SO lines are created -* When a Field Service order is completed, the quantity delivered for its - linked sale order line will be updated to the quantity ordered, indicating - this line is ready for invoicing. +* The pickings for storable products will get linked to the newly created + field service order Known issues / Roadmap ====================== @@ -84,7 +76,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -94,20 +86,12 @@ Credits Authors ~~~~~~~ -* Open Source Integrators +* Brian McMaster Contributors ~~~~~~~~~~~~ -* Open Source Integrators - - * Steve Campbell - * Maxime Chambreuil - * Wolfgang Hall - -* Serpent Consulting Services Pvt. Ltd. * Brian McMaster -* Raphaël Reverdy Maintainers ~~~~~~~~~~~ @@ -136,6 +120,6 @@ Current `maintainers `__: |maintainer-wolfhall| |maintainer-max3903| |maintainer-brian10048| -This module is part of the `OCA/field-service `_ project on GitHub. +This module is part of the `OCA/field-service `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot b/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot new file mode 100644 index 0000000000..92e47bb20e --- /dev/null +++ b/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_sale_stock +#: model:ir.model,name:fieldservice_sale_stock.model_sale_order +msgid "Sale Order" +msgstr "" + diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index 69420597c9..a5ba38ee72 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -10,8 +10,11 @@ class SaleOrder(models.Model): @api.multi def _link_pickings_to_fsm(self): for order in self: + # TODO: We may want to split the picking to have one picking + # per FSM order fsm_order = self.env['fsm.order'].search([ - ('sale_id', '=', order.id) + ('sale_id', '=', order.id), + ('sale_line_id', '=', False), ]) pickings = order.picking_ids pickings.write({'fsm_order_id': fsm_order.id}) diff --git a/fieldservice_sale_stock/static/description/index.html b/fieldservice_sale_stock/static/description/index.html index ae8d6fe6d4..92a5f96904 100644 --- a/fieldservice_sale_stock/static/description/index.html +++ b/fieldservice_sale_stock/static/description/index.html @@ -4,7 +4,7 @@ -Field Service - Sales +Field Service - Sale Stock -
    -

    Field Service - Sales

    +
    +

    Field Service - Sale Stock

    -

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

    -

    The module integrates the Field Service application with the Sales one and -allows you to sell field service products.

    +

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

    +

    This module links pickings created by a sale order to the field +service order created by the sale order.

    Table of contents

    Configuration

    -

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

    +

    Configure a storable product that generates a unique field service order for +an individual sale order:

    • Go to Sales > Catalog > Products
    • Create or select a product
    • -
    • Set the Product Type to ‘Service’ under General Information tab
    • -
    • Under Invoicing tab, set the Field Service Tracking option
    • -
    • Select the FSM Order Template that will be used for creating FSM Orders when -a Sale Order is confirmed with this product
    • -
    -

    To setup a sales territory:

    -
      -
    • Go to Field Service > Master Data > Locations
    • -
    • Create or select a location
    • -
    • Go to the Sales tab and select the sales territory
    • +
    • Set the type to ‘Storable’
    • +
    • Set the Service Policy to ‘Per Sale Order’
    @@ -419,12 +412,8 @@

    Usage

  • On a Sale Order Line, select a product configured for field service orders
  • Confirm the Sale Order
  • Field Service orders linked to SO lines are created
  • -
  • -
    When a Field Service order is completed, the quantity delivered for its
    -
    linked sale order line will be updated to the quantity ordered, indicating -this line is ready for invoicing.
    -
    -
  • +
  • The pickings for storable products will get linked to the newly created +field service order
  • @@ -437,7 +426,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -445,21 +434,13 @@

    Credits

    Authors

      -
    • Open Source Integrators
    • +
    • Brian McMaster

    Contributors

    @@ -471,7 +452,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    wolfhall max3903 brian10048

    -

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

    +

    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.

    From d74e3aaf5be186e991d8255c504382df62ca4b89 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sun, 22 Dec 2019 10:55:20 -0600 Subject: [PATCH 521/631] [IMP] fieldservice_sale_stock --- fieldservice_sale_stock/models/sale_order.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index a5ba38ee72..eafbc6ea1a 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -17,7 +17,10 @@ def _link_pickings_to_fsm(self): ('sale_line_id', '=', False), ]) pickings = order.picking_ids - pickings.write({'fsm_order_id': fsm_order.id}) + for picking in pickings: + picking.fsm_order_id = fsm_order.id + for move in picking.move_lines: + move.fsm_order_id = move.sale_line_id.fsm_order_id.id @api.multi def _action_confirm(self): From a5f97e5f9765c636c6a224a293efd30ef027a3f1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 30 Dec 2019 15:48:53 +0000 Subject: [PATCH 522/631] fieldservice_sale_stock 12.0.1.0.1 --- fieldservice_sale_stock/__manifest__.py | 2 +- fieldservice_sale_stock/i18n/es_CL.po | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 fieldservice_sale_stock/i18n/es_CL.po diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py index 22c39ca41c..f171d3d74d 100644 --- a/fieldservice_sale_stock/__manifest__.py +++ b/fieldservice_sale_stock/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sale Stock', - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', 'summary': 'Sell stockable items linked to field service orders.', 'category': 'Field Service', 'author': 'Brian McMaster, Odoo Community Association (OCA)', diff --git a/fieldservice_sale_stock/i18n/es_CL.po b/fieldservice_sale_stock/i18n/es_CL.po new file mode 100644 index 0000000000..2dbbf3dec4 --- /dev/null +++ b/fieldservice_sale_stock/i18n/es_CL.po @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_sale_stock +#: model:ir.model,name:fieldservice_sale_stock.model_sale_order +msgid "Sale Order" +msgstr "" From 50f3b74ba9723cb73511f73cef50594c57ea7acd Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 9 Jan 2020 08:07:57 -0800 Subject: [PATCH 523/631] [IMP] fieldservice_sale_stock --- fieldservice_sale_stock/models/sale_order.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index eafbc6ea1a..e664683d03 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -1,6 +1,5 @@ # Copyright (C) 2019 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - from odoo import api, models @@ -26,6 +25,6 @@ def _link_pickings_to_fsm(self): def _action_confirm(self): """ On SO confirmation, link the fsm order on the pickings created by the sale order """ - result = super()._action_confirm() + res = super()._action_confirm() self._link_pickings_to_fsm() - return result + return res From c567e2b686d604de7e7efe978eff50e98cc662b5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 14 Jan 2020 16:24:05 +0000 Subject: [PATCH 524/631] fieldservice_sale_stock 12.0.1.0.2 --- fieldservice_sale_stock/__manifest__.py | 2 +- fieldservice_sale_stock/i18n/pt_BR.po | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 fieldservice_sale_stock/i18n/pt_BR.po diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py index f171d3d74d..b6a9ba9f69 100644 --- a/fieldservice_sale_stock/__manifest__.py +++ b/fieldservice_sale_stock/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sale Stock', - 'version': '12.0.1.0.1', + 'version': '12.0.1.0.2', 'summary': 'Sell stockable items linked to field service orders.', 'category': 'Field Service', 'author': 'Brian McMaster, Odoo Community Association (OCA)', diff --git a/fieldservice_sale_stock/i18n/pt_BR.po b/fieldservice_sale_stock/i18n/pt_BR.po new file mode 100644 index 0000000000..d6d2f519f4 --- /dev/null +++ b/fieldservice_sale_stock/i18n/pt_BR.po @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_sale_stock +#: model:ir.model,name:fieldservice_sale_stock.model_sale_order +msgid "Sale Order" +msgstr "" From 4be6237b96143ede45298acf5341d562f1b27080 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 16 Jan 2020 11:39:15 -0600 Subject: [PATCH 525/631] [ADD] Spanish (es) translation --- fieldservice_sale_stock/i18n/es.po | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 fieldservice_sale_stock/i18n/es.po diff --git a/fieldservice_sale_stock/i18n/es.po b/fieldservice_sale_stock/i18n/es.po new file mode 100644 index 0000000000..bdb017307a --- /dev/null +++ b/fieldservice_sale_stock/i18n/es.po @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice_sale_stock +#: model:ir.model,name:fieldservice_sale_stock.model_sale_order +msgid "Sale Order" +msgstr "" From bb25d322be26de6057e3a00a91c772fa5a8f5a97 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 3 Feb 2020 11:15:06 -0600 Subject: [PATCH 526/631] [IMP] fieldservice_sale_stock --- fieldservice_sale_stock/i18n/pt_BR.po | 6 ++++-- fieldservice_sale_stock/models/sale_order.py | 22 +++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/fieldservice_sale_stock/i18n/pt_BR.po b/fieldservice_sale_stock/i18n/pt_BR.po index d6d2f519f4..d4f8cb16eb 100644 --- a/fieldservice_sale_stock/i18n/pt_BR.po +++ b/fieldservice_sale_stock/i18n/pt_BR.po @@ -6,15 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-02-05 11:13+0000\n" +"Last-Translator: Marcel Savegnago \n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10\n" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sale Order" -msgstr "" +msgstr "Ordem de Venda" diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index e664683d03..4becb92aab 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -6,20 +6,32 @@ class SaleOrder(models.Model): _inherit = 'sale.order' + def prepare_fsm_values_for_stock_move(self, fsm_order): + return { + 'fsm_order_id': fsm_order.id, + } + + def prepare_fsm_values_for_stock_picking(self, fsm_order): + return { + 'fsm_order_id': fsm_order.id, + } + @api.multi def _link_pickings_to_fsm(self): - for order in self: + for rec in self: # TODO: We may want to split the picking to have one picking # per FSM order fsm_order = self.env['fsm.order'].search([ - ('sale_id', '=', order.id), + ('sale_id', '=', rec.id), ('sale_line_id', '=', False), ]) - pickings = order.picking_ids + pickings = rec.picking_ids for picking in pickings: - picking.fsm_order_id = fsm_order.id + picking.write( + rec.prepare_fsm_values_for_stock_picking(fsm_order)) for move in picking.move_lines: - move.fsm_order_id = move.sale_line_id.fsm_order_id.id + move.write( + rec.prepare_fsm_values_for_stock_move(fsm_order)) @api.multi def _action_confirm(self): From 7995e0fbd8fbf61084ef1b4e92bc3bb33beb6956 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 9 Feb 2020 21:36:05 +0000 Subject: [PATCH 527/631] fieldservice_sale_stock 12.0.1.0.3 --- fieldservice_sale_stock/__manifest__.py | 2 +- fieldservice_sale_stock/i18n/es.po | 6 ++++-- fieldservice_sale_stock/i18n/pt_BR.po | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py index b6a9ba9f69..9ac646b4c5 100644 --- a/fieldservice_sale_stock/__manifest__.py +++ b/fieldservice_sale_stock/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sale Stock', - 'version': '12.0.1.0.2', + 'version': '12.0.1.0.3', 'summary': 'Sell stockable items linked to field service orders.', 'category': 'Field Service', 'author': 'Brian McMaster, Odoo Community Association (OCA)', diff --git a/fieldservice_sale_stock/i18n/es.po b/fieldservice_sale_stock/i18n/es.po index bdb017307a..9d18630450 100644 --- a/fieldservice_sale_stock/i18n/es.po +++ b/fieldservice_sale_stock/i18n/es.po @@ -6,15 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-03-25 17:13+0000\n" +"Last-Translator: Nelson Ramírez Sánchez \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 3.10\n" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sale Order" -msgstr "" +msgstr "Pedidos de Venta" diff --git a/fieldservice_sale_stock/i18n/pt_BR.po b/fieldservice_sale_stock/i18n/pt_BR.po index d4f8cb16eb..05e1e13821 100644 --- a/fieldservice_sale_stock/i18n/pt_BR.po +++ b/fieldservice_sale_stock/i18n/pt_BR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-02-05 11:13+0000\n" +"PO-Revision-Date: 2020-02-25 09:13+0000\n" "Last-Translator: Marcel Savegnago \n" "Language-Team: none\n" "Language: pt_BR\n" @@ -19,4 +19,4 @@ msgstr "" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sale Order" -msgstr "Ordem de Venda" +msgstr "Pedido de Venda" From 0e1414e141fa488b82f49bb271bd644c3aa3c0b0 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 11 May 2020 23:05:47 -0500 Subject: [PATCH 528/631] [FIX] fieldservice_sale_stock: Set the FSM order on the procurement group --- fieldservice_sale_stock/models/sale_order.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index 4becb92aab..0ad2dd21c9 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -25,8 +25,8 @@ def _link_pickings_to_fsm(self): ('sale_id', '=', rec.id), ('sale_line_id', '=', False), ]) - pickings = rec.picking_ids - for picking in pickings: + rec.procurement_group_id.fsm_order_id = fsm_order.id or False + for picking in rec.picking_ids: picking.write( rec.prepare_fsm_values_for_stock_picking(fsm_order)) for move in picking.move_lines: From d922b09c8c173198730ae4d705183a1e36cf188b Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 19 May 2020 21:09:17 -0500 Subject: [PATCH 529/631] [FIX] fieldservice_sale_stock --- fieldservice_sale_stock/models/sale_order.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index 0ad2dd21c9..4353f7c6c5 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -25,7 +25,8 @@ def _link_pickings_to_fsm(self): ('sale_id', '=', rec.id), ('sale_line_id', '=', False), ]) - rec.procurement_group_id.fsm_order_id = fsm_order.id or False + if rec.procurement_group_id: + rec.procurement_group_id.fsm_order_id = fsm_order.id or False for picking in rec.picking_ids: picking.write( rec.prepare_fsm_values_for_stock_picking(fsm_order)) From fed64dfc4c542866e530b3a60f799c820929da22 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 20 May 2020 15:11:59 +0000 Subject: [PATCH 530/631] fieldservice_sale_stock 12.0.1.0.4 --- fieldservice_sale_stock/__manifest__.py | 2 +- fieldservice_sale_stock/i18n/es.po | 4 ++-- fieldservice_sale_stock/i18n/es_CL.po | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py index 9ac646b4c5..bdf32b4bcd 100644 --- a/fieldservice_sale_stock/__manifest__.py +++ b/fieldservice_sale_stock/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sale Stock', - 'version': '12.0.1.0.3', + 'version': '12.0.1.0.4', 'summary': 'Sell stockable items linked to field service orders.', 'category': 'Field Service', 'author': 'Brian McMaster, Odoo Community Association (OCA)', diff --git a/fieldservice_sale_stock/i18n/es.po b/fieldservice_sale_stock/i18n/es.po index 9d18630450..d770f84b27 100644 --- a/fieldservice_sale_stock/i18n/es.po +++ b/fieldservice_sale_stock/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-03-25 17:13+0000\n" +"PO-Revision-Date: 2020-06-07 05:19+0000\n" "Last-Translator: Nelson Ramírez Sánchez \n" "Language-Team: none\n" "Language: es\n" @@ -19,4 +19,4 @@ msgstr "" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sale Order" -msgstr "Pedidos de Venta" +msgstr "Pedido de Venta" diff --git a/fieldservice_sale_stock/i18n/es_CL.po b/fieldservice_sale_stock/i18n/es_CL.po index 2dbbf3dec4..a7d49c435b 100644 --- a/fieldservice_sale_stock/i18n/es_CL.po +++ b/fieldservice_sale_stock/i18n/es_CL.po @@ -6,15 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-06-07 05:19+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_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sale Order" -msgstr "" +msgstr "Nota de Venta" From 68b6809cc31f702451787292030de51f68e788ad Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 19 Apr 2021 10:51:06 +0530 Subject: [PATCH 531/631] [FIX] Travis --- fieldservice_sale_stock/__manifest__.py | 34 +++++++++---------- fieldservice_sale_stock/models/__init__.py | 4 +-- fieldservice_sale_stock/models/sale_order.py | 26 +++++++------- .../odoo/addons/fieldservice_sale_stock | 1 + setup/fieldservice_sale_stock/setup.py | 6 ++++ 5 files changed, 38 insertions(+), 33 deletions(-) create mode 120000 setup/fieldservice_sale_stock/odoo/addons/fieldservice_sale_stock create mode 100644 setup/fieldservice_sale_stock/setup.py diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py index bdf32b4bcd..ffb310a536 100644 --- a/fieldservice_sale_stock/__manifest__.py +++ b/fieldservice_sale_stock/__manifest__.py @@ -2,23 +2,23 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service - Sale Stock', - 'version': '12.0.1.0.4', - 'summary': 'Sell stockable items linked to field service orders.', - 'category': 'Field Service', - 'author': 'Brian McMaster, Odoo Community Association (OCA)', - 'website': 'https://github.com/OCA/field-service', - 'depends': [ - 'fieldservice_sale', - 'fieldservice_stock', + "name": "Field Service - Sale Stock", + "version": "14.0.1.0.0", + "summary": "Sell stockable items linked to field service orders.", + "category": "Field Service", + "author": "Brian McMaster, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": [ + "fieldservice_sale", + "fieldservice_stock", ], - 'license': 'AGPL-3', - 'development_status': 'Beta', - 'maintainers': [ - 'wolfhall', - 'max3903', - 'brian10048', + "license": "AGPL-3", + "development_status": "Beta", + "maintainers": [ + "wolfhall", + "max3903", + "brian10048", ], - 'installable': True, - 'auto_install': True, + "installable": True, + "auto_install": True, } diff --git a/fieldservice_sale_stock/models/__init__.py b/fieldservice_sale_stock/models/__init__.py index e02b396f5b..db960b74e1 100644 --- a/fieldservice_sale_stock/models/__init__.py +++ b/fieldservice_sale_stock/models/__init__.py @@ -1,6 +1,4 @@ # Copyright (C) 2019 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import ( - sale_order -) +from . import sale_order diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index 4353f7c6c5..8a16403e4b 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -4,16 +4,16 @@ class SaleOrder(models.Model): - _inherit = 'sale.order' + _inherit = "sale.order" def prepare_fsm_values_for_stock_move(self, fsm_order): return { - 'fsm_order_id': fsm_order.id, + "fsm_order_id": fsm_order.id, } def prepare_fsm_values_for_stock_picking(self, fsm_order): return { - 'fsm_order_id': fsm_order.id, + "fsm_order_id": fsm_order.id, } @api.multi @@ -21,23 +21,23 @@ def _link_pickings_to_fsm(self): for rec in self: # TODO: We may want to split the picking to have one picking # per FSM order - fsm_order = self.env['fsm.order'].search([ - ('sale_id', '=', rec.id), - ('sale_line_id', '=', False), - ]) + fsm_order = self.env["fsm.order"].search( + [ + ("sale_id", "=", rec.id), + ("sale_line_id", "=", False), + ] + ) if rec.procurement_group_id: rec.procurement_group_id.fsm_order_id = fsm_order.id or False for picking in rec.picking_ids: - picking.write( - rec.prepare_fsm_values_for_stock_picking(fsm_order)) + picking.write(rec.prepare_fsm_values_for_stock_picking(fsm_order)) for move in picking.move_lines: - move.write( - rec.prepare_fsm_values_for_stock_move(fsm_order)) + move.write(rec.prepare_fsm_values_for_stock_move(fsm_order)) @api.multi def _action_confirm(self): - """ On SO confirmation, link the fsm order on the pickings - created by the sale order """ + """On SO confirmation, link the fsm order on the pickings + created by the sale order""" res = super()._action_confirm() self._link_pickings_to_fsm() return res diff --git a/setup/fieldservice_sale_stock/odoo/addons/fieldservice_sale_stock b/setup/fieldservice_sale_stock/odoo/addons/fieldservice_sale_stock new file mode 120000 index 0000000000..7285d6c925 --- /dev/null +++ b/setup/fieldservice_sale_stock/odoo/addons/fieldservice_sale_stock @@ -0,0 +1 @@ +../../../../fieldservice_sale_stock \ No newline at end of file diff --git a/setup/fieldservice_sale_stock/setup.py b/setup/fieldservice_sale_stock/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/fieldservice_sale_stock/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From f530c3ed4116d105b0a31c9928bd2b7035dad414 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 28 Jul 2021 20:27:09 +0200 Subject: [PATCH 532/631] [FIX] fieldservice_account: Restrict views to authorized groups Not putting groups on the view makes the rest of the users that access to these views to receive a permission error. It's also not enough to put the groups on the field, but the view. --- fieldservice_account/__manifest__.py | 2 +- fieldservice_account/views/account_move.xml | 5 ++++- fieldservice_account/views/fsm_order.xml | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fieldservice_account/__manifest__.py b/fieldservice_account/__manifest__.py index 368e5b536c..618d038c4c 100644 --- a/fieldservice_account/__manifest__.py +++ b/fieldservice_account/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Field Service - Accounting", "summary": "Track invoices linked to Field Service orders", - "version": "14.0.1.0.0", + "version": "14.0.1.1.0", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", "website": "https://github.com/OCA/field-service", diff --git a/fieldservice_account/views/account_move.xml b/fieldservice_account/views/account_move.xml index 66f015779a..53b02bc587 100644 --- a/fieldservice_account/views/account_move.xml +++ b/fieldservice_account/views/account_move.xml @@ -3,6 +3,7 @@ FSM order.invoice.form account.move +
    @@ -441,6 +441,8 @@

    Authors

    Contributors

    @@ -452,7 +454,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    wolfhall max3903 brian10048

    -

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

    +

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

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

    diff --git a/fieldservice_sale_stock/tests/__init__.py b/fieldservice_sale_stock/tests/__init__.py new file mode 100644 index 0000000000..06b87f7321 --- /dev/null +++ b/fieldservice_sale_stock/tests/__init__.py @@ -0,0 +1,5 @@ +# Copyright (C) 2019 Clément Mombereau (Akretion) +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import test_fsm_sale_order diff --git a/fieldservice_sale_stock/tests/test_fsm_sale_order.py b/fieldservice_sale_stock/tests/test_fsm_sale_order.py new file mode 100644 index 0000000000..7898f60539 --- /dev/null +++ b/fieldservice_sale_stock/tests/test_fsm_sale_order.py @@ -0,0 +1,458 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields + +from odoo.addons.fieldservice_sale.tests.test_fsm_sale_common import TestFSMSale + + +class TestFSMSaleOrder(TestFSMSale): + @classmethod + def setUpClass(cls): + super(TestFSMSaleOrder, cls).setUpClass() + cls.test_location = cls.env.ref("fieldservice.test_location") + + # Setup products that when sold will create some FSM orders + cls.setUpFSMProducts() + cls.partner_customer_usd = cls.env["res.partner"].create( + { + "name": "partner_a", + "company_id": False, + } + ) + cls.pricelist_usd = cls.env["product.pricelist"].search( + [("currency_id.name", "=", "USD")], limit=1 + ) + cls.fsm_per_order_1 = cls.env["product.product"].create( + { + "name": "FSM Order per Sale Order #1", + "categ_id": cls.env.ref("product.product_category_3").id, + "standard_price": 85.0, + "list_price": 90.0, + "type": "product", + "uom_id": cls.env.ref("uom.product_uom_unit").id, + "uom_po_id": cls.env.ref("uom.product_uom_unit").id, + "invoice_policy": "order", + "field_service_tracking": "sale", + "fsm_order_template_id": cls.fsm_template_1.id, + } + ) + # Create some sale orders that will use the above products + SaleOrder = cls.env["sale.order"].with_context(tracking_disable=True) + # create a generic Sale Order with one product + # set to create FSM service per sale order + cls.sale_order_1 = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sol_service_per_order_1 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_order_1.name, + "product_id": cls.fsm_per_order_1.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_order_1.uom_id.id, + "price_unit": cls.fsm_per_order_1.list_price, + "order_id": cls.sale_order_1.id, + "tax_id": False, + } + ) + # create a generic Sale Order with one product + # set to create FSM service per sale order line + cls.sale_order_2 = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sol_service_per_line_1 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_line_1.name, + "product_id": cls.fsm_per_line_1.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_line_1.uom_id.id, + "price_unit": cls.fsm_per_line_1.list_price, + "order_id": cls.sale_order_2.id, + "tax_id": False, + } + ) + # create a generic Sale Order with multiple products + # set to create FSM service per sale order line + cls.sale_order_3 = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sol_service_per_line_2 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_line_1.name, + "product_id": cls.fsm_per_line_1.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_line_1.uom_id.id, + "price_unit": cls.fsm_per_line_1.list_price, + "order_id": cls.sale_order_3.id, + "tax_id": False, + } + ) + cls.sol_service_per_line_3 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_line_2.name, + "product_id": cls.fsm_per_line_2.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_line_2.uom_id.id, + "price_unit": cls.fsm_per_line_2.list_price, + "order_id": cls.sale_order_3.id, + "tax_id": False, + } + ) + # create a generic Sale Order with mixed products + # 2 lines based on service per sale order line + # 2 lines based on service per sale order + cls.sale_order_4 = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sol_service_per_line_4 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_line_1.name, + "product_id": cls.fsm_per_line_1.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_line_1.uom_id.id, + "price_unit": cls.fsm_per_line_1.list_price, + "order_id": cls.sale_order_4.id, + "tax_id": False, + } + ) + cls.sol_service_per_line_5 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_line_2.name, + "product_id": cls.fsm_per_line_2.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_line_2.uom_id.id, + "price_unit": cls.fsm_per_line_2.list_price, + "order_id": cls.sale_order_4.id, + "tax_id": False, + } + ) + cls.sol_service_per_order_2 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_order_1.name, + "product_id": cls.fsm_per_order_1.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_order_1.uom_id.id, + "price_unit": cls.fsm_per_order_1.list_price, + "order_id": cls.sale_order_4.id, + "tax_id": False, + } + ) + cls.sol_service_per_order_3 = cls.env["sale.order.line"].create( + { + "name": cls.fsm_per_order_2.name, + "product_id": cls.fsm_per_order_2.id, + "product_uom_qty": 1, + "product_uom": cls.fsm_per_order_2.uom_id.id, + "price_unit": cls.fsm_per_order_2.list_price, + "order_id": cls.sale_order_4.id, + "tax_id": False, + } + ) + + def _isp_account_installed(self): + """Checks if module is installed which will require more + logic for the tests. + :return Boolean indicating the installed status of the module + """ + result = False + isp_account_module = self.env["ir.module.module"].search( + [("name", "=", "fieldservice_isp_account")] + ) + if isp_account_module and isp_account_module.state == "installed": + result = True + return result + + def _fulfill_order(self, order): + """Extra logic required to fulfill FSM order status and prevent + validation error when attempting to complete the FSM order + :return FSM Order with additional fields set + """ + analytic_account = self.env.ref("analytic.analytic_administratif") + self.test_location.analytic_account_id = analytic_account.id + timesheet = self.env["account.analytic.line"].create( + { + "name": "timesheet_line", + "unit_amount": 1, + "account_id": analytic_account.id, + "user_id": self.env.ref("base.partner_admin").id, + "product_id": self.env.ref( + "fieldservice_isp_account.field_service_regular_time" + ).id, + } + ) + order.write( + { + "employee_timesheet_ids": [(6, 0, timesheet.ids)], + } + ) + return order + + def test_sale_order_1(self): + """Test the sales order 1 flow from sale to invoice. + - One FSM order linked to the Sale Order should be created. + - One Invoice linked to the FSM Order should be created. + """ + # Confirm the sale order + self.sale_order_1.action_confirm() + # 1 FSM order created + self.assertEqual( + len(self.sale_order_1.fsm_order_ids.ids), + 1, + "FSM Sale: Sale Order 1 should create 1 FSM Order", + ) + FSM_Order = self.env["fsm.order"] + fsm_order = FSM_Order.search( + [("id", "=", self.sale_order_1.fsm_order_ids[0].id)] + ) + # Sale Order linked to FSM order + self.assertEqual( + len(fsm_order.ids), 1, "FSM Sale: Sale Order not linked to FSM Order" + ) + + # Complete the FSM order + if self._isp_account_installed(): + fsm_order = self._fulfill_order(fsm_order) + fsm_order.write( + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } + ) + fsm_order.action_complete() + + # Invoice the order + invoice = self.sale_order_1._create_invoices() + # 1 invoices created + self.assertEqual( + len(invoice.ids), 1, "FSM Sale: Sale Order 1 should create 1 invoice" + ) + self.assertTrue( + fsm_order in invoice.fsm_order_ids, + "FSM Sale: Invoice should be linked to FSM Order", + ) + + def test_sale_order_2(self): + """Test the sales order 2 flow from sale to invoice. + - One FSM order linked to the Sale Order Line should be created. + - The FSM Order should update qty_delivered when completed. + - One Invoice linked to the FSM Order should be created. + """ + sol = self.sol_service_per_line_1 + # Confirm the sale order + self.sale_order_2.action_confirm() + # 1 order created + self.assertEqual( + len(self.sale_order_2.fsm_order_ids.ids), + 1, + "FSM Sale: Sale Order 2 should create 1 FSM Order", + ) + FSM_Order = self.env["fsm.order"] + fsm_order = FSM_Order.search([("id", "=", sol.fsm_order_id.id)]) + # SOL linked to FSM order + self.assertTrue( + sol.fsm_order_id.id == fsm_order.id, + "FSM Sale: Sale Order 2 Line not linked to FSM Order", + ) + + # Complete the FSM order + if self._isp_account_installed(): + fsm_order = self._fulfill_order(fsm_order) + fsm_order.write( + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } + ) + fsm_order.action_complete() + # qty delivered should be updated + self.assertTrue( + sol.qty_delivered == sol.product_uom_qty, + "FSM Sale: Sale Order Line qty delivered not equal to qty ordered", + ) + + # Invoice the order + invoice = self.sale_order_2._create_invoices() + # 1 invoice created + self.assertEqual( + len(invoice.ids), 1, "FSM Sale: Sale Order 2 should create 1 invoice" + ) + self.assertTrue( + fsm_order in invoice.fsm_order_ids, + "FSM Sale: Invoice should be linked to FSM Order", + ) + + def test_sale_order_3(self): + """Test sale order 3 flow from sale to invoice. + - An FSM order should be created for each Sale Order Line. + - The FSM Order should update qty_delivered when completed. + - An Invoice linked to each FSM Order should be created. + """ + sol1 = self.sol_service_per_line_2 + sol2 = self.sol_service_per_line_3 + + # Confirm the sale order + self.sale_order_3.action_confirm() + # 2 orders created and SOLs linked to FSM orders + self.assertEqual( + len(self.sale_order_3.fsm_order_ids.ids), + 2, + "FSM Sale: Sale Order 3 should create 2 FSM Orders", + ) + FSM_Order = self.env["fsm.order"] + fsm_order_1 = FSM_Order.search([("id", "=", sol1.fsm_order_id.id)]) + self.assertTrue( + sol1.fsm_order_id.id == fsm_order_1.id, + "FSM Sale: Sale Order Line 2 not linked to FSM Order", + ) + fsm_order_2 = FSM_Order.search([("id", "=", sol2.fsm_order_id.id)]) + self.assertTrue( + sol2.fsm_order_id.id == fsm_order_2.id, + "FSM Sale: Sale Order Line 3 not linked to FSM Order", + ) + + # Complete the FSM orders + if self._isp_account_installed(): + fsm_order_1 = self._fulfill_order(fsm_order_1) + fsm_order_1.write( + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } + ) + fsm_order_1.action_complete() + self.assertTrue( + sol1.qty_delivered == sol1.product_uom_qty, + "FSM Sale: Sale Order Line qty delivered not equal to qty ordered", + ) + if self._isp_account_installed(): + fsm_order_2 = self._fulfill_order(fsm_order_2) + fsm_order_2.write( + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } + ) + fsm_order_2.action_complete() + self.assertTrue( + sol2.qty_delivered == sol2.product_uom_qty, + "FSM Sale: Sale Order Line qty delivered not equal to qty ordered", + ) + + # Invoice the sale order + invoices = self.sale_order_3._create_invoices() + # 2 invoices created + self.assertEqual( + len(invoices.ids), 1, "FSM Sale: Sale Order 3 should create 1 invoices" + ) + inv_fsm_orders = FSM_Order + for inv in invoices: + inv_fsm_orders |= inv.fsm_order_ids + self.assertTrue( + fsm_order_1 in inv_fsm_orders, + "FSM Sale: FSM Order 1 should be linked to invoice", + ) + self.assertTrue( + fsm_order_2 in inv_fsm_orders, + "FSM Sale: FSM Order 2 should be linked to invoice", + ) + + def test_sale_order_4(self): + """Test sale order 4 flow from sale to invoice. + - Two FSM orders linked to the Sale Order Lines should be created. + - One FSM order linked to the Sale Order should be created. + - One Invoices should be created (One for each FSM Order). + """ + sol1 = self.sol_service_per_line_4 + sol2 = self.sol_service_per_line_5 + # sol3 = self.sol_service_per_order_2 + # sol4 = self.sol_service_per_order_3 + + # Confirm the sale order + self.sale_order_4.action_confirm() + # 3 orders created + self.assertEqual( + len(self.sale_order_4.fsm_order_ids.ids), + 3, + "FSM Sale: Sale Order 4 should create 3 FSM Orders", + ) + FSM_Order = self.env["fsm.order"] + fsm_order_1 = FSM_Order.search([("id", "=", sol1.fsm_order_id.id)]) + self.assertTrue( + sol1.fsm_order_id.id == fsm_order_1.id, + "FSM Sale: Sale Order Line not linked to FSM Order", + ) + fsm_order_2 = FSM_Order.search([("id", "=", sol2.fsm_order_id.id)]) + self.assertTrue( + sol2.fsm_order_id.id == fsm_order_2.id, + "FSM Sale: Sale Order Line not linked to FSM Order", + ) + fsm_order_3 = FSM_Order.search( + [ + ("id", "in", self.sale_order_4.fsm_order_ids.ids), + ("sale_line_id", "=", False), + ] + ) + self.assertEqual( + len(fsm_order_3.ids), 1, "FSM Sale: FSM Order not linked to Sale Order" + ) + + # Complete the FSM order + if self._isp_account_installed(): + fsm_order_1 = self._fulfill_order(fsm_order_1) + fsm_order_1.write( + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } + ) + fsm_order_1.action_complete() + self.assertTrue( + sol1.qty_delivered == sol1.product_uom_qty, + "FSM Sale: Sale Order Line qty delivered not equal to qty ordered", + ) + if self._isp_account_installed(): + fsm_order_2 = self._fulfill_order(fsm_order_2) + fsm_order_2.write( + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } + ) + fsm_order_2.action_complete() + self.assertTrue( + sol2.qty_delivered == sol2.product_uom_qty, + "FSM Sale: Sale Order Line qty delivered not equal to qty ordered", + ) + if self._isp_account_installed(): + fsm_order_3 = self._fulfill_order(fsm_order_3) + fsm_order_3.write( + { + "date_end": fields.Datetime.today(), + "resolution": "Work completed", + } + ) + fsm_order_3.action_complete() + # qty_delivered does not update for FSM orders linked only to the sale + + # Invoice the sale order + invoices = self.sale_order_4._create_invoices() + # 3 invoices created + self.assertEqual( + len(invoices.ids), 1, "FSM Sale: Sale Order 4 should create 1 invoice" + ) From cc139fb54b71dc0eba2d75f35e47efc5e620ec45 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 3 Aug 2021 19:40:12 +0000 Subject: [PATCH 538/631] [UPD] Update fieldservice_sale_stock.pot --- .../i18n/fieldservice_sale_stock.pot | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot b/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot index 92e47bb20e..6570a9956a 100644 --- a/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot +++ b/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_stock +# * fieldservice_sale_stock # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,7 +14,21 @@ msgstr "" "Plural-Forms: \n" #. module: fieldservice_sale_stock -#: model:ir.model,name:fieldservice_sale_stock.model_sale_order -msgid "Sale Order" +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__id +msgid "ID" +msgstr "" + +#. module: fieldservice_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order____last_update +msgid "Last Modified on" msgstr "" +#. module: fieldservice_sale_stock +#: model:ir.model,name:fieldservice_sale_stock.model_sale_order +msgid "Sales Order" +msgstr "" From 59ec08849be26e0eda671c16837b7617fa983b35 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 3 Aug 2021 19:46:24 +0000 Subject: [PATCH 539/631] [UPD] addons table in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 58c349d940..545a200e57 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ addon | version | summary [fieldservice_purchase](fieldservice_purchase/) | 14.0.1.0.0 | Manage FSM Purchases [fieldservice_route](fieldservice_route/) | 14.0.1.0.0 | Organize the routes of each day. [fieldservice_sale](fieldservice_sale/) | 14.0.1.2.0 | Sell field services. +[fieldservice_sale_stock](fieldservice_sale_stock/) | 14.0.1.0.0 | Sell stockable items linked to field service orders. [fieldservice_skill](fieldservice_skill/) | 14.0.1.0.0 | Manage your Field Service workers skills [fieldservice_stage_server_action](fieldservice_stage_server_action/) | 14.0.1.0.0 | Execute server actions when reaching a Field Service stage [fieldservice_stock](fieldservice_stock/) | 14.0.1.0.0 | Integrate the logistics operations with Field Service From 23c51d26b326f3246a30d69b41833be24668ab1a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 3 Aug 2021 19:46:28 +0000 Subject: [PATCH 540/631] [ADD] setup.py --- setup/_metapackage/VERSION.txt | 2 +- setup/_metapackage/setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 9fe02c6306..27df65997f 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -14.0.20210727.1 \ No newline at end of file +14.0.20210803.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index e9fcc67360..4bc8169648 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -26,6 +26,7 @@ 'odoo14-addon-fieldservice_purchase', 'odoo14-addon-fieldservice_route', 'odoo14-addon-fieldservice_sale', + 'odoo14-addon-fieldservice_sale_stock', 'odoo14-addon-fieldservice_skill', 'odoo14-addon-fieldservice_stage_server_action', 'odoo14-addon-fieldservice_stock', From 28427c16791af3e8421305f70551d6314cba0013 Mon Sep 17 00:00:00 2001 From: Daniel Reis Date: Thu, 5 Aug 2021 07:18:41 +0000 Subject: [PATCH 541/631] Added translation using Weblate (Portuguese (Portugal)) --- fieldservice/i18n/pt_PT.po | 3582 ++++++++++++++++++++++++++++++++++++ 1 file changed, 3582 insertions(+) create mode 100644 fieldservice/i18n/pt_PT.po diff --git a/fieldservice/i18n/pt_PT.po b/fieldservice/i18n/pt_PT.po new file mode 100644 index 0000000000..55d22bb5ce --- /dev/null +++ b/fieldservice/i18n/pt_PT.po @@ -0,0 +1,3582 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__meeting_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__meeting_count +msgid "# Meetings" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__opportunity_count +msgid "# Opportunities" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__task_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__task_count +msgid "# Tasks" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__supplier_invoice_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__supplier_invoice_count +msgid "# Vendor Bills" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__owned_location_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__owned_location_count +#: model:ir.model.fields,field_description:fieldservice.field_res_partner__owned_location_count +#: model:ir.model.fields,field_description:fieldservice.field_res_users__owned_location_count +msgid "# of Owned Locations" +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_order.py:0 +#, python-format +msgid "%s is a holiday (%s)." +msgstr "" + +#. module: fieldservice +#: model:ir.actions.report,print_report_name:fieldservice.action_report_fsm_order +msgid "'Service Order - %s' % (object.name)" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid " ( On " +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid " : Lat : " +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid " ; Long: " +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "Reporting" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "View" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document +msgid "Assigned To:" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document +msgid "Date Completed:" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document +msgid "ETA:" +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/wizard/fsm_wizard.py:0 +#, python-format +msgid "A Field Service Location related to that partner already exists." +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/wizard/fsm_wizard.py:0 +#, python-format +msgid "A Field Service Worker related to that partner already exists." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_account_payable_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_account_payable_id +msgid "Account Payable" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_account_receivable_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_account_receivable_id +msgid "Account Receivable" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_needaction +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_needaction +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_needaction +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_needaction +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__active +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__active +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__active +msgid "Active" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__active_lang_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__active_lang_count +msgid "Active Lang Count" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_ids +msgid "Activities" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_exception_decoration +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_exception_decoration +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_exception_decoration +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_exception_decoration +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_state +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_state +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_state +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_state +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_state +msgid "Activity State" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_type_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_type_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_type_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_type_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__date_end +msgid "Actual End" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__date_start +msgid "Actual Start" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__duration +msgid "Actual duration" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_order__duration +msgid "Actual duration in hours" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_person +msgid "Add Field Service Workers here." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_dash_equipment +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_equipment +msgid "Add a Field Service Equipment here." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_category +msgid "Add a Field Service Worker Category here." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view +msgid "Add a description..." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__additional_info +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__additional_info +msgid "Additional info" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Address" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__type +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__type +msgid "Address Type" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_order__state_name +msgid "" +"Administrative divisions of a country. E.g. Fed. State, Departement, Canton" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__agreement_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__agreement_ids +msgid "Agreements" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "All" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.menu_fsm_operation_order +msgid "All Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__relation_all_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__relation_all_ids +msgid "All relations with current partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__lang +#: model:ir.model.fields,help:fieldservice.field_fsm_person__lang +msgid "" +"All the emails and documents sent to this contact will be translated in this" +" language." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_google_map +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Allow Field Service Google Map" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_web_timeline_view +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Allow Field Service Web Timeline View" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__location_id +msgid "Assigned Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__person_id +msgid "Assigned Operator" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__person_id +msgid "Assigned To" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_attachment_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_attachment_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_attachment_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_attachment_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Auto-fill the equipments on the order" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Auto-fill the workers on the location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_company__auto_populate_equipments_on_order +msgid "Auto-populate Equipments on Order based on Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_company__auto_populate_persons_on_location +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__auto_populate_persons_on_location +msgid "Auto-populate Workers on Location based on Territory" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__auto_populate_equipments_on_order +msgid "Auto-populate equipments on Order based on the Location" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "" +"Auto-populate the equipments on the order based on the location content" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "" +"Auto-populate the preferred workers of a location based on the territory" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "" +"Automatically creates a day route when an order is assigned and scheduled" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__receipt_reminder_email +#: model:ir.model.fields,help:fieldservice.field_fsm_person__receipt_reminder_email +msgid "" +"Automatically send a confirmation email to the vendor X days before the " +"expected receipt date, asking him to confirm the exact date." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__bank_account_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__bank_account_count +msgid "Bank" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__bank_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__bank_ids +msgid "Banks" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__barcode +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__barcode +msgid "Barcode" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__is_blacklisted +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__is_blacklisted +msgid "Blacklist" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__mobile_blacklisted +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__mobile_blacklisted +msgid "Blacklisted Phone Is Mobile" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__phone_blacklisted +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__phone_blacklisted +msgid "Blacklisted Phone is Phone" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_bounce +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_bounce +msgid "Bounce" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__branch_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__branch_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__branch_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Branch" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__branch_manager_id +msgid "Branch Manager" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_crm +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "CRM" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.partner_wizard_view +msgid "Cancel" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Cancel Order" +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_stage.py:0 +#, python-format +msgid "" +"Cannot create FSM Stage because it has the same Type and Sequence of an " +"existing FSM Stage." +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_order.py:0 +#, python-format +msgid "Cannot move to completed from Kanban" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__category_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__category_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__category_ids +#: model:ir.ui.menu,name:fieldservice.menu_hr_skill +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_category_tree_view +msgid "Categories" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_category_form_view +msgid "Category" +msgstr "" + +#. module: fieldservice +#: model:ir.model.constraint,message:fieldservice.constraint_fsm_category_name_uniq +msgid "Category name already exists!" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_change_management +msgid "Change Management" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__channel_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__channel_ids +msgid "Channels" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Check collected payments" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__is_company +#: model:ir.model.fields,help:fieldservice.field_fsm_person__is_company +msgid "Check if the contact is a company, otherwise it is a person" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Check inventory" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Check the amount collected by the worker during the route" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_route_account +msgid "Check the amount collected during the route" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_route_stock +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Check the inventory of the vehicle at the end of the route" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__employee +#: model:ir.model.fields,help:fieldservice.field_fsm_person__employee +msgid "Check this box if this contact is an Employee." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__child_ids +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view +msgid "Children" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_template__team_id +msgid "Choose a team to be set on orders of this template" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__city +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__city +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__city +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "City" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_order__tag_ids +msgid "Classify and analyze your orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__custom_color +msgid "Color Code" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__color +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__color +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__color +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__color +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__color +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__color +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__color +msgid "Color Index" +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_stage.py:0 +#, python-format +msgid "Color code should be Hex Code. Ex:-#FFFFFF" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__commercial_partner_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__commercial_partner_id +msgid "Commercial Entity" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_res_company +msgid "Companies" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__ref_company_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__ref_company_ids +msgid "Companies that refers to partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__company_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__company_id +msgid "Company" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__company_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__company_name +msgid "Company Name" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__commercial_company_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__commercial_company_name +msgid "Company Name Entity" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__company_type +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__company_type +msgid "Company Type" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_gid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_gid +msgid "Company database ID" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_category__company_id +msgid "Company related to this category" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__company_id +msgid "Company related to this equipment" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_order__company_id +msgid "Company related to this order" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_tag__company_id +msgid "Company related to this tag" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_team__company_id +msgid "Company related to this team" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_template__company_id +msgid "Company related to this template" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Complete" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contact_address +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__contact_address +msgid "Complete Address" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__complete_name +msgid "Complete Name" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.config +msgid "Configuration" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_res_partner +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__child_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__contact_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__child_ids +msgid "Contact" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Contacts" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contact_count +msgid "Contacts Count" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.partner_wizard_view +msgid "Convert" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.partner_fsm_action +msgid "Convert to FSM Record" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.partner_wizard_view +msgid "Convert to a Field Service Worker or Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__payment_token_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__payment_token_count +msgid "Count Payment Token" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_bounce +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_bounce +msgid "Counter of the number of bounced emails for this contact" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__country_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__country_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__country_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Country" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Create FSM Orders from Opportunities." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_customer +msgid "Create a Customer." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_location +msgid "Create a Service Location" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_stage +msgid "Create a Stage." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_team_settings +msgid "Create a new team" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_tag +msgid "Create a tag." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_dash_order +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_operation_order +msgid "Create an Order." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_template +msgid "Create an order template" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Create multiple FSM Locations at once using Location Builder Wizard" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_location_person +msgid "Create the linked locations of a worker." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "" +"Create vendor bills and customer invoices when completing service orders.\n" +" Track costs and revenues." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__create_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__create_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__credit_limit +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__credit_limit +msgid "Credit Limit" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__currency_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__currency_id +msgid "Currency" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__current_date +msgid "Current Date" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__current_location_id +msgid "Current Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_stock_customer +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_stock_customer +msgid "Customer Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_payment_term_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_payment_term_id +msgid "Customer Payment Terms" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__customer_rank +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__customer_rank +msgid "Customer Rank" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_customer +#: model:ir.ui.menu,name:fieldservice.menu_fsm_customer +msgid "Customers" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.dashboard +msgid "Dashboard" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__date +msgid "Date" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__reminder_date_before_receipt +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__reminder_date_before_receipt +msgid "Days Before Receipt" +msgstr "" + +#. module: fieldservice +#: model:fsm.team,name:fieldservice.fsm_team_default +msgid "Default Team" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_template__duration +msgid "Default duration in hours" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__trust +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__trust +msgid "Degree of trust you have in this debtor" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_kanban_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_kanban_view +msgid "Delete" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__description +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__description +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__description +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__description +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__description +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +#: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document +msgid "Description" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__direction +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Directions" +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_dispatcher +msgid "Dispatcher" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__display_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__display_name +#: model:ir.model.fields,field_description:fieldservice.field_res_company__display_name +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__display_name +#: model:ir.model.fields,field_description:fieldservice.field_res_partner__display_name +#: model:ir.model.fields,field_description:fieldservice.field_res_territory__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Display locations and orders on a map with OpenStreetMap" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__district_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__district_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__district_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "District" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__district_manager_id +msgid "District Manager" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "Done" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_kanban_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_kanban_view +msgid "Dropdown menu" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Due Within 30 Days" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Due Within 7 Days" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__duration +msgid "Duration" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__request_early +msgid "Earliest Request Date" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_kanban_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_kanban_view +msgid "Edit" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__partner_share +#: model:ir.model.fields,help:fieldservice.field_fsm_person__partner_share +msgid "" +"Either customer (not a user), either shared user. Indicated the current " +"partner is a customer without access or with a limited access created for " +"sharing data." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__email +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__email +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__email +msgid "Email" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__employee +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__employee +msgid "Employee" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__equipment_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__equipment_id +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_stage__stage_type__equipment +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_tree_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Equipment" +msgstr "" + +#. module: fieldservice +#: model:ir.model.constraint,message:fieldservice.constraint_fsm_equipment_name_uniq +msgid "Equipment name already exists!" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_report_equipment +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__equipment_ids +#: model:ir.ui.menu,name:fieldservice.menu_fsm_dash_equipment +#: model:ir.ui.menu,name:fieldservice.menu_fsm_equipment +#: model:ir.ui.menu,name:fieldservice.menu_fsm_report_equipment +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_graph_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_pivot_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Equipments" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_equipment +msgid "Equipments Report" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Execution" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_stage__legend_priority +msgid "" +"Explanation text to help users using the star and priority mechanism on " +"stages or orders that are in this stage." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document +msgid "FS Order #" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order_type__internal_type__fsm +msgid "FSM" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +msgid "FSM Equipment Name" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "FSM Location Builder" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_graph_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_pivot_view +msgid "FSM Locations" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "FSM Order Name" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_calendar_view +msgid "FSM Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_person_calendar_filter +msgid "FSM Person Calendar Filter" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_wizard +msgid "FSM Record Conversion" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__fsm_person_id +msgid "FSM Worker" +msgstr "" + +#. module: fieldservice +#: model:ir.module.category,name:fieldservice.fsm +#: model:ir.ui.menu,name:fieldservice.root +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_partner_fields +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Field Service" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_category +msgid "Field Service Category" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_dash_equipment +#: model:ir.actions.act_window,name:fieldservice.action_fsm_equipment +#: model:ir.model,name:fieldservice.model_fsm_equipment +msgid "Field Service Equipment" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_location +msgid "Field Service Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_location_person +msgid "Field Service Location Person Info" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_template +msgid "Field Service Order Template" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_order_type +msgid "Field Service Order Type" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_stage +msgid "Field Service Stage" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_tag +msgid "Field Service Tag" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_team +msgid "Field Service Team" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_person +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Field Service Worker" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_fsm_category +msgid "Field Service Worker Category" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_person +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__person_ids +#: model:ir.model.fields,field_description:fieldservice.field_res_territory__person_ids +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_tree +#: model_terms:ir.ui.view,arch_db:fieldservice.res_territory_form_view_inherit +msgid "Field Service Workers" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__phone_sanitized +#: model:ir.model.fields,help:fieldservice.field_fsm_person__phone_sanitized +msgid "" +"Field used to store sanitized phone number. Helps speeding up searches and " +"comparisons." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_account_position_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_account_position_id +msgid "Fiscal Position" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__fold +msgid "Folded in Kanban" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_follower_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_follower_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_follower_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_follower_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_channel_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_channel_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_channel_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_channel_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_partner_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_partner_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_partner_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_partner_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_type_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_location__activity_type_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_order__activity_type_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_person__activity_type_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_team__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__email_formatted +#: model:ir.model.fields,help:fieldservice.field_fsm_person__email_formatted +msgid "Format email address \"Name \"" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__email_formatted +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__email_formatted +msgid "Formatted Email" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__full_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__full_name +msgid "Full Name" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Future Orders" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "General Notes" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_latitude +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_latitude +msgid "Geo Latitude" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Geo Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_longitude +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_longitude +msgid "Geo Longitude" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Geolocate" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Geolocation" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__date_localization +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__date_localization +msgid "Geolocation Date" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Group By" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__has_unreconciled_entries +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__has_unreconciled_entries +msgid "Has Unreconciled Entries" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__search_relation_type_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__search_relation_type_id +msgid "Has relation of type" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__search_relation_partner_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__search_relation_partner_id +msgid "Has relation with" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__search_relation_partner_category_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__search_relation_partner_category_id +msgid "Has relation with a partner in category" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__hide +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__hide +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__hide +msgid "Hide" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__2 +msgid "High" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__id +#: model:ir.model.fields,field_description:fieldservice.field_res_company__id +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__id +#: model:ir.model.fields,field_description:fieldservice.field_res_partner__id +#: model:ir.model.fields,field_description:fieldservice.field_res_territory__id +msgid "ID" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__im_status +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__im_status +msgid "IM Status" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_exception_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_exception_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_exception_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_exception_icon +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_exception_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_location__activity_exception_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_order__activity_exception_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_person__activity_exception_icon +#: model:ir.model.fields,help:fieldservice.field_fsm_team__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__message_needaction +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__message_unread +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_needaction +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_unread +#: model:ir.model.fields,help:fieldservice.field_fsm_order__message_needaction +#: model:ir.model.fields,help:fieldservice.field_fsm_order__message_unread +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_needaction +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_unread +#: model:ir.model.fields,help:fieldservice.field_fsm_team__message_needaction +#: model:ir.model.fields,help:fieldservice.field_fsm_team__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__message_has_error +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__message_has_sms_error +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_has_error +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_has_sms_error +#: model:ir.model.fields,help:fieldservice.field_fsm_order__message_has_error +#: model:ir.model.fields,help:fieldservice.field_fsm_order__message_has_sms_error +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_has_error +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_has_sms_error +#: model:ir.model.fields,help:fieldservice.field_fsm_team__message_has_error +#: model:ir.model.fields,help:fieldservice.field_fsm_team__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__team_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__team_id +msgid "" +"If set, this Sales Team will be used for sales and assignments related to " +"this partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__is_blacklisted +#: model:ir.model.fields,help:fieldservice.field_fsm_person__is_blacklisted +msgid "" +"If the email address is on the blacklist, the contact won't receive mass " +"mailing anymore, from any list" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__phone_sanitized_blacklisted +#: model:ir.model.fields,help:fieldservice.field_fsm_person__phone_sanitized_blacklisted +msgid "" +"If the sanitized phone number is on the blacklist, the contact won't receive" +" mass mailing sms anymore, from any list" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__image_1920 +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__image_1920 +msgid "Image" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__image_1024 +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__image_1024 +msgid "Image 1024" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__image_128 +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__image_128 +msgid "Image 128" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__image_256 +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__image_256 +msgid "Image 256" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__image_512 +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__image_512 +msgid "Image 512" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__mobile_blacklisted +#: model:ir.model.fields,help:fieldservice.field_fsm_person__mobile_blacklisted +msgid "" +"Indicates if a blacklisted sanitized phone number is a mobile number. Helps " +"distinguish which number is blacklisted when there is both a " +"mobile and phone field in a model." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__phone_blacklisted +#: model:ir.model.fields,help:fieldservice.field_fsm_person__phone_blacklisted +msgid "" +"Indicates if a blacklisted sanitized phone number is a phone number. Helps " +"distinguish which number is blacklisted when there is both a " +"mobile and phone field in a model." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__industry_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__industry_id +msgid "Industry" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__todo +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__instructions +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_template_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document +msgid "Instructions" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__internal_type +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__internal_type +msgid "Internal Type" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__invoice_warn +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__invoice_warn +msgid "Invoice" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__type +#: model:ir.model.fields,help:fieldservice.field_fsm_person__type +msgid "" +"Invoice & Delivery addresses are used in sales orders. Private addresses are" +" only visible by authorized users." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_account +msgid "Invoice your FSM orders" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Invoice your Service Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__invoice_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__invoice_ids +msgid "Invoices" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__is_button +msgid "Is Button" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_is_follower +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_is_follower +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_is_follower +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_is_follower +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__is_company +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__is_company +msgid "Is a Company" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_location +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__fsm_location +#: model:ir.model.fields,field_description:fieldservice.field_res_partner__fsm_location +#: model:ir.model.fields,field_description:fieldservice.field_res_users__fsm_location +msgid "Is a FS Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_person +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__fsm_person +#: model:ir.model.fields,field_description:fieldservice.field_res_partner__fsm_person +#: model:ir.model.fields,field_description:fieldservice.field_res_users__fsm_person +msgid "Is a FS Worker" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__is_closed +msgid "Is a close stage" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__is_default +msgid "Is a default stage" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__function +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__function +msgid "Job Position" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__journal_item_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__journal_item_count +msgid "Journal Items" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__lang +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__lang +msgid "Language" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template____last_update +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard____last_update +#: model:ir.model.fields,field_description:fieldservice.field_res_company____last_update +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings____last_update +#: model:ir.model.fields,field_description:fieldservice.field_res_partner____last_update +#: model:ir.model.fields,field_description:fieldservice.field_res_territory____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__write_uid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__write_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__calendar_last_notif_ack +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__calendar_last_notif_ack +msgid "Last notification marked as read from base Calendar" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__last_time_entries_checked +#: model:ir.model.fields,help:fieldservice.field_fsm_person__last_time_entries_checked +msgid "" +"Last time the invoices & payments matching was performed for this partner. " +"It is set either if there's not at least an unreconciled debit and an " +"unreconciled credit or if you click the \"Done\" button." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__last_time_entries_checked +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__last_time_entries_checked +msgid "Latest Invoices & Payments Matching Date" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__request_late +msgid "Latest Request Date" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_repair +msgid "Link FSM orders to MRP Repair orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_maintenance +msgid "Link FSM orders to maintenance requests" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_fleet +msgid "Link FSM vehicles to Fleet vehicles" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Link Field Service vehicles with Fleet vehicles" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Link to Fleet Vehicles" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Link your FSM orders to MRP repair orders" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Link your FSM orders to Projects and Project Tasks" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Link your FSM orders to maintenance requests" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__location_ids +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Linked Locations" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__location_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__location_id +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_stage__stage_type__location +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_wizard__fsm_record_type__location +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view +msgid "Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__location_directions +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Location Directions" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__notes +msgid "Location Notes" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_location_person +msgid "Location Persons" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__phone +msgid "Location Phone" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_location +msgid "Location Reports." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_form_view +msgid "Location Worker" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.menu_fsm_location_person +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_tree_view +msgid "Location Workers" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_report_location +#: model:ir.ui.menu,name:fieldservice.menu_fsm_config_location +#: model:ir.ui.menu,name:fieldservice.menu_fsm_fsm_location +#: model:ir.ui.menu,name:fieldservice.menu_fsm_report_location +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_tree_view +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Locations" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__1 +msgid "Low" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "MRP Repair" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_main_attachment_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_main_attachment_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_main_attachment_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_main_attachment_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Maintenance" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Make sure to send the right worker with the appropriate skills" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_agreement +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Agreements" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__group_fsm_category +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Categories" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_distribution +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Distribution" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__group_fsm_equipment +msgid "Manage Equipment" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Equipments" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_activity +msgid "Manage FSM Activities" +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_equipment +msgid "Manage Field Service Equipment" +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_template +msgid "Manage Field Service Order Templates" +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_tag +msgid "Manage Field Service Tags" +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_team +msgid "Manage Field Service Teams" +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_category +msgid "Manage Field Service Worker Categories" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Order Activities" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Order Sizes" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Order Sub-Statuses" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Order Templates" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Recurring Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_skill +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Skills" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_substatus +msgid "Manage Sub-Statuses" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__group_fsm_tag +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Tags" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__group_fsm_team +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Teams" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__group_fsm_template +msgid "Manage Template" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_vehicle +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage Vehicles" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage activities" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage agreements and contracts" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage different categories of Field Service workers" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage different teams of Field Service workers" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage equipments at the service location" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "" +"Manage inventory and stock operations.\n" +" Automatically activate Lots & Serial Numbers." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage recurring orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_route +msgid "Manage routes" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage routes of your workers" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_size +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage sizes for orders and locations" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage sub-statuses" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_purchase +msgid "Manage subcontractors and their pricelists" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage subcontractors with pricelists" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage tags on service orders" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage templates" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage vehicles" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Manage your distribution structure" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__managed_by_id +msgid "Managed By" +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_manager +msgid "Manager" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Mapping Tools" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.data +msgid "Master Data" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person_calendar_filter__user_id +msgid "Me" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__meeting_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__meeting_ids +msgid "Meetings" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_has_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_has_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_has_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_has_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__invoice_warn_msg +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__invoice_warn_msg +msgid "Message for Invoice" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__purchase_warn_msg +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__purchase_warn_msg +msgid "Message for Purchase Order" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_warn_msg +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_warn_msg +msgid "Message for Sales Order" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__picking_warn_msg +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__picking_warn_msg +msgid "Message for Stock Picking" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_ids +msgid "Messages" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__mobile +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__mobile +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__mobile +msgid "Mobile" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__my_activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__my_activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__my_activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__my_activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "My Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order_type__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__name +msgid "Name" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "Need Assigned" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "Need Scheduled" +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_order.py:0 +#: code:addons/fieldservice/models/fsm_order.py:0 +#: code:addons/fieldservice/models/fsm_order.py:0 +#: code:addons/fieldservice/models/fsm_order.py:0 +#, python-format +msgid "New" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_date_deadline +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_summary +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_summary +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_summary +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_summary +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_type_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_type_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_type_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_type_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Next Stage" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__0 +msgid "Normal" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__email_normalized +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__email_normalized +msgid "Normalized Email" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__notes +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__comment +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__comment +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view +msgid "Notes" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_needaction_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_needaction_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_needaction_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_needaction_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__reminder_date_before_receipt +#: model:ir.model.fields,help:fieldservice.field_fsm_person__reminder_date_before_receipt +msgid "Number of days to send reminder email before the promised receipt date" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_has_error_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_has_error_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_has_error_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_has_error_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__message_needaction_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_needaction_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_order__message_needaction_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_needaction_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_team__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__message_has_error_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_has_error_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_order__message_has_error_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_has_error_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_team__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__message_unread_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_location__message_unread_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_order__message_unread_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_person__message_unread_counter +#: model:ir.model.fields,help:fieldservice.field_fsm_team__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__calendar_id +msgid "Office Hours" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__on_time_rate +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__on_time_rate +msgid "On-Time Delivery Rate" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.operations +msgid "Operations" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__opportunity_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__opportunity_ids +msgid "Opportunities" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__opportunity_count +msgid "Opportunity" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__display_name +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_stage__stage_type__order +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Order" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_assigned +msgid "Order Assigned" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_cancelled +msgid "Order Cancelled" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_completed +msgid "Order Completed" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_confirmed +msgid "Order Confirmed" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_new +msgid "Order Created" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_enroute +msgid "Order En Route" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_scheduled +msgid "Order Scheduled" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,name:fieldservice.mt_order_started +msgid "Order Started" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_form +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_tree +msgid "Order Team" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_template +msgid "Order Templates" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_order_type +#: model:ir.ui.menu,name:fieldservice.menu_fsm_order_type +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_type_tree_view +msgid "Order Types" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_assigned +msgid "Order assigned" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_cancelled +msgid "Order cancelled" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_completed +msgid "Order completed" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_confirmed +msgid "Order confirmed" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_new +msgid "Order created" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_enroute +msgid "Order en route" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_scheduled +msgid "Order scheduled" +msgstr "" + +#. module: fieldservice +#: model:mail.message.subtype,description:fieldservice.mt_order_started +msgid "Order started" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_dash_order +#: model:ir.actions.act_window,name:fieldservice.action_fsm_operation_order +#: model:ir.actions.act_window,name:fieldservice.action_fsm_report_order +#: model:ir.actions.act_window,name:fieldservice.fsm_order_action_from_dashboard +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__order_ids +#: model:ir.ui.menu,name:fieldservice.menu_fsm_config_order +#: model:ir.ui.menu,name:fieldservice.menu_fsm_dash_order +#: model:ir.ui.menu,name:fieldservice.menu_fsm_report_order +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_tree_view +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__order_count +msgid "Orders Count" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.actions.act_window,help:fieldservice.action_fsm_report_order +msgid "Orders Reports." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__order_need_assign_count +msgid "Orders to Assign" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__order_need_schedule_count +msgid "Orders to Schedule" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Others" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__on_time_rate +#: model:ir.model.fields,help:fieldservice.field_fsm_person__on_time_rate +msgid "" +"Over the past 12 months; the number of products received on time divided by " +"the number of ordered products." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__owned_by_id +msgid "Owned By" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__owned_location_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__owned_location_ids +#: model:ir.model.fields,field_description:fieldservice.field_res_partner__owned_location_ids +#: model:ir.model.fields,field_description:fieldservice.field_res_users__owned_location_ids +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_partner_fields +msgid "Owned Locations" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__owner_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view +msgid "Owner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_category__parent_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__parent_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__fsm_parent_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_tag__parent_id +msgid "Parent" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__parent_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__parent_name +msgid "Parent name" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contract_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__contract_ids +msgid "Partner Contracts" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__same_vat_partner_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__same_vat_partner_id +msgid "Partner with same Tax ID" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__debit_limit +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__debit_limit +msgid "Payable Limit" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_payment_method_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_payment_method_id +msgid "Payment Method" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__payment_token_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__payment_token_ids +msgid "Payment Tokens" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__phone +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__phone +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__phone +msgid "Phone" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__phone_sanitized_blacklisted +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__phone_sanitized_blacklisted +msgid "Phone Blacklisted" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Planning" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Preferred Workers" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_payment_method_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_payment_method_id +msgid "" +"Preferred payment method when paying this vendor. This is used to filter " +"vendor bills by preferred payment method to register payments in mass. Use " +"cases: create bank files for batch wires, check runs." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Previous Stage" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_product_pricelist +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__territory_manager_id +#: model:ir.model.fields,field_description:fieldservice.field_res_territory__person_id +msgid "Primary Assignment" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__contact_id +msgid "Primary Contact" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__service_location_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__service_location_id +#: model:ir.model.fields,field_description:fieldservice.field_res_partner__service_location_id +#: model:ir.model.fields,field_description:fieldservice.field_res_users__service_location_id +msgid "Primary Service Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__priority +msgid "Priority" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__legend_priority +msgid "Priority Management Explanation" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Project and Tasks" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_project +msgid "Projects and Tasks" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__purchase_line_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__purchase_line_ids +msgid "Purchase Lines" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__purchase_warn +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__purchase_warn +msgid "Purchase Order" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__purchase_order_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__purchase_order_count +msgid "Purchase Order Count" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__receipt_reminder_email +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__receipt_reminder_email +msgid "Receipt Reminder" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_wizard__fsm_record_type +msgid "Record Type" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__ref +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__ref +msgid "Reference" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__region_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__region_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__region_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Region" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__region_manager_id +msgid "Region Manager" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__parent_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__parent_id +msgid "Related Company" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__owner_id +msgid "Related Owner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_id +msgid "Related Partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__relation_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__relation_count +msgid "Relation Count" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__search_relation_date +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__search_relation_date +msgid "Relation valid" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.reporting +msgid "Reporting" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Request Workers" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Requirements" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__resolution +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Resolution" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.report_fsm_order_document +msgid "Resolution Notes" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__activity_user_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__activity_user_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__activity_user_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__activity_user_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Routes" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_has_sms_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_has_sms_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_has_sms_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_has_sms_error +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_order_count +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_order_count +msgid "Sale Order Count" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_order_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_order_ids +msgid "Sales Order" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__team_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__team_id +msgid "Sales Team" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sale_warn +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__sale_warn +msgid "Sales Warnings" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__user_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__user_id +msgid "Salesperson" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__phone_sanitized +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__phone_sanitized +msgid "Sanitized Number" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_form +msgid "Schedule Details" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__scheduled_date_end +msgid "Scheduled End" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__scheduled_date_start +msgid "Scheduled Start (ETA)" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__scheduled_duration +msgid "Scheduled duration" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_order__scheduled_duration +msgid "Scheduled duration of the work in hours" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_search_view +msgid "Search FSM Location" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_search_view +msgid "Search FSM Workers" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_company__search_on_complete_name +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__search_on_complete_name +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Search Location By Hierarchy" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_search_view +msgid "Search Location Worker" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Search Locations based on their full hierarchy name" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Select field services on sale orders." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.partner_wizard_view +msgid "" +"Select whether you want to convert this record to a Field\n" +" Service Worker or Location." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__invoice_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_location__picking_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_location__purchase_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_location__sale_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_person__invoice_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_person__picking_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_person__purchase_warn +#: model:ir.model.fields,help:fieldservice.field_fsm_person__sale_warn +msgid "" +"Selecting the \"Warning\" option will notify user with the message, " +"Selecting \"Blocking Message\" will throw an exception with the message and " +"block the flow. The Message has to be written in the next field." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__self +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__self +msgid "Self" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_sale +msgid "Sell FSM orders" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Sell Service Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__sequence +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__sequence +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__sequence +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__sequence +msgid "Sequence" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_location +msgid "Service Locations" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.report,name:fieldservice.action_report_fsm_order +msgid "Service Order" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_graph_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_pivot_view +msgid "Service Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_stage__is_closed +msgid "Services in this stage are considered as closed." +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_config +#: model:ir.ui.menu,name:fieldservice.settings +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "Settings" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__partner_share +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__partner_share +msgid "Share Partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_expiration +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_expiration +msgid "Signup Expiration" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_token +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_token +msgid "Signup Token" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_type +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_type +msgid "Signup Token Type" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_valid +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_valid +msgid "Signup Token is Valid" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__signup_url +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__signup_url +msgid "Signup URL" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__stage_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__stage_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__stage_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__stage_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_tree_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view +msgid "Stage" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__custom_color +msgid "Stage Color" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view +msgid "Stage Description and Tooltips" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__stage_name +msgid "Stage Name" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_stage +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__stage_ids +#: model:ir.ui.menu,name:fieldservice.menu_fsm_stage +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_tree_view +msgid "Stages" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__state_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__state_name +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__state_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "State" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_state +#: model:ir.model.fields,help:fieldservice.field_fsm_location__activity_state +#: model:ir.model.fields,help:fieldservice.field_fsm_order__activity_state +#: model:ir.model.fields,help:fieldservice.field_fsm_person__activity_state +#: model:ir.model.fields,help:fieldservice.field_fsm_team__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__picking_warn +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__picking_warn +msgid "Stock Picking" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__street +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__street +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__street +msgid "Street" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Street 2..." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Street..." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__street2 +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__street2 +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__street2 +msgid "Street2" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__sublocation_count +msgid "Sub Locations" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +msgid "Sub-Locations" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_purchase_currency_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_purchase_currency_id +msgid "Supplier Currency" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__supplier_rank +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__supplier_rank +msgid "Supplier Rank" +msgstr "" + +#. module: fieldservice +#: model:ir.model.constraint,message:fieldservice.constraint_fsm_tag_name_uniq +msgid "Tag name already exists!" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_fsm_tag +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__category_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__tag_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__category_id +#: model:ir.ui.menu,name:fieldservice.menu_fsm_tag +msgid "Tags" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__task_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__task_ids +msgid "Tasks" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__vat +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__vat +msgid "Tax ID" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__team_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__team_id +msgid "Team" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_form +msgid "Team Name" +msgstr "" + +#. module: fieldservice +#: model:ir.model.constraint,message:fieldservice.constraint_fsm_team_name_uniq +msgid "Team name already exists!" +msgstr "" + +#. module: fieldservice +#: model:ir.actions.act_window,name:fieldservice.action_team_dashboard +#: model:ir.actions.act_window,name:fieldservice.action_team_settings +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__team_ids +#: model:ir.ui.menu,name:fieldservice.menu_fsm_dash_team +#: model:ir.ui.menu,name:fieldservice.menu_fsm_team +msgid "Teams" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__template_id +msgid "Template" +msgstr "" + +#. module: fieldservice +#: model:ir.ui.menu,name:fieldservice.menu_fsm_template +msgid "Templates" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__territory_ids +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "Territories" +msgstr "" + +#. module: fieldservice +#: model:ir.model,name:fieldservice.model_res_territory +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__territory_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__territory_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__territory_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Territory" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__vat +#: model:ir.model.fields,help:fieldservice.field_fsm_person__vat +msgid "" +"The Tax Identification Number. Complete it if the contact is subjected to " +"government taxes. Used in some legal statements." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_account_position_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_account_position_id +msgid "" +"The fiscal position determines the taxes/accounts used for this contact." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_order__country_name +msgid "The full name of the country." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__user_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__user_id +msgid "The internal user in charge of this contact." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__has_unreconciled_entries +#: model:ir.model.fields,help:fieldservice.field_fsm_person__has_unreconciled_entries +msgid "" +"The partner has at least one unreconciled debit and credit since last time " +"the invoices & payments matching was performed." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_stock_customer +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_stock_customer +msgid "" +"The stock location used as destination when sending goods to this contact." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_stock_supplier +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_stock_supplier +msgid "" +"The stock location used as source when receiving goods from this contact." +msgstr "" + +#. module: fieldservice +#: model:ir.model.constraint,message:fieldservice.constraint_fsm_location_person_location_person_uniq +msgid "The worker is already linked to this location." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_account_payable_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_account_payable_id +msgid "" +"This account will be used instead of the default one as the payable account " +"for the current partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_account_receivable_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_account_receivable_id +msgid "" +"This account will be used instead of the default one as the receivable " +"account for the current partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_purchase_currency_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_purchase_currency_id +msgid "" +"This currency will be used, instead of the default one, for purchases from " +"the current partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__email_normalized +#: model:ir.model.fields,help:fieldservice.field_fsm_person__email_normalized +msgid "" +"This field is used to search on email address as the primary email field can" +" contain more than strictly an email address." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_supplier_payment_term_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_supplier_payment_term_id +msgid "" +"This payment term will be used instead of the default one for purchase " +"orders and vendor bills" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_payment_term_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_payment_term_id +msgid "" +"This payment term will be used instead of the default one for sales orders " +"and customer invoices" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__property_product_pricelist +#: model:ir.model.fields,help:fieldservice.field_fsm_person__property_product_pricelist +msgid "" +"This pricelist will be used, instead of the default one, for sales to the " +"current partner" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_stage__fold +msgid "" +"This stage is folded in the kanban view when there are no record in that " +"stage to display." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__tz +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__tz +msgid "Timezone" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__tz_offset +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__tz_offset +msgid "Timezone offset" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__title +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__title +msgid "Title" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "To Assign" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "To Do" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.view_team_kanban +msgid "To Schedule" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Today Orders" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__total_invoiced +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__total_invoiced +msgid "Total Invoiced" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__debit +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__debit +msgid "Total Payable" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__credit +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__credit +msgid "Total Receivable" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__credit +#: model:ir.model.fields,help:fieldservice.field_fsm_person__credit +msgid "Total amount this customer owes you." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__debit +#: model:ir.model.fields,help:fieldservice.field_fsm_person__debit +msgid "Total amount you have to pay to this vendor." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__type +#: model:ir.model.fields,field_description:fieldservice.field_fsm_stage__stage_type +#: model:ir.model.fields,field_description:fieldservice.field_fsm_template__type_id +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_type_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_search_view +msgid "Type" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__activity_exception_decoration +#: model:ir.model.fields,help:fieldservice.field_fsm_location__activity_exception_decoration +#: model:ir.model.fields,help:fieldservice.field_fsm_order__activity_exception_decoration +#: model:ir.model.fields,help:fieldservice.field_fsm_person__activity_exception_decoration +#: model:ir.model.fields,help:fieldservice.field_fsm_team__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Unassigned" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_unread +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_unread +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_unread +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_unread +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__message_unread_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__message_unread_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__message_unread_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__message_unread_counter +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_order_search_view +msgid "Unscheduled" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_order__priority__3 +msgid "Urgent" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_location_builder +msgid "Use FSM Location Builder" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_geoengine +msgid "Use GeoEngine" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Use GeoEngine with OpenStreetMap" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_order__custom_color +#: model:ir.model.fields,help:fieldservice.field_fsm_stage__custom_color +msgid "Use Hex Code only Ex:-#FFFFFF" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_res_config_settings__module_fieldservice_stock +msgid "Use Odoo Logistics" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Use Odoo Purchase" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Use Odoo Stock Logistics" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__barcode +#: model:ir.model.fields,help:fieldservice.field_fsm_person__barcode +msgid "Use a barcode to identify this contact." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_stage__is_default +msgid "Used a default stage" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_stage__sequence +msgid "Used to order stages. Lower is better." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_team__sequence +msgid "Used to sort teams. Lower is better." +msgstr "" + +#. module: fieldservice +#: model:res.groups,name:fieldservice.group_fsm_user +msgid "User" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__user_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__user_ids +msgid "Users" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__currency_id +#: model:ir.model.fields,help:fieldservice.field_fsm_person__currency_id +msgid "Utility field to express amount currency" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Vehicles" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_stock_supplier +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_stock_supplier +msgid "Vendor Location" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__property_supplier_payment_term_id +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__property_supplier_payment_term_id +msgid "Vendor Payment Terms" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__website +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__website +msgid "Website Link" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_equipment__website_message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__website_message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__website_message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__website_message_ids +#: model:ir.model.fields,field_description:fieldservice.field_fsm_team__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_equipment__website_message_ids +#: model:ir.model.fields,help:fieldservice.field_fsm_location__website_message_ids +#: model:ir.model.fields,help:fieldservice.field_fsm_order__website_message_ids +#: model:ir.model.fields,help:fieldservice.field_fsm_person__website_message_ids +#: model:ir.model.fields,help:fieldservice.field_fsm_team__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,help:fieldservice.field_fsm_location__tz +#: model:ir.model.fields,help:fieldservice.field_fsm_person__tz +msgid "" +"When printing documents and exporting/importing data, time values are computed according to this timezone.\n" +"If the timezone is not set, UTC (Coordinated Universal Time) is used.\n" +"Anywhere else, time values are computed according to the time offset of your web client." +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location_person__person_id +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_stage__stage_type__worker +#: model:ir.model.fields.selection,name:fieldservice.selection__fsm_wizard__fsm_record_type__person +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_equipment_search_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_person_search_view +msgid "Worker" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__person_phone +msgid "Worker Phone" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__person_ids +#: model:ir.ui.menu,name:fieldservice.menu_fsm_config_person +#: model:ir.ui.menu,name:fieldservice.menu_fsm_person +#: model_terms:ir.ui.view,arch_db:fieldservice.res_config_settings_view_form +msgid "Workers" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__calendar_id +msgid "Working Schedule" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_stage_form_view +msgid "" +"You can add a description to help your coworkers understand the meaning and " +"purpose of the stage." +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_location.py:0 +#, python-format +msgid "You cannot create recursive location." +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_order.py:0 +#, python-format +msgid "You cannot delete this order." +msgstr "" + +#. module: fieldservice +#: model:ir.model.constraint,message:fieldservice.constraint_fsm_person_calendar_filter_user_id_fsm_person_id_unique +msgid "You cannot have the same worker twice." +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_order.py:0 +#, python-format +msgid "You must create an FSM order stage first." +msgstr "" + +#. module: fieldservice +#: code:addons/fieldservice/models/fsm_order.py:0 +#, python-format +msgid "You must create an FSM team first." +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_location_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_person_form +msgid "ZIP" +msgstr "" + +#. module: fieldservice +#: model:ir.model.fields,field_description:fieldservice.field_fsm_location__zip +#: model:ir.model.fields,field_description:fieldservice.field_fsm_order__zip +#: model:ir.model.fields,field_description:fieldservice.field_fsm_person__zip +msgid "Zip" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_tag_form_view +msgid "tag" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_tag_tree_view +msgid "tags" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_template_form_view +msgid "template" +msgstr "" + +#. module: fieldservice +#: model_terms:ir.ui.view,arch_db:fieldservice.fsm_template_tree_view +msgid "templates" +msgstr "" From 172e60560d09626d91278cd3229c810c75d2aeff Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Mon, 31 Dec 2018 05:34:35 -0800 Subject: [PATCH 542/631] [ADD] fieldservice_maintenance --- fieldservice_maintenance/README.rst | 132 +++++ fieldservice_maintenance/__init__.py | 4 + fieldservice_maintenance/__manifest__.py | 26 + fieldservice_maintenance/models/__init__.py | 6 + .../models/fsm_equipment.py | 13 + fieldservice_maintenance/models/fsm_order.py | 46 ++ .../models/maintenance.py | 32 ++ fieldservice_maintenance/readme/CONFIGURE.rst | 5 + .../readme/CONTRIBUTORS.rst | 1 + fieldservice_maintenance/readme/CREDITS.rst | 3 + .../readme/DESCRIPTION.rst | 7 + fieldservice_maintenance/readme/INSTALL.rst | 5 + fieldservice_maintenance/readme/ROADMAP.rst | 2 + fieldservice_maintenance/readme/USAGE.rst | 7 + .../static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 470 ++++++++++++++++++ .../views/fsm_equipment_view.xml | 15 + .../views/fsm_order_view.xml | 25 + .../views/maintenance_view.xml | 33 ++ 19 files changed, 832 insertions(+) create mode 100644 fieldservice_maintenance/README.rst create mode 100644 fieldservice_maintenance/__init__.py create mode 100644 fieldservice_maintenance/__manifest__.py create mode 100644 fieldservice_maintenance/models/__init__.py create mode 100644 fieldservice_maintenance/models/fsm_equipment.py create mode 100644 fieldservice_maintenance/models/fsm_order.py create mode 100644 fieldservice_maintenance/models/maintenance.py create mode 100644 fieldservice_maintenance/readme/CONFIGURE.rst create mode 100644 fieldservice_maintenance/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_maintenance/readme/CREDITS.rst create mode 100644 fieldservice_maintenance/readme/DESCRIPTION.rst create mode 100644 fieldservice_maintenance/readme/INSTALL.rst create mode 100644 fieldservice_maintenance/readme/ROADMAP.rst create mode 100644 fieldservice_maintenance/readme/USAGE.rst create mode 100644 fieldservice_maintenance/static/description/icon.png create mode 100644 fieldservice_maintenance/static/description/index.html create mode 100644 fieldservice_maintenance/views/fsm_equipment_view.xml create mode 100644 fieldservice_maintenance/views/fsm_order_view.xml create mode 100644 fieldservice_maintenance/views/maintenance_view.xml diff --git a/fieldservice_maintenance/README.rst b/fieldservice_maintenance/README.rst new file mode 100644 index 0000000000..fa3e01ee7b --- /dev/null +++ b/fieldservice_maintenance/README.rst @@ -0,0 +1,132 @@ +=========================== +Field Service - Maintenance +=========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/11.0/fieldservice_maintenance + :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-11-0/field-service-11-0-fieldservice_maintenance + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/264/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Odoo Maintenance App does not support Field Service operations for equipments +outside the company facilities. On the other hand, the Field Service App does +not support a maintenance schedule generating preventive maintenance request. + +This module allows you to merge equipments from Field Service and Maintenance +and have a maintenance schedule for FSM equipments as well as Field Service +capabilities for maintenance equipments. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +To install Field Service and have the mapping features, +you need to install fieldservice_stock and maintenance + +Please refer to the installation instructions available at: +https://github.com/OCA/field-service/tree/11.0/fieldservice_maintenance + +Configuration +============= + +To use this module, you need to: + +* Go to Field Service > Master Data > Equipments or Maintenance > Equipments +* Create or select an equipment +* Specify the maintenance schedule + +Usage +===== + +To use this module, you need to: + +* Maintenance requests related to a FSM equipment will create a FSM order +* Go to Field Service +* Create or select a FSM order and select the type Maintenance. +* Select the maintenance team, the equipment and the location +* Upon saving, a maintenance request will be created with the information from the FSM order. + +Known issues / Roadmap +====================== + +The roadmap of the Field Service application is documented on +`Github `_. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* Sandip Mangukiya + +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-smangukiya| image:: https://github.com/smangukiya.png?size=40px + :target: https://github.com/smangukiya + :alt: smangukiya +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 + +Current `maintainers `__: + +|maintainer-smangukiya| |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_maintenance/__init__.py b/fieldservice_maintenance/__init__.py new file mode 100644 index 0000000000..631bd4893a --- /dev/null +++ b/fieldservice_maintenance/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_maintenance/__manifest__.py b/fieldservice_maintenance/__manifest__.py new file mode 100644 index 0000000000..592d2d0a58 --- /dev/null +++ b/fieldservice_maintenance/__manifest__.py @@ -0,0 +1,26 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Field Service - Maintenance', + 'summary': 'Maintenance', + 'version': '11.0.0.0.1', + 'category': 'Field Service', + 'author': 'Open Source Integrators, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/field-service', + 'depends': [ + 'fieldservice_stock', + 'maintenance', + ], + 'data': [ + 'views/maintenance_view.xml', + 'views/fsm_equipment_view.xml', + 'views/fsm_order_view.xml', + ], + 'license': 'AGPL-3', + 'development_status': 'Beta', + 'maintainers': [ + 'smangukiya', + 'max3903', + ], +} diff --git a/fieldservice_maintenance/models/__init__.py b/fieldservice_maintenance/models/__init__.py new file mode 100644 index 0000000000..bac82e01f7 --- /dev/null +++ b/fieldservice_maintenance/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_order +from . import maintenance +from . import fsm_equipment diff --git a/fieldservice_maintenance/models/fsm_equipment.py b/fieldservice_maintenance/models/fsm_equipment.py new file mode 100644 index 0000000000..49abfc91a7 --- /dev/null +++ b/fieldservice_maintenance/models/fsm_equipment.py @@ -0,0 +1,13 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FSMEquipment(models.Model): + _inherit = 'fsm.equipment' + _inherits = {'maintenance.equipment': 'maintenance_equipment_id'} + _description = 'FSM Maintenance equipment' + + maintenance_equipment_id = fields.Many2one( + 'maintenance.equipment', string='Maintenance Equipment') diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py new file mode 100644 index 0000000000..4b668d0511 --- /dev/null +++ b/fieldservice_maintenance/models/fsm_order.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 +from odoo.addons.base_geoengine import geo_model + + +class FSMOrder(geo_model.GeoModel): + _inherit = 'fsm.order' + _description = 'Field Service Order Maintenance' + + type = fields.Selection(selection_add=[('maintenance', 'Maintenance')]) + request_id = fields.Many2one( + 'maintenance.request', 'Maintenance Request') + maintenance_team_id = fields.Many2one('maintenance.team', string='Team') + + @api.model + def create(self, vals): + # if FSM order with type maintenance is create then + # create maintenance request + order = super(FSMOrder, self).create(vals) + if order.type == 'maintenance': + employee_ids = self.env['hr.employee'].search( + [('user_id', '=', self.env.uid)]) + if employee_ids: + employee_id = employee_ids[0] + if order.equipment_id: + equipment = order.equipment_id + request_id = self.env['maintenance.request'].create({ + 'name': order.name or '', + 'employee_id': employee_id.id, + 'equipment_id': + equipment.maintenance_equipment_id + and equipment.maintenance_equipment_id.id or False, + 'category_id': + equipment.category_id and + equipment.category_id.id or False, + 'request_date': fields.Date.context_today(self), + 'maintenance_type': 'corrective', + 'maintenance_team_id': + order.maintenance_team_id.id or False, + 'schedule_date': order.request_early, + 'description': order.description + }) + order.request_id = request_id + return order diff --git a/fieldservice_maintenance/models/maintenance.py b/fieldservice_maintenance/models/maintenance.py new file mode 100644 index 0000000000..caa5df7841 --- /dev/null +++ b/fieldservice_maintenance/models/maintenance.py @@ -0,0 +1,32 @@ +# 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 MaintenanceEquipment(models.Model): + _inherit = 'maintenance.equipment' + + is_fsm_equipment = fields.Boolean(string='Is a FSM Equipment') + + +class MaintenanceRequest(models.Model): + _inherit = 'maintenance.request' + + fsm_order_id = fields.Many2one('fsm.order', 'Field Service Order') + + @api.model + def create(self, vals): + # create FSM order with type maintenance if selected equipment is + # enabled with boolean is_fsm_equipment + request = super(MaintenanceRequest, self).create(vals) + if request.equipment_id.is_fsm_equipment: + # Get the fsm equipment + fsm_equipment = self.env['fsm.equipment'].search( + 'maintenance_equipment_id', '=', request.equipment_id) + fsm_order_id = self.env['fsm.order'].create({ + 'type': 'maintenance', + 'equipment_id': fsm_equipment and fsm_equipment[0].id or False + }) + request.fsm_order_id = fsm_order_id + return request diff --git a/fieldservice_maintenance/readme/CONFIGURE.rst b/fieldservice_maintenance/readme/CONFIGURE.rst new file mode 100644 index 0000000000..94eb8eb084 --- /dev/null +++ b/fieldservice_maintenance/readme/CONFIGURE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +* Go to Field Service > Master Data > Equipments or Maintenance > Equipments +* Create or select an equipment +* Specify the maintenance schedule diff --git a/fieldservice_maintenance/readme/CONTRIBUTORS.rst b/fieldservice_maintenance/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..a76235f8a2 --- /dev/null +++ b/fieldservice_maintenance/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sandip Mangukiya diff --git a/fieldservice_maintenance/readme/CREDITS.rst b/fieldservice_maintenance/readme/CREDITS.rst new file mode 100644 index 0000000000..0eff0acf4e --- /dev/null +++ b/fieldservice_maintenance/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* Open Source Integrators diff --git a/fieldservice_maintenance/readme/DESCRIPTION.rst b/fieldservice_maintenance/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..a8a98ee699 --- /dev/null +++ b/fieldservice_maintenance/readme/DESCRIPTION.rst @@ -0,0 +1,7 @@ +Odoo Maintenance App does not support Field Service operations for equipments +outside the company facilities. On the other hand, the Field Service App does +not support a maintenance schedule generating preventive maintenance request. + +This module allows you to merge equipments from Field Service and Maintenance +and have a maintenance schedule for FSM equipments as well as Field Service +capabilities for maintenance equipments. \ No newline at end of file diff --git a/fieldservice_maintenance/readme/INSTALL.rst b/fieldservice_maintenance/readme/INSTALL.rst new file mode 100644 index 0000000000..43c27d0602 --- /dev/null +++ b/fieldservice_maintenance/readme/INSTALL.rst @@ -0,0 +1,5 @@ +To install Field Service and have the mapping features, +you need to install fieldservice_stock and maintenance + +Please refer to the installation instructions available at: +https://github.com/OCA/field-service/tree/11.0/fieldservice_maintenance diff --git a/fieldservice_maintenance/readme/ROADMAP.rst b/fieldservice_maintenance/readme/ROADMAP.rst new file mode 100644 index 0000000000..b0ff1e4854 --- /dev/null +++ b/fieldservice_maintenance/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +The roadmap of the Field Service application is documented on +`Github `_. diff --git a/fieldservice_maintenance/readme/USAGE.rst b/fieldservice_maintenance/readme/USAGE.rst new file mode 100644 index 0000000000..e71b68687d --- /dev/null +++ b/fieldservice_maintenance/readme/USAGE.rst @@ -0,0 +1,7 @@ +To use this module, you need to: + +* Maintenance requests related to a FSM equipment will create a FSM order +* Go to Field Service +* Create or select a FSM order and select the type Maintenance. +* Select the maintenance team, the equipment and the location +* Upon saving, a maintenance request will be created with the information from the FSM order. diff --git a/fieldservice_maintenance/static/description/icon.png b/fieldservice_maintenance/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955674d8f0b8c47de3ffa9db25cb109fbe4a1091 GIT binary patch literal 17808 zcmeHvc;{H3sucZElF-G)hC-+rdy@|cVP3o7ETY&& zJl-5>)T;P#Y>Z2k74p9gK&J2CJC5%@{WsV@`$(=#w|Cf>44L@opuIqTY_XMpYif9< zJEhZ)*(Ciawd2E4g!g{`tf-6DV*W@FZ!b&?uih_mMpBM%8|x61r3D=Pkjl)*LT52YNq;hIj5|udFA)RjvAIV zR;k3*$i5qSsi6bcd50k9_J$d6qZe5$CLIT#a*i*=wkVz%dgiqH(oe=68=3m>aXb03 zuyMGqBG(dcQxAcfP+K4yg1i{GtF9VUM32?R>d%HqF@xRPyIc?3mifg(5sPQ&5bDFm zimOQwOnX4K!Srd#7sF2xi^4^1yiGAIq~p7mmzr<~Lo z`^Zj#UvWcW93Rm$F}uR@r0rcd-HSU5-(-GqWovBbB`xhmjl4J(??0#Kk62I~XSft|EnXSitq|ZL3=o#1EvQgW9 zJ|12;ejG8^^|hTqjb_(={4bNTpQWY8O}Sq_{M)O6b6uy9w|sdo6^zbBeKnQ6ZrBxf z{=<=LGexYoQ+%!%@poCfC;cW~ny!1tUwf@o9+XcXuz3-vA`{X*t(iu(J(v4eK3$BR z#?wsdnI9niHT%fq-!r>21r=>B+y?CU48s?sGY##Qf?l6kS}{XEKaG3P%=c#V{Z`MeV8Rg#4Z(I6 zeUkKcouTFhVv!mqpgP%TpU}z8*Yf=tv1Q~b#DPLwkmDjH6U{+_F!pgNVV@}v zE_;Oc;S_mM$!3hz@uxyNzlJV`D!(V$L`Z$=*YjiSe_v$^V+Z*0H4ecz-X^KG3Xh91 zJtlf|UNz07Y#FKl46c-J6y0GhCP<)$*JggiUF@eIv9sen?MtXFOuac$_`IKZ&l|z) z$DT>fB2eQzolI1)xny!__wV%Nr%CM35kW0htameEa2Xxl-VJUt0m|nu2U3$ze(Tv8 z_hVB{JXq83`D;Upw=LOuDRooALyP@8w;=UBLcBPO_Oo2Eqzyr^s9lFgZ;gA+g>qXL zQ&>MXjs}PweSxbdKlG#^m{z z4MEp>mrQoM81`rGl4fG*YlUD7lD(ODkJuzt4j+8OD@_^c{M?VWMvL-mhf5~AL_6K|~@F^Eh5X5Bh|N|tZb>4SGD2C!(~DsSL~^_)(2+Whr4`XyCSV{(`B^kJm~Sq5H4 z={4Mo>%Pqe9hXx1H!&Weh$$`>=k4s~l1y2@kbRf3#Hj62w#Y5v*j#41aOZbPZKJoD zT65i*>hQ5H;E&)$J)> zuxv=r!DD1$E7*+}4Znaljjhl{m+jeAD`FwHnWb{?rNRS*#3~Eb#Z1J*x%}A?y#QqE zY3J9H`r#V7#3BN9WEBUyms973^%E}-Q85dO6vPw{YyP8Ab4h)?4d>@Xa#ek}@me&_ zsu*@8-MJp@l{Fajl%X)8YIcH{gQoNo%j$Ln89tr-rRpk=Lq@6>FU_I#jZ|+7ZKE>6 z`W`W+WV)WGFH2S=CjUICcO}vmZk_yD>>7iGl&wC-+*cwN($J)jR>5uzBwO^18T3HJ zT8ptb-yH>B@o#OOS75y{VrE?xxSu@8N>}~U{LqHoaKE;reTWfe$#5$VNM4#Fa zZfkbN3W0lG%wM)^|%PIa;|pL*eGhj125^^V^CQRr+V=S<3oHC@VQ*Rvr%;;2?TUnpig5 zs`9&vGhHwPd|19TpB=*Cu_T2BC$2Fz*pU2+51AZVxI5b)^K-JSFG}8$HTeA8+{C9G z*4RK}Arvx*HHlneHX#xcWra;;X7HN0S|>@v+IX*doQvK2OR0MB!&KBFV8_8TA0ThE zUCUNO#Of)<)vmp~sOy>|@lwf~eO7X}(3(rQI5f_v+RezW-U2vuDQncBGD zF(VA7*oS6JB(F=kHQ%l@G%-$VFA?@NnvM#;BzN!R{H%%y6~sEZ0pg(3FEUZEuc7No z1Vj|DQSR`iJZVT3MW?4vwx^xq7#`xvF@!X|rJ=jmC-Mdo(DWonw&V~O<5O8-Hkh zOEdL3#D24!;Y?zY9P8c(<+YD8#kyPIzaKvmD8e2y)X6<-*L!drI*zBDi-i=0uu5G` z$J^EToaG?!T8-pJb2(>-C$@OY{R-{yWp zii!?Pz`{sZ2%!VEB+y#c+Vk$iN>j5Wy>hoJ+R5)5Q+5@NKuMolyQFK^9jgWXKvtad zvnR{)_U4xGO`mULUP(d`1_ugr8!tEcJ4M87LxLFW#JOsVI3d(sq^&;R^5av?A}=9E z*@zzYGj@5w{;!VC2hN(VF{>|nbd$l!@6OZSfDI?==C0&@N@ob6!tY0y1(_*y&gn2n z7{TwW-TxBjC#f}hDQ3*~wR0UU=GR0P(iD8-Ess&BusECJJg1h~m7+-(T6nE!|L#W% z0cxy)EHM~T8h=1~aH=vJa5OPQW}I%FT(w*L>->d`ohE-q_uu6`d&$=gznwiw2sHISjYlQg zJdPT=Lce8FTqkR#p>6iek2&+loxZ8D=317tg0adE`KvP@dEz~z&(^PXsw-I*i|n7Z zjBn=~pL05}RzkjtUYGiDjjYe|d{}5ng8KHs*Q&#|#7BX0P0ol_&sQ9+?c)f-r7|V9 zW{d0er92o2iOjV{2m4bHDq)~+VGPX8r!wn~Tw-Cuyh-+}a=4t*5DQ!vMQHo5_>#U~ zdH14?&zDw9?WN;_v9T#GGZDMWtHmcL_-T#FMP=k>C4g55CUZ9uJWD=ZrBlCtNAF9l z@}wNeXq{=>N|JW<-=9^%NZq@qD`^8Jx&@Q}FOt)tNn+diSNi`K_DL$Nnvt zu(FV$dO0oS=wO72Q}pS4OQWZ-#VMc6GF73?o_c#@gQ8z9N@85$;+n*+=~M=uiB~wO zIx^Cwjz(`e0Ep&p^s97SwLh5b1bwOQrg^`bIhW>X(PiUlqajhz$Lq%AqqXXcR3w>U zQ?V_Z#z3F}L=jbcQH|n_%5(orK+U`JnwB2#Gj)=6&QF~22uO`_`9jJyyJ8H zR4MQj0#zvrM_G*LfnE$4dvKY5;+{@!^uVaBx0sW5R(Va{fjDg2b+-X!Rpl85^bWB# zL9CiD+sGE=o-65iW$h4uxUXg&h`T0!nGZIKie9}ry&|9H(r;q&I=fR^3+ey~x?PS* zLU!r0Qz)^?QU7_&Z-wEqx~;huBz4DT;n zx%-9VM*R(Lax`-HjE3yUt4@Wat&nK>PaVFx2bQR$UWup>vT?^t74*Kd-RCxZCP7w5 zCn@3jHF~7O(i+{3BlWMeGjpVF{jqkhW)W!pqhO+AqXEH;KmMn=t2!mb{Kh_I7M5q8~NAl_$ji!)jq4t6m`*jW6}ei+TZ`>JVA2k2RR}e6S}3qpyWK|01)a zR3y2>nLBJ8_^@CPxBg)yK6-VoT@xW*C0*>_*L`eAVyYOr5A3KFNm^dqw(I?-Yw6L@ zoy~;Qb3~p(uU?YV3mE!-rzULw72^J;=p?v5n=|iyL+@c1sj!eEfwjtg`6QG_ga_BU zJa6*UhqUAxgCJ#B#nDGMS-Ps5ajoD%y3@2%#z)He1y8=VS)3$oKSg@O7(B&}zX%u8 z9P1g*YG$C;AyMmh7eHKDHOcS~kvtWsU`bu}b&mw-!cE5K?x(GM>=RxM4T8vfAmN{@ zL=5)7Ss1S(H@%!1HdUYJ26efRKr8#p->jZjuY6)xtJM4=gT=YOl?gdc*+S2T({1LO z2I@rMKK}-_4fg~L-n0^-+PJqs*IOF*#$5NLl0fo7ezq>c!1G20)wsID+*dwjLR7t} zy^R(o0A~PApD`${GLOv9nVW-OKz&oqty1VXMng_1%xLePEL(2d_bEG> z_E*2rzx(>HZYnry0S}QT6&32>eCxk-5+#J29`9Y_{%5~k$S12G4A&%7NzX0M_P*nIkvB0&E!5Gg zGtLt;c4XwqqRX&R#|B~Oq8IN8yti5yOd-lDP#MFTUtsf__`)d0RUI{p$0S)%|MQ)E ziRf>W+vVFgbIDXxmgqO5wB@bZ=_@z4aey&sTy~n^_c+OelD5;-0xF}iTuB!UG$->A zYNBiHbFc2*#?PSLZOfW!Nep#bUVVFQ=KBbF&=f^7f2^cHI-a}DpQGKBPo_}s!>d{? zd*UX$2qC|#1)qJFYc&lehUmL1k5ix~s~Nw_4Y>EdA$dGMRr1kZzlFSn&=EeO))69T zz8SXDw#af^8_$tX%}#4Ox!ZOK8AtDW(p{zrSA5q`Tu@(Jrg~6TO(mlD4b8XpLz}%H zyp7CvE;gNcHWHs2^y4$WAw%t%GcafUgiH=@HD>~O0?B{KwQa*=MVb@;b zEYNwm%dnOVyT;rL(K48AR0^=9t>fQZQxUB!Lu(T>wXg3dECL_%22JF);t$<89Fh~T zdyVEF%4gK68xv312&aC6r7x&{@zl85Euq?xiZlAr4_Ms~Y)(zf{Mv$BX)_ILA^Aj~j;my-Ox|Hu|O6dWimSNEO2i(%9Oyn^kV;#= zJa>%=k0D$V(xnl3-IIqcQnmA@q>l-hD#Oz$1w&P+C8T^&M(1~tz9BF~!l9ej-uD2@ zR9@|0Q`+a|W#j+DfIz*)Kp5TCE#swLD;1W#ik2QvYT0bFa%+bL0IXVPOMdN~*1LgT z!mb3hM&79NZOPv6K6{A;g=)$Aua>uTx_T^MEmpSVPM_b=Kx3mR8BiHO@VLelzSq02 zc0U-ax*hWjmaUtz(x60_n(EiollZ)fKU6kiwCH@^azWhIyZ?Qe|L2D;W$GoK`72#N z#Az9QXrtcgEC;7BwPh<5*O@92C(HSj=mO@w?L*lH%!x~k?NyrUK76ut-NPZm&Y9dv znM85NnCw7P*&(;23EXV_s1QhaYD??ycu|*bwtWUhu6e-w_;LK4xt8x*b@Hf%Z5w3U z#KWAtsg&Za94KLq-mSkqLlM4vEPSg+Bv}on47spJJw-87`ImL>5jbBcWTj zz0!b#Af-7fi37khDD7VyfZbV!7Y=pF3-KD}!Y@+a4rPIWQ({X+NxZ*phei2EZvm)T zw-Y45CIbjv+_perJBcM!;kv^3V>X@JgI4(E=b&xl?U4eXogcT+RLp;7rM;T|1`tl_&*=zD}8mBjFrGM&H(zV#c4_fC+psUP3p9(5>tdp zV*GfGf9?I7+5G1D{ELe>G1#`(-o4#hJWlz_-+R|G!XKD{!jOJq^de0mrrq%s)K(-e`F@4nuS*U#R#zvJR@!Cn*N!)Fwe}bW~MiuSGV;jvD@i*rzUxLPNq?I@Y}ho` z7hkg(>BOuWN8_!7JrTcNF^-E(0}=X8 z{NX>#aj;imRy4Z)_swn{M`+rA?$?ZXqp+YbuC7U;v*$hV9KjPAF<@?c6-uCWV#^C#89W*Cmt(to_}}v5>(+mM`@v3ob6v~tnOj?H_0|K1 zTB$@ZhhmOViRj#b?-^4b6-maplLGGCGYWe3y;B1L2wp`HwOfC^VHx{aqx1UqyPzPQ ziKXLJUe9D8Hfwx)$L6rezuo%3gg`Ow;t#%=c@d7C$U6EPdCyF5;+uyKf2BrwEVKdI z#GnFVq~o6QNES|F&q{;z5vYq3_XN;_wC=|wms-~CL5H?{cTgMaKWmLYqsk-@E$eE5 z5OJyrt8I=pn8go7$<+dg*XvKJ_UEh7G8z1;ZM=cz?ixHC)2z%j_Vpo(1Rgj_Kp0Zn zJD_jWRKJM+)KsdT*0mF*%|Xs3CwS^&oBciALzjS0=n$|ucrKYj>l&22xJUV2S0h@HomV;ImUK$Y=qaQ>k^)^cdIt zIq-QQx&|NhRSfA#Ouk$L5IO=1*In25Eeb)`A?11>OrSyT{h~M!!ob}1yoq9?2!{l{ zt`wGxPlT*?+^Om6-eDYcR)=vZDyLP-JO_$H6mnvX{f{!^pFE*;z6Io9q1BGZ{5HF! zL%>ZNEqY!M56{NK=Ku_bl2rf>^okfO4LEb1_rA#tG~ys)R+q-uRtz5-JSzQ{umxPibOH+T*O_)mAWnDZf5DfEOAgyf?Tg=1b_Tp z>zpJHFM>Y0yP=Lt*AGgfUa2ash zd_wcdw{5@*em~rBjhSSJ*gG63@fmbSWI_YDgoGPntbpgD>bUY=w)wjn?s|<#CB^^h zR)V-v{}OTzmPOE(1JHN=_cojaFsr167|5(0QsYY~7e{)YZAX;zq*t=~uGk&_b}LhwbP+ z5NQwxc7d`aW{lpS3E{+g*c@e!c7NJW{~1$c)!MF!zf}%KM6FJ{_K#d z0hCc@dyc`9rf=E~azy={W;Jwc!9qhw%J)szPwNf2u3$A~a4_+mE;&|-$iZ8ky*q-Zb`)ix z{A>ui(@syZ`@UI0Rk_X9fKps=chNU<=SHBiPhD)_a?g(c0Zc8K0J1RpB*61r?^I=! zp|X`XQC0jqq3E}wpKLJwEIg?VNO6Ed7jADGUHkM(dK8dG_d`at5eO3)7C=oA!7(I^wu>rGbT}M^#%j1GBcXT!NQ-p_A7J#bUwK^tXFNI?z2g^?~{AFr?ocuZ7CQxX7bF z9K{O!{^^cygL%a2@rr!pp~6o~XWwkbrI^xA8C zRGD^2)(4TKKXP{ZzI3&6kBAZ^Xod%uFD%7;H8t<~I;@sFxQSS73ngYfYJfruwt6_E z0MLfLqv_0vHQonSjqD}K$^t=Y|F`S;a#BoO$ZDJ}%iEXnU*BT`SVJI)16gEE%Jc@f zOHkaW4=M$tZcyvY*bY*MFEYx)!g*isS**JJ%=y!Yt8`aC?e1Ha=t8>S5|2gqS-V>m z!Ots<0C7RcI^e!G?O9~qIm`ZcCKWcZR*ylKKz#m4-OT(g(EZTB4!Q(LY~p;Z)}y;_ zff5oiNcNuj`AI@faP?5CqPCK7m{R0y&bC!V-Q?RtF^X`Xt!ANv*(V{dH)Zo$poqZb zpoGc29t2JFYejEt`PnG(ST|sOH&0u94Xy?w_>$jK2D~TDHoliT*R>gyYh*iDnp8AA zU+ugn@-$KuHsqg=tyZb`inuc0&(Fl{ZNA78ng1wHU*&fbDomy9a!JpulJXafNc?ecuJ0k+TE|~GSM#o0CmLksxPORgG~n_vW`(5qH}COjNqk;` z@P!fz_xo|Ihd<=!-1tdUCQ(lj{Sq4Isn+NY_6D@U1=0LFY8auZfZQps$bkGCggWcwMkwqqpj3K zO!r^z0A8u=!@C{>TMJyr$xg0|n-6T(zp7LCWAzd|z*h?MH1*o4iw}=1qE1TXPaqx~ z9atwR9eom7*p+Tj%^!?#zx%za=fK_+f`9GR>q%J-#;tsoOq~{L%H$hbD)G zHNG0gUFb_n?7$;f>3z2Al#>hzU*C-qpVkIx@LP0oywK6ieJDmelNlf?=bb}IYNEYk z9;i8iYW%$Mx1&}FcUczm^vt>3`OMev0$5p~41pr4>PzVlmuFugh=~ekmi4*CpG}t4 zQTd%K94ry_(_(M!uYzfu*KQtT4)hy*0G&>ToVNvtgbgwc=oonMWnU?e%(5*o69jUJ zeXoGKk+E9=LN+2&g1t*@Qcn;(XK?fG+WilgDS!4;W)if9i_;1-aG&d!b0$-RH3zjY zzG`0J(A@~)m@Wtv;9L)!BcOaY0s*${6bU3`MIb0ZpPTxVs2J$GVi6xU>HQDYjZ!}) ztC!w~y*Vrl|>V7#! zFJ+7&8keD629@lrj_sWccA*iZp=bC#$`iLJIgRulcR_9iv_W6Rf3pd(uOQD@J*f;) zl)lgS`4zEhw%|WK1PRM@(cq0JfBM~S_F&hN>D}||KpP|+Pc`%NuT2KBRiJP|$eEe? zN&g?AN?nzj`)0W8Q%z6=rF!u_64|Z~1|b+F!Wc%qu%x#` zw(+vW-k-`kzr$rm&(773j^B;>G*5O;C!3h~fxHbw0+fL>0UBz4 z*T?Uo@+^Y+C5LGYEXr7XK{moo1Kzj$YpxAXTtLdP+lj$|BnN)2syUljdwg6Q0maMo z@t)t2aM=PvKJonG)H7D6oYw3~dD#zBCN(Vk=Z?IVJ)hiziei1E+-?Yjd*TA@fEagZ zOh7r($IT8mBgQ6q;PzTk^3E5}R7`Dm)$qWLx zIAdZF2y8H5RK+j+5=NR!rV7e@zd!qqo=<7hyh+%AI*HK}9x<`mS^LAE8yQPF#Gt!$ zLB2pS<6RO}eTa16e0_l-h~5(?XLZ}|Yutso>Isy5@WuCSV@z5d=A^SEU8K{%>`iKnd5oMAR*z>WgkTpU1i6AaG4#KfB5%xuHh>Hfe?ke zMyYY^E4(uvUPh=L`tWx`v6`MB)AwA@cZOX)bvc@@MbzIsdIr?ZD5#?X0bjr-8FG8a z{@_O1X$bWeo_(E7tAT*jIhZ-MMmHDJy`-roRBR_bB8{_w^2_wTvaSir9!<&9)C|@% zh(5G|J1zdM!(WJ;Ba8!{?wHF&N(gIzcP?TMiFk*(L6Iz$<+CHNIF3S(FealbK4l{i zHlbS#fZAALjc(g~K6Ape(|FLXc~daz9u)K?i$2g)2jE%}y1&%6UsVWkGL6{q{XG{) z!87>`wAQjkABSid;pS~GVzTAI(|Gm9U{Lev0AIkRD02Upt+D{{Qc0is%F}j=PaqNI zZC<6OOUe1WgM+DrYfHLP?Drsadqm{u8*)_^%|9fZ?beKNI$U0>k(5NU^@IFiYODfm ztTr>K>=g5m79e6vy_z41-uoA08g^4sXA(GOkeh=k0WN+{y6uiV5{gV;)p^GNQfR}^ zN5O-)a+9^OE!9j`a#$L*qr^^N zHGx9q^ds-5zku?^P!_gL{w7d$9nket!lq_M@uKtd=D%*Vc+65BFR0xlNySC-4;U*^ zyu7QEI9gu$Ss#{l{7MC7;vz7$zRTl%|40uV4;ZIjBGb$|2PGh;L555}5U+$_&h<%x zIW)<<(7><6t@HFP_aarR_Mr&ce}f-jI42%L5_nk-_}#^lJAD~_Ie*^ySAz?F z(bY-Y+*LV$`)YNjzJx6u<`b|o0{N0VP#)m2+lC<16j|{sRtz8&wpTAGHEHbETIMwPM5s^CgH7O-Yn@@gb(pLio-EF8EpAm3<-P*Px3^Lj{AsJH|` zDl}_ExPeB6Y7d<6c&vy#RgT^H4Bf8y!_gTmTC+K)V+m<(ytfI zroj4o+EK~BcN>9Hj{@#^ff~cFh)Bzy;qZAGU`_~f-EJa|FGxe61E*$ANZau6Du_z9 zt&56mXcrY)|IhBq{8HlQghUl@L|p@WnR)jJD}sw{$22ofd8?m>0DAHuGuSa1j$Q&C zD-HU>9JRl_{-<0!SIeynAotW^Q`h9TQ9b6Y@0;Eszr5SJ^p+v#UZ1I@v}$R zrB+npul%N(2EvKFwrD>T$iVGG@1?E#{XV(?7AcRG6Cjwk$q41dbvx?$f?xJ$!6%r$ zs(tMkH-zO7D?E$p*UjX-HJdwxs#ho>u4v^;Ly~`06`Bt1Y10`iB1a@qAUMG8kK3*Z zH2p%Etqx_i*p5rjY&wDJ6>7Le0veqBZUet``@r82;^0)gKedUbd;B1?f~r0pOizz=Sue^P#>^nqnsOT9+oqw#Z>;P}m`%w63sZJ$sJzN)=e4WzJMl!N`mO|R`!?W0Y|AJb8=p>KkNMi?XTL_h{O|as! zhsCMLS$u75XOaQ28^qr?Tx8%P)7``59~v6a zRRmq-&k_Q=dYhJL_YjnJz!1)+lZZZo+8taAwra{j$!I8Kxq?lfdO3iqXtOtPl@*iC zFO>%T*6l7{i}+}W2I9!zfhqxd%Fso{6oWykVgKJe!I?bSHc%xL!|`VVMID6pu2FgrSs zF5Zm>Xpt2Ug=3j_nl+C~g(SXS7}Q_j9*Q8dTV*^FXeZ9o7o5I!e&i`K?FecTG@@mD zkF=r_?LPftpeV&0H(S*q6xcR8blcwzqy%aO2eOHVu|9rem{P~H&p~MA-CGyDeVFoR- z3w$_BQBg0GB8h<~MOr+x{6VV+k-4tx@1e}pl}zlrvY18zD2;4IvfHvDLcFSz#CHg_ zHI4HS`$m4*K@giN5v2z1)Tn~0`@oIk6)I10Eq7rh0ImC`qx+!P;o64#!Jy>DEAQW) zPF_ubMDQWE_QndwN|Rhte98{tKs_{il~m)_(_9PxeVJ)o(%y~mRYN~EQb2=Eb(jAi zUUJYla0vi^5Dz|5A4j03*8`gmCbG!;SqM;$Tp5D=yoG6ugR&;EHZ;wzre83X55Bu7 zb@w2u)HJh!pUcEv;=jW6%rpUI|)aY)7#WCpnDt zHz56?xeRn_C1L(GW?D;Z1k!)QYgkO^9f6L4vzBn>`c2H!d;Kend?DGSU|pxfF-Nq= zxB^bL1;Spv9n?@`afiRq1XEFjAg_htD`ts;dZBrahph#h)8-OO`T1I(R#1u@dbQS1GdVCW( z(TEq_JGjUdQY@l$KnjevzqJEgMn9oLqN0FHBOuj0BzwpS(1^*EecK~269RBW9-K)$hfQT0u`)3UU=|L6)a$@85~9I48v;3{oG-f& z;AGrTz1Gnf3#oU7-}D%-vI0Pb;39lj0Wg(C3~TiR&$Mr~Vm&b&tD+*hHf;QK8Yug7 zV-zUf1P-1?2N(H9k!4p@jSCndt$r~@=lksQtWUJbva(>Yhk?-B_&Ssy%iZAp664ST zEvxoZZtO_x;<-lb-uOuwR_$LB(0CuKFW9A$6py~IVJ*w83S+^=s%sLl*&PNBhf^tXepT1KL^lYWb7isxxa6)zK#c^pwyWaACqF z*M=@&?-yF3$Gg7$)$P2H{G6vf@rq$zTW4U~+w}$&U!k@P>8n)0P2f5?zdX8;S3L6m;(he=iO2n!xEb2?+ z@!Q-vFOf7o*bb25t}J;Bp4R@;S%M(@z=NWllIRf?>n`)H*0Z?m#3*ky7tppIrQOKQ4h1kHTSOsIndWhMzDgQw* zjVMFQTwyXs!lbb-eqjNQB071^_^EGui-jQ;@8f^mMVmCA=Fga@CbN_{9c;}}=t0s% z8zQSSTWt+A*Hw`E_M&1X(4%{FV}CmD?9@$;u@S==IJ9hhh)NURRCzp1fZCLmJ^M7e zh72){_{dgn%}`D!u13?N8PUxoZsA6cU|7~%t}~k*AE*L_Ad1U=4x$i1Lo`0sPuCvu z^5AG@ObyrZ!kLuW)5*5oOiPz#At-MzxmnXEToM}$KrAjwQy~|a23I#P9j1+@xzk{^ zfhLAvD2T^d3029YFise#a#6*3)B-^mmKPpN+kHJwT%AI2*`K5BVL;lnmo$6^@@U=f zc+ISm{@BYikpU9^g%cXhJgmbZR0K|L+Se(zAFutXd2yJSO_Try$CZDyF+~VzdM~k& zuy{`=LpyKZ7rU-xUzDfFAQ;>M+y_j#&eviD5tA_tQq4HZE%v5MoCXLwB}+C4jK0=Yy|(o;xV_Pyf~*E$*B-T=wsd(tHd}>b-UDg&>oS2 zl|{JKU<9S5H!6yf?|?>#6i9WJU7s1DhO7yv3bnOtqjC)oApuf? zRDq~vmXs)!^)DAxle|TROpLUP3-exL$jN#3TQ+5Qb6%Vp=u@fOJIik!9AQQ+q)r~h z%EiGEUUglrlu7`7E-UfR0Jzi%y;Mod_>;1CEf2h-2_4>Ba|^9@SLmgK)4A|h@`n$y z^RC}_rl?OYF8H+V!okA>{eN&a6c3SlQkJeizKbAuoap~AfZdkj$wV=5W)TK)VyHnH zfI?_uM5Gc?LzTJW>(aQRBgTknt?V zl4NBQ|Ja#wJo%iNHzqeud2-LZ;5dz3sg&%=A0N<>&eQchJsGLf=^SFvU9HfcY#Ud| zgSyJ0D{|rj`Us)=Oqv|Dg`)oYe@o|1j}FMiHs8lsL9rdyo(w(yZ%S%dzL%DAKN|+} z9(_^`2D%ml(K|UWU%sqiSpAHPxB$=vf@EuoC~l#JJ}~40%m2>j zGWwXHJI2OAP%xvDU9Fj)f3zvya2lRc-*b24QTTj4YW{ZA8xplo{PTs)6LjtvE4+oq zO>t&E^fTM;A=cV%8JzPn3PB&kAXl2KhW?Nd85wzJlx#0ijShXJW?6qNFT5WHgX*`4 znAw6(otBnuX*CHI7J32YAFrpeFe*%n?tiX`q=R&agxqy8y^(5Q$_ZB`XM!tI*GZbX z(X#_0LZp6h^6*3~mEHhT0b`4Yup6AXVlpn+Q7tknyZpxvuEohyH{$F=!8mZnEQAjI zQ46(s-Yaz;wNUgv&W5ThKB{W3(9dUm{iObJMRL?`A=vQt%jg)l{#&O4GI+#Kwjew0nySosF+@T>xBYngWHD;bxF;7b-%>cT74(~!j za)0gM!|>0eyS75X+B()YfAk)l$Phu_s10UQ8K<;`o;##M&SgtTuC$&4T{~TLYh~dK zLm$LxbZ^z;{Wl*6GW5?iFeeetYLG-nRdM6TR)K?1<#+hD&;m{|(ME|BrHBci#pV0oF(@prIFR=LEDdC|` z$6e@>ZBk~p1x{c}1ap=W1^2W?Z=AMy=;mO76+#5-nyl4XmK<5P7YCL|M_(NIF>`>^ z*RLK*lO8nwDMbFyjM$-Z6Jc-2q&bOb^^g1dhQG`X-*=g!K5kpSk08tH`uba$AEu(3 gUHh>HCdQ7*k1fAW1vhU(MTsEtw^U^Fq)ngxAO8EYHUIzs literal 0 HcmV?d00001 diff --git a/fieldservice_maintenance/static/description/index.html b/fieldservice_maintenance/static/description/index.html new file mode 100644 index 0000000000..f641896644 --- /dev/null +++ b/fieldservice_maintenance/static/description/index.html @@ -0,0 +1,470 @@ + + + + + + +Field Service - Maintenance + + + +
    +

    Field Service - Maintenance

    + + +

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

    +

    Odoo Maintenance App does not support Field Service operations for equipments +outside the company facilities. On the other hand, the Field Service App does +not support a maintenance schedule generating preventive maintenance request.

    +

    This module allows you to merge equipments from Field Service and Maintenance +and have a maintenance schedule for FSM equipments as well as Field Service +capabilities for maintenance equipments.

    +

    Table of contents

    + +
    +

    Installation

    +

    To install Field Service and have the mapping features, +you need to install fieldservice_stock and maintenance

    +

    Please refer to the installation instructions available at: +https://github.com/OCA/field-service/tree/11.0/fieldservice_maintenance

    +
    +
    +

    Configuration

    +

    To use this module, you need to:

    +
      +
    • Go to Field Service > Master Data > Equipments or Maintenance > Equipments
    • +
    • Create or select an equipment
    • +
    • Specify the maintenance schedule
    • +
    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Maintenance requests related to a FSM equipment will create a FSM order
    • +
    • Go to Field Service
    • +
    • Create or select a FSM order and select the type Maintenance.
    • +
    • Select the maintenance team, the equipment and the location
    • +
    • Upon saving, a maintenance request will be created with the information from the FSM order.
    • +
    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    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:

    +

    smangukiya 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_maintenance/views/fsm_equipment_view.xml b/fieldservice_maintenance/views/fsm_equipment_view.xml new file mode 100644 index 0000000000..85e2ab1598 --- /dev/null +++ b/fieldservice_maintenance/views/fsm_equipment_view.xml @@ -0,0 +1,15 @@ + + + + + + fsm.equipment.form.maintenance + fsm.equipment + + + + + + + + diff --git a/fieldservice_maintenance/views/fsm_order_view.xml b/fieldservice_maintenance/views/fsm_order_view.xml new file mode 100644 index 0000000000..bcab7bc294 --- /dev/null +++ b/fieldservice_maintenance/views/fsm_order_view.xml @@ -0,0 +1,25 @@ + + + + + + + fsm.order.maintenance.form + fsm.order + + + + + + + + {'required': [('type', '=', 'maintenance')]} + + + + + diff --git a/fieldservice_maintenance/views/maintenance_view.xml b/fieldservice_maintenance/views/maintenance_view.xml new file mode 100644 index 0000000000..d896c4216a --- /dev/null +++ b/fieldservice_maintenance/views/maintenance_view.xml @@ -0,0 +1,33 @@ + + + + + + equipment.form.fsm + maintenance.equipment + + + + + + + + + + + + + + + + + equipment.request.form.fsm + maintenance.request + + + + + + + + From dc71d6ed997f4081c0756f093d8c76f0fbc16bb6 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 3 Jan 2019 14:37:55 -0600 Subject: [PATCH 543/631] [IMP] UI --- fieldservice_maintenance/models/fsm_order.py | 7 +++++-- fieldservice_maintenance/models/maintenance.py | 5 ++++- .../views/fsm_equipment_view.xml | 14 +++++++++++--- fieldservice_maintenance/views/fsm_order_view.xml | 9 ++------- .../views/maintenance_view.xml | 3 +++ 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index 4b668d0511..ddc2684a34 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -12,7 +12,6 @@ class FSMOrder(geo_model.GeoModel): type = fields.Selection(selection_add=[('maintenance', 'Maintenance')]) request_id = fields.Many2one( 'maintenance.request', 'Maintenance Request') - maintenance_team_id = fields.Many2one('maintenance.team', string='Team') @api.model def create(self, vals): @@ -38,7 +37,11 @@ def create(self, vals): 'request_date': fields.Date.context_today(self), 'maintenance_type': 'corrective', 'maintenance_team_id': - order.maintenance_team_id.id or False, + equipment.maintenance_equipment_id and + equipment.maintenance_equipment_id.maintenance_team_id + and + equipment.maintenance_equipment_id.maintenance_team_id.id + or False, 'schedule_date': order.request_early, 'description': order.description }) diff --git a/fieldservice_maintenance/models/maintenance.py b/fieldservice_maintenance/models/maintenance.py index caa5df7841..1b16edfb89 100644 --- a/fieldservice_maintenance/models/maintenance.py +++ b/fieldservice_maintenance/models/maintenance.py @@ -26,7 +26,10 @@ def create(self, vals): 'maintenance_equipment_id', '=', request.equipment_id) fsm_order_id = self.env['fsm.order'].create({ 'type': 'maintenance', - 'equipment_id': fsm_equipment and fsm_equipment[0].id or False + 'equipment_id': fsm_equipment and fsm_equipment[0].id or False, + 'location_id': + fsm_equipment and fsm_equipment[0].current_location_id.id + or False }) request.fsm_order_id = fsm_order_id return request diff --git a/fieldservice_maintenance/views/fsm_equipment_view.xml b/fieldservice_maintenance/views/fsm_equipment_view.xml index 85e2ab1598..2f0bebc623 100644 --- a/fieldservice_maintenance/views/fsm_equipment_view.xml +++ b/fieldservice_maintenance/views/fsm_equipment_view.xml @@ -7,9 +7,17 @@ fsm.equipment - - - + + + + + + + + + + + diff --git a/fieldservice_maintenance/views/fsm_order_view.xml b/fieldservice_maintenance/views/fsm_order_view.xml index bcab7bc294..a03c5c76b8 100644 --- a/fieldservice_maintenance/views/fsm_order_view.xml +++ b/fieldservice_maintenance/views/fsm_order_view.xml @@ -9,16 +9,11 @@ fsm.order - + - - - - {'required': [('type', '=', 'maintenance')]} - + diff --git a/fieldservice_maintenance/views/maintenance_view.xml b/fieldservice_maintenance/views/maintenance_view.xml index d896c4216a..e88eb67c05 100644 --- a/fieldservice_maintenance/views/maintenance_view.xml +++ b/fieldservice_maintenance/views/maintenance_view.xml @@ -7,6 +7,9 @@ maintenance.equipment + + True + From a4783aac53a051dd64784cefa4afe87497523773 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 3 Jan 2019 14:55:19 -0600 Subject: [PATCH 544/631] [FIX] PEP8 error --- fieldservice_maintenance/models/fsm_order.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index ddc2684a34..8cfe9228b5 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -25,6 +25,11 @@ def create(self, vals): employee_id = employee_ids[0] if order.equipment_id: equipment = order.equipment_id + t = equipment.maintenance_equipment_id and\ + equipment.maintenance_equipment_id.maintenance_team_id \ + and\ + equipment.maintenance_equipment_id.maintenance_team_id.id\ + or False, request_id = self.env['maintenance.request'].create({ 'name': order.name or '', 'employee_id': employee_id.id, @@ -36,12 +41,7 @@ def create(self, vals): equipment.category_id.id or False, 'request_date': fields.Date.context_today(self), 'maintenance_type': 'corrective', - 'maintenance_team_id': - equipment.maintenance_equipment_id and - equipment.maintenance_equipment_id.maintenance_team_id - and - equipment.maintenance_equipment_id.maintenance_team_id.id - or False, + 'maintenance_team_id': t, 'schedule_date': order.request_early, 'description': order.description }) From 9231f887b93748b680c67b37afebb155d6fe8589 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 4 Jan 2019 14:24:56 -0600 Subject: [PATCH 545/631] [FIX] Model --- fieldservice_maintenance/models/fsm_equipment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fieldservice_maintenance/models/fsm_equipment.py b/fieldservice_maintenance/models/fsm_equipment.py index 49abfc91a7..04aa42c605 100644 --- a/fieldservice_maintenance/models/fsm_equipment.py +++ b/fieldservice_maintenance/models/fsm_equipment.py @@ -10,4 +10,5 @@ class FSMEquipment(models.Model): _description = 'FSM Maintenance equipment' maintenance_equipment_id = fields.Many2one( - 'maintenance.equipment', string='Maintenance Equipment') + 'maintenance.equipment', string='Maintenance Equipment', required=True, + ondelete='restrict', delegate=True, auto_join=True) From 9daea6e879e9e4dc6697419867309b1dc4f577d5 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 8 Jan 2019 10:24:34 -0600 Subject: [PATCH 546/631] [FIX] PEP8 error --- fieldservice_maintenance/readme/DESCRIPTION.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_maintenance/readme/DESCRIPTION.rst b/fieldservice_maintenance/readme/DESCRIPTION.rst index a8a98ee699..fd73d84ed7 100644 --- a/fieldservice_maintenance/readme/DESCRIPTION.rst +++ b/fieldservice_maintenance/readme/DESCRIPTION.rst @@ -4,4 +4,4 @@ not support a maintenance schedule generating preventive maintenance request. This module allows you to merge equipments from Field Service and Maintenance and have a maintenance schedule for FSM equipments as well as Field Service -capabilities for maintenance equipments. \ No newline at end of file +capabilities for maintenance equipments. From b3505488c1cfc3bd51f8571934ea82e0efbb45c5 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 9 Jan 2019 20:49:21 -0600 Subject: [PATCH 547/631] [ADD] stock.py --- fieldservice_maintenance/models/__init__.py | 9 ++++++--- fieldservice_maintenance/models/stock.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 fieldservice_maintenance/models/stock.py diff --git a/fieldservice_maintenance/models/__init__.py b/fieldservice_maintenance/models/__init__.py index bac82e01f7..6f21213b3c 100644 --- a/fieldservice_maintenance/models/__init__.py +++ b/fieldservice_maintenance/models/__init__.py @@ -1,6 +1,9 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import fsm_order -from . import maintenance -from . import fsm_equipment +from . import ( + fsm_order, + maintenance, + fsm_equipment, + stock, +) diff --git a/fieldservice_maintenance/models/stock.py b/fieldservice_maintenance/models/stock.py new file mode 100644 index 0000000000..b9568497b9 --- /dev/null +++ b/fieldservice_maintenance/models/stock.py @@ -0,0 +1,18 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class StockMove(models.Model): + _inherit = "stock.move" + + def prepare_equipment_values(self, move_line): + res = super(StockMove, self).prepare_equipment_values(move_line) + vals = {'name': '%s (%s)' % (move_line.product_id.name, + move_line.lot_id.name), + 'serial_no': move_line.lot_id.name, + 'is_fsm_equipment': True} + equipment_id = self.env['maintenance.equipment'].create(vals) + res.update({'maintenance_equipment_id': equipment_id.id}) + return res From d638a5ba762eb3eea1082d791c9bf71481db7865 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 31 Jan 2019 12:42:17 -0600 Subject: [PATCH 548/631] [FIX] fieldservice_maintenance --- fieldservice_maintenance/__manifest__.py | 2 +- .../models/fsm_equipment.py | 26 ++++++++++++++++--- .../views/fsm_equipment_view.xml | 2 +- .../views/fsm_order_view.xml | 4 +-- .../views/maintenance_view.xml | 2 +- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/fieldservice_maintenance/__manifest__.py b/fieldservice_maintenance/__manifest__.py index 592d2d0a58..5cee0eaa39 100644 --- a/fieldservice_maintenance/__manifest__.py +++ b/fieldservice_maintenance/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Maintenance', 'summary': 'Maintenance', - 'version': '11.0.0.0.1', + 'version': '11.0.0.1.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_maintenance/models/fsm_equipment.py b/fieldservice_maintenance/models/fsm_equipment.py index 04aa42c605..bb757ed8af 100644 --- a/fieldservice_maintenance/models/fsm_equipment.py +++ b/fieldservice_maintenance/models/fsm_equipment.py @@ -1,14 +1,32 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import api, fields, models class FSMEquipment(models.Model): _inherit = 'fsm.equipment' _inherits = {'maintenance.equipment': 'maintenance_equipment_id'} - _description = 'FSM Maintenance equipment' maintenance_equipment_id = fields.Many2one( - 'maintenance.equipment', string='Maintenance Equipment', required=True, - ondelete='restrict', delegate=True, auto_join=True) + 'maintenance.equipment', string='Related Maintenance Equipment', + required=True, ondelete='restrict', delegate=True, auto_join=True, + index=True) + + @api.model + def create(self, vals): + maintenance_equipment_id = self.env['maintenance.equipment'].create({ + 'name': vals['name'], + 'equipment_assign_to': 'other', + 'maintenance_team_id': vals['maintenance_team_id'], + 'is_fsm_equipment': True, + 'note': vals['notes'] or False, + 'serial_no': + vals['lot_id'] and + self.env['stock.production.lot'].browse(vals['lot_id']).name + or False}) + if maintenance_equipment_id: + vals.update({ + 'maintenance_equipment_id': maintenance_equipment_id.id}) + res = super(FSMEquipment, self).create(vals) + return res diff --git a/fieldservice_maintenance/views/fsm_equipment_view.xml b/fieldservice_maintenance/views/fsm_equipment_view.xml index 2f0bebc623..b49347e8e8 100644 --- a/fieldservice_maintenance/views/fsm_equipment_view.xml +++ b/fieldservice_maintenance/views/fsm_equipment_view.xml @@ -11,7 +11,7 @@ - + diff --git a/fieldservice_maintenance/views/fsm_order_view.xml b/fieldservice_maintenance/views/fsm_order_view.xml index a03c5c76b8..4e256c9e42 100644 --- a/fieldservice_maintenance/views/fsm_order_view.xml +++ b/fieldservice_maintenance/views/fsm_order_view.xml @@ -9,11 +9,11 @@ fsm.order - + - + diff --git a/fieldservice_maintenance/views/maintenance_view.xml b/fieldservice_maintenance/views/maintenance_view.xml index e88eb67c05..f05f4c592e 100644 --- a/fieldservice_maintenance/views/maintenance_view.xml +++ b/fieldservice_maintenance/views/maintenance_view.xml @@ -14,7 +14,7 @@ - + From 178fff64c328ecadf57f02f9df1a792109f6510d Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 1 Feb 2019 19:05:17 -0600 Subject: [PATCH 549/631] [FIX] fieldservice_maintenance --- fieldservice_maintenance/__manifest__.py | 2 +- fieldservice_maintenance/views/fsm_order_view.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldservice_maintenance/__manifest__.py b/fieldservice_maintenance/__manifest__.py index 5cee0eaa39..8f139c8d67 100644 --- a/fieldservice_maintenance/__manifest__.py +++ b/fieldservice_maintenance/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Maintenance', 'summary': 'Maintenance', - 'version': '11.0.0.1.0', + 'version': '11.0.0.2.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', diff --git a/fieldservice_maintenance/views/fsm_order_view.xml b/fieldservice_maintenance/views/fsm_order_view.xml index 4e256c9e42..94642d72d0 100644 --- a/fieldservice_maintenance/views/fsm_order_view.xml +++ b/fieldservice_maintenance/views/fsm_order_view.xml @@ -9,7 +9,7 @@ fsm.order - + From acaab8aba6f807884438903bdbfdfea68524537e Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 8 Feb 2019 00:10:23 -0600 Subject: [PATCH 550/631] [IMP] UI stuff --- .../views/fsm_equipment_view.xml | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/fieldservice_maintenance/views/fsm_equipment_view.xml b/fieldservice_maintenance/views/fsm_equipment_view.xml index b49347e8e8..49fc1d2bb0 100644 --- a/fieldservice_maintenance/views/fsm_equipment_view.xml +++ b/fieldservice_maintenance/views/fsm_equipment_view.xml @@ -7,16 +7,24 @@ fsm.equipment - - - - - - - - - - + + + + + + + + + + + fsm.equipment.model + fsm.equipment + + + + + From f98aa0ecc51e8075d3aa3d60d07935c8ba908b7b Mon Sep 17 00:00:00 2001 From: scampbell Date: Fri, 8 Mar 2019 13:19:47 -0800 Subject: [PATCH 551/631] [IMP] FSM Maintenance Bug Fix --- .../views/fsm_equipment_view.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fieldservice_maintenance/views/fsm_equipment_view.xml b/fieldservice_maintenance/views/fsm_equipment_view.xml index 49fc1d2bb0..5a8ec7ff4d 100644 --- a/fieldservice_maintenance/views/fsm_equipment_view.xml +++ b/fieldservice_maintenance/views/fsm_equipment_view.xml @@ -28,4 +28,16 @@ + + fsm.equipment.model + fsm.equipment + + + + + + + + From 1268a213d27b8cd16f2b10f982d58494d24ed7ce Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Fri, 5 Apr 2019 20:30:17 +0530 Subject: [PATCH 552/631] [MIG][WIP][12.0] fieldservice_maintenance --- fieldservice_maintenance/README.rst | 13 +++++++------ fieldservice_maintenance/__manifest__.py | 4 +++- fieldservice_maintenance/models/__init__.py | 1 - .../models/fsm_equipment.py | 9 +++------ fieldservice_maintenance/models/fsm_order.py | 7 +++---- fieldservice_maintenance/models/maintenance.py | 7 ++++--- fieldservice_maintenance/models/stock.py | 18 ------------------ .../readme/CONTRIBUTORS.rst | 1 + fieldservice_maintenance/readme/INSTALL.rst | 2 +- .../static/description/index.html | 9 +++++---- .../views/fsm_order_view.xml | 6 +++--- .../views/maintenance_view.xml | 8 +++++--- 12 files changed, 35 insertions(+), 50 deletions(-) delete mode 100644 fieldservice_maintenance/models/stock.py diff --git a/fieldservice_maintenance/README.rst b/fieldservice_maintenance/README.rst index fa3e01ee7b..6ad9101c07 100644 --- a/fieldservice_maintenance/README.rst +++ b/fieldservice_maintenance/README.rst @@ -14,13 +14,13 @@ Field Service - Maintenance :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/11.0/fieldservice_maintenance + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_maintenance :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-11-0/field-service-11-0-fieldservice_maintenance + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_maintenance :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -45,7 +45,7 @@ To install Field Service and have the mapping features, you need to install fieldservice_stock and maintenance Please refer to the installation instructions available at: -https://github.com/OCA/field-service/tree/11.0/fieldservice_maintenance +https://github.com/OCA/field-service/tree/12.0/fieldservice_maintenance Configuration ============= @@ -79,7 +79,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -95,6 +95,7 @@ Contributors ~~~~~~~~~~~~ * Sandip Mangukiya +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -127,6 +128,6 @@ Current `maintainers `__: |maintainer-smangukiya| |maintainer-max3903| -This module is part of the `OCA/field-service `_ project on GitHub. +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_maintenance/__manifest__.py b/fieldservice_maintenance/__manifest__.py index 8f139c8d67..b9a574cc3a 100644 --- a/fieldservice_maintenance/__manifest__.py +++ b/fieldservice_maintenance/__manifest__.py @@ -4,13 +4,14 @@ { 'name': 'Field Service - Maintenance', 'summary': 'Maintenance', - 'version': '11.0.0.2.0', + 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/field-service', 'depends': [ 'fieldservice_stock', 'maintenance', + 'hr', ], 'data': [ 'views/maintenance_view.xml', @@ -23,4 +24,5 @@ 'smangukiya', 'max3903', ], + 'installable': True, } diff --git a/fieldservice_maintenance/models/__init__.py b/fieldservice_maintenance/models/__init__.py index 6f21213b3c..0410718458 100644 --- a/fieldservice_maintenance/models/__init__.py +++ b/fieldservice_maintenance/models/__init__.py @@ -5,5 +5,4 @@ fsm_order, maintenance, fsm_equipment, - stock, ) diff --git a/fieldservice_maintenance/models/fsm_equipment.py b/fieldservice_maintenance/models/fsm_equipment.py index bb757ed8af..9913c57aaf 100644 --- a/fieldservice_maintenance/models/fsm_equipment.py +++ b/fieldservice_maintenance/models/fsm_equipment.py @@ -6,7 +6,6 @@ class FSMEquipment(models.Model): _inherit = 'fsm.equipment' - _inherits = {'maintenance.equipment': 'maintenance_equipment_id'} maintenance_equipment_id = fields.Many2one( 'maintenance.equipment', string='Related Maintenance Equipment', @@ -16,11 +15,10 @@ class FSMEquipment(models.Model): @api.model def create(self, vals): maintenance_equipment_id = self.env['maintenance.equipment'].create({ - 'name': vals['name'], + 'name': vals.get('name'), 'equipment_assign_to': 'other', - 'maintenance_team_id': vals['maintenance_team_id'], 'is_fsm_equipment': True, - 'note': vals['notes'] or False, + 'note': vals.get('notes', False), 'serial_no': vals['lot_id'] and self.env['stock.production.lot'].browse(vals['lot_id']).name @@ -28,5 +26,4 @@ def create(self, vals): if maintenance_equipment_id: vals.update({ 'maintenance_equipment_id': maintenance_equipment_id.id}) - res = super(FSMEquipment, self).create(vals) - return res + return super(FSMEquipment, self).create(vals) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index 8cfe9228b5..8d0bb77118 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -1,11 +1,10 @@ # Copyright (C) 2018 - TODAY, Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields -from odoo.addons.base_geoengine import geo_model +from odoo import api, fields, models -class FSMOrder(geo_model.GeoModel): +class FSMOrder(models.Model): _inherit = 'fsm.order' _description = 'Field Service Order Maintenance' @@ -23,7 +22,7 @@ def create(self, vals): [('user_id', '=', self.env.uid)]) if employee_ids: employee_id = employee_ids[0] - if order.equipment_id: + if order.equipment_id and not order.equipment_id.is_fsm_equipment: equipment = order.equipment_id t = equipment.maintenance_equipment_id and\ equipment.maintenance_equipment_id.maintenance_team_id \ diff --git a/fieldservice_maintenance/models/maintenance.py b/fieldservice_maintenance/models/maintenance.py index 1b16edfb89..e356965fed 100644 --- a/fieldservice_maintenance/models/maintenance.py +++ b/fieldservice_maintenance/models/maintenance.py @@ -23,12 +23,13 @@ def create(self, vals): if request.equipment_id.is_fsm_equipment: # Get the fsm equipment fsm_equipment = self.env['fsm.equipment'].search( - 'maintenance_equipment_id', '=', request.equipment_id) + [('maintenance_equipment_id', '=', request.equipment_id.id)], + limit=1) fsm_order_id = self.env['fsm.order'].create({ 'type': 'maintenance', - 'equipment_id': fsm_equipment and fsm_equipment[0].id or False, + 'equipment_id': fsm_equipment and fsm_equipment.id or False, 'location_id': - fsm_equipment and fsm_equipment[0].current_location_id.id + fsm_equipment and fsm_equipment.current_location_id.id or False }) request.fsm_order_id = fsm_order_id diff --git a/fieldservice_maintenance/models/stock.py b/fieldservice_maintenance/models/stock.py deleted file mode 100644 index b9568497b9..0000000000 --- a/fieldservice_maintenance/models/stock.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2018 - TODAY, Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import models - - -class StockMove(models.Model): - _inherit = "stock.move" - - def prepare_equipment_values(self, move_line): - res = super(StockMove, self).prepare_equipment_values(move_line) - vals = {'name': '%s (%s)' % (move_line.product_id.name, - move_line.lot_id.name), - 'serial_no': move_line.lot_id.name, - 'is_fsm_equipment': True} - equipment_id = self.env['maintenance.equipment'].create(vals) - res.update({'maintenance_equipment_id': equipment_id.id}) - return res diff --git a/fieldservice_maintenance/readme/CONTRIBUTORS.rst b/fieldservice_maintenance/readme/CONTRIBUTORS.rst index a76235f8a2..373b2a6a28 100644 --- a/fieldservice_maintenance/readme/CONTRIBUTORS.rst +++ b/fieldservice_maintenance/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Sandip Mangukiya +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_maintenance/readme/INSTALL.rst b/fieldservice_maintenance/readme/INSTALL.rst index 43c27d0602..7fdfc47daf 100644 --- a/fieldservice_maintenance/readme/INSTALL.rst +++ b/fieldservice_maintenance/readme/INSTALL.rst @@ -2,4 +2,4 @@ To install Field Service and have the mapping features, you need to install fieldservice_stock and maintenance Please refer to the installation instructions available at: -https://github.com/OCA/field-service/tree/11.0/fieldservice_maintenance +https://github.com/OCA/field-service/tree/12.0/fieldservice_maintenance diff --git a/fieldservice_maintenance/static/description/index.html b/fieldservice_maintenance/static/description/index.html index f641896644..6cf73d7d6b 100644 --- a/fieldservice_maintenance/static/description/index.html +++ b/fieldservice_maintenance/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Maintenance

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    Odoo Maintenance App does not support Field Service operations for equipments outside the company facilities. On the other hand, the Field Service App does not support a maintenance schedule generating preventive maintenance request.

    @@ -396,7 +396,7 @@

    Installation

    To install Field Service and have the mapping features, you need to install fieldservice_stock and maintenance

    Please refer to the installation instructions available at: -https://github.com/OCA/field-service/tree/11.0/fieldservice_maintenance

    +https://github.com/OCA/field-service/tree/12.0/fieldservice_maintenance

    Configuration

    @@ -428,7 +428,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -443,6 +443,7 @@

    Authors

    Contributors

    @@ -461,7 +462,7 @@

    Maintainers

    promote its widespread use.

    Current maintainers:

    smangukiya max3903

    -

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

    +

    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_maintenance/views/fsm_order_view.xml b/fieldservice_maintenance/views/fsm_order_view.xml index 94642d72d0..2f60c96393 100644 --- a/fieldservice_maintenance/views/fsm_order_view.xml +++ b/fieldservice_maintenance/views/fsm_order_view.xml @@ -1,4 +1,4 @@ - + @@ -11,8 +11,8 @@ + readonly="1" + attrs="{'invisible': [('type', '!=', 'maintenance')]}"/>
    diff --git a/fieldservice_maintenance/views/maintenance_view.xml b/fieldservice_maintenance/views/maintenance_view.xml index f05f4c592e..fd201f36ca 100644 --- a/fieldservice_maintenance/views/maintenance_view.xml +++ b/fieldservice_maintenance/views/maintenance_view.xml @@ -21,15 +21,17 @@ - + equipment.request.form.fsm maintenance.request - + - + From b4a4c87a2b98f2ae53e243759044a88c9b3614dc Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Tue, 30 Apr 2019 16:41:58 +0530 Subject: [PATCH 553/631] [FIX][12.0] Improved code. --- fieldservice_maintenance/models/fsm_order.py | 42 ++++++++----------- .../models/maintenance.py | 17 ++++---- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index 8d0bb77118..b2d8df3c78 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -18,31 +18,23 @@ def create(self, vals): # create maintenance request order = super(FSMOrder, self).create(vals) if order.type == 'maintenance': - employee_ids = self.env['hr.employee'].search( - [('user_id', '=', self.env.uid)]) - if employee_ids: - employee_id = employee_ids[0] - if order.equipment_id and not order.equipment_id.is_fsm_equipment: + employee_rec = self.env['hr.employee'].search( + [('user_id', '=', self.env.uid)], limit=1) + if order.equipment_id and not order.request_id: equipment = order.equipment_id - t = equipment.maintenance_equipment_id and\ - equipment.maintenance_equipment_id.maintenance_team_id \ - and\ - equipment.maintenance_equipment_id.maintenance_team_id.id\ - or False, - request_id = self.env['maintenance.request'].create({ - 'name': order.name or '', - 'employee_id': employee_id.id, - 'equipment_id': - equipment.maintenance_equipment_id - and equipment.maintenance_equipment_id.id or False, - 'category_id': - equipment.category_id and - equipment.category_id.id or False, - 'request_date': fields.Date.context_today(self), - 'maintenance_type': 'corrective', - 'maintenance_team_id': t, - 'schedule_date': order.request_early, - 'description': order.description - }) + team_id = equipment.maintenance_equipment_id and\ + equipment.maintenance_equipment_id.maintenance_team_id.id + request_id = self.env['maintenance.request'].with_context( + fsm_order=True).create({ + 'name': order.name or '', + 'employee_id': employee_rec.id, + 'equipment_id': equipment.maintenance_equipment_id.id, + 'category_id': equipment.category_id.id, + 'request_date': fields.Date.context_today(self), + 'maintenance_type': 'corrective', + 'maintenance_team_id': team_id, + 'schedule_date': order.request_early, + 'description': order.description + }) order.request_id = request_id return order diff --git a/fieldservice_maintenance/models/maintenance.py b/fieldservice_maintenance/models/maintenance.py index e356965fed..2b0c1753ce 100644 --- a/fieldservice_maintenance/models/maintenance.py +++ b/fieldservice_maintenance/models/maintenance.py @@ -20,17 +20,18 @@ def create(self, vals): # create FSM order with type maintenance if selected equipment is # enabled with boolean is_fsm_equipment request = super(MaintenanceRequest, self).create(vals) - if request.equipment_id.is_fsm_equipment: + ctx = dict(self._context) + if request.equipment_id.is_fsm_equipment and "fsm_order" not in ctx: # Get the fsm equipment fsm_equipment = self.env['fsm.equipment'].search( [('maintenance_equipment_id', '=', request.equipment_id.id)], limit=1) - fsm_order_id = self.env['fsm.order'].create({ - 'type': 'maintenance', - 'equipment_id': fsm_equipment and fsm_equipment.id or False, - 'location_id': - fsm_equipment and fsm_equipment.current_location_id.id - or False - }) + fsm_order_id = self.env['fsm.order'].create( + {'type': 'maintenance', + 'equipment_id': fsm_equipment.id, + 'location_id': fsm_equipment and + fsm_equipment.current_location_id.id, + 'request_id': request.id + }) request.fsm_order_id = fsm_order_id return request From 4d9d3d2e28e539011350b0b4881602c96271cd0e Mon Sep 17 00:00:00 2001 From: scampbell Date: Thu, 27 Jun 2019 10:33:13 -0700 Subject: [PATCH 554/631] [IMP] Remove Create() Repair/Maintenance --- fieldservice_maintenance/models/fsm_order.py | 27 -------------------- 1 file changed, 27 deletions(-) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index b2d8df3c78..e78951e38f 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -11,30 +11,3 @@ class FSMOrder(models.Model): type = fields.Selection(selection_add=[('maintenance', 'Maintenance')]) request_id = fields.Many2one( 'maintenance.request', 'Maintenance Request') - - @api.model - def create(self, vals): - # if FSM order with type maintenance is create then - # create maintenance request - order = super(FSMOrder, self).create(vals) - if order.type == 'maintenance': - employee_rec = self.env['hr.employee'].search( - [('user_id', '=', self.env.uid)], limit=1) - if order.equipment_id and not order.request_id: - equipment = order.equipment_id - team_id = equipment.maintenance_equipment_id and\ - equipment.maintenance_equipment_id.maintenance_team_id.id - request_id = self.env['maintenance.request'].with_context( - fsm_order=True).create({ - 'name': order.name or '', - 'employee_id': employee_rec.id, - 'equipment_id': equipment.maintenance_equipment_id.id, - 'category_id': equipment.category_id.id, - 'request_date': fields.Date.context_today(self), - 'maintenance_type': 'corrective', - 'maintenance_team_id': team_id, - 'schedule_date': order.request_early, - 'description': order.description - }) - order.request_id = request_id - return order From 1477b9df6e03d5efacb666849bffd70be85f8e68 Mon Sep 17 00:00:00 2001 From: scampbell Date: Thu, 27 Jun 2019 10:40:06 -0700 Subject: [PATCH 555/631] [IMP] Create() Unused --- fieldservice_maintenance/models/fsm_order.py | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index e78951e38f..5eb0ae2c0d 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -11,3 +11,30 @@ class FSMOrder(models.Model): type = fields.Selection(selection_add=[('maintenance', 'Maintenance')]) request_id = fields.Many2one( 'maintenance.request', 'Maintenance Request') + + # @api.model + # def create(self, vals): + # # if FSM order with type maintenance is create then + # # create maintenance request + # order = super(FSMOrder, self).create(vals) + # if order.type == 'maintenance': + # employee_rec = self.env['hr.employee'].search( + # [('user_id', '=', self.env.uid)], limit=1) + # if order.equipment_id and not order.request_id: + # equipment = order.equipment_id + # team_id = equipment.maintenance_equipment_id and\ + # equipment.maintenance_equipment_id.maintenance_team_id.id + # request_id = self.env['maintenance.request'].with_context( + # fsm_order=True).create({ + # 'name': order.name or '', + # 'employee_id': employee_rec.id, + # 'equipment_id': equipment.maintenance_equipment_id.id, + # 'category_id': equipment.category_id.id, + # 'request_date': fields.Date.context_today(self), + # 'maintenance_type': 'corrective', + # 'maintenance_team_id': team_id, + # 'schedule_date': order.request_early, + # 'description': order.description + # }) + # order.request_id = request_id + # return order From 15bde21228627c89a0b9561feae4722ef3a0ffdc Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 5 Jul 2019 14:16:06 -0500 Subject: [PATCH 556/631] [FIX] fieldservice_maintenance: formatting --- fieldservice_maintenance/models/fsm_order.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index 5eb0ae2c0d..e9ff4f4742 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -1,7 +1,8 @@ # 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 import fields, models +# from odoo import api, fields, models class FSMOrder(models.Model): @@ -9,9 +10,9 @@ class FSMOrder(models.Model): _description = 'Field Service Order Maintenance' type = fields.Selection(selection_add=[('maintenance', 'Maintenance')]) - request_id = fields.Many2one( - 'maintenance.request', 'Maintenance Request') - + request_id = fields.Many2one('maintenance.request', + string='Maintenance Request') + # @api.model # def create(self, vals): # # if FSM order with type maintenance is create then @@ -28,7 +29,8 @@ class FSMOrder(models.Model): # fsm_order=True).create({ # 'name': order.name or '', # 'employee_id': employee_rec.id, - # 'equipment_id': equipment.maintenance_equipment_id.id, + # 'equipment_id': + # equipment.maintenance_equipment_id.id, # 'category_id': equipment.category_id.id, # 'request_date': fields.Date.context_today(self), # 'maintenance_type': 'corrective', From de185d6eb4331f86e137cd6401261bcf4cb03b59 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 17 Jul 2019 14:07:15 -0500 Subject: [PATCH 557/631] [IMP] fieldservice_maintenance: Remove description --- fieldservice_maintenance/models/fsm_order.py | 1 - fieldservice_maintenance/static/description/index.html | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/fieldservice_maintenance/models/fsm_order.py b/fieldservice_maintenance/models/fsm_order.py index e9ff4f4742..213efa886c 100644 --- a/fieldservice_maintenance/models/fsm_order.py +++ b/fieldservice_maintenance/models/fsm_order.py @@ -7,7 +7,6 @@ class FSMOrder(models.Model): _inherit = 'fsm.order' - _description = 'Field Service Order Maintenance' type = fields.Selection(selection_add=[('maintenance', 'Maintenance')]) request_id = fields.Many2one('maintenance.request', diff --git a/fieldservice_maintenance/static/description/index.html b/fieldservice_maintenance/static/description/index.html index 6cf73d7d6b..83c622b811 100644 --- a/fieldservice_maintenance/static/description/index.html +++ b/fieldservice_maintenance/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Maintenance + + +
    +

    Field Service - Delivery

    + + +

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

    +

    This module is an add-on for the Field Service application in Odoo. +It provides delivery capabilities on the field service orders.

    +

    Table of contents

    + +
    +

    Installation

    +

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

    +

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

    +
    +
    +

    Configuration

    +

    To configure this module, you need to:

    +
      +
    • Go to Inventory > Configuration > Delivery Methods
    • +
    • Review the existing delivery methods or create new ones
    • +
    +
    +
    +

    Usage

    +

    To use this module, you need to:

    +
      +
    • Create a new service order
    • +
    • Under the Inventory tab, select the warehouse, the delivery method and add +products with quantity
    • +
    • Confirm the order to create the delivery orders with the selected method
    • +
    +
    +
    +

    Known issues / Roadmap

    +

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

    +
    +
    +

    Bug Tracker

    +

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

    +

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

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Open Source Integrators
    • +
    +
    + +
    +

    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 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_delivery/views/fsm_order.xml b/fieldservice_delivery/views/fsm_order.xml new file mode 100644 index 0000000000..6f58d6228b --- /dev/null +++ b/fieldservice_delivery/views/fsm_order.xml @@ -0,0 +1,29 @@ + + + + + + fsm.order.form.stock + fsm.order + + + + + + + + + + + fsm.order.form + fsm.order + + + + + + + + + From beda91e597b3bf6c44def9d8746477ab5f915487 Mon Sep 17 00:00:00 2001 From: Murtuza Saleh Date: Thu, 4 Apr 2019 21:01:53 +0530 Subject: [PATCH 591/631] [MIG][WIP][12.0] fieldservice_delivery --- fieldservice_delivery/README.rst | 13 +++++++------ fieldservice_delivery/__manifest__.py | 2 +- fieldservice_delivery/models/fsm_order.py | 6 ++---- fieldservice_delivery/readme/CONTRIBUTORS.rst | 1 + fieldservice_delivery/readme/INSTALL.rst | 2 +- fieldservice_delivery/static/description/index.html | 9 +++++---- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/fieldservice_delivery/README.rst b/fieldservice_delivery/README.rst index 5adfcbf059..15f3c3e63c 100644 --- a/fieldservice_delivery/README.rst +++ b/fieldservice_delivery/README.rst @@ -14,13 +14,13 @@ Field Service - Delivery :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/11.0/fieldservice_delivery + :target: https://github.com/OCA/field-service/tree/12.0/fieldservice_delivery :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-11-0/field-service-11-0-fieldservice_delivery + :target: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_delivery :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/264/11.0 + :target: https://runbot.odoo-community.org/runbot/264/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -39,7 +39,7 @@ Installation To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/11.0/base_geoengine +https://github.com/OCA/geospatial/tree/12.0/base_geoengine Configuration ============= @@ -71,7 +71,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -87,6 +87,7 @@ Contributors ~~~~~~~~~~~~ * Maxime Chambreuil +* Serpent Consulting Services Pvt. Ltd. Other credits ~~~~~~~~~~~~~ @@ -116,6 +117,6 @@ Current `maintainer `__: |maintainer-max3903| -This module is part of the `OCA/field-service `_ project on GitHub. +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_delivery/__manifest__.py b/fieldservice_delivery/__manifest__.py index 7bd3494fe1..c9c9663fc3 100644 --- a/fieldservice_delivery/__manifest__.py +++ b/fieldservice_delivery/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Field Service - Delivery', 'summary': 'Delivery and Carriers for Field Services', - 'version': '11.0.0.0.1', + 'version': '12.0.1.0.0', 'category': 'Field Service', 'author': "Open Source Integrators, " "Odoo Community Association (OCA)", diff --git a/fieldservice_delivery/models/fsm_order.py b/fieldservice_delivery/models/fsm_order.py index 5ef5ce10ed..1189a8a4eb 100644 --- a/fieldservice_delivery/models/fsm_order.py +++ b/fieldservice_delivery/models/fsm_order.py @@ -1,12 +1,10 @@ # Copyright (C) 2018 - TODAY, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields +from odoo import fields, models -from odoo.addons.base_geoengine import geo_model - -class FSMOrder(geo_model.GeoModel): +class FSMOrder(models.Model): _inherit = 'fsm.order' carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method") diff --git a/fieldservice_delivery/readme/CONTRIBUTORS.rst b/fieldservice_delivery/readme/CONTRIBUTORS.rst index ab792860d8..64881b41a3 100644 --- a/fieldservice_delivery/readme/CONTRIBUTORS.rst +++ b/fieldservice_delivery/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Maxime Chambreuil +* Serpent Consulting Services Pvt. Ltd. diff --git a/fieldservice_delivery/readme/INSTALL.rst b/fieldservice_delivery/readme/INSTALL.rst index c010f8f6a2..8571f65376 100644 --- a/fieldservice_delivery/readme/INSTALL.rst +++ b/fieldservice_delivery/readme/INSTALL.rst @@ -1,4 +1,4 @@ To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/11.0/base_geoengine +https://github.com/OCA/geospatial/tree/12.0/base_geoengine diff --git a/fieldservice_delivery/static/description/index.html b/fieldservice_delivery/static/description/index.html index f34a4c0451..a350fb0fec 100644 --- a/fieldservice_delivery/static/description/index.html +++ b/fieldservice_delivery/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Delivery

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    This module is an add-on for the Field Service application in Odoo. It provides delivery capabilities on the field service orders.

    Table of contents

    @@ -391,7 +391,7 @@

    Field Service - Delivery

    Installation

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

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

    +https://github.com/OCA/geospatial/tree/12.0/base_geoengine

    Configuration

    @@ -421,7 +421,7 @@

    Bug Tracker

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

    +feedback.

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

    @@ -436,6 +436,7 @@

    Authors

    Contributors

    @@ -454,7 +455,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    max3903

    -

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

    +

    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.

    From 151584ec1b5626d2b6afd8c8d11c514acdd41167 Mon Sep 17 00:00:00 2001 From: scampbell Date: Wed, 1 May 2019 15:17:50 -0700 Subject: [PATCH 592/631] [IMP] #97 Fedex Dist. Menu/Mobile Fix --- fieldservice_delivery/models/fsm_order.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/fieldservice_delivery/models/fsm_order.py b/fieldservice_delivery/models/fsm_order.py index 1189a8a4eb..3f6a8fcd18 100644 --- a/fieldservice_delivery/models/fsm_order.py +++ b/fieldservice_delivery/models/fsm_order.py @@ -7,4 +7,25 @@ class FSMOrder(models.Model): _inherit = 'fsm.order' - carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method") + carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method", + compute="_compute_carrier_id") + + #Note: This function only works if the user has configured their + # Delivery Methods to have 'Fedex Ground', 'Fedex Standard- + # Overnight', and 'Fedex Priority-Overnight' + def _compute_carrier_id(self): + if self.priority == '0' or self.priority == '1': + fedex = self.env['delivery.carrier'].\ + search([('name', '=', 'Fedex Ground')]) + if fedex: + self.carrier_id = fedex + elif self.priority == '2': + fedex = self.env['delivery.carrier'].\ + search([('name', '=', 'Fedex Standard-Overnight')]) + if fedex: + self.carrier_id = fedex + elif self.priority == '3': + fedex = self.env['delivery.carrier'].\ + search([('name', '=', 'Fedex Priority-Overnight')]) + if fedex: + self.carrier_id = fedex From 60b6d0794a6f69a3e7e2f5ab0ea128d47d1885e1 Mon Sep 17 00:00:00 2001 From: scampbell Date: Tue, 7 May 2019 14:22:11 -0700 Subject: [PATCH 593/631] [IMP] Flake8 Errors --- fieldservice_delivery/models/fsm_order.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fieldservice_delivery/models/fsm_order.py b/fieldservice_delivery/models/fsm_order.py index 3f6a8fcd18..bcff0f1044 100644 --- a/fieldservice_delivery/models/fsm_order.py +++ b/fieldservice_delivery/models/fsm_order.py @@ -10,9 +10,9 @@ class FSMOrder(models.Model): carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method", compute="_compute_carrier_id") - #Note: This function only works if the user has configured their - # Delivery Methods to have 'Fedex Ground', 'Fedex Standard- - # Overnight', and 'Fedex Priority-Overnight' + """ Note: This function only works if the user has configured their + Delivery Methods to have 'Fedex Ground', 'Fedex Standard- + Overnight', and 'Fedex Priority-Overnight'""" def _compute_carrier_id(self): if self.priority == '0' or self.priority == '1': fedex = self.env['delivery.carrier'].\ From e2ae689097788f8ae6a11f841bc3b6a8ab180cb4 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 10 May 2019 19:33:07 -0500 Subject: [PATCH 594/631] Update fsm_order.xml --- fieldservice_delivery/views/fsm_order.xml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/fieldservice_delivery/views/fsm_order.xml b/fieldservice_delivery/views/fsm_order.xml index 6f58d6228b..b8d1368ac7 100644 --- a/fieldservice_delivery/views/fsm_order.xml +++ b/fieldservice_delivery/views/fsm_order.xml @@ -14,16 +14,4 @@ - - - fsm.order.form - fsm.order - - - - - - - - From 54eb644cee527900dcf077e64d56dd62236f0a12 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 5 Jul 2019 10:48:23 -0500 Subject: [PATCH 595/631] [FIX] fieldservice_delivery: Add carrier_id to procurement --- fieldservice_delivery/models/__init__.py | 6 ++++- fieldservice_delivery/models/fsm_order.py | 23 +------------------ fieldservice_delivery/models/stock.py | 10 ++++++++ fieldservice_delivery/models/stock_request.py | 17 ++++++++++++++ 4 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 fieldservice_delivery/models/stock.py create mode 100644 fieldservice_delivery/models/stock_request.py diff --git a/fieldservice_delivery/models/__init__.py b/fieldservice_delivery/models/__init__.py index fb450db8c7..e06f2f6fc2 100644 --- a/fieldservice_delivery/models/__init__.py +++ b/fieldservice_delivery/models/__init__.py @@ -1,4 +1,8 @@ # Copyright (C) 2018 - TODAY, Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import fsm_order +from . import ( + fsm_order, + stock, + stock_request, +) diff --git a/fieldservice_delivery/models/fsm_order.py b/fieldservice_delivery/models/fsm_order.py index bcff0f1044..1189a8a4eb 100644 --- a/fieldservice_delivery/models/fsm_order.py +++ b/fieldservice_delivery/models/fsm_order.py @@ -7,25 +7,4 @@ class FSMOrder(models.Model): _inherit = 'fsm.order' - carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method", - compute="_compute_carrier_id") - - """ Note: This function only works if the user has configured their - Delivery Methods to have 'Fedex Ground', 'Fedex Standard- - Overnight', and 'Fedex Priority-Overnight'""" - def _compute_carrier_id(self): - if self.priority == '0' or self.priority == '1': - fedex = self.env['delivery.carrier'].\ - search([('name', '=', 'Fedex Ground')]) - if fedex: - self.carrier_id = fedex - elif self.priority == '2': - fedex = self.env['delivery.carrier'].\ - search([('name', '=', 'Fedex Standard-Overnight')]) - if fedex: - self.carrier_id = fedex - elif self.priority == '3': - fedex = self.env['delivery.carrier'].\ - search([('name', '=', 'Fedex Priority-Overnight')]) - if fedex: - self.carrier_id = fedex + carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method") diff --git a/fieldservice_delivery/models/stock.py b/fieldservice_delivery/models/stock.py new file mode 100644 index 0000000000..5ae7eb1d23 --- /dev/null +++ b/fieldservice_delivery/models/stock.py @@ -0,0 +1,10 @@ +# Copyright (C) 2018 - TODAY, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProcurementGroup(models.Model): + _inherit = 'procurement.group' + + carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method") diff --git a/fieldservice_delivery/models/stock_request.py b/fieldservice_delivery/models/stock_request.py new file mode 100644 index 0000000000..67c46359f4 --- /dev/null +++ b/fieldservice_delivery/models/stock_request.py @@ -0,0 +1,17 @@ +# Copyright (C) 2018 - TODAY, Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class StockRequest(models.Model): + _inherit = 'stock.request' + + carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method") + + def _prepare_procurement_values(self, group_id=False): + res = self.super()._prepare_procurement_values(group_id=group_id) + res.update({ + 'carrier_id': self.fsm_order_id.carrier_id.id or False, + }) + return res From 19827e1a54971487ad8e618e0fb6a1c9362086d0 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Fri, 5 Jul 2019 21:19:37 -0500 Subject: [PATCH 596/631] [FIX] fieldservice_delivery: Set the carrier --- fieldservice_delivery/models/stock.py | 9 +++++++++ fieldservice_delivery/models/stock_request.py | 2 +- fieldservice_delivery/static/description/index.html | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/fieldservice_delivery/models/stock.py b/fieldservice_delivery/models/stock.py index 5ae7eb1d23..177fa56b48 100644 --- a/fieldservice_delivery/models/stock.py +++ b/fieldservice_delivery/models/stock.py @@ -4,6 +4,15 @@ from odoo import fields, models +class StockMove(models.Model): + _inherit = 'stock.move' + + def _get_new_picking_values(self): + vals = super(StockMove, self)._get_new_picking_values() + vals['carrier_id'] = self.fsm_order_id.carrier_id.id + return vals + + class ProcurementGroup(models.Model): _inherit = 'procurement.group' diff --git a/fieldservice_delivery/models/stock_request.py b/fieldservice_delivery/models/stock_request.py index 67c46359f4..6a8985e00d 100644 --- a/fieldservice_delivery/models/stock_request.py +++ b/fieldservice_delivery/models/stock_request.py @@ -10,7 +10,7 @@ class StockRequest(models.Model): carrier_id = fields.Many2one('delivery.carrier', string="Delivery Method") def _prepare_procurement_values(self, group_id=False): - res = self.super()._prepare_procurement_values(group_id=group_id) + res = super()._prepare_procurement_values(group_id=group_id) res.update({ 'carrier_id': self.fsm_order_id.carrier_id.id or False, }) diff --git a/fieldservice_delivery/static/description/index.html b/fieldservice_delivery/static/description/index.html index a350fb0fec..59589f511d 100644 --- a/fieldservice_delivery/static/description/index.html +++ b/fieldservice_delivery/static/description/index.html @@ -3,7 +3,7 @@ - + Field Service - Delivery