diff --git a/bemade_fsm/views/task_views.xml b/bemade_fsm/views/task_views.xml index 6bce7cd..bd0d0e7 100644 --- a/bemade_fsm/views/task_views.xml +++ b/bemade_fsm/views/task_views.xml @@ -80,7 +80,7 @@ project_list - + @@ -92,6 +92,12 @@ hide + + hide + + + hide + diff --git a/customer_applications/security/groups.xml b/customer_applications/security/groups.xml index f20d6f0..23e3fbc 100644 --- a/customer_applications/security/groups.xml +++ b/customer_applications/security/groups.xml @@ -1,12 +1,14 @@ - - Applications Admin - - Applications User + + Applications Admin + + + + \ No newline at end of file diff --git a/fsm_equipment/__manifest__.py b/fsm_equipment/__manifest__.py index 25d8e21..2ea15b1 100644 --- a/fsm_equipment/__manifest__.py +++ b/fsm_equipment/__manifest__.py @@ -30,6 +30,7 @@ "security/ir.model.access.csv", "views/equipment_views.xml", "views/res_partner_views.xml", + "views/project_task_views.xml", ], "assets": {}, "installable": True, diff --git a/fsm_equipment/migrations/17.0.0.2.0/post-migrate.py b/fsm_equipment/migrations/17.0.0.2.0/post-migrate.py index 86df8fb..b62c2d1 100644 --- a/fsm_equipment/migrations/17.0.0.2.0/post-migrate.py +++ b/fsm_equipment/migrations/17.0.0.2.0/post-migrate.py @@ -3,7 +3,7 @@ from odoo.tools.sql import SQL def migrate(cr, version): - sql = "select * from equipment_component" + sql = "select * from fsm_equipment_component" cr.execute(SQL(sql)) components = cr.dictfetchall() sql = "select * from fsm_equipment_component_purpose" diff --git a/fsm_equipment/models/equipment.py b/fsm_equipment/models/equipment.py index dbc75d6..18cd5c9 100644 --- a/fsm_equipment/models/equipment.py +++ b/fsm_equipment/models/equipment.py @@ -1,5 +1,6 @@ from odoo import models, fields, api, _ from odoo.osv import expression +from odoo.exceptions import ValidationError class Equipment(models.Model): @@ -28,7 +29,7 @@ class Equipment(models.Model): string="Physical Address", tracking=True, ondelete="restrict", - required=True, + required=False, ) location_notes = fields.Text( @@ -55,6 +56,13 @@ class Equipment(models.Model): "fsm.equipment", tracking=True, ) + inherited_partner_id = fields.Many2one( + comodel_name="res.partner", + string="Main Equipment Location", + readonly=True, + compute="_compute_inherited_partner_id", + recursive=True, + ) child_ids = fields.One2many( "fsm.equipment", @@ -69,6 +77,28 @@ class Equipment(models.Model): help="The product that represents this equipment, if any.", ) + @api.depends("parent_id", "parent_id.partner_id") + def _compute_inherited_partner_id(self): + for rec in self: + if not rec.parent_id: + rec.inherited_partner_id = False + continue + rec.inherited_partner_id = ( + rec.parent_id.partner_id or rec.parent_id.inherited_partner_id + ) + + @api.constrains("product_id", "partner_id") + def _constrain_only_root_has_partner(self): + for rec in self: + if rec.partner_id and rec.parent_id: + raise ValidationError( + _("Only top-level (root) equipments can be linked to a partner.") + ) + if not rec.parent_id and not rec.partner_id: + raise ValidationError( + _("Top-level (root) equipments must be linked to a partner.") + ) + @api.model def name_search(self, name="", args=None, operator="ilike", limit=100): diff --git a/fsm_equipment/models/res_partner.py b/fsm_equipment/models/res_partner.py index cd16a33..8cc0f30 100644 --- a/fsm_equipment/models/res_partner.py +++ b/fsm_equipment/models/res_partner.py @@ -41,7 +41,7 @@ class Partner(models.Model): def _compute_equipment_count(self): for rec in self: all_equipment_ids = self.env["fsm.equipment"].search( - [("partner_id", "=", rec.id)] + [("partner_id", "=", rec.id), ("parent_id", "=", False)] ) rec.equipment_count = len(all_equipment_ids) diff --git a/fsm_equipment/views/equipment_views.xml b/fsm_equipment/views/equipment_views.xml index f2997e8..c3528be 100644 --- a/fsm_equipment/views/equipment_views.xml +++ b/fsm_equipment/views/equipment_views.xml @@ -11,6 +11,7 @@ + @@ -22,6 +23,17 @@ 'show_address': 1 }" options='{"always_reload": True}' + invisible="parent_id" + required="not parent_id" + /> + - + + - - + + + + + + + + + + @@ -102,6 +123,9 @@ Equipment fsm.equipment tree,form + + {'search_default_parent_only': True} + @@ -109,12 +133,14 @@ fsm.equipment + - + fsm.equipment.tag tree,form + + + + project.task.view.tree.equipment + project.task + + + + + + + + \ No newline at end of file