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

+

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