From 58e464ac90cc64d33186b5092060f74152545215 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Wed, 20 Nov 2019 15:24:04 -0500 Subject: [PATCH 01/35] [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 95518a59b0211b6c401fb708feca52e4eba034f8 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Fri, 6 Dec 2019 08:32:16 -0500 Subject: [PATCH 02/35] [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 2ecd314cff705fcfd4a6ac84e5d8035c742f3f7b Mon Sep 17 00:00:00 2001 From: brian10048 Date: Fri, 6 Dec 2019 09:59:24 -0500 Subject: [PATCH 03/35] [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 7ec118b6ceffda290ced693a41647ac881840737 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 10 Dec 2019 09:28:08 -0600 Subject: [PATCH 04/35] [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 c1bd4968414ae01894526e2b753017af00b08beb Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Sun, 22 Dec 2019 10:55:20 -0600 Subject: [PATCH 05/35] [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 9f7f6692bd402f77fc859cafb2ceeeb5b487434c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 30 Dec 2019 15:48:53 +0000 Subject: [PATCH 06/35] 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 9cf34e50caa52cd61a322fac2e95074ade33c423 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 9 Jan 2020 08:07:57 -0800 Subject: [PATCH 07/35] [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 89cb894f8b3e9c2db2ffee882248f45b6df525cb Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 14 Jan 2020 16:24:05 +0000 Subject: [PATCH 08/35] 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 770b498b624848931df20ee690ab6ac2989ad36b Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 16 Jan 2020 11:39:15 -0600 Subject: [PATCH 09/35] [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 3289a93c82ae56618b208f309e0570e4b2b4f18f Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 3 Feb 2020 11:15:06 -0600 Subject: [PATCH 10/35] [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 54bb21523acdcd13e64cbbbb980b82658a0d16b0 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 9 Feb 2020 21:36:05 +0000 Subject: [PATCH 11/35] 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 d1d5888027212c9adeaac3044e9a2cfe4338edb3 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 11 May 2020 23:05:47 -0500 Subject: [PATCH 12/35] [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 2b0434667ec3da6980fea81a2079fe5c0c7eb6ed Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 19 May 2020 21:09:17 -0500 Subject: [PATCH 13/35] [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 c81f9069a0acb9c8952eafeb262f5ddf86cc2ff9 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 20 May 2020 15:11:59 +0000 Subject: [PATCH 14/35] 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 49c63fff13e8bb9eb980d5f88529d08f7bb7ecb9 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 19 Apr 2021 10:51:06 +0530 Subject: [PATCH 15/35] [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 ca665d9f8945b459266cd121885c318c1dc6a101 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Mon, 19 Apr 2021 11:06:47 +0530 Subject: [PATCH 16/35] [14.0][MIG] fieldservice_sale_stock --- fieldservice_sale_stock/README.rst | 12 +- 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 ++++++++++++++++++ 6 files changed, 478 insertions(+), 11 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/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 7bbaab2f924a95bbeb4482bce692f1434866a417 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 3 Aug 2021 19:40:12 +0000 Subject: [PATCH 17/35] [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 4cddbf410fcf63105880aa4e9778842e967d2357 Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 26 Sep 2021 18:09:16 +0000 Subject: [PATCH 18/35] Added translation using Weblate (Italian) --- fieldservice_sale_stock/i18n/it.po | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 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..43b3d01d81 --- /dev/null +++ b/fieldservice_sale_stock/i18n/it.po @@ -0,0 +1,35 @@ +# 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" +"Last-Translator: Automatically generated\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" + +#. 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" +msgstr "" From c9e04f5f29c5fd2a968eeee240cea626192a8a32 Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 29 Sep 2021 08:30:28 +0000 Subject: [PATCH 19/35] Translated using Weblate (Italian) Currently translated at 100.0% (4 of 4 strings) Translation: field-service-14.0/field-service-14.0-fieldservice_sale_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_sale_stock/it/ --- fieldservice_sale_stock/i18n/it.po | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fieldservice_sale_stock/i18n/it.po b/fieldservice_sale_stock/i18n/it.po index 43b3d01d81..05f0ff5134 100644 --- a/fieldservice_sale_stock/i18n/it.po +++ b/fieldservice_sale_stock/i18n/it.po @@ -6,30 +6,32 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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 "" +msgstr "Nome visualizzato" #. module: fieldservice_sale_stock #: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__id msgid "ID" -msgstr "" +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 "" +msgstr "Ultima modifica il" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Ordine vendite" From c6696a6e5c6444652708e3e36803e3f6a97bcfbc Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Sun, 3 Oct 2021 18:32:56 +0000 Subject: [PATCH 20/35] Added translation using Weblate (Spanish (Argentina)) --- fieldservice_sale_stock/i18n/es_AR.po | 35 +++++++++++++++++++++++++++ 1 file changed, 35 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..4f818dfcfb --- /dev/null +++ b/fieldservice_sale_stock/i18n/es_AR.po @@ -0,0 +1,35 @@ +# 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" +"Last-Translator: Automatically generated\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" + +#. 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" +msgstr "" From bc35a3fd49add418c6c8392be71327bcb3d85cd6 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Sun, 3 Oct 2021 18:40:11 +0000 Subject: [PATCH 21/35] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (4 of 4 strings) Translation: field-service-14.0/field-service-14.0-fieldservice_sale_stock Translate-URL: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_sale_stock/es_AR/ --- fieldservice_sale_stock/i18n/es_AR.po | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fieldservice_sale_stock/i18n/es_AR.po b/fieldservice_sale_stock/i18n/es_AR.po index 4f818dfcfb..32aeda2c31 100644 --- a/fieldservice_sale_stock/i18n/es_AR.po +++ b/fieldservice_sale_stock/i18n/es_AR.po @@ -6,30 +6,32 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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 "" +msgstr "Mostrar Nombre" #. module: fieldservice_sale_stock #: model:ir.model.fields,field_description:fieldservice_sale_stock.field_sale_order__id msgid "ID" -msgstr "" +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 "" +msgstr "Última Modificación el" #. module: fieldservice_sale_stock #: model:ir.model,name:fieldservice_sale_stock.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Pedidos de Venta" From d1213e2b8463a402cb546f81cc2677f32ee4ea21 Mon Sep 17 00:00:00 2001 From: ShwetaSerpentCS Date: Tue, 1 Nov 2022 19:06:09 +0530 Subject: [PATCH 22/35] [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 fe2859eb06d9e3382d3302a046ab15ef3d080d2f Mon Sep 17 00:00:00 2001 From: ShwetaSerpentCS Date: Wed, 2 Nov 2022 10:56:45 +0530 Subject: [PATCH 23/35] [MIG] fieldservice_sale_stock --- fieldservice_sale_stock/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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), From 1f8cdef6f581b5c4f6ea62ae27f6f6dbb3db8fcf Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 2 Nov 2022 14:41:27 +0000 Subject: [PATCH 24/35] [UPD] Update fieldservice_sale_stock.pot --- .../i18n/fieldservice_sale_stock.pot | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) 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" From ff0034610434d0eb8fb09d032f168aa8f0e0b014 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 2 Nov 2022 14:45:45 +0000 Subject: [PATCH 25/35] [UPD] README.rst --- fieldservice_sale_stock/README.rst | 10 +++++----- fieldservice_sale_stock/static/description/index.html | 6 +++--- 2 files changed, 8 insertions(+), 8 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/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 a580805072348ddbe816dfa9b588ec25014c3e78 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 2 Nov 2022 16:21:29 +0000 Subject: [PATCH 26/35] 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 64b4c4183c7782d2b23524029de11d9547fb2424 Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Wed, 18 Jan 2023 09:18:12 +0000 Subject: [PATCH 27/35] 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/i18n/it.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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" From 24d8b64608ea7b561454da7e1f7d1a922540890b Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 12:53:52 +0000 Subject: [PATCH 28/35] [UPD] README.rst --- fieldservice_sale_stock/README.rst | 15 +++--- .../static/description/index.html | 52 ++++++++++--------- 2 files changed, 36 insertions(+), 31 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/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