From 64034e280cc91bfccc0344e82ce4cb844981000e Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Mon, 23 Sep 2024 17:22:08 -0400 Subject: [PATCH] bemade_fsm: fix equipment name_search --- bemade_fsm/models/task.py | 1 + bemade_fsm/tests/__init__.py | 1 + bemade_fsm/tests/test_equipment.py | 32 +++++++++++++++++++++++++++ bemade_fsm/views/sale_order_views.xml | 1 - fsm_equipment/models/equipment.py | 13 +++++++++-- fsm_equipment/models/res_partner.py | 1 + 6 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 bemade_fsm/tests/test_equipment.py diff --git a/bemade_fsm/models/task.py b/bemade_fsm/models/task.py index e705dfc..cc05e87 100644 --- a/bemade_fsm/models/task.py +++ b/bemade_fsm/models/task.py @@ -53,6 +53,7 @@ class Task(models.Model): root_ancestor = fields.Many2one( comodel_name="project.task", compute="_compute_root_ancestor", + recursive=True, ) def _compute_is_closed(self): diff --git a/bemade_fsm/tests/__init__.py b/bemade_fsm/tests/__init__.py index 1f3ec9c..65b4ad7 100644 --- a/bemade_fsm/tests/__init__.py +++ b/bemade_fsm/tests/__init__.py @@ -6,3 +6,4 @@ from . import test_fsm_visit from . import test_task from . import test_task_report from . import test_settings +from . import test_equipment diff --git a/bemade_fsm/tests/test_equipment.py b/bemade_fsm/tests/test_equipment.py new file mode 100644 index 0000000..d87239c --- /dev/null +++ b/bemade_fsm/tests/test_equipment.py @@ -0,0 +1,32 @@ +from odoo.addons.bemade_fsm.tests.test_bemade_fsm_common import BemadeFSMBaseTest +from odoo.tests import tagged, Form + + +@tagged("-at_install", "post_install") +class TestEquipment(BemadeFSMBaseTest): + def test_equipment_search_domain_on_sale_order(self): + """Equipment from other clients was showing up in sale order line + equipment choices. Make sure this doesn't happen.""" + partner = self._generate_partner() + partner_2 = self._generate_partner() + equipment_1 = self._generate_equipment(partner=partner) + equipment_2 = self._generate_equipment(partner_2) + sale_order = self._generate_sale_order(partner=partner) + product = self._generate_product() + self.assertEqual(sale_order.valid_equipment_ids, equipment_1) + + name_search_results = self.env["fsm.equipment"].name_search( + args=[ + "&", + ["id", "in", sale_order.valid_equipment_ids.ids], + "!", + ["id", "in", []], + ], + limit=8, + name="test", + operator="ilike", + ) + self.assertNotIn( + (equipment_2.id, equipment_2.display_name), name_search_results + ) + self.assertIn((equipment_1.id, equipment_1.display_name), name_search_results) diff --git a/bemade_fsm/views/sale_order_views.xml b/bemade_fsm/views/sale_order_views.xml index cf9fc6d..3f853c8 100644 --- a/bemade_fsm/views/sale_order_views.xml +++ b/bemade_fsm/views/sale_order_views.xml @@ -34,7 +34,6 @@ name="default_equipment_ids" context="{'default_partner_id': partner_shipping_id,}" widget="many2many_tags" - domain="[('id', 'in', valid_equipment_ids)]" groups="account.group_delivery_invoice_address" /> diff --git a/fsm_equipment/models/equipment.py b/fsm_equipment/models/equipment.py index 8f3363d..de15f5c 100644 --- a/fsm_equipment/models/equipment.py +++ b/fsm_equipment/models/equipment.py @@ -1,4 +1,5 @@ from odoo import models, fields, api, _ +from odoo.osv import expression class Equipment(models.Model): @@ -56,9 +57,11 @@ class Equipment(models.Model): @api.model def name_search(self, name="", args=None, operator="ilike", limit=100): + args = args or [] - if name: - equipments = self.search( + domain = expression.AND( + [ + args, [ "|", "|", @@ -66,6 +69,12 @@ class Equipment(models.Model): ("name", operator, name), ("partner_id.name", operator, name), ], + ] + ) + + if name: + equipments = self.search( + domain, limit=limit, ) else: diff --git a/fsm_equipment/models/res_partner.py b/fsm_equipment/models/res_partner.py index 48af4da..6cfb06c 100644 --- a/fsm_equipment/models/res_partner.py +++ b/fsm_equipment/models/res_partner.py @@ -25,6 +25,7 @@ class Partner(models.Model): @api.depends( "equipment_ids", + "child_ids", "child_ids.company_type", "child_ids.equipment_ids", )