From 87a1cb8860ee5093eed54b5534202469eb01644e Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Thu, 17 Oct 2024 15:28:07 -0400 Subject: [PATCH] Major changes for applications and equipment. Add the notion of application specification keys to allow administrators to specify the names of specification items that can be used on an application. This aims to homogenize specifications and to later provide a sort of checklist when creating a new application for a customer. Added groups for partner applications (user and admin). Administrators have the right to create specification keys while users can only read them (and use them to create specifications on an application). Various view improvements across the affected modules. --- customer_applications/__manifest__.py | 1 + customer_applications/data/menus_actions.xml | 5 +- customer_applications/models/__init__.py | 1 + customer_applications/models/application.py | 1 + .../models/application_specification.py | 17 +- .../models/application_specification_key.py | 11 ++ .../models/application_type.py | 6 + customer_applications/security/groups.xml | 12 ++ .../security/ir.model.access.csv | 10 +- .../views/application_type_views.xml | 46 ++++-- .../views/application_views.xml | 40 +++-- fsm_equipment/__manifest__.py | 2 +- fsm_equipment/views/equipment_views.xml | 156 +++++++++++------- partner_equipment_applications/__init__.py | 1 + .../__manifest__.py | 36 ++++ .../models/__init__.py | 2 + .../models/application.py | 29 ++++ .../models/equipment.py | 17 ++ .../views/application_views.xml | 39 +++++ .../views/equipment_views.xml | 42 +++++ 20 files changed, 375 insertions(+), 99 deletions(-) create mode 100644 customer_applications/models/application_specification_key.py create mode 100644 customer_applications/security/groups.xml create mode 100644 partner_equipment_applications/__init__.py create mode 100644 partner_equipment_applications/__manifest__.py create mode 100644 partner_equipment_applications/models/__init__.py create mode 100644 partner_equipment_applications/models/application.py create mode 100644 partner_equipment_applications/models/equipment.py create mode 100644 partner_equipment_applications/views/application_views.xml create mode 100644 partner_equipment_applications/views/equipment_views.xml diff --git a/customer_applications/__manifest__.py b/customer_applications/__manifest__.py index cb31223..f2971fb 100644 --- a/customer_applications/__manifest__.py +++ b/customer_applications/__manifest__.py @@ -27,6 +27,7 @@ "license": "LGPL-3", "depends": ["contacts", "incrementing_sequence_mixin"], "data": [ + "security/groups.xml", "security/ir.model.access.csv", "data/menus_actions.xml", "views/application_type_views.xml", diff --git a/customer_applications/data/menus_actions.xml b/customer_applications/data/menus_actions.xml index 43d4ded..c63bbd6 100644 --- a/customer_applications/data/menus_actions.xml +++ b/customer_applications/data/menus_actions.xml @@ -34,7 +34,10 @@ + + + \ No newline at end of file diff --git a/customer_applications/models/__init__.py b/customer_applications/models/__init__.py index a2fd26d..dd86493 100644 --- a/customer_applications/models/__init__.py +++ b/customer_applications/models/__init__.py @@ -2,3 +2,4 @@ from . import application from . import application_specification from . import application_type from . import res_partner +from . import application_specification_key diff --git a/customer_applications/models/application.py b/customer_applications/models/application.py index 75fb2d8..389fe6b 100644 --- a/customer_applications/models/application.py +++ b/customer_applications/models/application.py @@ -18,6 +18,7 @@ class Application(models.Model): comodel_name="partner.application.type", required=True, tracking=4, + ondelete="restrict", ) specification_ids = fields.One2many( comodel_name="partner.application.specification", diff --git a/customer_applications/models/application_specification.py b/customer_applications/models/application_specification.py index 443177b..45c2a3a 100644 --- a/customer_applications/models/application_specification.py +++ b/customer_applications/models/application_specification.py @@ -1,4 +1,4 @@ -from odoo import models, fields +from odoo import models, fields, api class PartnerApplicationSpecification(models.Model): @@ -7,14 +7,25 @@ class PartnerApplicationSpecification(models.Model): _inherit = ["mail.thread", "mail.activity.mixin", "incrementing.sequence.mixin"] _sequence_group = "application_id" - name = fields.Char( - tracking=2, + key_id = fields.Many2one( + comodel_name="partner.application.specification.key", + tracking=1, + ondelete="restrict", + domain="[('id', 'in', allowed_specification_keys)]", + string="Name", required=True, ) + name = fields.Char( + related="key_id.name", + ) value = fields.Text( tracking=2, ) application_id = fields.Many2one( comodel_name="partner.application", tracking=1, + ondelete="cascade", + ) + allowed_specification_keys = fields.Many2many( + related="application_id.application_type_id.allowed_specification_keys", ) diff --git a/customer_applications/models/application_specification_key.py b/customer_applications/models/application_specification_key.py new file mode 100644 index 0000000..41ef8c4 --- /dev/null +++ b/customer_applications/models/application_specification_key.py @@ -0,0 +1,11 @@ +from odoo import models, fields, api + + +class ApplicationSpecificationKey(models.Model): + _name = "partner.application.specification.key" + _description = "Application Specification Key" + + name = fields.Char(required=True, index="trigram") + _sql_constraints = [ + ("name_uniq", "unique (name)", "Specification key name must be unique."), + ] diff --git a/customer_applications/models/application_type.py b/customer_applications/models/application_type.py index ec42ab9..a34f94e 100644 --- a/customer_applications/models/application_type.py +++ b/customer_applications/models/application_type.py @@ -31,6 +31,12 @@ class PartnerApplicationType(models.Model): string="Partners", readonly=True, ) + allowed_specification_keys = fields.Many2many( + comodel_name="partner.application.specification.key", + relation="application_specification_key_application_type_rel", + column1="application_type_id", + column2="application_specification_key_id", + ) @api.depends("application_ids", "application_ids.partner_id") def _compute_partner_ids(self): diff --git a/customer_applications/security/groups.xml b/customer_applications/security/groups.xml new file mode 100644 index 0000000..f20d6f0 --- /dev/null +++ b/customer_applications/security/groups.xml @@ -0,0 +1,12 @@ + + + + + Applications Admin + + + + Applications User + + + \ No newline at end of file diff --git a/customer_applications/security/ir.model.access.csv b/customer_applications/security/ir.model.access.csv index 547db60..b7ce421 100644 --- a/customer_applications/security/ir.model.access.csv +++ b/customer_applications/security/ir.model.access.csv @@ -1,5 +1,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_partner_application_user,access.partner.application.user,model_partner_application,base.group_user,1,1,1,1 -access_partner_application_type_user,access.partner.application.type.user,model_partner_application_type,base.group_user,1,0,0,0 -access_partner_application_type_manager,access.partner.application.type.manager,model_partner_application_type,base.group_partner_manager,1,1,1,1 -access_partner_application_specification_user,access.partner.application.specification.user,model_partner_application_specification,base.group_user,1,1,1,1 +access_partner_application_user,access.partner.application.user,model_partner_application,group_applications_user,1,1,1,1 +access_partner_application_type_user,access.partner.application.type.user,model_partner_application_type,group_applications_user,1,0,0,0 +access_partner_application_type_manager,access.partner.application.type.manager,model_partner_application_type,group_applications_admin,1,1,1,1 +access_partner_application_specification_user,access.partner.application.specification.user,model_partner_application_specification,group_applications_user,1,1,1,1 +access_partner_application_specification_key_user,access.partner.application.specification.key.user,model_partner_application_specification_key,group_applications_user,1,0,0,0 +access_partner_application_specification_key_admin,access.partner.application.specification.key.admin,model_partner_application_specification_key,group_applications_admin,1,1,1,1 \ No newline at end of file diff --git a/customer_applications/views/application_type_views.xml b/customer_applications/views/application_type_views.xml index 76994e0..1254e00 100644 --- a/customer_applications/views/application_type_views.xml +++ b/customer_applications/views/application_type_views.xml @@ -4,7 +4,7 @@ partner.application.type.list partner.application.type - + @@ -17,21 +17,45 @@ partner.application.type
- - - -
+
+ +
-
- - + +
+
+
+ Application Type +
+

+ +

+
+
+ + + + + + + + + + +
+ + + +
diff --git a/customer_applications/views/application_views.xml b/customer_applications/views/application_views.xml index 5890447..7afe942 100644 --- a/customer_applications/views/application_views.xml +++ b/customer_applications/views/application_views.xml @@ -6,34 +6,44 @@
-
-
-
- Application -
-

- -

-
-
-
+
+
+
+
+ Application +
+

+ +

+
+
- - - + + + + + + + - + + +
+ + + +
diff --git a/fsm_equipment/__manifest__.py b/fsm_equipment/__manifest__.py index 69fbb42..f4487ce 100644 --- a/fsm_equipment/__manifest__.py +++ b/fsm_equipment/__manifest__.py @@ -25,7 +25,7 @@ "author": "Bemade Inc.", "website": "http://www.bemade.org", "license": "LGPL-3", - "depends": ["industry_fsm", "account"], + "depends": ["industry_fsm", "account", "contacts"], "data": [ "security/ir.model.access.csv", "views/equipment_views.xml", diff --git a/fsm_equipment/views/equipment_views.xml b/fsm_equipment/views/equipment_views.xml index e181a63..54bd293 100644 --- a/fsm_equipment/views/equipment_views.xml +++ b/fsm_equipment/views/equipment_views.xml @@ -9,68 +9,67 @@ - - - - + + + + + options='{"always_reload": True}' + /> + name="tag_ids" + widget="many2many_tags" + options="{'no_open': False}" + /> - - - - - + + + + + - +
- - - + + +
- + fsm.equipment.tree fsm.equipment - - - + + + - + name="tag_ids" + widget="many2many_tags" + options="{'no_open': False}" + /> + @@ -80,21 +79,21 @@ fsm.equipment - - - + + + - + name="tag_ids" + widget="many2many_tags" + options="{'no_open': False}" + /> + + +
+ + + + \ No newline at end of file diff --git a/partner_equipment_applications/views/equipment_views.xml b/partner_equipment_applications/views/equipment_views.xml new file mode 100644 index 0000000..2ecd9ce --- /dev/null +++ b/partner_equipment_applications/views/equipment_views.xml @@ -0,0 +1,42 @@ + + + + fsm.equipment.view.search + fsm.equipment + + + + + + + + + + + + + fsm.equipment.view.tree + fsm.equipment + + + + + + + + + + + fsm.equipment.view.form + fsm.equipment + + + + + + + + \ No newline at end of file