From 2e19f4a2ba41c80fee01d88beabaeafc341a6905 Mon Sep 17 00:00:00 2001 From: Patrick Wilson <36892066+patrickrwilson@users.noreply.github.com> Date: Tue, 4 May 2021 13:49:14 -0600 Subject: [PATCH] [14.0][MIG] agreement_serviceprofile (Version 12.0 to 14.0) [MIG] Black [MIG] Black --- agreement_serviceprofile/README.rst | 10 +- agreement_serviceprofile/__manifest__.py | 40 +++--- .../i18n/agreement_serviceprofile.pot | 48 ++++--- agreement_serviceprofile/models/agreement.py | 9 +- .../models/agreement_serviceprofile.py | 58 +++++---- .../models/agreement_stage.py | 5 +- agreement_serviceprofile/models/product.py | 18 +-- .../static/description/index.html | 6 +- agreement_serviceprofile/tests/__init__.py | 4 + .../tests/test_agreement_serviceprofile.py | 50 ++++++++ .../tests/test_product.py | 26 ++++ agreement_serviceprofile/views/agreement.xml | 32 +++-- .../views/agreement_serviceprofile.xml | 119 +++++++++++------- agreement_serviceprofile/views/product.xml | 12 +- 14 files changed, 290 insertions(+), 147 deletions(-) create mode 100644 agreement_serviceprofile/tests/__init__.py create mode 100644 agreement_serviceprofile/tests/test_agreement_serviceprofile.py create mode 100644 agreement_serviceprofile/tests/test_product.py diff --git a/agreement_serviceprofile/README.rst b/agreement_serviceprofile/README.rst index f623ce5ee..0ca207faa 100644 --- a/agreement_serviceprofile/README.rst +++ b/agreement_serviceprofile/README.rst @@ -14,13 +14,13 @@ Agreement Service Profile :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github - :target: https://github.com/OCA/contract/tree/12.0/agreement_serviceprofile + :target: https://github.com/OCA/contract/tree/14.0/agreement_serviceprofile :alt: OCA/contract .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/contract-12-0/contract-12-0-agreement_serviceprofile + :target: https://translation.odoo-community.org/projects/contract-14-0/contract-14-0-agreement_serviceprofile :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/110/12.0 + :target: https://runbot.odoo-community.org/runbot/110/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -42,7 +42,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. @@ -98,6 +98,6 @@ Current `maintainer `__: |maintainer-max3903| -This module is part of the `OCA/contract `_ project on GitHub. +This module is part of the `OCA/contract `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/agreement_serviceprofile/__manifest__.py b/agreement_serviceprofile/__manifest__.py index 6dfee4955..983f10a36 100644 --- a/agreement_serviceprofile/__manifest__.py +++ b/agreement_serviceprofile/__manifest__.py @@ -2,26 +2,26 @@ # Copyright (C) 2019 Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Agreement Service Profile', - 'summary': "Adds an Agreement Service Profile object", - 'version': '12.0.1.2.0', - 'category': 'Contract', - 'author': 'Pavlov Media, ' - 'Open Source Integrators, ' - 'Odoo Community Association (OCA)', - 'website': 'https://github.com/oca/contract', - 'license': 'AGPL-3', - 'depends': ['agreement_legal'], - 'data': [ - 'data/serviceprofile_stage.xml', - 'security/ir.model.access.csv', - 'views/product.xml', - 'views/agreement_serviceprofile.xml', - 'views/agreement.xml', + "name": "Agreement Service Profile", + "summary": "Adds an Agreement Service Profile object", + "version": "14.0.1.0.0", + "category": "Contract", + "author": "Pavlov Media, " + "Open Source Integrators, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/contract", + "license": "AGPL-3", + "depends": ["agreement_legal"], + "data": [ + "data/serviceprofile_stage.xml", + "security/ir.model.access.csv", + "views/product.xml", + "views/agreement_serviceprofile.xml", + "views/agreement.xml", ], - 'development_status': 'Beta', - 'maintainers': [ - 'max3903', + "development_status": "Beta", + "maintainers": [ + "max3903", ], - 'installable': True, + "installable": True, } diff --git a/agreement_serviceprofile/i18n/agreement_serviceprofile.pot b/agreement_serviceprofile/i18n/agreement_serviceprofile.pot index 3b7bfccc4..5f9895bfa 100644 --- a/agreement_serviceprofile/i18n/agreement_serviceprofile.pot +++ b/agreement_serviceprofile/i18n/agreement_serviceprofile.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * agreement_serviceprofile +# * agreement_serviceprofile # 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" @@ -29,7 +29,6 @@ msgid "Add notes here..." msgstr "" #. module: agreement_serviceprofile -#: selection:agreement.stage,stage_type:0 #: model:ir.model,name:agreement_serviceprofile.model_agreement #: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_serviceprofile__agreement_id #: model_terms:ir.ui.view,arch_db:agreement_serviceprofile.agreement_serviceprofile_search @@ -46,6 +45,11 @@ msgstr "" msgid "Agreement Stages" msgstr "" +#. module: agreement_serviceprofile +#: model_terms:ir.ui.view,arch_db:agreement_serviceprofile.agreement_serviceprofile_form +msgid "Archived" +msgstr "" + #. module: agreement_serviceprofile #: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_serviceprofile__message_attachment_count msgid "Attachment Count" @@ -68,7 +72,11 @@ msgid "Created on" msgstr "" #. module: agreement_serviceprofile +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement__display_name #: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_serviceprofile__display_name +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_stage__display_name +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_product_product__display_name +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_product_template__display_name msgid "Display Name" msgstr "" @@ -88,35 +96,39 @@ msgid "Followers (Partners)" msgstr "" #. module: agreement_serviceprofile +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement__id #: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_serviceprofile__id +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_stage__id +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_product_product__id +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_product_template__id msgid "ID" msgstr "" #. module: agreement_serviceprofile #: model:ir.model.fields,help:agreement_serviceprofile.field_product_product__is_serviceprofile #: model:ir.model.fields,help:agreement_serviceprofile.field_product_template__is_serviceprofile -msgid "If True, this product will create a service profile on the\n" +msgid "" +"If True, this product will create a service profile on the\n" " agreement when the sales order is confirmed." msgstr "" -#. module: agreement_serviceprofile -#: model:ir.model.fields,help:agreement_serviceprofile.field_agreement_serviceprofile__message_unread -msgid "If checked new messages require your attention." -msgstr "" - #. module: agreement_serviceprofile #: model:ir.model.fields,help:agreement_serviceprofile.field_agreement_serviceprofile__message_needaction +#: model:ir.model.fields,help:agreement_serviceprofile.field_agreement_serviceprofile__message_unread msgid "If checked, new messages require your attention." msgstr "" #. module: agreement_serviceprofile #: model:ir.model.fields,help:agreement_serviceprofile.field_agreement_serviceprofile__message_has_error +#: model:ir.model.fields,help:agreement_serviceprofile.field_agreement_serviceprofile__message_has_sms_error msgid "If checked, some messages have a delivery error." msgstr "" #. module: agreement_serviceprofile #: model:ir.model.fields,help:agreement_serviceprofile.field_agreement_serviceprofile__active -msgid "If unchecked, it will allow you to hide this service profile without removing it." +msgid "" +"If unchecked, it will allow you to hide this service profile without " +"removing it." msgstr "" #. module: agreement_serviceprofile @@ -125,7 +137,11 @@ msgid "Is Follower" msgstr "" #. module: agreement_serviceprofile +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement____last_update #: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_serviceprofile____last_update +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_stage____last_update +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_product_product____last_update +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_product_template____last_update msgid "Last Modified on" msgstr "" @@ -173,7 +189,7 @@ msgstr "" #. module: agreement_serviceprofile #: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_serviceprofile__message_has_error_counter -msgid "Number of error" +msgid "Number of errors" msgstr "" #. module: agreement_serviceprofile @@ -212,6 +228,11 @@ msgstr "" msgid "Product Variant" msgstr "" +#. module: agreement_serviceprofile +#: model:ir.model.fields,field_description:agreement_serviceprofile.field_agreement_serviceprofile__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + #. module: agreement_serviceprofile #: model_terms:ir.ui.view,arch_db:agreement_serviceprofile.product_product_form_view #: model_terms:ir.ui.view,arch_db:agreement_serviceprofile.product_template_form_view @@ -229,7 +250,7 @@ msgid "Service Product Variant" msgstr "" #. module: agreement_serviceprofile -#: selection:agreement.stage,stage_type:0 +#: model:ir.model.fields.selection,name:agreement_serviceprofile.selection__agreement_stage__stage_type__serviceprofile #: model_terms:ir.ui.view,arch_db:agreement_serviceprofile.agreement_serviceprofile_form msgid "Service Profile" msgstr "" @@ -284,4 +305,3 @@ msgstr "" #: model:ir.model.fields,help:agreement_serviceprofile.field_agreement_serviceprofile__website_message_ids msgid "Website communication history" msgstr "" - diff --git a/agreement_serviceprofile/models/agreement.py b/agreement_serviceprofile/models/agreement.py index dbc42a49b..9f17ff2fe 100644 --- a/agreement_serviceprofile/models/agreement.py +++ b/agreement_serviceprofile/models/agreement.py @@ -5,9 +5,8 @@ from odoo import fields, models class Agreement(models.Model): - _inherit = 'agreement' + _inherit = "agreement" - serviceprofile_ids = fields.One2many('agreement.serviceprofile', - 'agreement_id', - string="Service Profiles", - copy=True) + serviceprofile_ids = fields.One2many( + "agreement.serviceprofile", "agreement_id", string="Service Profiles", copy=True + ) diff --git a/agreement_serviceprofile/models/agreement_serviceprofile.py b/agreement_serviceprofile/models/agreement_serviceprofile.py index c2b2289dd..01dc5c2b4 100644 --- a/agreement_serviceprofile/models/agreement_serviceprofile.py +++ b/agreement_serviceprofile/models/agreement_serviceprofile.py @@ -2,43 +2,51 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models, api +from odoo import api, fields, models class AgreementServiceProfile(models.Model): - _name = 'agreement.serviceprofile' - _inherit = 'mail.thread' - _description = 'Agreement Service Profiles' + _name = "agreement.serviceprofile" + _inherit = "mail.thread" + _description = "Agreement Service Profiles" def _default_stage_id(self): - return self.env.ref('agreement_serviceprofile.servpro_stage_draft') + return self.env.ref("agreement_serviceprofile.servpro_stage_draft") name = fields.Char(string="Name", required=True) - stage_id = fields.Many2one('agreement.stage', string="Stage", - default=_default_stage_id, copy=False, - group_expand='_read_group_stage_ids',) - agreement_id = fields.Many2one('agreement', string="Agreement", - ondelete="cascade") - active = fields.Boolean(string="Active", - default=True, - help="If unchecked, it will allow you " + - "to hide this service profile" - " without removing it.") + stage_id = fields.Many2one( + "agreement.stage", + string="Stage", + default=_default_stage_id, + copy=False, + group_expand="_read_group_stage_ids", + ) + agreement_id = fields.Many2one("agreement", string="Agreement", ondelete="cascade") + active = fields.Boolean( + string="Active", + default=True, + help="If unchecked, it will allow you to hide this service profile " + "without removing it.", + ) notes = fields.Text(string="Notes") - product_id = fields.Many2one('product.template', 'Service Product', - domain="[('is_serviceprofile', '=', True), " - "('type', '=', 'service')]") - product_variant_id = fields.Many2one('product.product', 'Service Product Variant', - domain="[('is_serviceprofile', '=', True), " - "('type', '=', 'service')]") - use_product_variant = fields.Boolean('Use Product Variant', default=False) - partner_id = fields.Many2one(related='agreement_id.partner_id', - string='Partner') + product_id = fields.Many2one( + "product.template", + "Service Product", + domain="[('is_serviceprofile', '=', True), ('type', '=', 'service')]", + ) + product_variant_id = fields.Many2one( + "product.product", + "Service Product Variant", + domain="[('is_serviceprofile', '=', True), ('type', '=', 'service')]", + ) + use_product_variant = fields.Boolean("Use Product Variant", default=False) + partner_id = fields.Many2one(related="agreement_id.partner_id", string="Partner") # Used for Kanban grouped_by view @api.model def _read_group_stage_ids(self, stages, domain, order): stage_ids = self.env["agreement.stage"].search( - [('stage_type', '=', 'serviceprofile')]) + [("stage_type", "=", "serviceprofile")] + ) return stage_ids diff --git a/agreement_serviceprofile/models/agreement_stage.py b/agreement_serviceprofile/models/agreement_stage.py index cf578022c..0d3a89659 100644 --- a/agreement_serviceprofile/models/agreement_stage.py +++ b/agreement_serviceprofile/models/agreement_stage.py @@ -5,8 +5,9 @@ from odoo import fields, models class AgreementStage(models.Model): - _inherit = 'agreement.stage' + _inherit = "agreement.stage" stage_type = fields.Selection( - selection_add=[('serviceprofile', 'Service Profile')] + selection_add=[("serviceprofile", "Service Profile")], + ondelete={"serviceprofile": "cascade"}, ) diff --git a/agreement_serviceprofile/models/product.py b/agreement_serviceprofile/models/product.py index 55a216989..6f477e4f1 100644 --- a/agreement_serviceprofile/models/product.py +++ b/agreement_serviceprofile/models/product.py @@ -5,28 +5,30 @@ from odoo import api, fields, models class ProductTemplate(models.Model): - _inherit = 'product.template' + _inherit = "product.template" is_serviceprofile = fields.Boolean( string="Create Service Profiles", help="""If True, this product will create a service profile on the - agreement when the sales order is confirmed.""") + agreement when the sales order is confirmed.""", + ) - @api.onchange('is_serviceprofile') + @api.onchange("is_serviceprofile") def onchange_type(self): if self.is_serviceprofile: - self.type = 'service' + self.type = "service" class ProductProduct(models.Model): - _inherit = 'product.product' + _inherit = "product.product" is_serviceprofile = fields.Boolean( string="Create Service Profiles", help="""If True, this product will create a service profile on the - agreement when the sales order is confirmed.""") + agreement when the sales order is confirmed.""", + ) - @api.onchange('is_serviceprofile') + @api.onchange("is_serviceprofile") def onchange_type(self): if self.is_serviceprofile: - self.type = 'service' + self.type = "service" diff --git a/agreement_serviceprofile/static/description/index.html b/agreement_serviceprofile/static/description/index.html index 1f1600667..66c6a3b4f 100644 --- a/agreement_serviceprofile/static/description/index.html +++ b/agreement_serviceprofile/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module adds an Agreement Service Profile object with the following properties:

  • name,
  • @@ -391,7 +391,7 @@ ul.auto-toc {

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

    +feedback.

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

    @@ -436,7 +436,7 @@ mission is to support the collaborative development of Odoo features and promote its widespread use.

    Current maintainer:

    max3903

    -

    This module is part of the OCA/contract project on GitHub.

    +

    This module is part of the OCA/contract project on GitHub.

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

    diff --git a/agreement_serviceprofile/tests/__init__.py b/agreement_serviceprofile/tests/__init__.py new file mode 100644 index 000000000..a8d2da582 --- /dev/null +++ b/agreement_serviceprofile/tests/__init__.py @@ -0,0 +1,4 @@ +# License LGPLv3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). + +from . import test_product +from . import test_agreement_serviceprofile diff --git a/agreement_serviceprofile/tests/test_agreement_serviceprofile.py b/agreement_serviceprofile/tests/test_agreement_serviceprofile.py new file mode 100644 index 000000000..7727d4e61 --- /dev/null +++ b/agreement_serviceprofile/tests/test_agreement_serviceprofile.py @@ -0,0 +1,50 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from datetime import timedelta + +from odoo import fields +from odoo.tests.common import TransactionCase + + +class TestAgreementServiceProfile(TransactionCase): + def setUp(self): + super().setUp() + self.test_customer = self.env["res.partner"].create({"name": "TestCustomer"}) + self.agreement_type = self.env["agreement.type"].create( + { + "name": "Test Agreement Type", + "domain": "sale", + } + ) + self.test_agreement = self.env["agreement"].create( + { + "name": "TestAgreement", + "description": "Test", + "special_terms": "Test", + "partner_id": self.test_customer.id, + "start_date": fields.Date.today(), + "end_date": fields.Date.today() + timedelta(days=365), + } + ) + self.test_serviceprofile = self.env["agreement.serviceprofile"].create( + { + "name": "TestServiceProfile", + "agreement_id": self.test_agreement.id, + } + ) + + # TEST 01: Check Default Stage + def test_default_stage_id(self): + sp_01 = self.test_serviceprofile + self.assertEqual(sp_01.stage_id.name, "Draft") + + # TEST 02: Check Read Stages + def test_read_group_stage_ids(self): + sp_01 = self.test_serviceprofile + self.assertEqual( + sp_01._read_group_stage_ids(self.env["agreement.stage"], [], "id"), + self.env["agreement.stage"].search( + [("stage_type", "=", "serviceprofile")], + order="id", + ), + ) diff --git a/agreement_serviceprofile/tests/test_product.py b/agreement_serviceprofile/tests/test_product.py new file mode 100644 index 000000000..6afa3d83d --- /dev/null +++ b/agreement_serviceprofile/tests/test_product.py @@ -0,0 +1,26 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from odoo.tests.common import TransactionCase + + +class TestProduct(TransactionCase): + def setUp(self): + super().setUp() + self.test_product1 = self.env["product.template"].create( + {"name": "TestProduct"} + ) + self.test_product2 = self.env["product.product"].create({"name": "TestProduct"}) + + # TEST 01: Test onchange_type product.template + def test_product_template_onchange_type(self): + product_01 = self.test_product1 + product_01.is_serviceprofile = True + product_01.onchange_type() + self.assertEqual(product_01.type, "service") + + # TEST 02: Test onchange_type product.product + def test_product_product_onchange_type(self): + product_02 = self.test_product2 + product_02.is_serviceprofile = True + product_02.onchange_type() + self.assertEqual(product_02.type, "service") diff --git a/agreement_serviceprofile/views/agreement.xml b/agreement_serviceprofile/views/agreement.xml index 3cb0784e2..60856de1d 100644 --- a/agreement_serviceprofile/views/agreement.xml +++ b/agreement_serviceprofile/views/agreement.xml @@ -1,33 +1,43 @@ - agreement.form.fsm.order.view agreement - + - - - + + +
    - + - - - + + + - +
    diff --git a/agreement_serviceprofile/views/agreement_serviceprofile.xml b/agreement_serviceprofile/views/agreement_serviceprofile.xml index b680b433f..406e373e5 100644 --- a/agreement_serviceprofile/views/agreement_serviceprofile.xml +++ b/agreement_serviceprofile/views/agreement_serviceprofile.xml @@ -1,4 +1,3 @@ - @@ -7,12 +6,12 @@ agreement.serviceprofile - - - - - - + + + + + +
    @@ -24,42 +23,54 @@
    - +
    -
    - -
    +
    + +
    -
    - + - - - + + + - +
    - - + +
    @@ -76,10 +87,10 @@
    - +
    -
    +
    @@ -93,15 +104,25 @@ agreement.serviceprofile - - - + + + + @@ -120,17 +141,19 @@ + name="Service Profiles" + id="agreement_serviceprofiles" + parent="agreement_legal.agreement_masterdata" + sequence="50" + action="agreement_serviceprofile_action" + /> + name="Service Profiles" + id="dashboard_serviceprofiles" + parent="agreement_legal.agreement_dashboard" + sequence="20" + action="agreement_serviceprofile_dashboard" + /> diff --git a/agreement_serviceprofile/views/product.xml b/agreement_serviceprofile/views/product.xml index e227fdabb..574b86064 100644 --- a/agreement_serviceprofile/views/product.xml +++ b/agreement_serviceprofile/views/product.xml @@ -6,15 +6,15 @@ product.template.form.view product.template - + - + - + @@ -25,15 +25,15 @@ product.product.form.view product.product - + - + - +