diff --git a/customer_applications/__manifest__.py b/customer_applications/__manifest__.py index 54b25ef..cb31223 100644 --- a/customer_applications/__manifest__.py +++ b/customer_applications/__manifest__.py @@ -26,7 +26,13 @@ "website": "http://www.bemade.org", "license": "LGPL-3", "depends": ["contacts", "incrementing_sequence_mixin"], - "data": [], + "data": [ + "security/ir.model.access.csv", + "data/menus_actions.xml", + "views/application_type_views.xml", + "views/res_partner_views.xml", + "views/application_views.xml", + ], "assets": {}, "installable": True, "auto_install": False, diff --git a/customer_applications/data/menus_actions.xml b/customer_applications/data/menus_actions.xml new file mode 100644 index 0000000..43d4ded --- /dev/null +++ b/customer_applications/data/menus_actions.xml @@ -0,0 +1,40 @@ + + + + Application Types + partner.application.type + tree,form + +

+ No application types found. Create one? +

+
+
+ + + Partner Applications + partner.application + tree,form + [('partner_id', '=', context.get('partner_id'))] + {'default_partner_id': context.get('partner_id')} + + + + Partner Applications by Type + partner.application + tree,form + [ + ('application_type_id', '=', context.get('application_type_id')) + ] + + { + 'default_application_type_id': context.get('application_type_id') + } + + + +
\ No newline at end of file diff --git a/customer_applications/models/__init__.py b/customer_applications/models/__init__.py index dc2e897..a2fd26d 100644 --- a/customer_applications/models/__init__.py +++ b/customer_applications/models/__init__.py @@ -1,3 +1,4 @@ from . import application from . import application_specification from . import application_type +from . import res_partner diff --git a/customer_applications/models/application.py b/customer_applications/models/application.py index 807caa7..75fb2d8 100644 --- a/customer_applications/models/application.py +++ b/customer_applications/models/application.py @@ -6,22 +6,23 @@ class Application(models.Model): _description = "Partner Application" _inherit = ["mail.thread", "mail.activity.mixin"] + name = fields.Char(tracking=1) + description = fields.Text(tracking=2) partner_id = fields.Many2one( comodel_name="res.partner", - string="Location", required=True, - tracking=1, + tracking=3, copy=False, ) application_type_id = fields.Many2one( comodel_name="partner.application.type", required=True, - tracking=2, + tracking=4, ) specification_ids = fields.One2many( comodel_name="partner.application.specification", inverse_name="application_id", - tracking=3, + tracking=5, ) def copy(self, default=None): diff --git a/customer_applications/models/application_type.py b/customer_applications/models/application_type.py index 4c9300e..ec42ab9 100644 --- a/customer_applications/models/application_type.py +++ b/customer_applications/models/application_type.py @@ -1,4 +1,4 @@ -from odoo import models, fields +from odoo import models, fields, api class PartnerApplicationType(models.Model): @@ -7,8 +7,42 @@ class PartnerApplicationType(models.Model): _inherit = ["mail.thread", "mail.activity.mixin"] + color = fields.Integer() name = fields.Char( required=True, tracking=1, ) description = fields.Text(tracking=2) + application_ids = fields.One2many( + comodel_name="partner.application", + inverse_name="application_type_id", + tracking=3, + ) + + applications_count = fields.Integer( + string="Applications Count", + compute="_compute_applications_count", + ) + + partner_ids = fields.One2many( + comodel_name="res.partner", + compute="_compute_partner_ids", + search="_search_partner_ids", + string="Partners", + readonly=True, + ) + + @api.depends("application_ids", "application_ids.partner_id") + def _compute_partner_ids(self): + for application_type in self: + application_type.partner_ids = application_type.application_ids.mapped( + "partner_id" + ) + + def _search_partner_ids(self, operator, value): + return [("application_ids.partner_id", operator, value)] + + @api.depends("application_ids") + def _compute_applications_count(self): + for record in self: + record.applications_count = len(record.application_ids) diff --git a/customer_applications/models/res_partner.py b/customer_applications/models/res_partner.py new file mode 100644 index 0000000..53cdf2c --- /dev/null +++ b/customer_applications/models/res_partner.py @@ -0,0 +1,42 @@ +from odoo import models, fields, api + + +class ResPartner(models.Model): + _inherit = "res.partner" + + application_ids = fields.One2many( + "partner.application", + "partner_id", + string="Applications", + ) + applications_count = fields.Integer( + string="Applications Count", + compute="_compute_applications_count", + ) + application_type_ids = fields.One2many( + comodel_name="partner.application.type", + compute="_compute_application_type_ids", + string="Application Types", + readonly=True, + search="_search_application_type_ids", + ) + + @api.depends("application_ids.application_type_id") + def _compute_application_type_ids(self): + for partner in self: + partner.application_type_ids = partner.application_ids.mapped( + "application_type_id" + ) + + def _search_application_type_ids(self, operator, value): + return [("application_ids.application_type_id", operator, value)] + + @api.depends("application_ids") + def _compute_applications_count(self): + for partner in self: + partner.applications_count = len(partner.application_ids) + + @api.depends("application_ids") + def _compute_applications_count(self): + for rec in self: + rec.applications_count = len(rec.application_ids) diff --git a/customer_applications/security/ir.model.access.csv b/customer_applications/security/ir.model.access.csv new file mode 100644 index 0000000..547db60 --- /dev/null +++ b/customer_applications/security/ir.model.access.csv @@ -0,0 +1,5 @@ +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 diff --git a/customer_applications/views/application_type_views.xml b/customer_applications/views/application_type_views.xml new file mode 100644 index 0000000..76994e0 --- /dev/null +++ b/customer_applications/views/application_type_views.xml @@ -0,0 +1,50 @@ + + + + partner.application.type.list + partner.application.type + + + + + + + + + + + partner.application.type.form + partner.application.type + +
+ + + +
+ +
+ +
+
+
+
+ + + partner.application.type.search + partner.application.type + + + + + + + + +
\ No newline at end of file diff --git a/customer_applications/views/application_views.xml b/customer_applications/views/application_views.xml new file mode 100644 index 0000000..5890447 --- /dev/null +++ b/customer_applications/views/application_views.xml @@ -0,0 +1,75 @@ + + + + partner.application.form + partner.application + +
+
+
+
+
+ Application +
+

+ +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + partner.application.tree + partner.application + + + + + + + + + + + partner.application.search + partner.application + + + + + + + + + + + Partner Applications + partner.application + tree,form + + + + + \ No newline at end of file diff --git a/customer_applications/views/res_partner_views.xml b/customer_applications/views/res_partner_views.xml new file mode 100644 index 0000000..02751e5 --- /dev/null +++ b/customer_applications/views/res_partner_views.xml @@ -0,0 +1,45 @@ + + + + view.partner.form + res.partner + + +
+ +
+
+
+ + + view.partner.tree + res.partner + + + + + + + + + + view.partner.search + res.partner + + + + + + + + +
\ No newline at end of file