From 1b943197b9684c96acb7e3b990518cba3bce2d88 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 16 Oct 2019 08:49:01 -0500 Subject: [PATCH 01/59] [ADD] fieldservice_sale_recurring --- fieldservice_sale_recurring/README.rst | 142 ++++++ fieldservice_sale_recurring/__init__.py | 4 + fieldservice_sale_recurring/__manifest__.py | 29 ++ .../models/__init__.py | 10 + .../models/fsm_recurring.py | 22 + .../models/product_template.py | 20 + .../models/sale_order.py | 40 ++ .../models/sale_order_line.py | 101 ++++ .../readme/CONFIGURE.rst | 8 + .../readme/CONTRIBUTORS.rst | 9 + .../readme/DESCRIPTION.rst | 1 + .../readme/INSTALL.rst | 4 + .../readme/ROADMAP.rst | 2 + fieldservice_sale_recurring/readme/USAGE.rst | 6 + .../static/description/description/icon.png | Bin 0 -> 17808 bytes .../static/description/description/index.html | 464 +++++++++++++++++ .../static/description/icon.png | Bin 0 -> 17808 bytes .../static/description/index.html | 481 ++++++++++++++++++ .../views/fsm_recurring.xml | 19 + .../views/product_template.xml | 13 + .../views/sale_order.xml | 19 + 21 files changed, 1394 insertions(+) create mode 100644 fieldservice_sale_recurring/README.rst create mode 100644 fieldservice_sale_recurring/__init__.py create mode 100644 fieldservice_sale_recurring/__manifest__.py create mode 100644 fieldservice_sale_recurring/models/__init__.py create mode 100644 fieldservice_sale_recurring/models/fsm_recurring.py create mode 100644 fieldservice_sale_recurring/models/product_template.py create mode 100644 fieldservice_sale_recurring/models/sale_order.py create mode 100644 fieldservice_sale_recurring/models/sale_order_line.py create mode 100644 fieldservice_sale_recurring/readme/CONFIGURE.rst create mode 100644 fieldservice_sale_recurring/readme/CONTRIBUTORS.rst create mode 100644 fieldservice_sale_recurring/readme/DESCRIPTION.rst create mode 100644 fieldservice_sale_recurring/readme/INSTALL.rst create mode 100644 fieldservice_sale_recurring/readme/ROADMAP.rst create mode 100644 fieldservice_sale_recurring/readme/USAGE.rst create mode 100644 fieldservice_sale_recurring/static/description/description/icon.png create mode 100644 fieldservice_sale_recurring/static/description/description/index.html create mode 100644 fieldservice_sale_recurring/static/description/icon.png create mode 100644 fieldservice_sale_recurring/static/description/index.html create mode 100644 fieldservice_sale_recurring/views/fsm_recurring.xml create mode 100644 fieldservice_sale_recurring/views/product_template.xml create mode 100644 fieldservice_sale_recurring/views/sale_order.xml diff --git a/fieldservice_sale_recurring/README.rst b/fieldservice_sale_recurring/README.rst new file mode 100644 index 0000000000..dfedd041fc --- /dev/null +++ b/fieldservice_sale_recurring/README.rst @@ -0,0 +1,142 @@ +===================== +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 integrate the field service application with the sales one. + +**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, you need to: + +* Go to Field Service > Master Data > Locations +* Create or select a location +* Go to the Sales tab and select the sales territory + +Usage +===== + +* Go to Sales app +* Create a new Quotation/Sale Order +* Set the FSM Location to be used +* On a Sale Order Line, select a product configured for field service orders +* Confirm the Sale Order +* Field Service Orders linked to SO lines are created + +Known issues / Roadmap +====================== + +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 +~~~~~~~~~~~~ + +* Steve Campbell +* Maxime Chambreuil +* Wolfgang Hall +* Serpent Consulting Services Pvt. Ltd. +* Brian McMaster +* Raphaël Reverdy + +Other credits +~~~~~~~~~~~~~ + +The development of this module has been financially supported by: + +* Open Source Integrators + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-wolfhall| image:: https://github.com/wolfhall.png?size=40px + :target: https://github.com/wolfhall + :alt: wolfhall +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 +.. |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_recurring/__init__.py b/fieldservice_sale_recurring/__init__.py new file mode 100644 index 0000000000..66ca882fcc --- /dev/null +++ b/fieldservice_sale_recurring/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py new file mode 100644 index 0000000000..4a0ac34534 --- /dev/null +++ b/fieldservice_sale_recurring/__manifest__.py @@ -0,0 +1,29 @@ +# Copyright (C) 2018 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Field Service - Sales - Recurring', + 'version': '12.0.1.0.0', + 'summary': 'Sell recurring field services.', + 'category': 'Field Service', + 'author': 'Open Source Integrators, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/field-service', + 'depends': [ + 'fieldservice_recurring', + 'fieldservice_sale', + ], + 'data': [ + 'views/fsm_recurring.xml', + 'views/product_template.xml', + 'views/sale_order.xml', + ], + 'license': 'AGPL-3', + 'development_status': 'Beta', + 'maintainers': [ + 'wolfhall', + 'max3903', + 'brian10048', + ], + 'installable': True, + 'auto_install': True, +} diff --git a/fieldservice_sale_recurring/models/__init__.py b/fieldservice_sale_recurring/models/__init__.py new file mode 100644 index 0000000000..36728ea16a --- /dev/null +++ b/fieldservice_sale_recurring/models/__init__.py @@ -0,0 +1,10 @@ +# Copyright (C) 2018 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ( + product_template, + sale_order, + sale_order_line, + fsm_recurring, +) diff --git a/fieldservice_sale_recurring/models/fsm_recurring.py b/fieldservice_sale_recurring/models/fsm_recurring.py new file mode 100644 index 0000000000..497f0195d1 --- /dev/null +++ b/fieldservice_sale_recurring/models/fsm_recurring.py @@ -0,0 +1,22 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models, _ + + +class FSMRecurring(models.Model): + _inherit = 'fsm.recurring' + + sale_line_id = fields.Many2one('sale.order.line') + + def action_view_sales(self): + self.ensure_one() + return { + "type": "ir.actions.act_window", + "res_model": "sale.order", + "views": [[False, "form"]], + "res_id": self.sale_line_id.order_id.id, + "context": {"create": False}, + "name": _("Sales Orders"), + } diff --git a/fieldservice_sale_recurring/models/product_template.py b/fieldservice_sale_recurring/models/product_template.py new file mode 100644 index 0000000000..8f7574b7b0 --- /dev/null +++ b/fieldservice_sale_recurring/models/product_template.py @@ -0,0 +1,20 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + fsm_recurring_template_id = fields.Many2one( + 'fsm.recurring.template', 'Field Service Recurring Template', + help="Select a field service recurring order template to be created") + + @api.onchange('field_service_tracking') + def _onchange_field_service_tracking(self): + if self.field_service_tracking != 'recurring': + self.fsm_recurring_template_id = False + else: + super()._onchange_field_service_tracking() diff --git a/fieldservice_sale_recurring/models/sale_order.py b/fieldservice_sale_recurring/models/sale_order.py new file mode 100644 index 0000000000..3c85e6c615 --- /dev/null +++ b/fieldservice_sale_recurring/models/sale_order.py @@ -0,0 +1,40 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + fsm_recurring_ids = fields.Many2many( + 'fsm.recurring', compute='_compute_fsm_recurring_ids', + string='Field Service Recurring orders associated to this sale') + fsm_recurring_count = fields.Float( + string='FSM Recurring Orders', compute='_compute_fsm_recurring_ids') + + @api.multi + @api.depends('order_line.product_id') + def _compute_fsm_recurring_ids(self): + for order in self: + order.fsm_recurring_ids = self.env['fsm.recurring'].search([ + ('sale_line_id', 'in', order.order_line.ids)]) + order.fsm_recurring_count = len(order.fsm_recurring_ids) + + @api.multi + def action_view_fsm_recurring(self): + fsm_recurrings = self.mapped('fsm_recurring_ids') + action = self.env.ref( + 'fieldservice_recurring.action_fsm_recurring').read()[0] + if len(fsm_recurrings) > 1: + action['domain'] = [('id', 'in', fsm_recurrings.ids)] + elif len(fsm_recurrings) == 1: + action['views'] = [ + (self.env.ref( + 'fieldservice_recurring.fsm_recurring_form_view').id, + 'form')] + action['res_id'] = fsm_recurrings.id + else: + action = {'type': 'ir.actions.act_window_close'} + return action diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py new file mode 100644 index 0000000000..cee2f12ec1 --- /dev/null +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -0,0 +1,101 @@ +# Copyright (C) 2019 Brian McMaster +# Copyright (C) 2019 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, _ + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + fsm_recurring_id = fields.Many2one( + 'fsm.recurring', 'Recurring Order', index=True, + help="Field Service Recurring Order generated by the sale order line") + + def _field_create_fsm_recurring_prepare_values(self): + self.ensure_one() + template = self.product_id.fsm_recurring_template_id + note = self.name + if template.description: + note += '\n ' + template.description + return { + 'customer_id': self.order_id.partner_id.id, + 'location_id': self.order_id.fsm_location_id.id, + 'start_date': self.order_id.date_fsm_request, + 'fsm_recurring_template_id': template.id, + 'description': note, + 'max_orders': template.max_orders, + 'fsm_frequency_set_id': template.fsm_frequency_set_id.id, + 'fsm_order_template_id': template.fsm_order_template_id.id, + 'sale_line_id': self.id, + 'company_id': self.company_id.id, + } + + @api.multi + def _field_create_fsm_recurring(self): + """ Generate fsm_recurring for the given so line, and link it. + :return a mapping with the so line id and its linked fsm_recurring + :rtype dict + """ + result = {} + for so_line in self: + # create fsm_recurring + values = so_line._field_create_fsm_recurring_prepare_values() + fsm_recurring = self.env['fsm.recurring'].sudo().create(values) + fsm_recurring.action_start() + so_line.write({'fsm_recurring_id': fsm_recurring.id}) + # post message on SO + msg_body = _( + """Field Service recurring Created (%s): %s + """) % (so_line.product_id.name, + fsm_recurring.id, + fsm_recurring.name) + so_line.order_id.message_post(body=msg_body) + # post message on fsm_recurring + fsm_recurring_msg = _( + """This recurring has been created from: %s (%s) + """) % (so_line.order_id.id, so_line.order_id.name, + so_line.product_id.name) + fsm_recurring.message_post(body=fsm_recurring_msg) + result[so_line.id] = fsm_recurring + return result + + @api.multi + def _field_find_fsm_recurring(self): + """ Find the fsm_recurring generated by the so lines. If no + fsm_recurring linked, it will be created automatically. + :return a mapping with the so line id and its linked + fsm_recurring + :rtype dict + """ + # one search for all so lines + fsm_recurrings = self.env['fsm.recurring'].search([ + ('sale_line_id', 'in', self.ids)]) + fsm_recurring_sol_mapping = { + fsm_recurring.sale_line_id.id: + fsm_recurring for fsm_recurring in fsm_recurrings} + result = {} + for so_line in self: + # If the SO was confirmed, cancelled, set to draft then confirmed, + # avoid creating a new fsm_recurring. + fsm_recurring = fsm_recurring_sol_mapping.get(so_line.id) + # If not found, create one fsm_recurring for the so line + if not fsm_recurring: + fsm_recurring = so_line._field_create_fsm_recurring( + )[so_line.id] + result[so_line.id] = fsm_recurring + return result + + @api.multi + def _field_service_generation(self): + """ For service lines, create the field service order. If it already + exists, it simply links the existing one to the line. + """ + for so_line in self.filtered(lambda sol: sol.is_field_service): + # create order + if so_line.product_id.field_service_tracking == 'recurring': + so_line._field_find_fsm_recurring() + else: + super()._field_service_generation() diff --git a/fieldservice_sale_recurring/readme/CONFIGURE.rst b/fieldservice_sale_recurring/readme/CONFIGURE.rst new file mode 100644 index 0000000000..2da32fbbd4 --- /dev/null +++ b/fieldservice_sale_recurring/readme/CONFIGURE.rst @@ -0,0 +1,8 @@ +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 diff --git a/fieldservice_sale_recurring/readme/CONTRIBUTORS.rst b/fieldservice_sale_recurring/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..eabb35de88 --- /dev/null +++ b/fieldservice_sale_recurring/readme/CONTRIBUTORS.rst @@ -0,0 +1,9 @@ +* Open Source Integrators + + * Steve Campbell + * Maxime Chambreuil + * Wolfgang Hall + +* Serpent Consulting Services Pvt. Ltd. +* Brian McMaster +* Raphaël Reverdy diff --git a/fieldservice_sale_recurring/readme/DESCRIPTION.rst b/fieldservice_sale_recurring/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..51dc3140c5 --- /dev/null +++ b/fieldservice_sale_recurring/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows you to sell recurring field services. diff --git a/fieldservice_sale_recurring/readme/INSTALL.rst b/fieldservice_sale_recurring/readme/INSTALL.rst new file mode 100644 index 0000000000..8571f65376 --- /dev/null +++ b/fieldservice_sale_recurring/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_recurring/readme/ROADMAP.rst b/fieldservice_sale_recurring/readme/ROADMAP.rst new file mode 100644 index 0000000000..f607015959 --- /dev/null +++ b/fieldservice_sale_recurring/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +The roadmap of the Field Service application is documented on +`Github `_. diff --git a/fieldservice_sale_recurring/readme/USAGE.rst b/fieldservice_sale_recurring/readme/USAGE.rst new file mode 100644 index 0000000000..051359a603 --- /dev/null +++ b/fieldservice_sale_recurring/readme/USAGE.rst @@ -0,0 +1,6 @@ +* 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 diff --git a/fieldservice_sale_recurring/static/description/description/icon.png b/fieldservice_sale_recurring/static/description/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_recurring/static/description/description/index.html b/fieldservice_sale_recurring/static/description/description/index.html new file mode 100644 index 0000000000..734a351843 --- /dev/null +++ b/fieldservice_sale_recurring/static/description/description/index.html @@ -0,0 +1,464 @@ + + + + + + +Field Service + + + +
+

Field Service

+ + +

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

+

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

+

Table of contents

+ +
+

Installation

+

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

+

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

+
+
+

Configuration

+

To configure this module, you need to:

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

Usage

+

To use this module, you need to:

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

Known issues / Roadmap

+

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

+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

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

Other credits

+

The development of this module has been financially supported by:

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainers:

+

wolfhall max3903

+

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

+

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

+
+
+
+ + diff --git a/fieldservice_sale_recurring/static/description/icon.png b/fieldservice_sale_recurring/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_recurring/static/description/index.html b/fieldservice_sale_recurring/static/description/index.html new file mode 100644 index 0000000000..b84c32f94b --- /dev/null +++ b/fieldservice_sale_recurring/static/description/index.html @@ -0,0 +1,481 @@ + + + + + + +Field Service - Sales + + + +
+

Field Service - Sales

+ + +

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

+

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

+

Table of contents

+ +
+

Installation

+

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

+

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

+
+
+

Configuration

+

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

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

To setup a sales territory, you need to:

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

Usage

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

Known issues / Roadmap

+

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

+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The development of this module has been financially supported by:

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainers:

+

wolfhall max3903 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_recurring/views/fsm_recurring.xml b/fieldservice_sale_recurring/views/fsm_recurring.xml new file mode 100644 index 0000000000..aedaeb3826 --- /dev/null +++ b/fieldservice_sale_recurring/views/fsm_recurring.xml @@ -0,0 +1,19 @@ + + + + fsm.recurring + + + + + + + + diff --git a/fieldservice_sale_recurring/views/product_template.xml b/fieldservice_sale_recurring/views/product_template.xml new file mode 100644 index 0000000000..2448089810 --- /dev/null +++ b/fieldservice_sale_recurring/views/product_template.xml @@ -0,0 +1,13 @@ + + + product.template.fieldservice.form + product.template + + + + + + + + diff --git a/fieldservice_sale_recurring/views/sale_order.xml b/fieldservice_sale_recurring/views/sale_order.xml new file mode 100644 index 0000000000..d82a655ff5 --- /dev/null +++ b/fieldservice_sale_recurring/views/sale_order.xml @@ -0,0 +1,19 @@ + + + sale.order.form.sale.fieldservice + sale.order + + + + + + + + From 928e88f2841b8e39fc9052c6819d4b7717c4e5e2 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Wed, 16 Oct 2019 10:17:13 -0500 Subject: [PATCH 02/59] Update fieldservice_sale_recurring/models/product_template.py Co-Authored-By: brian10048 --- fieldservice_sale_recurring/models/product_template.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fieldservice_sale_recurring/models/product_template.py b/fieldservice_sale_recurring/models/product_template.py index 8f7574b7b0..e1c589f666 100644 --- a/fieldservice_sale_recurring/models/product_template.py +++ b/fieldservice_sale_recurring/models/product_template.py @@ -8,6 +8,11 @@ class ProductTemplate(models.Model): _inherit = 'product.template' + field_service_tracking = fields.Selection( + selection_add=[ + ('recurring', 'Create a recurring order') + ] + ) fsm_recurring_template_id = fields.Many2one( 'fsm.recurring.template', 'Field Service Recurring Template', help="Select a field service recurring order template to be created") From ef8bd993e80aac65311d283da49018d696898842 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 16 Oct 2019 16:31:29 +0000 Subject: [PATCH 03/59] [UPD] README.rst --- fieldservice_sale_recurring/README.rst | 41 +++++++------------ .../static/description/index.html | 37 ++++++----------- 2 files changed, 28 insertions(+), 50 deletions(-) diff --git a/fieldservice_sale_recurring/README.rst b/fieldservice_sale_recurring/README.rst index dfedd041fc..528d3e891a 100644 --- a/fieldservice_sale_recurring/README.rst +++ b/fieldservice_sale_recurring/README.rst @@ -1,6 +1,6 @@ -===================== -Field Service - Sales -===================== +================================= +Field Service - Sales - Recurring +================================= .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! 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_recurring :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_recurring :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,7 +25,7 @@ Field Service - Sales |badge1| |badge2| |badge3| |badge4| |badge5| -The module integrate the field service application with the sales one. +This module allows you to sell recurring field services. **Table of contents** @@ -52,17 +52,10 @@ To setup a product for quoting and selling field service orders: * Select the FSM Order Template that will be used for creating FSM Orders when a Sale Order is confirmed with this product - -To setup a sales territory, you need to: - -* Go to Field Service > Master Data > Locations -* Create or select a location -* Go to the Sales tab and select the sales territory - Usage ===== -* Go to Sales app +* 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 @@ -81,7 +74,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -96,20 +89,16 @@ Authors Contributors ~~~~~~~~~~~~ -* Steve Campbell -* Maxime Chambreuil -* Wolfgang Hall +* Open Source Integrators + + * Steve Campbell + * Maxime Chambreuil + * Wolfgang Hall + * Serpent Consulting Services Pvt. Ltd. * Brian McMaster * Raphaël Reverdy -Other credits -~~~~~~~~~~~~~ - -The development of this module has been financially supported by: - -* Open Source Integrators - Maintainers ~~~~~~~~~~~ @@ -137,6 +126,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_recurring/static/description/index.html b/fieldservice_sale_recurring/static/description/index.html index b84c32f94b..54bb133896 100644 --- a/fieldservice_sale_recurring/static/description/index.html +++ b/fieldservice_sale_recurring/static/description/index.html @@ -4,7 +4,7 @@ -Field Service - Sales +Field Service - Sales - Recurring -
-

Field Service - Sales

+
+

Field Service - Sales - Recurring

-

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

-

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

+

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

+

This module allows you to sell recurring field services.

Table of contents

@@ -406,17 +405,11 @@

Configuration

-

To setup a sales territory, you need to:

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

Usage

    -
  • Go to Sales app
  • +
  • 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
  • @@ -434,7 +427,7 @@

    Bug Tracker

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

    +feedback.

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

@@ -448,23 +441,19 @@

Authors

Contributors

-
-

Other credits

-

The development of this module has been financially supported by:

- -
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose @@ -472,7 +461,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 bad0f77ac148a212fa123265741553a98c4f7d1a Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 7 Nov 2019 16:04:55 -0600 Subject: [PATCH 04/59] [FIX] fieldservice_sale_recurring --- fieldservice_sale_recurring/__manifest__.py | 1 + fieldservice_sale_recurring/security/ir.model.access.csv | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 fieldservice_sale_recurring/security/ir.model.access.csv diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index 4a0ac34534..0dde08c718 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -13,6 +13,7 @@ 'fieldservice_sale', ], 'data': [ + 'security/ir.model.access.csv', 'views/fsm_recurring.xml', 'views/product_template.xml', 'views/sale_order.xml', diff --git a/fieldservice_sale_recurring/security/ir.model.access.csv b/fieldservice_sale_recurring/security/ir.model.access.csv new file mode 100644 index 0000000000..890f6a0def --- /dev/null +++ b/fieldservice_sale_recurring/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_fsm_recurring_sale_user,fsm.recurring.sale.user,fieldservice_recurring.model_fsm_recurring,sales_team.group_sale_salesman,1,1,1,0 +access_fsm_recurring_template_sale_user,fsm.recurring.template.sale.user,fieldservice_recurring.model_fsm_recurring_template,sales_team.group_sale_salesman,1,0,0,0 From 15815973f09cd601775efbbbeadea073442cd4f5 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Thu, 14 Nov 2019 21:51:16 +0000 Subject: [PATCH 05/59] [UPD] Update fieldservice_sale_recurring.pot --- .../i18n/fieldservice_sale_recurring.pot | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot diff --git a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot new file mode 100644 index 0000000000..dad45e9579 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +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_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a recurring order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a single order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:48 +#, python-format +msgid "Field Service recurring Created (%s): %s\n" +" " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "On Sales order confirmation, this product can generate a field\n" +" service order or field service recurring order." +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sale Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#, python-format +msgid "Sales Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:56 +#, python-format +msgid "This recurring has been created from: %s (%s)\n" +" " +msgstr "" + From 3b8f85786106c706958583e55c21e58ab2695b68 Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Fri, 22 Nov 2019 13:20:20 +0000 Subject: [PATCH 06/59] Added translation using Weblate (German) --- fieldservice_sale_recurring/i18n/de.po | 130 +++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/de.po diff --git a/fieldservice_sale_recurring/i18n/de.po b/fieldservice_sale_recurring/i18n/de.po new file mode 100644 index 0000000000..899cfb7315 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/de.po @@ -0,0 +1,130 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-26 14:27+0000\n" +"Last-Translator: Maria Sparenberg \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.8\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Verkaufsaufträge" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a recurring order" +msgstr "Wiederkehrenden Auftrag erstellen" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a single order" +msgstr "Auftrag erstellen" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Wiederkehrende Service-Aufträge" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Vorlage für wiederkehrenden Service-Auftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:48 +#, python-format +msgid "Field Service recurring Created (%s): %s\n" +" " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "On Sales order confirmation, this product can generate a field\n" +" service order or field service recurring order." +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Produktvorlage" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Wiederkehrender Service-Auftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Wiederkehrender Auftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Auftragszeile" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sale Order" +msgstr "Verkaufsauftrag" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Auftragszeile" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#, python-format +msgid "Sales Orders" +msgstr "Verkaufsaufträge" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:56 +#, python-format +msgid "This recurring has been created from: %s (%s)\n" +" " +msgstr "" From 3790ba5a9d3e00cce1baa23143ce1d20bbd2610b Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 25 Nov 2019 11:30:31 -0600 Subject: [PATCH 07/59] [IMP] fieldservice_sale_recurring --- fieldservice_sale_recurring/models/sale_order_line.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index cee2f12ec1..b6e8ae8b89 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -21,12 +21,13 @@ def _field_create_fsm_recurring_prepare_values(self): return { 'customer_id': self.order_id.partner_id.id, 'location_id': self.order_id.fsm_location_id.id, - 'start_date': self.order_id.date_fsm_request, + 'start_date': self.order_id.expected_date, 'fsm_recurring_template_id': template.id, 'description': note, 'max_orders': template.max_orders, 'fsm_frequency_set_id': template.fsm_frequency_set_id.id, 'fsm_order_template_id': template.fsm_order_template_id.id, + 'sale_id': self.order_id.id, 'sale_line_id': self.id, 'company_id': self.company_id.id, } From 935ec5d25ce87b115d1c0365cd4377c84905b6ec Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 10 Dec 2019 15:59:39 +0000 Subject: [PATCH 08/59] [UPD] Update fieldservice_sale_recurring.pot --- .../i18n/fieldservice_sale_recurring.pot | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot index dad45e9579..591527f2fa 100644 --- a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot +++ b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot @@ -25,12 +25,27 @@ msgstr "" #. module: fieldservice_sale_recurring #: selection:product.template,field_service_tracking:0 -msgid "Create a single order" +msgid "Create one FSM order per sale order" msgstr "" #. module: fieldservice_sale_recurring #: selection:product.template,field_service_tracking:0 -msgid "Don't create order" +msgid "Create one FSM order per sale order line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create FSM order" msgstr "" #. module: fieldservice_sale_recurring @@ -62,20 +77,13 @@ msgid "Field Service Tracking" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:48 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 #, python-format msgid "Field Service recurring Created (%s): %s\n" " " msgstr "" -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking -#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking -msgid "On Sales order confirmation, this product can generate a field\n" -" service order or field service recurring order." -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template msgid "Product Template" @@ -119,7 +127,7 @@ msgid "Select a field service recurring order template to be created" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:56 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 #, python-format msgid "This recurring has been created from: %s (%s)\n" From 4055cd338baea2dde51fb5ebcdc50dc2c70a009e Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Tue, 10 Dec 2019 16:18:37 +0000 Subject: [PATCH 09/59] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_sale_recurring Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_sale_recurring/ --- fieldservice_sale_recurring/i18n/de.po | 48 ++++++++++++++++++-------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/de.po b/fieldservice_sale_recurring/i18n/de.po index 899cfb7315..1d283fa5ac 100644 --- a/fieldservice_sale_recurring/i18n/de.po +++ b/fieldservice_sale_recurring/i18n/de.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_recurring +# * fieldservice_sale_recurring # msgid "" msgstr "" @@ -28,12 +28,32 @@ msgstr "Wiederkehrenden Auftrag erstellen" #. module: fieldservice_sale_recurring #: selection:product.template,field_service_tracking:0 -msgid "Create a single order" -msgstr "Auftrag erstellen" +#, fuzzy +#| msgid "Create a recurring order" +msgid "Create one FSM order per sale order" +msgstr "Wiederkehrenden Auftrag erstellen" #. module: fieldservice_sale_recurring #: selection:product.template,field_service_tracking:0 -msgid "Don't create order" +msgid "Create one FSM order per sale order line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" +" will be created." +msgstr "" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create FSM order" msgstr "" #. module: fieldservice_sale_recurring @@ -65,20 +85,14 @@ msgid "Field Service Tracking" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:48 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 #, python-format -msgid "Field Service recurring Created (%s): %s\n" " " msgstr "" -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking -#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking -msgid "On Sales order confirmation, this product can generate a field\n" -" service order or field service recurring order." -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template msgid "Product Template" @@ -122,9 +136,13 @@ msgid "Select a field service recurring order template to be created" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:56 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 #, python-format -msgid "This recurring has been created from: %s (%s)\n" " " msgstr "" + +#~ msgid "Create a single order" +#~ msgstr "Auftrag erstellen" From 10b65ec7115dc6a1d5639c482fbfa552d1acd9fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nelson=20Ram=C3=ADrez=20S=C3=A1nchez?= Date: Tue, 10 Dec 2019 18:37:32 +0000 Subject: [PATCH 10/59] Added translation using Weblate (Spanish (Chile)) --- fieldservice_sale_recurring/i18n/es_CL.po | 154 ++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/es_CL.po diff --git a/fieldservice_sale_recurring/i18n/es_CL.po b/fieldservice_sale_recurring/i18n/es_CL.po new file mode 100644 index 0000000000..fead49bd04 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/es_CL.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-12-10 21:04+0000\n" +"Last-Translator: Nelson Ramírez Sánchez \n" +"Language-Team: none\n" +"Language: es_CL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.9.1\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a recurring order" +msgstr "Crear un pedido recurrente" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order" +msgstr "Crear un FSM por pedido de venta" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order line" +msgstr "Crear un pedido de FSM por líneas de pedido" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" +"Determina qué ocurre en una confirmación de pedido de venta:\n" +" - Nada: nada adicional, comportamiento predeterminado.\n" +" - Por Pedido de Venta: Una Orden de FSMse creará por esta " +"venta.\n" +" - Por línea de Pedido de Venta:Una Orden de FSM por cada " +"línea de pedido\n" +" se creará." + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create FSM order" +msgstr "No crear pedido de FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Pedidos Recurrentes de FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido Recurrente de Servicio de Campo generado por la línea de pedido de " +"venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Plantilla de Servicio de Campor Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Ordenes de Servicio de Campor Recurrente asociadas a esta venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Seguimiento de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#, python-format +msgid "Field Service recurring Created (%s): %s\n" +" " +msgstr "" +"Servicio de Campo recurrente Creado (%s): %s\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Plantilla de Producto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Orden de Servicio de Campo Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Pedido Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Línea de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sale Order" +msgstr "Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Seleccione una plantilla de pedido recurrente de servicio de campo para crear" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#, python-format +msgid "This recurring has been created from: %s (%s)\n" +" " +msgstr "" +"Esta recurrencia ha sido creado a partir de: %s (%s)\n" +" " From 4050430459a00be61982ede5a28416c4ff3167b6 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Tue, 10 Dec 2019 17:19:11 -0500 Subject: [PATCH 11/59] [FIX] fieldservice_sale_recurring - Was not calling super properly and FSM orders on the sale line that were not recurring orders were not being created. - Delete unused computed field. --- .../models/sale_order_line.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index b6e8ae8b89..ccfbec32bf 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -94,9 +94,9 @@ def _field_service_generation(self): """ For service lines, create the field service order. If it already exists, it simply links the existing one to the line. """ - for so_line in self.filtered(lambda sol: sol.is_field_service): - # create order - if so_line.product_id.field_service_tracking == 'recurring': - so_line._field_find_fsm_recurring() - else: - super()._field_service_generation() + result = super()._field_service_generation() + for so_line in self.filtered( + lambda sol: sol.product_id.field_service_tracking == 'recurring' + ): + so_line._field_find_fsm_recurring() + return result From af7e468395340ec426ec6ed2888e372fb4c3499e Mon Sep 17 00:00:00 2001 From: brian10048 Date: Mon, 30 Dec 2019 14:29:04 -0500 Subject: [PATCH 12/59] [FIX] fieldservice_sale_recurring: Product view --- fieldservice_sale_recurring/views/product_template.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fieldservice_sale_recurring/views/product_template.xml b/fieldservice_sale_recurring/views/product_template.xml index 2448089810..2ab11a35c8 100644 --- a/fieldservice_sale_recurring/views/product_template.xml +++ b/fieldservice_sale_recurring/views/product_template.xml @@ -4,9 +4,15 @@ product.template + + {'required': [('field_service_tracking', 'in', ['sale','line'])], + 'invisible':[('field_service_tracking', 'in', ['no','recurring'])]} + + + attrs="{'invisible':[('field_service_tracking', 'not in', ['recurring'])], + 'required': [('field_service_tracking', '=', 'recurring')]}"/> From c67c42cb8c132e4239e12464fac363e11b35bba6 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 31 Dec 2019 15:31:26 +0000 Subject: [PATCH 13/59] fieldservice_sale_recurring 12.0.1.1.0 --- fieldservice_sale_recurring/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index 0dde08c718..cd1dd952d4 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sales - Recurring', - 'version': '12.0.1.0.0', + 'version': '12.0.1.1.0', 'summary': 'Sell recurring field services.', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', From 960115b0d9d8d88400ff1db5ffd726161d55a036 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Thu, 16 Jan 2020 11:39:15 -0600 Subject: [PATCH 14/59] [ADD] Spanish (es) translation --- fieldservice_sale_recurring/i18n/es.po | 154 +++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/es.po diff --git a/fieldservice_sale_recurring/i18n/es.po b/fieldservice_sale_recurring/i18n/es.po new file mode 100644 index 0000000000..91b83056de --- /dev/null +++ b/fieldservice_sale_recurring/i18n/es.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-12-10 21:04+0000\n" +"Last-Translator: Nelson Ramírez Sánchez \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.9.1\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a recurring order" +msgstr "Crear un pedido recurrente" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order" +msgstr "Crear un FSM por pedido de venta" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order line" +msgstr "Crear un pedido de FSM por líneas de pedido" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" +"Determina qué ocurre en una confirmación de pedido de venta:\n" +" - Nada: nada adicional, comportamiento predeterminado.\n" +" - Por Pedido de Venta: Una Orden de FSMse creará por esta " +"venta.\n" +" - Por línea de Pedido de Venta:Una Orden de FSM por cada " +"línea de pedido\n" +" se creará." + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create FSM order" +msgstr "No crear pedido de FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Pedidos Recurrentes de FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido Recurrente de Servicio de Campo generado por la línea de pedido de " +"venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Plantilla de Servicio de Campor Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Ordenes de Servicio de Campor Recurrente asociadas a esta venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Seguimiento de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#, python-format +msgid "Field Service recurring Created (%s): %s\n" +" " +msgstr "" +"Servicio de Campo recurrente Creado (%s): %s\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Plantilla de Producto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Orden de Servicio de Campo Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Pedido Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Línea de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sale Order" +msgstr "Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Seleccione una plantilla de pedido recurrente de servicio de campo para crear" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#, python-format +msgid "This recurring has been created from: %s (%s)\n" +" " +msgstr "" +"Esta recurrencia ha sido creado a partir de: %s (%s)\n" +" " From c9fe7526c4b2c1f1bb324cc589489fe0d60bf3de Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Thu, 16 Jan 2020 06:22:44 +0000 Subject: [PATCH 15/59] Added translation using Weblate (Portuguese (Brazil)) --- fieldservice_sale_recurring/i18n/pt_BR.po | 153 ++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/pt_BR.po diff --git a/fieldservice_sale_recurring/i18n/pt_BR.po b/fieldservice_sale_recurring/i18n/pt_BR.po new file mode 100644 index 0000000000..3053e6ae64 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/pt_BR.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-17 22:19+0000\n" +"Last-Translator: Fernando Colus \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venda" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a recurring order" +msgstr "Crie uma ordem recorrente" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order" +msgstr "Crie um pedido FSM por pedido de venda" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order line" +msgstr "Crie um Pedido FSM por linha de pedido de venda" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" +"Determina o que acontece após a confirmação do pedido de venda:\n" +" - Nenhum: nada adicional, comportamento padrão.\n" +" - Por pedido de venda: um pedido FSM será criado para a " +"venda.\n" +" - Por linha de pedido de venda: um pedido FSM será criado " +"para cada linha\n" +" de pedido de venda." + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create FSM order" +msgstr "Não crie ordem FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Ordens Recorrentes do FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido recorrente de serviço de campo gerado pela linha da ordem do cliente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Modelo de Recorrência de Serviço de Campo" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Pedidos recorrentes de Serviço de Campo associados a esta venda" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Rastreamento de Serviços de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#, python-format +msgid "Field Service recurring Created (%s): %s\n" +" " +msgstr "" +"Serviço de campo recorrente criado (%s): %s\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Modelo de Produto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Ordem de Serviço de Campo Recorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Ordem Recorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Linha de Venda" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sale Order" +msgstr "Pedido de Venda" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linha de Pedidos de Venda" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Vendas" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Selecione um modelo de ordem de serviço de campo recorrente a ser criado" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#, python-format +msgid "This recurring has been created from: %s (%s)\n" +" " +msgstr "" +"Esse recurso recorrente foi criado a partir de: %s (%s)\n" +" " From 872b1ef74d923580466b430cb42c39c0b1ff7068 Mon Sep 17 00:00:00 2001 From: brian10048 Date: Sat, 14 Dec 2019 15:59:28 -0500 Subject: [PATCH 16/59] [IMP] fieldservice_sale_recurring: Add test --- fieldservice_sale_recurring/tests/__init__.py | 6 ++ .../tests/test_fsm_sale_recurring.py | 78 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 fieldservice_sale_recurring/tests/__init__.py create mode 100644 fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py diff --git a/fieldservice_sale_recurring/tests/__init__.py b/fieldservice_sale_recurring/tests/__init__.py new file mode 100644 index 0000000000..377f3a1864 --- /dev/null +++ b/fieldservice_sale_recurring/tests/__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 ( + test_fsm_sale_recurring, +) diff --git a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py new file mode 100644 index 0000000000..af9905d5db --- /dev/null +++ b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py @@ -0,0 +1,78 @@ +# Copyright (C) 2019 Brian McMaster +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +from odoo.addons.fieldservice_sale.tests.test_fsm_sale_order import ( + TestFSMSale +) + + +class TestFSMSaleRecurring(TestFSMSale): + + @classmethod + def setUpClass(cls): + super(TestFSMSaleRecurring, cls).setUpClass() + cls.test_location = cls.env.ref('fieldservice.test_location') + + # Setup products that when sold will create some FSM orders + cls.setUpFSMProducts() + + SaleOrder = cls.env['sale.order'].with_context(tracking_disable=True) + + cls.sale_order_recur = SaleOrder.create({ + 'partner_id': cls.partner_customer_usd.id, + 'fsm_location_id': cls.test_location.id, + 'pricelist_id': cls.pricelist_usd.id, + }) + cls.sale_line_recurring = cls.env['sale.order.line'].create({ + 'name': cls.product_fsm_recur.name, + 'product_id': cls.product_fsm_recur.id, + 'product_uom_qty': 1, + 'product_uom': cls.product_fsm_recur.uom_id.id, + 'price_unit': cls.product_fsm_recur.list_price, + 'order_id': cls.sale_order_recur.id, + 'tax_id': False, + }) + + @classmethod + def setUpFSMProducts(cls): + super(TestFSMSaleRecurring, cls).setUpFSMProducts() + + # Product that creates FSM Recurring Order + cls.product_fsm_recur = cls.env['product.product'].create({ + 'name': 'FSM Recurring Order Product', + 'categ_id': cls.env.ref('product.product_category_3').id, + 'standard_price': 425.0, + 'list_price': 500.0, + 'type': 'service', + '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': 'recurring', + 'fsm_recurring_template_id': cls.env.ref( + 'fieldservice_recurring.recur_template_weekdays').id, + }) + + def test_fsm_sale_order_recurring(self): + """ Test the flow for a Sale Order that will generate + FSM Recurring Orders. + """ + sol_recur = self.sale_line_recurring + # Confirm the sale order that was setup + self.sale_order_recur.action_confirm() + + # FSM Recurring Order linked to Sale Order Line + FSM_Recurring = self.env['fsm.recurring'] + count_recurring = FSM_Recurring.search_count( + [('id', '=', sol_recur.fsm_recurring_id.id)]) + self.assertEqual( + count_recurring, 1, + """FSM Sale Recurring: Recurring Order should be linked to the + Sale Order Line""" + ) + # FSM Recurring Order linked to Sale Order + self.assertEqual( + len(self.sale_order_recur.fsm_recurring_ids.ids), 1, + """FSM Sale Recurring: Sale Order should create + 1 FSM Recurring Order""" + ) From d62f16e32544b6113a0ac36eb5a5b659dcaaeaba Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 18 Oct 2020 14:37:25 +0000 Subject: [PATCH 17/59] fieldservice_sale_recurring 12.0.1.2.0 --- fieldservice_sale_recurring/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index cd1dd952d4..2e58d71550 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Field Service - Sales - Recurring', - 'version': '12.0.1.1.0', + 'version': '12.0.1.2.0', 'summary': 'Sell recurring field services.', 'category': 'Field Service', 'author': 'Open Source Integrators, Odoo Community Association (OCA)', From 7d9ed26786676b76cdef013a23c1585757526805 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 22 Nov 2020 20:33:57 +0000 Subject: [PATCH 18/59] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: field-service-12.0/field-service-12.0-fieldservice_sale_recurring Translate-URL: https://translation.odoo-community.org/projects/field-service-12-0/field-service-12-0-fieldservice_sale_recurring/ --- fieldservice_sale_recurring/i18n/de.po | 1 - 1 file changed, 1 deletion(-) diff --git a/fieldservice_sale_recurring/i18n/de.po b/fieldservice_sale_recurring/i18n/de.po index 1d283fa5ac..216ca199f3 100644 --- a/fieldservice_sale_recurring/i18n/de.po +++ b/fieldservice_sale_recurring/i18n/de.po @@ -29,7 +29,6 @@ msgstr "Wiederkehrenden Auftrag erstellen" #. module: fieldservice_sale_recurring #: selection:product.template,field_service_tracking:0 #, fuzzy -#| msgid "Create a recurring order" msgid "Create one FSM order per sale order" msgstr "Wiederkehrenden Auftrag erstellen" From 3d2584eab2877613a53cc4338a854f528e9bb65d Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 16 Sep 2021 14:36:24 +0000 Subject: [PATCH 19/59] Added translation using Weblate (Italian) --- fieldservice_sale_recurring/i18n/it.po | 151 +++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/it.po diff --git a/fieldservice_sale_recurring/i18n/it.po b/fieldservice_sale_recurring/i18n/it.po new file mode 100644 index 0000000000..f08c4ff98d --- /dev/null +++ b/fieldservice_sale_recurring/i18n/it.po @@ -0,0 +1,151 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-09-26 17: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_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Ordini di vendita" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create a recurring order" +msgstr "Crea un ordine ricorrente" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order" +msgstr "Crea un ordine FSM per ordine di vendita" + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Create one FSM order per sale order line" +msgstr "Crea un ordine FSM per riga ordine di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" +"Definisce cosa accade alla conferma di un ordine di vendita:\n" +" - Niente: niente in aggiunta, comportamento predefinito.\n" +" - Per ordine di vendita: viene generato un ordine FSM per la " +"vendita.\n" +" - Per riga ordine di vendita: viene generato un ordine FSM " +"per ogni riga ordine di vendita." + +#. module: fieldservice_sale_recurring +#: selection:product.template,field_service_tracking:0 +msgid "Don't create FSM order" +msgstr "Non creare ordine FSM" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Ordini FSM ricorrenti" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Ordinei assistenza sul campo ricorrenti generati da riga ordine di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Modello assistenza sul campo ricorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Ordini assistenza sul campo ricorrenti associati a questa vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Tracciamento assistenza sul campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#, python-format +msgid "Field Service recurring Created (%s): %s\n" +" " +msgstr "" +"Creata assistenza sul campo ricorrente (%s): %s\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Modello prodotto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Ordine assistenza sul campo ricorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Ordine ricorrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Riga di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sale Order" +msgstr "Ordine di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Riga ordine di vendita" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#, python-format +msgid "Sales Orders" +msgstr "Ordini di vendita" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "Seleziona un modello ordine assistenza sul camp ricorrente da creare" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#, python-format +msgid "This recurring has been created from: %s (%s)\n" +" " +msgstr "" +"Questo ordine ricorrente è stato creato da: %s (%s)\n" +" " From 348f745968bf0eeeb6e6cf27887a6734eb195b28 Mon Sep 17 00:00:00 2001 From: hparfr Date: Tue, 28 Dec 2021 18:02:39 +0100 Subject: [PATCH 20/59] [IMP] fieldservice_sale_recurring : black, isort, prettier --- fieldservice_sale_recurring/__manifest__.py | 44 +- .../models/fsm_recurring.py | 6 +- .../models/product_template.py | 16 +- .../models/sale_order.py | 39 +- .../models/sale_order_line.py | 95 +- .../static/description/description/index.html | 1166 +++++++++++------ .../tests/test_fsm_sale_recurring.py | 89 +- .../views/fsm_recurring.xml | 18 +- .../views/product_template.xml | 17 +- .../views/sale_order.xml | 22 +- 10 files changed, 924 insertions(+), 588 deletions(-) diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index 2e58d71550..1da5764508 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -2,29 +2,29 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Field Service - Sales - Recurring', - 'version': '12.0.1.2.0', - 'summary': 'Sell recurring field services.', - 'category': 'Field Service', - 'author': 'Open Source Integrators, Odoo Community Association (OCA)', - 'website': 'https://github.com/OCA/field-service', - 'depends': [ - 'fieldservice_recurring', - 'fieldservice_sale', + "name": "Field Service - Sales - Recurring", + "version": "12.0.1.2.0", + "summary": "Sell recurring field services.", + "category": "Field Service", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": [ + "fieldservice_recurring", + "fieldservice_sale", ], - 'data': [ - 'security/ir.model.access.csv', - 'views/fsm_recurring.xml', - 'views/product_template.xml', - 'views/sale_order.xml', + "data": [ + "security/ir.model.access.csv", + "views/fsm_recurring.xml", + "views/product_template.xml", + "views/sale_order.xml", ], - '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_recurring/models/fsm_recurring.py b/fieldservice_sale_recurring/models/fsm_recurring.py index 497f0195d1..8f1489a2b4 100644 --- a/fieldservice_sale_recurring/models/fsm_recurring.py +++ b/fieldservice_sale_recurring/models/fsm_recurring.py @@ -2,13 +2,13 @@ # Copyright (C) 2019 Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models, _ +from odoo import _, fields, models class FSMRecurring(models.Model): - _inherit = 'fsm.recurring' + _inherit = "fsm.recurring" - sale_line_id = fields.Many2one('sale.order.line') + sale_line_id = fields.Many2one("sale.order.line") def action_view_sales(self): self.ensure_one() diff --git a/fieldservice_sale_recurring/models/product_template.py b/fieldservice_sale_recurring/models/product_template.py index e1c589f666..3f5a82df9f 100644 --- a/fieldservice_sale_recurring/models/product_template.py +++ b/fieldservice_sale_recurring/models/product_template.py @@ -6,20 +6,20 @@ class ProductTemplate(models.Model): - _inherit = 'product.template' + _inherit = "product.template" field_service_tracking = fields.Selection( - selection_add=[ - ('recurring', 'Create a recurring order') - ] + selection_add=[("recurring", "Create a recurring order")] ) fsm_recurring_template_id = fields.Many2one( - 'fsm.recurring.template', 'Field Service Recurring Template', - help="Select a field service recurring order template to be created") + "fsm.recurring.template", + "Field Service Recurring Template", + help="Select a field service recurring order template to be created", + ) - @api.onchange('field_service_tracking') + @api.onchange("field_service_tracking") def _onchange_field_service_tracking(self): - if self.field_service_tracking != 'recurring': + if self.field_service_tracking != "recurring": self.fsm_recurring_template_id = False else: super()._onchange_field_service_tracking() diff --git a/fieldservice_sale_recurring/models/sale_order.py b/fieldservice_sale_recurring/models/sale_order.py index 3c85e6c615..b58f117753 100644 --- a/fieldservice_sale_recurring/models/sale_order.py +++ b/fieldservice_sale_recurring/models/sale_order.py @@ -6,35 +6,40 @@ class SaleOrder(models.Model): - _inherit = 'sale.order' + _inherit = "sale.order" fsm_recurring_ids = fields.Many2many( - 'fsm.recurring', compute='_compute_fsm_recurring_ids', - string='Field Service Recurring orders associated to this sale') + "fsm.recurring", + compute="_compute_fsm_recurring_ids", + string="Field Service Recurring orders associated to this sale", + ) fsm_recurring_count = fields.Float( - string='FSM Recurring Orders', compute='_compute_fsm_recurring_ids') + string="FSM Recurring Orders", compute="_compute_fsm_recurring_ids" + ) @api.multi - @api.depends('order_line.product_id') + @api.depends("order_line.product_id") def _compute_fsm_recurring_ids(self): for order in self: - order.fsm_recurring_ids = self.env['fsm.recurring'].search([ - ('sale_line_id', 'in', order.order_line.ids)]) + order.fsm_recurring_ids = self.env["fsm.recurring"].search( + [("sale_line_id", "in", order.order_line.ids)] + ) order.fsm_recurring_count = len(order.fsm_recurring_ids) @api.multi def action_view_fsm_recurring(self): - fsm_recurrings = self.mapped('fsm_recurring_ids') - action = self.env.ref( - 'fieldservice_recurring.action_fsm_recurring').read()[0] + fsm_recurrings = self.mapped("fsm_recurring_ids") + action = self.env.ref("fieldservice_recurring.action_fsm_recurring").read()[0] if len(fsm_recurrings) > 1: - action['domain'] = [('id', 'in', fsm_recurrings.ids)] + action["domain"] = [("id", "in", fsm_recurrings.ids)] elif len(fsm_recurrings) == 1: - action['views'] = [ - (self.env.ref( - 'fieldservice_recurring.fsm_recurring_form_view').id, - 'form')] - action['res_id'] = fsm_recurrings.id + action["views"] = [ + ( + self.env.ref("fieldservice_recurring.fsm_recurring_form_view").id, + "form", + ) + ] + action["res_id"] = fsm_recurrings.id else: - action = {'type': 'ir.actions.act_window_close'} + action = {"type": "ir.actions.act_window_close"} return action diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index ccfbec32bf..d7f52c9f43 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -2,81 +2,91 @@ # Copyright (C) 2019 Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields, models, _ +from odoo import _, api, fields, models class SaleOrderLine(models.Model): _inherit = "sale.order.line" fsm_recurring_id = fields.Many2one( - 'fsm.recurring', 'Recurring Order', index=True, - help="Field Service Recurring Order generated by the sale order line") + "fsm.recurring", + "Recurring Order", + index=True, + help="Field Service Recurring Order generated by the sale order line", + ) def _field_create_fsm_recurring_prepare_values(self): self.ensure_one() template = self.product_id.fsm_recurring_template_id note = self.name if template.description: - note += '\n ' + template.description + note += "\n " + template.description return { - 'customer_id': self.order_id.partner_id.id, - 'location_id': self.order_id.fsm_location_id.id, - 'start_date': self.order_id.expected_date, - 'fsm_recurring_template_id': template.id, - 'description': note, - 'max_orders': template.max_orders, - 'fsm_frequency_set_id': template.fsm_frequency_set_id.id, - 'fsm_order_template_id': template.fsm_order_template_id.id, - 'sale_id': self.order_id.id, - 'sale_line_id': self.id, - 'company_id': self.company_id.id, + "customer_id": self.order_id.partner_id.id, + "location_id": self.order_id.fsm_location_id.id, + "start_date": self.order_id.expected_date, + "fsm_recurring_template_id": template.id, + "description": note, + "max_orders": template.max_orders, + "fsm_frequency_set_id": template.fsm_frequency_set_id.id, + "fsm_order_template_id": template.fsm_order_template_id.id, + "sale_id": self.order_id.id, + "sale_line_id": self.id, + "company_id": self.company_id.id, } @api.multi def _field_create_fsm_recurring(self): - """ Generate fsm_recurring for the given so line, and link it. - :return a mapping with the so line id and its linked fsm_recurring - :rtype dict + """Generate fsm_recurring for the given so line, and link it. + :return a mapping with the so line id and its linked fsm_recurring + :rtype dict """ result = {} for so_line in self: # create fsm_recurring values = so_line._field_create_fsm_recurring_prepare_values() - fsm_recurring = self.env['fsm.recurring'].sudo().create(values) + fsm_recurring = self.env["fsm.recurring"].sudo().create(values) fsm_recurring.action_start() - so_line.write({'fsm_recurring_id': fsm_recurring.id}) + so_line.write({"fsm_recurring_id": fsm_recurring.id}) # post message on SO - msg_body = _( - """Field Service recurring Created (%s): %s - """) % (so_line.product_id.name, - fsm_recurring.id, - fsm_recurring.name) + """ + ) + % (so_line.product_id.name, fsm_recurring.id, fsm_recurring.name) + ) so_line.order_id.message_post(body=msg_body) # post message on fsm_recurring - fsm_recurring_msg = _( - """This recurring has been created from: %s (%s) - """) % (so_line.order_id.id, so_line.order_id.name, - so_line.product_id.name) + """ + ) + % (so_line.order_id.id, so_line.order_id.name, so_line.product_id.name) + ) fsm_recurring.message_post(body=fsm_recurring_msg) result[so_line.id] = fsm_recurring return result @api.multi def _field_find_fsm_recurring(self): - """ Find the fsm_recurring generated by the so lines. If no - fsm_recurring linked, it will be created automatically. - :return a mapping with the so line id and its linked - fsm_recurring - :rtype dict + """Find the fsm_recurring generated by the so lines. If no + fsm_recurring linked, it will be created automatically. + :return a mapping with the so line id and its linked + fsm_recurring + :rtype dict """ # one search for all so lines - fsm_recurrings = self.env['fsm.recurring'].search([ - ('sale_line_id', 'in', self.ids)]) + fsm_recurrings = self.env["fsm.recurring"].search( + [("sale_line_id", "in", self.ids)] + ) fsm_recurring_sol_mapping = { - fsm_recurring.sale_line_id.id: - fsm_recurring for fsm_recurring in fsm_recurrings} + fsm_recurring.sale_line_id.id: fsm_recurring + for fsm_recurring in fsm_recurrings + } result = {} for so_line in self: # If the SO was confirmed, cancelled, set to draft then confirmed, @@ -84,19 +94,18 @@ def _field_find_fsm_recurring(self): fsm_recurring = fsm_recurring_sol_mapping.get(so_line.id) # If not found, create one fsm_recurring for the so line if not fsm_recurring: - fsm_recurring = so_line._field_create_fsm_recurring( - )[so_line.id] + fsm_recurring = so_line._field_create_fsm_recurring()[so_line.id] result[so_line.id] = fsm_recurring return result @api.multi def _field_service_generation(self): - """ For service lines, create the field service order. If it already - exists, it simply links the existing one to the line. + """For service lines, create the field service order. If it already + exists, it simply links the existing one to the line. """ result = super()._field_service_generation() for so_line in self.filtered( - lambda sol: sol.product_id.field_service_tracking == 'recurring' + lambda sol: sol.product_id.field_service_tracking == "recurring" ): so_line._field_find_fsm_recurring() return result diff --git a/fieldservice_sale_recurring/static/description/description/index.html b/fieldservice_sale_recurring/static/description/description/index.html index 734a351843..0b3535b24f 100644 --- a/fieldservice_sale_recurring/static/description/description/index.html +++ b/fieldservice_sale_recurring/static/description/description/index.html @@ -1,13 +1,12 @@ - - - -Field Service - - - -
-

Field Service

- - -

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

-

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

-

Table of contents

- -
-

Installation

-

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

-

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

-
-
-

Configuration

-

To configure this module, you need to:

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

Usage

-

To use this module, you need to:

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

Known issues / Roadmap

-

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

-
-
-

Bug Tracker

-

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

-

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

-
-
-

Credits

-
-

Authors

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

Other credits

-

The development of this module has been financially supported by:

- -
-
-

Maintainers

-

This module is maintained by the OCA.

-Odoo Community Association -

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

-

Current maintainers:

-

wolfhall max3903

-

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

-

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

-
-
-
- +

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

+

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

+

Table of contents

+
+ +
+
+

Installation

+

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

+

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

+
+
+

Configuration

+

To configure this module, you need to:

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

Usage

+

To use this module, you need to:

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

Known issues / Roadmap

+

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

+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Open Source Integrators
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The development of this module has been financially supported by:

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ Odoo Community Association +

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

+

+ Current + maintainers: +

+

+ wolfhall + max3903 +

+

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

+

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

+
+
+
+ diff --git a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py index af9905d5db..4e382f5393 100644 --- a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py +++ b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py @@ -2,77 +2,84 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.addons.fieldservice_sale.tests.test_fsm_sale_order import ( - TestFSMSale -) +from odoo.addons.fieldservice_sale.tests.test_fsm_sale_order import TestFSMSale class TestFSMSaleRecurring(TestFSMSale): - @classmethod def setUpClass(cls): super(TestFSMSaleRecurring, cls).setUpClass() - cls.test_location = cls.env.ref('fieldservice.test_location') + cls.test_location = cls.env.ref("fieldservice.test_location") # Setup products that when sold will create some FSM orders cls.setUpFSMProducts() - SaleOrder = cls.env['sale.order'].with_context(tracking_disable=True) + SaleOrder = cls.env["sale.order"].with_context(tracking_disable=True) - cls.sale_order_recur = SaleOrder.create({ - 'partner_id': cls.partner_customer_usd.id, - 'fsm_location_id': cls.test_location.id, - 'pricelist_id': cls.pricelist_usd.id, - }) - cls.sale_line_recurring = cls.env['sale.order.line'].create({ - 'name': cls.product_fsm_recur.name, - 'product_id': cls.product_fsm_recur.id, - 'product_uom_qty': 1, - 'product_uom': cls.product_fsm_recur.uom_id.id, - 'price_unit': cls.product_fsm_recur.list_price, - 'order_id': cls.sale_order_recur.id, - 'tax_id': False, - }) + cls.sale_order_recur = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sale_line_recurring = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm_recur.name, + "product_id": cls.product_fsm_recur.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm_recur.uom_id.id, + "price_unit": cls.product_fsm_recur.list_price, + "order_id": cls.sale_order_recur.id, + "tax_id": False, + } + ) @classmethod def setUpFSMProducts(cls): super(TestFSMSaleRecurring, cls).setUpFSMProducts() # Product that creates FSM Recurring Order - cls.product_fsm_recur = cls.env['product.product'].create({ - 'name': 'FSM Recurring Order Product', - 'categ_id': cls.env.ref('product.product_category_3').id, - 'standard_price': 425.0, - 'list_price': 500.0, - 'type': 'service', - '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': 'recurring', - 'fsm_recurring_template_id': cls.env.ref( - 'fieldservice_recurring.recur_template_weekdays').id, - }) + cls.product_fsm_recur = cls.env["product.product"].create( + { + "name": "FSM Recurring Order Product", + "categ_id": cls.env.ref("product.product_category_3").id, + "standard_price": 425.0, + "list_price": 500.0, + "type": "service", + "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": "recurring", + "fsm_recurring_template_id": cls.env.ref( + "fieldservice_recurring.recur_template_weekdays" + ).id, + } + ) def test_fsm_sale_order_recurring(self): - """ Test the flow for a Sale Order that will generate - FSM Recurring Orders. + """Test the flow for a Sale Order that will generate + FSM Recurring Orders. """ sol_recur = self.sale_line_recurring # Confirm the sale order that was setup self.sale_order_recur.action_confirm() # FSM Recurring Order linked to Sale Order Line - FSM_Recurring = self.env['fsm.recurring'] + FSM_Recurring = self.env["fsm.recurring"] count_recurring = FSM_Recurring.search_count( - [('id', '=', sol_recur.fsm_recurring_id.id)]) + [("id", "=", sol_recur.fsm_recurring_id.id)] + ) self.assertEqual( - count_recurring, 1, + count_recurring, + 1, """FSM Sale Recurring: Recurring Order should be linked to the - Sale Order Line""" + Sale Order Line""", ) # FSM Recurring Order linked to Sale Order self.assertEqual( - len(self.sale_order_recur.fsm_recurring_ids.ids), 1, + len(self.sale_order_recur.fsm_recurring_ids.ids), + 1, """FSM Sale Recurring: Sale Order should create - 1 FSM Recurring Order""" + 1 FSM Recurring Order""", ) diff --git a/fieldservice_sale_recurring/views/fsm_recurring.xml b/fieldservice_sale_recurring/views/fsm_recurring.xml index aedaeb3826..04ddddb25a 100644 --- a/fieldservice_sale_recurring/views/fsm_recurring.xml +++ b/fieldservice_sale_recurring/views/fsm_recurring.xml @@ -1,17 +1,19 @@ - + fsm.recurring - + - diff --git a/fieldservice_sale_recurring/views/product_template.xml b/fieldservice_sale_recurring/views/product_template.xml index 2ab11a35c8..2c4ce0ae34 100644 --- a/fieldservice_sale_recurring/views/product_template.xml +++ b/fieldservice_sale_recurring/views/product_template.xml @@ -2,17 +2,24 @@ product.template.fieldservice.form product.template - + - {'required': [('field_service_tracking', 'in', ['sale','line'])], + {'required': [('field_service_tracking', 'in', ['sale','line'])], 'invisible':[('field_service_tracking', 'in', ['no','recurring'])]} - + diff --git a/fieldservice_sale_recurring/views/sale_order.xml b/fieldservice_sale_recurring/views/sale_order.xml index d82a655ff5..14ec3aa375 100644 --- a/fieldservice_sale_recurring/views/sale_order.xml +++ b/fieldservice_sale_recurring/views/sale_order.xml @@ -2,16 +2,22 @@ sale.order.form.sale.fieldservice sale.order - + - From b2b85a14387499b252d54306b9c92f95ba7c272c Mon Sep 17 00:00:00 2001 From: brian10048 Date: Sun, 19 Jul 2020 22:45:43 -0400 Subject: [PATCH 21/59] [MIG] fieldservice_sale_recurring: Migration to 13.0 --- fieldservice_sale_recurring/__manifest__.py | 2 +- fieldservice_sale_recurring/models/sale_order.py | 2 -- fieldservice_sale_recurring/models/sale_order_line.py | 5 +---- fieldservice_sale_recurring/readme/INSTALL.rst | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index 1da5764508..5594fc7e85 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Field Service - Sales - Recurring", - "version": "12.0.1.2.0", + "version": "13.0.1.0.0", "summary": "Sell recurring field services.", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", diff --git a/fieldservice_sale_recurring/models/sale_order.py b/fieldservice_sale_recurring/models/sale_order.py index b58f117753..8eaa42daa7 100644 --- a/fieldservice_sale_recurring/models/sale_order.py +++ b/fieldservice_sale_recurring/models/sale_order.py @@ -17,7 +17,6 @@ class SaleOrder(models.Model): string="FSM Recurring Orders", compute="_compute_fsm_recurring_ids" ) - @api.multi @api.depends("order_line.product_id") def _compute_fsm_recurring_ids(self): for order in self: @@ -26,7 +25,6 @@ def _compute_fsm_recurring_ids(self): ) order.fsm_recurring_count = len(order.fsm_recurring_ids) - @api.multi def action_view_fsm_recurring(self): fsm_recurrings = self.mapped("fsm_recurring_ids") action = self.env.ref("fieldservice_recurring.action_fsm_recurring").read()[0] diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index d7f52c9f43..cf6a923c82 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -2,7 +2,7 @@ # Copyright (C) 2019 Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models +from odoo import _, fields, models class SaleOrderLine(models.Model): @@ -35,7 +35,6 @@ def _field_create_fsm_recurring_prepare_values(self): "company_id": self.company_id.id, } - @api.multi def _field_create_fsm_recurring(self): """Generate fsm_recurring for the given so line, and link it. :return a mapping with the so line id and its linked fsm_recurring @@ -71,7 +70,6 @@ def _field_create_fsm_recurring(self): result[so_line.id] = fsm_recurring return result - @api.multi def _field_find_fsm_recurring(self): """Find the fsm_recurring generated by the so lines. If no fsm_recurring linked, it will be created automatically. @@ -98,7 +96,6 @@ def _field_find_fsm_recurring(self): result[so_line.id] = fsm_recurring return result - @api.multi def _field_service_generation(self): """For service lines, create the field service order. If it already exists, it simply links the existing one to the line. diff --git a/fieldservice_sale_recurring/readme/INSTALL.rst b/fieldservice_sale_recurring/readme/INSTALL.rst index 8571f65376..e5355c4b0f 100644 --- a/fieldservice_sale_recurring/readme/INSTALL.rst +++ b/fieldservice_sale_recurring/readme/INSTALL.rst @@ -1,4 +1,4 @@ To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/12.0/base_geoengine +https://github.com/OCA/geospatial/tree/13.0/base_geoengine From 250e944eefe2ef859d8af2da2cdc81d013951cb0 Mon Sep 17 00:00:00 2001 From: hparfr Date: Fri, 23 Jul 2021 16:01:40 +0200 Subject: [PATCH 22/59] [MIG] fieldservice_sale_recurring: Migration to 14.0 implement #735 Prefer fsm_order_template from product (directly) else from product.fsm_recurring_template Adapt product's view --- fieldservice_sale_recurring/__manifest__.py | 2 +- fieldservice_sale_recurring/models/sale_order_line.py | 6 +++--- fieldservice_sale_recurring/views/product_template.xml | 10 +--------- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index 5594fc7e85..4f17b682b7 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Field Service - Sales - Recurring", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "summary": "Sell recurring field services.", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index cf6a923c82..017c365aa5 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -18,19 +18,19 @@ class SaleOrderLine(models.Model): def _field_create_fsm_recurring_prepare_values(self): self.ensure_one() template = self.product_id.fsm_recurring_template_id + product = self.product_id note = self.name if template.description: note += "\n " + template.description return { - "customer_id": self.order_id.partner_id.id, "location_id": self.order_id.fsm_location_id.id, "start_date": self.order_id.expected_date, "fsm_recurring_template_id": template.id, "description": note, "max_orders": template.max_orders, "fsm_frequency_set_id": template.fsm_frequency_set_id.id, - "fsm_order_template_id": template.fsm_order_template_id.id, - "sale_id": self.order_id.id, + "fsm_order_template_id": product.fsm_order_template_id.id + or template.fsm_order_template_id.id, "sale_line_id": self.id, "company_id": self.company_id.id, } diff --git a/fieldservice_sale_recurring/views/product_template.xml b/fieldservice_sale_recurring/views/product_template.xml index 2c4ce0ae34..bedeb8e8ab 100644 --- a/fieldservice_sale_recurring/views/product_template.xml +++ b/fieldservice_sale_recurring/views/product_template.xml @@ -7,18 +7,10 @@ ref="fieldservice_sale.view_product_fieldservice_form" /> - - {'required': [('field_service_tracking', 'in', ['sale','line'])], - 'invisible':[('field_service_tracking', 'in', ['no','recurring'])]} - - From 6c5a7f978aae9c13af5e22c10add3d35bcb7104b Mon Sep 17 00:00:00 2001 From: hparfr Date: Wed, 23 Feb 2022 16:13:15 +0100 Subject: [PATCH 23/59] [FIX] fieldservice_sale_recurring fix test --- .../tests/test_fsm_sale_recurring.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py index 4e382f5393..b69f6bac72 100644 --- a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py +++ b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py @@ -13,6 +13,15 @@ def setUpClass(cls): # Setup products that when sold will create some FSM orders cls.setUpFSMProducts() + cls.partner_customer_usd = cls.env["res.partner"].create( + { + "name": "partner_a", + "company_id": False, + } + ) + cls.pricelist_usd = cls.env["product.pricelist"].search( + [("currency_id.name", "=", "USD")], limit=1 + ) SaleOrder = cls.env["sale.order"].with_context(tracking_disable=True) From f43a982485ae8854aa54a9f166aee08cad3b2ed2 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 8 Mar 2022 09:10:53 +0000 Subject: [PATCH 24/59] [UPD] Update fieldservice_sale_recurring.pot --- .../i18n/fieldservice_sale_recurring.pot | 59 +++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot index 591527f2fa..7f9a6fda8c 100644 --- a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot +++ b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_recurring +# * fieldservice_sale_recurring # 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" @@ -19,24 +19,15 @@ msgid "Sale Orders" msgstr "" #. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring msgid "Create a recurring order" msgstr "" -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order" -msgstr "" - -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order line" -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking -msgid "Determines what happens upon sale order confirmation:\n" +msgid "" +"Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" " - Per Sale Order: One FSM Order will be created for the sale.\n" " - Per Sale Order Line: One FSM Order for each sale order line\n" @@ -44,8 +35,11 @@ msgid "Determines what happens upon sale order confirmation:\n" msgstr "" #. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Don't create FSM order" +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__display_name +msgid "Display Name" msgstr "" #. module: fieldservice_sale_recurring @@ -77,13 +71,30 @@ msgid "Field Service Tracking" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "Field Service recurring Created (%s): %s\n" " " msgstr "" +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__id +msgid "ID" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line____last_update +msgid "Last Modified on" +msgstr "" + #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template msgid "Product Template" @@ -106,7 +117,7 @@ msgstr "" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order -msgid "Sale Order" +msgid "Sales Order" msgstr "" #. module: fieldservice_sale_recurring @@ -115,7 +126,7 @@ msgid "Sales Order Line" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 #, python-format msgid "Sales Orders" msgstr "" @@ -127,10 +138,10 @@ msgid "Select a field service recurring order template to be created" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "This recurring has been created from: %s (%s)\n" " " msgstr "" - From 4cc77750e53f1bb0a7a29af482c997f7e452c68a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 8 Mar 2022 09:18:18 +0000 Subject: [PATCH 25/59] [UPD] README.rst --- fieldservice_sale_recurring/README.rst | 12 ++++++------ .../static/description/index.html | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fieldservice_sale_recurring/README.rst b/fieldservice_sale_recurring/README.rst index 528d3e891a..5457172b52 100644 --- a/fieldservice_sale_recurring/README.rst +++ b/fieldservice_sale_recurring/README.rst @@ -14,13 +14,13 @@ Field Service - Sales - Recurring :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_recurring + :target: https://github.com/OCA/field-service/tree/14.0/fieldservice_sale_recurring :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_recurring + :target: https://translation.odoo-community.org/projects/field-service-14-0/field-service-14-0-fieldservice_sale_recurring :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| @@ -38,7 +38,7 @@ Installation To install Field Service and have the mapping features, you need to install GeoEngine. Please refer to the installation instructions available at: -https://github.com/OCA/geospatial/tree/12.0/base_geoengine +https://github.com/OCA/geospatial/tree/13.0/base_geoengine Configuration ============= @@ -74,7 +74,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -126,6 +126,6 @@ Current `maintainers `__: |maintainer-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_recurring/static/description/index.html b/fieldservice_sale_recurring/static/description/index.html index 54bb133896..a39742781d 100644 --- a/fieldservice_sale_recurring/static/description/index.html +++ b/fieldservice_sale_recurring/static/description/index.html @@ -367,7 +367,7 @@

Field Service - Sales - Recurring

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

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

+

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

This module allows you to sell recurring field services.

Table of contents

@@ -389,7 +389,7 @@

Field Service - Sales - Recurring

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

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

Configuration

@@ -427,7 +427,7 @@

Bug Tracker

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

+feedback.

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

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

Maintainers

promote its widespread use.

Current maintainers:

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 d2a6addcf1f944ccb5a6bb879153fcb9fd7f8d29 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Thu, 24 Mar 2022 19:32:23 +0000 Subject: [PATCH 26/59] Added translation using Weblate (Spanish (Argentina)) --- fieldservice_sale_recurring/i18n/es_AR.po | 165 ++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/es_AR.po diff --git a/fieldservice_sale_recurring/i18n/es_AR.po b/fieldservice_sale_recurring/i18n/es_AR.po new file mode 100644 index 0000000000..888bc07cc2 --- /dev/null +++ b/fieldservice_sale_recurring/i18n/es_AR.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-03-24 22:17+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_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "Crear un pedido recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" +"Determina qué sucede tras la confirmación del pedido de venta:\n" +" - Ninguno: nada adicional, comportamiento predeterminado.\n" +" - Por orden de venta: se creará un pedido de FSM para la " +"venta.\n" +" - Por línea de orden de venta: un pedido de FSM para cada " +"línea de pedido de venta\n" +" se creará." + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "Pedidos FSM Recurrentes" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" +"Pedido Recurrente de Servicio de Campo generado por línea de pedido de venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "Plantilla de Servicio de Campo Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "Pedidos de Servicio de Campo Recurrente asociados a esta venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "Rastreo de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%s): %s\n" +" " +msgstr "" +"Servicio de Campo recurrente Creado (%s): %s\n" +" " + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__id +msgid "ID" +msgstr "ID" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "Plantilla del Producto" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "Pedido Recurrente de Servicio de Campo" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "Pedido Recurrente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Línea de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "Pedidos de Venta" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de Pedido de Venta" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Pedidos de Ventas" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" +"Seleccione una plantilla de servicio de campo recurrente para ser creada" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: %s (%s)\n" +" " +msgstr "" +"Esta recurrencia ha sido creada desde: %s (%s)\n" +" " From a6b610ac86e4d695e5652fb5e90e9f8f76c4f665 Mon Sep 17 00:00:00 2001 From: Hpar Date: Mon, 18 Jul 2022 14:29:46 +0000 Subject: [PATCH 27/59] Added translation using Weblate (French) --- fieldservice_sale_recurring/i18n/fr.po | 150 +++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 fieldservice_sale_recurring/i18n/fr.po diff --git a/fieldservice_sale_recurring/i18n/fr.po b/fieldservice_sale_recurring/i18n/fr.po new file mode 100644 index 0000000000..06e9008c4c --- /dev/null +++ b/fieldservice_sale_recurring/i18n/fr.po @@ -0,0 +1,150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_sale_recurring +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-07-18 17:06+0000\n" +"Last-Translator: Hpar \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: fieldservice_sale_recurring +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale +msgid "Sale Orders" +msgstr "Ventes" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring +msgid "Create a recurring order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "" +"Determines what happens upon sale order confirmation:\n" +" - None: nothing additional, default behavior.\n" +" - Per Sale Order: One FSM Order will be created for the sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order line\n" +" will be created." +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__display_name +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count +#: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice +msgid "FSM Recurring Orders" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Field Service Recurring Order generated by the sale order line" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Field Service Recurring Template" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids +msgid "Field Service Recurring orders associated to this sale" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking +msgid "Field Service Tracking" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"Field Service recurring Created (%s): %s\n" +" " +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__id +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__id +msgid "ID" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order____last_update +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_product_template +msgid "Product Template" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_fsm_recurring +msgid "Recurring Field Service Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id +msgid "Recurring Order" +msgstr "" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__sale_line_id +msgid "Sale Line" +msgstr "Ligne de vente" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order +msgid "Sales Order" +msgstr "Vente" + +#. module: fieldservice_sale_recurring +#: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line +msgid "Sales Order Line" +msgstr "Ligne de vente" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 +#, python-format +msgid "Sales Orders" +msgstr "Vente" + +#. module: fieldservice_sale_recurring +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id +#: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id +msgid "Select a field service recurring order template to be created" +msgstr "" + +#. module: fieldservice_sale_recurring +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 +#, python-format +msgid "" +"This recurring has been created from: %s (%s)\n" +" " +msgstr "" From 18ec5c7c8e1a88ca64a808bf8505ccf00d231233 Mon Sep 17 00:00:00 2001 From: Freni-OSI Date: Thu, 3 Nov 2022 18:33:46 +0530 Subject: [PATCH 28/59] [MIG]fieldservice_sale_recurring --- fieldservice_sale_recurring/__manifest__.py | 2 +- .../models/product_template.py | 2 +- .../models/sale_order_line.py | 22 ++-- .../tests/test_fsm_sale_recurring.py | 108 +++++++++++++++--- 4 files changed, 104 insertions(+), 30 deletions(-) diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index 4f17b682b7..fed3e05028 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Field Service - Sales - Recurring", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "summary": "Sell recurring field services.", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", diff --git a/fieldservice_sale_recurring/models/product_template.py b/fieldservice_sale_recurring/models/product_template.py index 3f5a82df9f..210ca24331 100644 --- a/fieldservice_sale_recurring/models/product_template.py +++ b/fieldservice_sale_recurring/models/product_template.py @@ -22,4 +22,4 @@ def _onchange_field_service_tracking(self): if self.field_service_tracking != "recurring": self.fsm_recurring_template_id = False else: - super()._onchange_field_service_tracking() + return super()._onchange_field_service_tracking() diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index 017c365aa5..f15e5e00d3 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -48,23 +48,19 @@ def _field_create_fsm_recurring(self): fsm_recurring.action_start() so_line.write({"fsm_recurring_id": fsm_recurring.id}) # post message on SO - msg_body = ( - _( - """Field Service recurring Created (%s): %s + msg_body = _( + """Field Service recurring Created ({}): {} """ - ) - % (so_line.product_id.name, fsm_recurring.id, fsm_recurring.name) - ) + ).format(so_line.product_id.name, fsm_recurring.id, fsm_recurring.name) so_line.order_id.message_post(body=msg_body) # post message on fsm_recurring - fsm_recurring_msg = ( - _( - """This recurring has been created from: %s (%s) + fsm_recurring_msg = _( + """This recurring has been created from: {} ({}) """ - ) - % (so_line.order_id.id, so_line.order_id.name, so_line.product_id.name) + ).format( + so_line.order_id.id, so_line.order_id.name, so_line.product_id.name ) fsm_recurring.message_post(body=fsm_recurring_msg) result[so_line.id] = fsm_recurring diff --git a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py index b69f6bac72..f3ec9f35dd 100644 --- a/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py +++ b/fieldservice_sale_recurring/tests/test_fsm_sale_recurring.py @@ -32,22 +32,20 @@ def setUpClass(cls): "pricelist_id": cls.pricelist_usd.id, } ) - cls.sale_line_recurring = cls.env["sale.order.line"].create( + cls.sale_order_recur2 = SaleOrder.create( { - "name": cls.product_fsm_recur.name, - "product_id": cls.product_fsm_recur.id, - "product_uom_qty": 1, - "product_uom": cls.product_fsm_recur.uom_id.id, - "price_unit": cls.product_fsm_recur.list_price, - "order_id": cls.sale_order_recur.id, - "tax_id": False, + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, + } + ) + cls.sale_order = SaleOrder.create( + { + "partner_id": cls.partner_customer_usd.id, + "fsm_location_id": cls.test_location.id, + "pricelist_id": cls.pricelist_usd.id, } ) - - @classmethod - def setUpFSMProducts(cls): - super(TestFSMSaleRecurring, cls).setUpFSMProducts() - # Product that creates FSM Recurring Order cls.product_fsm_recur = cls.env["product.product"].create( { @@ -65,6 +63,79 @@ def setUpFSMProducts(cls): ).id, } ) + cls.product_fsm_recur2 = cls.env["product.product"].create( + { + "name": "FSM Recurring Order Product Test", + "categ_id": cls.env.ref("product.product_category_3").id, + "standard_price": 425.0, + "list_price": 500.0, + "type": "service", + "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": "recurring", + "fsm_recurring_template_id": cls.env.ref( + "fieldservice_recurring.recur_template_weekdays" + ).id, + } + ) + cls.product_fsm = cls.env["product.product"].create( + { + "name": "FSM Order Product", + "categ_id": cls.env.ref("product.product_category_3").id, + "standard_price": 425.0, + "list_price": 500.0, + "type": "service", + "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": "no", + } + ) + cls.sale_line_recurring = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm_recur.name, + "product_id": cls.product_fsm_recur.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm_recur.uom_id.id, + "price_unit": cls.product_fsm_recur.list_price, + "order_id": cls.sale_order_recur.id, + "tax_id": False, + } + ) + cls.sale_line_recurring2 = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm_recur2.name, + "product_id": cls.product_fsm_recur2.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm_recur2.uom_id.id, + "price_unit": cls.product_fsm_recur2.list_price, + "order_id": cls.sale_order_recur2.id, + "tax_id": False, + } + ) + cls.sale_line_recurring3 = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm_recur.name, + "product_id": cls.product_fsm_recur.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm_recur.uom_id.id, + "price_unit": cls.product_fsm_recur.list_price, + "order_id": cls.sale_order_recur2.id, + "tax_id": False, + } + ) + cls.sale_line_recurring4 = cls.env["sale.order.line"].create( + { + "name": cls.product_fsm.name, + "product_id": cls.product_fsm.id, + "product_uom_qty": 1, + "product_uom": cls.product_fsm.uom_id.id, + "price_unit": cls.product_fsm.list_price, + "order_id": cls.sale_order.id, + "tax_id": False, + } + ) def test_fsm_sale_order_recurring(self): """Test the flow for a Sale Order that will generate @@ -73,10 +144,11 @@ def test_fsm_sale_order_recurring(self): sol_recur = self.sale_line_recurring # Confirm the sale order that was setup self.sale_order_recur.action_confirm() + self.sale_order_recur2.action_confirm() + self.sale_order.action_confirm() # FSM Recurring Order linked to Sale Order Line - FSM_Recurring = self.env["fsm.recurring"] - count_recurring = FSM_Recurring.search_count( + count_recurring = self.env["fsm.recurring"].search_count( [("id", "=", sol_recur.fsm_recurring_id.id)] ) self.assertEqual( @@ -85,6 +157,12 @@ def test_fsm_sale_order_recurring(self): """FSM Sale Recurring: Recurring Order should be linked to the Sale Order Line""", ) + sol_recur.fsm_recurring_id.action_view_sales() + self.product_fsm.product_tmpl_id._onchange_field_service_tracking() + self.product_fsm_recur.product_tmpl_id._onchange_field_service_tracking() + self.sale_order_recur.action_view_fsm_recurring() + self.sale_order_recur2.action_view_fsm_recurring() + self.sale_order.action_view_fsm_recurring() # FSM Recurring Order linked to Sale Order self.assertEqual( len(self.sale_order_recur.fsm_recurring_ids.ids), From 00b72ffb79310ea42c6fee2966904848b13a91e5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 8 Nov 2022 16:11:45 +0000 Subject: [PATCH 29/59] [UPD] README.rst --- fieldservice_sale_recurring/README.rst | 10 +++++----- .../static/description/index.html | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fieldservice_sale_recurring/README.rst b/fieldservice_sale_recurring/README.rst index 5457172b52..95dd0173cc 100644 --- a/fieldservice_sale_recurring/README.rst +++ b/fieldservice_sale_recurring/README.rst @@ -14,13 +14,13 @@ Field Service - Sales - Recurring :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_recurring + :target: https://github.com/OCA/field-service/tree/15.0/fieldservice_sale_recurring :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_recurring + :target: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-0-fieldservice_sale_recurring :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| @@ -74,7 +74,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -126,6 +126,6 @@ Current `maintainers `__: |maintainer-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_recurring/static/description/index.html b/fieldservice_sale_recurring/static/description/index.html index a39742781d..6b79d871d6 100644 --- a/fieldservice_sale_recurring/static/description/index.html +++ b/fieldservice_sale_recurring/static/description/index.html @@ -367,7 +367,7 @@

Field Service - Sales - Recurring

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

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

+

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

This module allows you to sell recurring field services.

Table of contents

@@ -427,7 +427,7 @@

Bug Tracker

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

+feedback.

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

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

Maintainers

promote its widespread use.

Current maintainers:

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 f54d957eb6e861a6573776867d0a5835ac804016 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 8 Nov 2022 16:16:13 +0000 Subject: [PATCH 30/59] [UPD] Update fieldservice_sale_recurring.pot --- .../i18n/fieldservice_sale_recurring.pot | 32 +++---------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot index 7f9a6fda8c..4556b37575 100644 --- a/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.pot +++ b/fieldservice_sale_recurring/i18n/fieldservice_sale_recurring.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" @@ -34,14 +34,6 @@ msgid "" " will be created." msgstr "" -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__display_name -msgid "Display Name" -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -74,27 +66,11 @@ msgstr "" #: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format msgid "" -"Field Service recurring Created (%s): %s\n" +"Field Service recurring Created ({}): {}\n" " " msgstr "" -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__id -msgid "ID" -msgstr "" - -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line____last_update -msgid "Last Modified on" -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template msgid "Product Template" @@ -142,6 +118,6 @@ msgstr "" #, python-format msgid "" "This recurring has been created from: %s (%s)\n" +" # data-oe-model=sale.order data-oe-id={}>{} ({})\n" " " msgstr "" From 676929f3f0876618b904af6dccd019fa1ecfa2ab Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 8 Nov 2022 16:27:19 +0000 Subject: [PATCH 31/59] 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_recurring Translate-URL: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-0-fieldservice_sale_recurring/ --- fieldservice_sale_recurring/i18n/de.po | 41 +++++------ fieldservice_sale_recurring/i18n/es.po | 86 ++++++++++++++--------- fieldservice_sale_recurring/i18n/es_AR.po | 71 ++++++++++--------- fieldservice_sale_recurring/i18n/es_CL.po | 86 ++++++++++++++--------- fieldservice_sale_recurring/i18n/fr.po | 36 ++-------- fieldservice_sale_recurring/i18n/it.po | 86 ++++++++++++++--------- fieldservice_sale_recurring/i18n/pt_BR.po | 86 ++++++++++++++--------- 7 files changed, 263 insertions(+), 229 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/de.po b/fieldservice_sale_recurring/i18n/de.po index 216ca199f3..1d42ba0749 100644 --- a/fieldservice_sale_recurring/i18n/de.po +++ b/fieldservice_sale_recurring/i18n/de.po @@ -22,21 +22,10 @@ msgid "Sale Orders" msgstr "Verkaufsaufträge" #. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring msgid "Create a recurring order" msgstr "Wiederkehrenden Auftrag erstellen" -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -#, fuzzy -msgid "Create one FSM order per sale order" -msgstr "Wiederkehrenden Auftrag erstellen" - -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order line" -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking @@ -50,11 +39,6 @@ msgid "" " will be created." msgstr "" -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Don't create FSM order" -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -84,11 +68,11 @@ msgid "Field Service Tracking" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format msgid "" -"Field Service recurring Created (%s): %s\n" +"Field Service recurring Created ({}): {}\n" " " msgstr "" @@ -114,8 +98,8 @@ msgstr "Auftragszeile" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order -msgid "Sale Order" -msgstr "Verkaufsauftrag" +msgid "Sales Order" +msgstr "" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line @@ -123,7 +107,7 @@ msgid "Sales Order Line" msgstr "Auftragszeile" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 #, python-format msgid "Sales Orders" msgstr "Verkaufsaufträge" @@ -135,13 +119,20 @@ msgid "Select a field service recurring order template to be created" msgstr "" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format msgid "" "This recurring has been created from: %s (%s)\n" +" # data-oe-model=sale.order data-oe-id={}>{} ({})\n" " " msgstr "" +#, fuzzy +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Wiederkehrenden Auftrag erstellen" + +#~ msgid "Sale Order" +#~ msgstr "Verkaufsauftrag" + #~ msgid "Create a single order" #~ msgstr "Auftrag erstellen" diff --git a/fieldservice_sale_recurring/i18n/es.po b/fieldservice_sale_recurring/i18n/es.po index 91b83056de..3198c378b1 100644 --- a/fieldservice_sale_recurring/i18n/es.po +++ b/fieldservice_sale_recurring/i18n/es.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_recurring +# * fieldservice_sale_recurring # msgid "" msgstr "" @@ -22,27 +22,20 @@ msgid "Sale Orders" msgstr "Pedidos de Venta" #. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring msgid "Create a recurring order" msgstr "Crear un pedido recurrente" -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order" -msgstr "Crear un FSM por pedido de venta" - -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order line" -msgstr "Crear un pedido de FSM por líneas de pedido" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking -msgid "Determines what happens upon sale order confirmation:\n" +msgid "" +"Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" -" - Per Sale Order: One FSM Order will be created for the sale.\n" -" - Per Sale Order Line: One FSM Order for each sale order line\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" " will be created." msgstr "" "Determina qué ocurre en una confirmación de pedido de venta:\n" @@ -53,11 +46,6 @@ msgstr "" "línea de pedido\n" " se creará." -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Don't create FSM order" -msgstr "No crear pedido de FSM" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -89,15 +77,13 @@ msgid "Field Service Tracking" msgstr "Seguimiento de Servicio de Campo" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "Field Service recurring Created (%s): %s\n" +msgid "" +"Field Service recurring Created ({}): {}\n" " " msgstr "" -"Servicio de Campo recurrente Creado (%s): %s\n" -" " #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -121,8 +107,8 @@ msgstr "Línea de Venta" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order -msgid "Sale Order" -msgstr "Pedido de Venta" +msgid "Sales Order" +msgstr "" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line @@ -130,7 +116,7 @@ msgid "Sales Order Line" msgstr "Línea de Pedido de Venta" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 #, python-format msgid "Sales Orders" msgstr "Pedidos de Venta" @@ -143,12 +129,42 @@ msgstr "" "Seleccione una plantilla de pedido recurrente de servicio de campo para crear" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "This recurring has been created from: %s (%s)\n" +msgid "" +"This recurring has been created from: {} ({})\n" " " msgstr "" -"Esta recurrencia ha sido creado a partir de: %s (%s)\n" -" " + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crear un FSM por pedido de venta" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crear un pedido de FSM por líneas de pedido" + +#~ msgid "Don't create FSM order" +#~ msgstr "No crear pedido de FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venta" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esta recurrencia ha sido creado a partir de: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/es_AR.po b/fieldservice_sale_recurring/i18n/es_AR.po index 888bc07cc2..e802185961 100644 --- a/fieldservice_sale_recurring/i18n/es_AR.po +++ b/fieldservice_sale_recurring/i18n/es_AR.po @@ -32,8 +32,10 @@ msgstr "Crear un pedido recurrente" msgid "" "Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" -" - Per Sale Order: One FSM Order will be created for the sale.\n" -" - Per Sale Order Line: One FSM Order for each sale order line\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" " will be created." msgstr "" "Determina qué sucede tras la confirmación del pedido de venta:\n" @@ -44,14 +46,6 @@ msgstr "" "línea de pedido de venta\n" " se creará." -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__display_name -msgid "Display Name" -msgstr "Mostrar Nombre" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -85,29 +79,10 @@ msgstr "Rastreo de Servicio de Campo" #: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format msgid "" -"Field Service recurring Created (%s): %s\n" +"Field Service recurring Created ({}): {}\n" " " msgstr "" -"Servicio de Campo recurrente Creado (%s): %s\n" -" " - -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__id -msgid "ID" -msgstr "ID" - -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line____last_update -msgid "Last Modified on" -msgstr "Última Modificación el" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -157,9 +132,35 @@ msgstr "" #, python-format msgid "" "This recurring has been created from: %s (%s)\n" +" # data-oe-model=sale.order data-oe-id={}>{} ({})\n" " " msgstr "" -"Esta recurrencia ha sido creada desde: %s (%s)\n" -" " + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado (%s): %s\n" +#~ " " + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esta recurrencia ha sido creada desde: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/es_CL.po b/fieldservice_sale_recurring/i18n/es_CL.po index fead49bd04..206a95125c 100644 --- a/fieldservice_sale_recurring/i18n/es_CL.po +++ b/fieldservice_sale_recurring/i18n/es_CL.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_recurring +# * fieldservice_sale_recurring # msgid "" msgstr "" @@ -22,27 +22,20 @@ msgid "Sale Orders" msgstr "Pedidos de Venta" #. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring msgid "Create a recurring order" msgstr "Crear un pedido recurrente" -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order" -msgstr "Crear un FSM por pedido de venta" - -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order line" -msgstr "Crear un pedido de FSM por líneas de pedido" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking -msgid "Determines what happens upon sale order confirmation:\n" +msgid "" +"Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" -" - Per Sale Order: One FSM Order will be created for the sale.\n" -" - Per Sale Order Line: One FSM Order for each sale order line\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" " will be created." msgstr "" "Determina qué ocurre en una confirmación de pedido de venta:\n" @@ -53,11 +46,6 @@ msgstr "" "línea de pedido\n" " se creará." -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Don't create FSM order" -msgstr "No crear pedido de FSM" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -89,15 +77,13 @@ msgid "Field Service Tracking" msgstr "Seguimiento de Servicio de Campo" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "Field Service recurring Created (%s): %s\n" +msgid "" +"Field Service recurring Created ({}): {}\n" " " msgstr "" -"Servicio de Campo recurrente Creado (%s): %s\n" -" " #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -121,8 +107,8 @@ msgstr "Línea de Venta" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order -msgid "Sale Order" -msgstr "Pedido de Venta" +msgid "Sales Order" +msgstr "" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line @@ -130,7 +116,7 @@ msgid "Sales Order Line" msgstr "Línea de Pedido de Venta" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 #, python-format msgid "Sales Orders" msgstr "Pedidos de Venta" @@ -143,12 +129,42 @@ msgstr "" "Seleccione una plantilla de pedido recurrente de servicio de campo para crear" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "This recurring has been created from: %s (%s)\n" +msgid "" +"This recurring has been created from: {} ({})\n" " " msgstr "" -"Esta recurrencia ha sido creado a partir de: %s (%s)\n" -" " + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crear un FSM por pedido de venta" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crear un pedido de FSM por líneas de pedido" + +#~ msgid "Don't create FSM order" +#~ msgstr "No crear pedido de FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Servicio de Campo recurrente Creado (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venta" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esta recurrencia ha sido creado a partir de: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/fr.po b/fieldservice_sale_recurring/i18n/fr.po index 06e9008c4c..c20847b56a 100644 --- a/fieldservice_sale_recurring/i18n/fr.po +++ b/fieldservice_sale_recurring/i18n/fr.po @@ -32,19 +32,13 @@ msgstr "" msgid "" "Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" -" - Per Sale Order: One FSM Order will be created for the sale.\n" -" - Per Sale Order Line: One FSM Order for each sale order line\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" " will be created." msgstr "" -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__display_name -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__display_name -msgid "Display Name" -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -77,27 +71,11 @@ msgstr "" #: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format msgid "" -"Field Service recurring Created (%s): %s\n" +"Field Service recurring Created ({}): {}\n" " " msgstr "" -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__id -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line__id -msgid "ID" -msgstr "" - -#. module: fieldservice_sale_recurring -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_fsm_recurring____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order____last_update -#: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order_line____last_update -msgid "Last Modified on" -msgstr "" - #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template msgid "Product Template" @@ -145,6 +123,6 @@ msgstr "" #, python-format msgid "" "This recurring has been created from: %s (%s)\n" +" # data-oe-model=sale.order data-oe-id={}>{} ({})\n" " " msgstr "" diff --git a/fieldservice_sale_recurring/i18n/it.po b/fieldservice_sale_recurring/i18n/it.po index f08c4ff98d..8cd5f00426 100644 --- a/fieldservice_sale_recurring/i18n/it.po +++ b/fieldservice_sale_recurring/i18n/it.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_recurring +# * fieldservice_sale_recurring # msgid "" msgstr "" @@ -22,27 +22,20 @@ msgid "Sale Orders" msgstr "Ordini di vendita" #. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring msgid "Create a recurring order" msgstr "Crea un ordine ricorrente" -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order" -msgstr "Crea un ordine FSM per ordine di vendita" - -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order line" -msgstr "Crea un ordine FSM per riga ordine di vendita" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking -msgid "Determines what happens upon sale order confirmation:\n" +msgid "" +"Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" -" - Per Sale Order: One FSM Order will be created for the sale.\n" -" - Per Sale Order Line: One FSM Order for each sale order line\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" " will be created." msgstr "" "Definisce cosa accade alla conferma di un ordine di vendita:\n" @@ -52,11 +45,6 @@ msgstr "" " - Per riga ordine di vendita: viene generato un ordine FSM " "per ogni riga ordine di vendita." -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Don't create FSM order" -msgstr "Non creare ordine FSM" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -87,15 +75,13 @@ msgid "Field Service Tracking" msgstr "Tracciamento assistenza sul campo" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "Field Service recurring Created (%s): %s\n" +msgid "" +"Field Service recurring Created ({}): {}\n" " " msgstr "" -"Creata assistenza sul campo ricorrente (%s): %s\n" -" " #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -119,8 +105,8 @@ msgstr "Riga di vendita" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order -msgid "Sale Order" -msgstr "Ordine di vendita" +msgid "Sales Order" +msgstr "" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line @@ -128,7 +114,7 @@ msgid "Sales Order Line" msgstr "Riga ordine di vendita" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 #, python-format msgid "Sales Orders" msgstr "Ordini di vendita" @@ -140,12 +126,42 @@ msgid "Select a field service recurring order template to be created" msgstr "Seleziona un modello ordine assistenza sul camp ricorrente da creare" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "This recurring has been created from: %s (%s)\n" +msgid "" +"This recurring has been created from: {} ({})\n" " " msgstr "" -"Questo ordine ricorrente è stato creato da: %s (%s)\n" -" " + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crea un ordine FSM per ordine di vendita" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crea un ordine FSM per riga ordine di vendita" + +#~ msgid "Don't create FSM order" +#~ msgstr "Non creare ordine FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Creata assistenza sul campo ricorrente (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Ordine di vendita" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Questo ordine ricorrente è stato creato da: %s (%s)\n" +#~ " " diff --git a/fieldservice_sale_recurring/i18n/pt_BR.po b/fieldservice_sale_recurring/i18n/pt_BR.po index 3053e6ae64..baf822667c 100644 --- a/fieldservice_sale_recurring/i18n/pt_BR.po +++ b/fieldservice_sale_recurring/i18n/pt_BR.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * fieldservice_sale_recurring +# * fieldservice_sale_recurring # msgid "" msgstr "" @@ -22,27 +22,20 @@ msgid "Sale Orders" msgstr "Pedidos de Venda" #. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 +#: model:ir.model.fields.selection,name:fieldservice_sale_recurring.selection__product_template__field_service_tracking__recurring msgid "Create a recurring order" msgstr "Crie uma ordem recorrente" -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order" -msgstr "Crie um pedido FSM por pedido de venda" - -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Create one FSM order per sale order line" -msgstr "Crie um Pedido FSM por linha de pedido de venda" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_product__field_service_tracking #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__field_service_tracking -msgid "Determines what happens upon sale order confirmation:\n" +msgid "" +"Determines what happens upon sale order confirmation:\n" " - None: nothing additional, default behavior.\n" -" - Per Sale Order: One FSM Order will be created for the sale.\n" -" - Per Sale Order Line: One FSM Order for each sale order line\n" +" - Per Sale Order: One FSM Order will be created for the " +"sale.\n" +" - Per Sale Order Line: One FSM Order for each sale order " +"line\n" " will be created." msgstr "" "Determina o que acontece após a confirmação do pedido de venda:\n" @@ -53,11 +46,6 @@ msgstr "" "para cada linha\n" " de pedido de venda." -#. module: fieldservice_sale_recurring -#: selection:product.template,field_service_tracking:0 -msgid "Don't create FSM order" -msgstr "Não crie ordem FSM" - #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.view_order_form_inherit_sale_fieldservice @@ -88,15 +76,13 @@ msgid "Field Service Tracking" msgstr "Rastreamento de Serviços de Campo" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:49 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "Field Service recurring Created (%s): %s\n" +msgid "" +"Field Service recurring Created ({}): {}\n" " " msgstr "" -"Serviço de campo recorrente criado (%s): %s\n" -" " #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -120,8 +106,8 @@ msgstr "Linha de Venda" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order -msgid "Sale Order" -msgstr "Pedido de Venda" +msgid "Sales Order" +msgstr "" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line @@ -129,7 +115,7 @@ msgid "Sales Order Line" msgstr "Linha de Pedidos de Venda" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:21 +#: code:addons/fieldservice_sale_recurring/models/fsm_recurring.py:0 #, python-format msgid "Sales Orders" msgstr "Pedidos de Vendas" @@ -142,12 +128,42 @@ msgstr "" "Selecione um modelo de ordem de serviço de campo recorrente a ser criado" #. module: fieldservice_sale_recurring -#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:57 +#: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 #, python-format -msgid "This recurring has been created from: %s (%s)\n" +msgid "" +"This recurring has been created from: {} ({})\n" " " msgstr "" -"Esse recurso recorrente foi criado a partir de: %s (%s)\n" -" " + +#~ msgid "Create one FSM order per sale order" +#~ msgstr "Crie um pedido FSM por pedido de venda" + +#~ msgid "Create one FSM order per sale order line" +#~ msgstr "Crie um Pedido FSM por linha de pedido de venda" + +#~ msgid "Don't create FSM order" +#~ msgstr "Não crie ordem FSM" + +#, python-format +#~ msgid "" +#~ "Field Service recurring Created (%s): %s\n" +#~ " " +#~ msgstr "" +#~ "Serviço de campo recorrente criado (%s): %s\n" +#~ " " + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venda" + +#, python-format +#~ msgid "" +#~ "This recurring has been created from: %s (%s)\n" +#~ " " +#~ msgstr "" +#~ "Esse recurso recorrente foi criado a partir de: %s (%s)\n" +#~ " " From e3ee15e463b075422163d8525d80cce03f752855 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Sat, 12 Nov 2022 04:35:13 +0000 Subject: [PATCH 32/59] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (18 of 18 strings) Translation: field-service-15.0/field-service-15.0-fieldservice_sale_recurring Translate-URL: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-0-fieldservice_sale_recurring/es_AR/ --- fieldservice_sale_recurring/i18n/es_AR.po | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/es_AR.po b/fieldservice_sale_recurring/i18n/es_AR.po index e802185961..014668919a 100644 --- a/fieldservice_sale_recurring/i18n/es_AR.po +++ b/fieldservice_sale_recurring/i18n/es_AR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-03-24 22:17+0000\n" +"PO-Revision-Date: 2022-11-12 04:46+0000\n" "Last-Translator: Ignacio Buioli \n" "Language-Team: none\n" "Language: es_AR\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Weblate 4.14.1\n" #. module: fieldservice_sale_recurring #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale @@ -83,6 +83,9 @@ msgid "" " # data-oe-model=fsm.recurring data-oe-id={}>{}\n" " " msgstr "" +"Servicio de Campo recurrente Creado ({}): {}\n" +" " #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -135,6 +138,9 @@ msgid "" " # data-oe-model=sale.order data-oe-id={}>{} ({})\n" " " msgstr "" +"La recurrencia ha sido creada desde: {} ({})\n" +" " #~ msgid "Display Name" #~ msgstr "Mostrar Nombre" From 2a16b4194db0c85b79d1c4a32b298d69d9512f56 Mon Sep 17 00:00:00 2001 From: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT Date: Sat, 3 Dec 2022 13:35:34 +0000 Subject: [PATCH 33/59] Translated using Weblate (German) Currently translated at 100.0% (18 of 18 strings) Translation: field-service-15.0/field-service-15.0-fieldservice_sale_recurring Translate-URL: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-0-fieldservice_sale_recurring/de/ --- fieldservice_sale_recurring/i18n/de.po | 29 +++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/de.po b/fieldservice_sale_recurring/i18n/de.po index 1d42ba0749..eba755cd52 100644 --- a/fieldservice_sale_recurring/i18n/de.po +++ b/fieldservice_sale_recurring/i18n/de.po @@ -6,15 +6,16 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2019-11-26 14:27+0000\n" -"Last-Translator: Maria Sparenberg \n" +"PO-Revision-Date: 2022-12-03 15:45+0000\n" +"Last-Translator: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT \n" "Language-Team: none\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.8\n" +"X-Generator: Weblate 4.14.1\n" #. module: fieldservice_sale_recurring #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale @@ -38,6 +39,13 @@ msgid "" "line\n" " will be created." msgstr "" +"Legt fest, was bei Auftragsbestätigung passiert:\n" +" - Nichts: nichts Zusätzliches, Standardverhalten.\n" +" - Pro Verkaufsauftrag: Für den Verkauf wird ein FSM-Auftrag " +"erstellt.\n" +" - Pro Verkaufsauftragszeile: Ein FSM-Auftrag für jede " +"Verkaufsauftragszeile\n" +" wird erstellt." #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count @@ -49,6 +57,8 @@ msgstr "Wiederkehrende Service-Aufträge" #: model:ir.model.fields,help:fieldservice_sale_recurring.field_sale_order_line__fsm_recurring_id msgid "Field Service Recurring Order generated by the sale order line" msgstr "" +"Wiederkehrender Field Service-Auftrag, der von der Verkaufsauftragsposition " +"generiert wird" #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__fsm_recurring_template_id @@ -60,12 +70,13 @@ msgstr "Vorlage für wiederkehrenden Service-Auftrag" #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_ids msgid "Field Service Recurring orders associated to this sale" msgstr "" +"Wiederkehrende Field Service Aufträge, die diesem Verkauf zugeordnet sind" #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_product__field_service_tracking #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_product_template__field_service_tracking msgid "Field Service Tracking" -msgstr "" +msgstr "Field Service Verfolgung" #. module: fieldservice_sale_recurring #: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 @@ -75,6 +86,9 @@ msgid "" " # data-oe-model=fsm.recurring data-oe-id={}>{}\n" " " msgstr "" +"Wiederkehrender Field Service Erstellt ({}): {}\n" +" " #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -99,7 +113,7 @@ msgstr "Auftragszeile" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Verkaufsauftrag" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line @@ -117,6 +131,8 @@ msgstr "Verkaufsaufträge" #: model:ir.model.fields,help:fieldservice_sale_recurring.field_product_template__fsm_recurring_template_id msgid "Select a field service recurring order template to be created" msgstr "" +"Wählen Sie eine zu erstellende wiederkehrende Auftragsvorlage für den Field " +"Service aus" #. module: fieldservice_sale_recurring #: code:addons/fieldservice_sale_recurring/models/sale_order_line.py:0 @@ -126,6 +142,9 @@ msgid "" " # data-oe-model=sale.order data-oe-id={}>{} ({})\n" " " msgstr "" +"Diese Wiederholung wurde erstellt aus: {} ({})\n" +" " #, fuzzy #~ msgid "Create one FSM order per sale order" From ab388efa8632fd05e8322d71e224fc693e109012 Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 15 Nov 2022 17:19:11 +0000 Subject: [PATCH 34/59] Translated using Weblate (Italian) Currently translated at 100.0% (18 of 18 strings) Translation: field-service-15.0/field-service-15.0-fieldservice_sale_recurring Translate-URL: https://translation.odoo-community.org/projects/field-service-15-0/field-service-15-0-fieldservice_sale_recurring/it/ --- fieldservice_sale_recurring/i18n/it.po | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/fieldservice_sale_recurring/i18n/it.po b/fieldservice_sale_recurring/i18n/it.po index 8cd5f00426..8aa6164c04 100644 --- a/fieldservice_sale_recurring/i18n/it.po +++ b/fieldservice_sale_recurring/i18n/it.po @@ -6,15 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-09-26 17: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_recurring #: model_terms:ir.ui.view,arch_db:fieldservice_sale_recurring.fsm_recurring_form_view_inherit_sale @@ -43,7 +43,8 @@ msgstr "" " - Per ordine di vendita: viene generato un ordine FSM per la " "vendita.\n" " - Per riga ordine di vendita: viene generato un ordine FSM " -"per ogni riga ordine di vendita." +"per ogni riga \n" +" ordine di vendita." #. module: fieldservice_sale_recurring #: model:ir.model.fields,field_description:fieldservice_sale_recurring.field_sale_order__fsm_recurring_count @@ -82,6 +83,9 @@ msgid "" " # data-oe-model=fsm.recurring data-oe-id={}>{}\n" " " msgstr "" +"Creato un servizio sul campo ricorrente ({}): {}\n" +" " #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_product_template @@ -106,7 +110,7 @@ msgstr "Riga di vendita" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Ordine di vendita" #. module: fieldservice_sale_recurring #: model:ir.model,name:fieldservice_sale_recurring.model_sale_order_line @@ -133,6 +137,9 @@ msgid "" " # data-oe-model=sale.order data-oe-id={}>{} ({})\n" " " msgstr "" +"Questo ordine ricorrente è stato creato da: {} ({})\n" +" " #~ msgid "Create one FSM order per sale order" #~ msgstr "Crea un ordine FSM per ordine di vendita" From 68350e83d279a8750c18c51661d7e07f18061a83 Mon Sep 17 00:00:00 2001 From: Brian McMaster Date: Tue, 21 Feb 2023 15:58:27 -0500 Subject: [PATCH 35/59] [IMP] fieldservice_sale_recurring Adapt for logic changes in fieldservice_sale --- .../models/sale_order.py | 9 +++++ .../models/sale_order_line.py | 37 ------------------- 2 files changed, 9 insertions(+), 37 deletions(-) diff --git a/fieldservice_sale_recurring/models/sale_order.py b/fieldservice_sale_recurring/models/sale_order.py index 8eaa42daa7..aace966e72 100644 --- a/fieldservice_sale_recurring/models/sale_order.py +++ b/fieldservice_sale_recurring/models/sale_order.py @@ -41,3 +41,12 @@ def action_view_fsm_recurring(self): else: action = {"type": "ir.actions.act_window_close"} return action + + def _action_confirm(self): + """On SO confirmation, some lines generate field service recurrings.""" + result = super(SaleOrder, self)._action_confirm() + self.order_line.filtered( + lambda l: l.product_id.field_service_tracking == "recurring" + and not l.fsm_recurring_id + )._field_create_fsm_recurring() + return result diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index f15e5e00d3..fb6f930f47 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -65,40 +65,3 @@ def _field_create_fsm_recurring(self): fsm_recurring.message_post(body=fsm_recurring_msg) result[so_line.id] = fsm_recurring return result - - def _field_find_fsm_recurring(self): - """Find the fsm_recurring generated by the so lines. If no - fsm_recurring linked, it will be created automatically. - :return a mapping with the so line id and its linked - fsm_recurring - :rtype dict - """ - # one search for all so lines - fsm_recurrings = self.env["fsm.recurring"].search( - [("sale_line_id", "in", self.ids)] - ) - fsm_recurring_sol_mapping = { - fsm_recurring.sale_line_id.id: fsm_recurring - for fsm_recurring in fsm_recurrings - } - result = {} - for so_line in self: - # If the SO was confirmed, cancelled, set to draft then confirmed, - # avoid creating a new fsm_recurring. - fsm_recurring = fsm_recurring_sol_mapping.get(so_line.id) - # If not found, create one fsm_recurring for the so line - if not fsm_recurring: - fsm_recurring = so_line._field_create_fsm_recurring()[so_line.id] - result[so_line.id] = fsm_recurring - return result - - def _field_service_generation(self): - """For service lines, create the field service order. If it already - exists, it simply links the existing one to the line. - """ - result = super()._field_service_generation() - for so_line in self.filtered( - lambda sol: sol.product_id.field_service_tracking == "recurring" - ): - so_line._field_find_fsm_recurring() - return result From 8f63b7f0711b1b49fda708171e336812c79fdae8 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 24 Feb 2023 13:19:40 +0000 Subject: [PATCH 36/59] fieldservice_sale_recurring 15.0.2.0.0 --- fieldservice_sale_recurring/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fieldservice_sale_recurring/__manifest__.py b/fieldservice_sale_recurring/__manifest__.py index fed3e05028..87e13285f8 100644 --- a/fieldservice_sale_recurring/__manifest__.py +++ b/fieldservice_sale_recurring/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Field Service - Sales - Recurring", - "version": "15.0.1.0.0", + "version": "15.0.2.0.0", "summary": "Sell recurring field services.", "category": "Field Service", "author": "Open Source Integrators, Odoo Community Association (OCA)", From 6d3c50d4cab3815a536ef89b961e87b8c7245b78 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 12:53:52 +0000 Subject: [PATCH 37/59] [UPD] README.rst --- fieldservice_sale_recurring/README.rst | 15 +++--- .../static/description/index.html | 52 ++++++++++--------- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/fieldservice_sale_recurring/README.rst b/fieldservice_sale_recurring/README.rst index 95dd0173cc..e520bf90cb 100644 --- a/fieldservice_sale_recurring/README.rst +++ b/fieldservice_sale_recurring/README.rst @@ -2,10 +2,13 @@ Field Service - Sales - Recurring ================================= -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b9cbb6a0bd7f2fea3b16a49f82b9463fd81a7760d096b0d3102745ac079f731e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 - Sales - Recurring .. |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_recurring :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 allows you to sell recurring field services. @@ -73,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 +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_recurring/static/description/index.html b/fieldservice_sale_recurring/static/description/index.html index 6b79d871d6..59f95c3135 100644 --- a/fieldservice_sale_recurring/static/description/index.html +++ b/fieldservice_sale_recurring/static/description/index.html @@ -1,20 +1,20 @@ - + - + Field Service - Sales - Recurring