From 79993bc8ed73269e8c394af85b1880148d261631 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Wed, 20 Nov 2019 15:24:04 -0500 Subject: [PATCH 01/28] [ADD] fieldservice_sale_stock --- fieldservice_sale_stock/README.rst | 141 +++++ fieldservice_sale_stock/__init__.py | 4 + fieldservice_sale_stock/__manifest__.py | 23 + fieldservice_sale_stock/models/__init__.py | 6 + fieldservice_sale_stock/models/sale_order.py | 25 + fieldservice_sale_stock/readme/CONFIGURE.rst | 7 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 2 + fieldservice_sale_stock/readme/INSTALL.rst | 4 + fieldservice_sale_stock/readme/ROADMAP.rst | 2 + fieldservice_sale_stock/readme/USAGE.rst | 8 + .../static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 480 ++++++++++++++++++ 13 files changed, 703 insertions(+) create mode 100644 fieldservice_sale_stock/README.rst create mode 100644 fieldservice_sale_stock/__init__.py create mode 100644 fieldservice_sale_stock/__manifest__.py create mode 100644 fieldservice_sale_stock/models/__init__.py create mode 100644 fieldservice_sale_stock/models/sale_order.py create mode 100644 fieldservice_sale_stock/readme/CONFIGURE.rst create mode 100644 fieldservice_sale_stock/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_sale_stock/readme/DESCRIPTION.rst create mode 100644 fieldservice_sale_stock/readme/INSTALL.rst create mode 100644 fieldservice_sale_stock/readme/ROADMAP.rst create mode 100644 fieldservice_sale_stock/readme/USAGE.rst create mode 100644 fieldservice_sale_stock/static/description/icon.png create mode 100644 fieldservice_sale_stock/static/description/index.html diff --git a/fieldservice_sale_stock/README.rst b/fieldservice_sale_stock/README.rst new file mode 100644 index 0000000000..9bf6f8719e --- /dev/null +++ b/fieldservice_sale_stock/README.rst @@ -0,0 +1,141 @@ +===================== +Field Service - Sales +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_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-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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +The module integrates the Field Service application with the Sales one and +allows you to sell field service products. + +**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 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 +~~~~~~~~~~~~ + +* Open Source Integrators + + * Steve Campbell + * Maxime Chambreuil + * Wolfgang Hall + +* Serpent Consulting Services Pvt. Ltd. +* Brian McMaster +* 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-wolfhall| image:: https://github.com/wolfhall.png?size=40px + :target: https://github.com/wolfhall + :alt: wolfhall +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 +.. |maintainer-brian10048| image:: https://github.com/brian10048.png?size=40px + :target: https://github.com/brian10048 + :alt: brian10048 + +Current `maintainers `__: + +|maintainer-wolfhall| |maintainer-max3903| |maintainer-brian10048| + +This module is part of the `OCA/field-service `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fieldservice_sale_stock/__init__.py b/fieldservice_sale_stock/__init__.py new file mode 100644 index 0000000000..c827f99758 --- /dev/null +++ b/fieldservice_sale_stock/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py new file mode 100644 index 0000000000..5286658789 --- /dev/null +++ b/fieldservice_sale_stock/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Field Service - Sale Stock', + 'version': '12.0.0.1.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', + ], + 'installable': True, +} diff --git a/fieldservice_sale_stock/models/__init__.py b/fieldservice_sale_stock/models/__init__.py new file mode 100644 index 0000000000..e02b396f5b --- /dev/null +++ b/fieldservice_sale_stock/models/__init__.py @@ -0,0 +1,6 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + sale_order +) diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py new file mode 100644 index 0000000000..e91eefe162 --- /dev/null +++ b/fieldservice_sale_stock/models/sale_order.py @@ -0,0 +1,25 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + @api.multi + def _link_pickings_to_fsm(self): + for order in self: + fsm_order = self.env['fsm.order'].search([ + ('sale_id', '=', order.id) + ]) + pickings = order.picking_ids + pickings.write({'fsm_order_id': fsm_order.id}) + + @api.multi + def action_confirm(self): + """ On SO confirmation, link the fsm order on the pickings + created by the sale order """ + result = super().action_confirm() + self._link_pickings_to_fsm() + return result diff --git a/fieldservice_sale_stock/readme/CONFIGURE.rst b/fieldservice_sale_stock/readme/CONFIGURE.rst new file mode 100644 index 0000000000..3efde2018d --- /dev/null +++ b/fieldservice_sale_stock/readme/CONFIGURE.rst @@ -0,0 +1,7 @@ +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 type to 'Storable' +* Set the Service Policy to 'Per Sale Order' diff --git a/fieldservice_sale_stock/readme/CONTRIBUTORS.rst b/fieldservice_sale_stock/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..39ef3fa3d7 --- /dev/null +++ b/fieldservice_sale_stock/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Brian McMaster diff --git a/fieldservice_sale_stock/readme/DESCRIPTION.rst b/fieldservice_sale_stock/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..ccb347ff13 --- /dev/null +++ b/fieldservice_sale_stock/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module links pickings created by a sale order to the field +service order created by the sale order. diff --git a/fieldservice_sale_stock/readme/INSTALL.rst b/fieldservice_sale_stock/readme/INSTALL.rst new file mode 100644 index 0000000000..8571f65376 --- /dev/null +++ b/fieldservice_sale_stock/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/12.0/base_geoengine diff --git a/fieldservice_sale_stock/readme/ROADMAP.rst b/fieldservice_sale_stock/readme/ROADMAP.rst new file mode 100644 index 0000000000..f607015959 --- /dev/null +++ b/fieldservice_sale_stock/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +The roadmap of the Field Service application is documented on +`Github `_. diff --git a/fieldservice_sale_stock/readme/USAGE.rst b/fieldservice_sale_stock/readme/USAGE.rst new file mode 100644 index 0000000000..7946d6b88d --- /dev/null +++ b/fieldservice_sale_stock/readme/USAGE.rst @@ -0,0 +1,8 @@ +* 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 +* The pickings for storable products will get linked to the newly created + field service order diff --git a/fieldservice_sale_stock/static/description/icon.png b/fieldservice_sale_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_sale_stock/static/description/index.html b/fieldservice_sale_stock/static/description/index.html new file mode 100644 index 0000000000..ae8d6fe6d4 --- /dev/null +++ b/fieldservice_sale_stock/static/description/index.html @@ -0,0 +1,480 @@ + + + + + + +Field Service - Sales + + + +
+

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 b61c3db014925ccf33f05a6d5df7a62264f6e6b6 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Fri, 6 Dec 2019 08:32:16 -0500 Subject: [PATCH 02/28] [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 df946bcda297709340c067e3a61367162a7721d4 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Fri, 6 Dec 2019 09:59:24 -0500 Subject: [PATCH 03/28] [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 b174cf64a5d785cfaafbc55d7271002659d89638 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 10 Dec 2019 09:28:08 -0600 Subject: [PATCH 04/28] [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 c25b604f37e2b7b47ced43ac13711f024f00549a Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sun, 22 Dec 2019 10:55:20 -0600 Subject: [PATCH 05/28] [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 f28fe93cb35ad654bdabb6e31ea2e76c9e2df8bf Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 30 Dec 2019 15:48:53 +0000 Subject: [PATCH 06/28] 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 a3a01251e440a8d250abea15d05f2228aa262d76 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 9 Jan 2020 08:07:57 -0800 Subject: [PATCH 07/28] [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 d28fdeaabd1ad313f62df5c49c4ffb5ce3a8059d Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 14 Jan 2020 16:24:05 +0000 Subject: [PATCH 08/28] 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 c2ddc815510d8230b02f7296145b49b93597b4b8 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 16 Jan 2020 11:39:15 -0600 Subject: [PATCH 09/28] [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 9fc53f3eb5c2c0d09a0a2eda42b994ee05362892 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 3 Feb 2020 11:15:06 -0600 Subject: [PATCH 10/28] [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 9a7b59c04aa52b4936aa3436c0cdaaad604f6965 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 9 Feb 2020 21:36:05 +0000 Subject: [PATCH 11/28] 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 0b62cca7880c4bdfa3066bbde013e3c5d0d284e9 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 11 May 2020 23:05:47 -0500 Subject: [PATCH 12/28] [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 feb3936f02b14c4f92f4c9ae89c3e43ba5f11379 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 19 May 2020 21:09:17 -0500 Subject: [PATCH 13/28] [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 0148558337a06ebc299bfa2ec063e09bd7163b17 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 20 May 2020 15:11:59 +0000 Subject: [PATCH 14/28] 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 c01a2cc00f85d048216960c22a80a6fb7dcd9d1f Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 19 Apr 2021 10:51:06 +0530 Subject: [PATCH 15/28] [FIX] Travis --- fieldservice_sale_stock/__manifest__.py | 34 ++++++++++---------- fieldservice_sale_stock/models/__init__.py | 4 +-- fieldservice_sale_stock/models/sale_order.py | 26 +++++++-------- 3 files changed, 31 insertions(+), 33 deletions(-) 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 From c3bf0189fa481a0b505346c601c62bafc816c2e2 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 19 Apr 2021 11:06:47 +0530 Subject: [PATCH 16/28] [14.0][MIG] fieldservice_sale_stock --- fieldservice_sale_stock/README.rst | 12 +- .../i18n/fieldservice_sale_stock.pot | 24 +- fieldservice_sale_stock/models/sale_order.py | 4 +- .../readme/CONTRIBUTORS.rst | 2 + .../static/description/index.html | 8 +- fieldservice_sale_stock/tests/__init__.py | 5 + .../tests/test_fsm_sale_order.py | 458 ++++++++++++++++++ 7 files changed, 497 insertions(+), 16 deletions(-) create mode 100644 fieldservice_sale_stock/tests/__init__.py create mode 100644 fieldservice_sale_stock/tests/test_fsm_sale_order.py diff --git a/fieldservice_sale_stock/README.rst b/fieldservice_sale_stock/README.rst index ef394251e2..5b271750fa 100644 --- a/fieldservice_sale_stock/README.rst +++ b/fieldservice_sale_stock/README.rst @@ -14,13 +14,13 @@ Field Service - Sale 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_sale_stock + :target: https://github.com/OCA/field-service/tree/14.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_stock + :target: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-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 + :target: https://runbot.odoo-community.org/runbot/264/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -76,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. @@ -92,6 +92,8 @@ Contributors ~~~~~~~~~~~~ * Brian McMaster +* Ammar Officewala +* Freni Patel Maintainers ~~~~~~~~~~~ @@ -120,6 +122,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 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 "" diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index 8a16403e4b..7305e15f75 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -1,6 +1,6 @@ # Copyright (C) 2019 Brian McMaster # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, models +from odoo import models class SaleOrder(models.Model): @@ -16,7 +16,6 @@ def prepare_fsm_values_for_stock_picking(self, fsm_order): "fsm_order_id": fsm_order.id, } - @api.multi def _link_pickings_to_fsm(self): for rec in self: # TODO: We may want to split the picking to have one picking @@ -34,7 +33,6 @@ def _link_pickings_to_fsm(self): for move in picking.move_lines: 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""" diff --git a/fieldservice_sale_stock/readme/CONTRIBUTORS.rst b/fieldservice_sale_stock/readme/CONTRIBUTORS.rst index 39ef3fa3d7..4af187d4e1 100644 --- a/fieldservice_sale_stock/readme/CONTRIBUTORS.rst +++ b/fieldservice_sale_stock/readme/CONTRIBUTORS.rst @@ -1 +1,3 @@ * Brian McMaster +* Ammar Officewala +* Freni Patel diff --git a/fieldservice_sale_stock/static/description/index.html b/fieldservice_sale_stock/static/description/index.html index 92a5f96904..f4f33e39a9 100644 --- a/fieldservice_sale_stock/static/description/index.html +++ b/fieldservice_sale_stock/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Sale 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 links pickings created by a sale order to the field service order created by the sale order.

    Table of contents

    @@ -426,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.

    @@ -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 7457b6f99efa9fe365c755cfbba534e88fe8fd1f Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 26 Sep 2021 18:09:16 +0000 Subject: [PATCH 17/28] Added translation using Weblate (Italian) --- fieldservice_sale_stock/i18n/it.po | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 fieldservice_sale_stock/i18n/it.po diff --git a/fieldservice_sale_stock/i18n/it.po b/fieldservice_sale_stock/i18n/it.po new file mode 100644 index 0000000000..05f0ff5134 --- /dev/null +++ b/fieldservice_sale_stock/i18n/it.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-09-29 10:34+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: fieldservice_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: fieldservice_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__id +msgid "ID" +msgstr "ID" + +#. module: fieldservice_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: fieldservice_sale_stock +#: model:ir.model,name:fieldservice_sale_stock.model_sale_order +msgid "Sales Order" +msgstr "Ordine vendite" From 7ad4b3d9e009d590eb38753075d85ecf65d396c8 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Sun, 3 Oct 2021 18:32:56 +0000 Subject: [PATCH 18/28] Added translation using Weblate (Spanish (Argentina)) --- fieldservice_sale_stock/i18n/es_AR.po | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 fieldservice_sale_stock/i18n/es_AR.po diff --git a/fieldservice_sale_stock/i18n/es_AR.po b/fieldservice_sale_stock/i18n/es_AR.po new file mode 100644 index 0000000000..32aeda2c31 --- /dev/null +++ b/fieldservice_sale_stock/i18n/es_AR.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-10-03 21:34+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_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: fieldservice_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__id +msgid "ID" +msgstr "ID" + +#. module: fieldservice_sale_stock +#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: fieldservice_sale_stock +#: model:ir.model,name:fieldservice_sale_stock.model_sale_order +msgid "Sales Order" +msgstr "Pedidos de Venta" From e9381b33d7c6a2f915a33d4e73791efe0a183986 Mon Sep 17 00:00:00 2001 From: ShwetaSerpentCS Date: Tue, 1 Nov 2022 19:06:09 +0530 Subject: [PATCH 19/28] [FIX] pre-commit. --- fieldservice_sale_stock/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_sale_stock/__manifest__.py b/fieldservice_sale_stock/__manifest__.py index ffb310a536..6dbd26a4eb 100644 --- a/fieldservice_sale_stock/__manifest__.py +++ b/fieldservice_sale_stock/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Field Service - Sale Stock", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "summary": "Sell stockable items linked to field service orders.", "category": "Field Service", "author": "Brian McMaster, Odoo Community Association (OCA)", From 5147ece5035ea229eb60a1def2168f81a2abd69b Mon Sep 17 00:00:00 2001 From: ShwetaSerpentCS Date: Wed, 2 Nov 2022 10:56:45 +0530 Subject: [PATCH 20/28] [MIG] fieldservice_sale_stock --- fieldservice_sale_stock/README.rst | 10 +++++----- .../i18n/fieldservice_sale_stock.pot | 17 +---------------- fieldservice_sale_stock/models/sale_order.py | 2 +- .../static/description/index.html | 6 +++--- 4 files changed, 10 insertions(+), 25 deletions(-) diff --git a/fieldservice_sale_stock/README.rst b/fieldservice_sale_stock/README.rst index 5b271750fa..b98ad78e6e 100644 --- a/fieldservice_sale_stock/README.rst +++ b/fieldservice_sale_stock/README.rst @@ -14,13 +14,13 @@ Field Service - Sale 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/14.0/fieldservice_sale_stock + :target: https://github.com/OCA/field-service/tree/15.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-14-0/field-service-14-0-fieldservice_sale_stock + :target: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-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/14.0 + :target: https://runbot.odoo-community.org/runbot/264/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -76,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. @@ -122,6 +122,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 index 6570a9956a..2a7b5238d7 100644 --- a/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot +++ b/fieldservice_sale_stock/i18n/fieldservice_sale_stock.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,21 +13,6 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: fieldservice_sale_stock -#: 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" diff --git a/fieldservice_sale_stock/models/sale_order.py b/fieldservice_sale_stock/models/sale_order.py index 7305e15f75..cf97b6e4d5 100644 --- a/fieldservice_sale_stock/models/sale_order.py +++ b/fieldservice_sale_stock/models/sale_order.py @@ -19,7 +19,7 @@ def prepare_fsm_values_for_stock_picking(self, fsm_order): 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 + # per FSM order fsm_order = self.env["fsm.order"].search( [ ("sale_id", "=", rec.id), diff --git a/fieldservice_sale_stock/static/description/index.html b/fieldservice_sale_stock/static/description/index.html index f4f33e39a9..6d628c1db3 100644 --- a/fieldservice_sale_stock/static/description/index.html +++ b/fieldservice_sale_stock/static/description/index.html @@ -367,7 +367,7 @@

    Field Service - Sale 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 links pickings created by a sale order to the field service order created by the sale order.

    Table of contents

    @@ -426,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.

    @@ -454,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.

    From 131d3d0940aec43e167dcab9c69cbe5ceea55cf0 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 2 Nov 2022 16:21:29 +0000 Subject: [PATCH 21/28] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-15.0/field-service-15.0-fieldservice_sale_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-0-fieldservice_sale_stock/ --- fieldservice_sale_stock/i18n/es.po | 9 ++++++--- fieldservice_sale_stock/i18n/es_AR.po | 24 +++++++++--------------- fieldservice_sale_stock/i18n/es_CL.po | 9 ++++++--- fieldservice_sale_stock/i18n/it.po | 24 +++++++++--------------- fieldservice_sale_stock/i18n/pt_BR.po | 9 ++++++--- 5 files changed, 36 insertions(+), 39 deletions(-) diff --git a/fieldservice_sale_stock/i18n/es.po b/fieldservice_sale_stock/i18n/es.po index d770f84b27..1614ce135d 100644 --- a/fieldservice_sale_stock/i18n/es.po +++ b/fieldservice_sale_stock/i18n/es.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_stock +# * fieldservice_sale_stock # msgid "" msgstr "" @@ -18,5 +18,8 @@ msgstr "" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order -msgid "Sale Order" -msgstr "Pedido de Venta" +msgid "Sales Order" +msgstr "" + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venta" diff --git a/fieldservice_sale_stock/i18n/es_AR.po b/fieldservice_sale_stock/i18n/es_AR.po index 32aeda2c31..4a123b7924 100644 --- a/fieldservice_sale_stock/i18n/es_AR.po +++ b/fieldservice_sale_stock/i18n/es_AR.po @@ -16,22 +16,16 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" -#. module: fieldservice_sale_stock -#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__display_name -msgid "Display Name" -msgstr "Mostrar Nombre" - -#. module: fieldservice_sale_stock -#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__id -msgid "ID" -msgstr "ID" - -#. module: fieldservice_sale_stock -#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order____last_update -msgid "Last Modified on" -msgstr "Última Modificación el" - #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sales Order" msgstr "Pedidos de Venta" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" diff --git a/fieldservice_sale_stock/i18n/es_CL.po b/fieldservice_sale_stock/i18n/es_CL.po index a7d49c435b..467b8cb450 100644 --- a/fieldservice_sale_stock/i18n/es_CL.po +++ b/fieldservice_sale_stock/i18n/es_CL.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_stock +# * fieldservice_sale_stock # msgid "" msgstr "" @@ -18,5 +18,8 @@ msgstr "" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order -msgid "Sale Order" -msgstr "Nota de Venta" +msgid "Sales Order" +msgstr "" + +#~ msgid "Sale Order" +#~ msgstr "Nota de Venta" diff --git a/fieldservice_sale_stock/i18n/it.po b/fieldservice_sale_stock/i18n/it.po index 05f0ff5134..4a7319bd81 100644 --- a/fieldservice_sale_stock/i18n/it.po +++ b/fieldservice_sale_stock/i18n/it.po @@ -16,22 +16,16 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" -#. module: fieldservice_sale_stock -#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: fieldservice_sale_stock -#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__id -msgid "ID" -msgstr "ID" - -#. module: fieldservice_sale_stock -#: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sales Order" msgstr "Ordine vendite" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/fieldservice_sale_stock/i18n/pt_BR.po b/fieldservice_sale_stock/i18n/pt_BR.po index 05e1e13821..d261018e41 100644 --- a/fieldservice_sale_stock/i18n/pt_BR.po +++ b/fieldservice_sale_stock/i18n/pt_BR.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_stock +# * fieldservice_sale_stock # msgid "" msgstr "" @@ -18,5 +18,8 @@ msgstr "" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order -msgid "Sale Order" -msgstr "Pedido de Venda" +msgid "Sales Order" +msgstr "" + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venda" From b979e695e32c240a7f3afbe8ee6e72d480ab5351 Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Wed, 18 Jan 2023 09:18:12 +0000 Subject: [PATCH 22/28] Translated using Weblate (Italian) Currently translated at 100.0% (1 of 1 strings) Translation: field-service-15.0/field-service-15.0-fieldservice_sale_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-0-fieldservice_sale_stock/it/ --- fieldservice_sale_stock/README.rst | 15 +++--- fieldservice_sale_stock/i18n/it.po | 8 +-- .../static/description/index.html | 52 ++++++++++--------- 3 files changed, 40 insertions(+), 35 deletions(-) diff --git a/fieldservice_sale_stock/README.rst b/fieldservice_sale_stock/README.rst index b98ad78e6e..ab46e82919 100644 --- a/fieldservice_sale_stock/README.rst +++ b/fieldservice_sale_stock/README.rst @@ -2,10 +2,13 @@ Field Service - Sale Stock ========================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:79b2ebd814e338db117d7a794d0f8e2d75bca0b9e3de054471fdcad061c2cc48 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Field Service - Sale Stock .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-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/15.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/field-service&target_branch=15.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module links pickings created by a sale order to the field service order created by the sale order. @@ -75,7 +78,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 +If you spotted it first, help us to smash it by providing a detailed and welcomed `feedback `_. Do not contact contributors directly about support or help with technical issues. diff --git a/fieldservice_sale_stock/i18n/it.po b/fieldservice_sale_stock/i18n/it.po index 4a7319bd81..bcf3986725 100644 --- a/fieldservice_sale_stock/i18n/it.po +++ b/fieldservice_sale_stock/i18n/it.po @@ -6,20 +6,20 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-09-29 10:34+0000\n" -"Last-Translator: mymage \n" +"PO-Revision-Date: 2023-01-18 11:48+0000\n" +"Last-Translator: Francesco Foresti \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Weblate 4.14.1\n" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sales Order" -msgstr "Ordine vendite" +msgstr "Ordine di vendita" #~ msgid "Display Name" #~ msgstr "Nome visualizzato" diff --git a/fieldservice_sale_stock/static/description/index.html b/fieldservice_sale_stock/static/description/index.html index 6d628c1db3..7c0a7e478e 100644 --- a/fieldservice_sale_stock/static/description/index.html +++ b/fieldservice_sale_stock/static/description/index.html @@ -1,20 +1,20 @@ - + - + Field Service - Sale Stock \ No newline at end of file diff --git a/fieldservice_sale_stock/static/description/index.html b/fieldservice_sale_stock/static/description/index.html index 02ce32954b..1c66480d8e 100644 --- a/fieldservice_sale_stock/static/description/index.html +++ b/fieldservice_sale_stock/static/description/index.html @@ -369,7 +369,7 @@

    Field Service - Sale Stock

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:da03ba406dbbaf50ca1b793439af169e4b0fdfb8d687ef8202ba7625051b113b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

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

    Table of contents

    @@ -422,7 +422,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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

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

    @@ -453,7 +453,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 5c72e50c40aa413b30988023946a7e96aad8b102 Mon Sep 17 00:00:00 2001 From: "Samuel Macias Oropeza (smo)" Date: Wed, 15 Jan 2025 08:18:42 -0600 Subject: [PATCH 28/28] [FIX] Tests --- fieldservice_sale_stock/tests/test_fsm_sale_order.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fieldservice_sale_stock/tests/test_fsm_sale_order.py b/fieldservice_sale_stock/tests/test_fsm_sale_order.py index fa94003249..0ff690119a 100644 --- a/fieldservice_sale_stock/tests/test_fsm_sale_order.py +++ b/fieldservice_sale_stock/tests/test_fsm_sale_order.py @@ -29,7 +29,9 @@ def setUpClass(cls): "categ_id": cls.env.ref("product.product_category_3").id, "standard_price": 85.0, "list_price": 90.0, - "type": "product", + "type": "consu", + "is_storable": True, + "tracking": "none", "uom_id": cls.env.ref("uom.product_uom_unit").id, "uom_po_id": cls.env.ref("uom.product_uom_unit").id, "invoice_policy": "order",