diff --git a/bemade_fsm/models/sale_order.py b/bemade_fsm/models/sale_order.py index 665d0da..d84b9ad 100644 --- a/bemade_fsm/models/sale_order.py +++ b/bemade_fsm/models/sale_order.py @@ -154,3 +154,10 @@ class SaleOrder(models.Model): def action_confirm(self): self._create_or_organize_visits_if_needed() return super().action_confirm() + + def write(self, values): + res = super().write(values) + if "partner_shipping_id" in values: + for rec in self: + rec.tasks_ids.write({"partner_id": rec.partner_shipping_id.id}) + return res diff --git a/bemade_fsm/models/sale_order_line.py b/bemade_fsm/models/sale_order_line.py index a0ee0b4..72d4e0d 100644 --- a/bemade_fsm/models/sale_order_line.py +++ b/bemade_fsm/models/sale_order_line.py @@ -111,7 +111,7 @@ class SaleOrderLine(models.Model): for t in template.subtasks: subtask = _create_task_from_template(project, t, task) subtasks.append(subtask) - task.write({"child_ids": [Command.set([t.id for t in subtasks])]}) + # task.write({"child_ids": [Command.set([t.id for t in subtasks])]}) # We don't want to see the sub-tasks on the SO task.child_ids.write( { @@ -142,6 +142,7 @@ class SaleOrderLine(models.Model): vals["tag_ids"] = template.tags.ids vals["allocated_hours"] = template.planned_hours vals["sequence"] = template.sequence + vals["partner_id"] = self.order_id.partner_id.id if template.equipment_ids: vals["equipment_ids"] = template.equipment_ids.ids return vals diff --git a/bemade_fsm/models/task.py b/bemade_fsm/models/task.py index cc05e87..54f7eb1 100644 --- a/bemade_fsm/models/task.py +++ b/bemade_fsm/models/task.py @@ -110,14 +110,20 @@ class Task(models.Model): # Here we use child_ids instead of _get_all_subtasks() so as to allow for setting propagate_assignment # to false on a child task. to_propagate.child_ids.write({"user_ids": vals["user_ids"]}) - if "site_contacts" in vals and self.child_ids: - self._get_all_subtasks().write( - {"site_contacts": [Command.set(self.site_contacts.ids)]} - ) - if "work_order_contacts" in vals and self.child_ids: - self._get_all_subtasks().write( - {"work_order_contacts": [Command.set(self.work_order_contacts.ids)]} - ) + for rec in self: + if rec.child_ids: + child_vals = {} + if "site_contacts" in vals: + child_vals.update( + site_contacts=[Command.set(rec.site_contacts.ids)] + ) + if "work_order_contacts" in vals: + child_vals.update( + work_order_contacts=[Command.set(rec.work_order_contacts.ids)] + ) + if "partner_id" in vals: + child_vals.update(partner_id=vals["partner_id"]) + rec.child_ids.write(child_vals) return res @api.depends("sale_order_id") diff --git a/bemade_fsm/tests/test_sale_order.py b/bemade_fsm/tests/test_sale_order.py index a8869a9..28d357c 100644 --- a/bemade_fsm/tests/test_sale_order.py +++ b/bemade_fsm/tests/test_sale_order.py @@ -327,3 +327,37 @@ class TestSalesOrder(BemadeFSMBaseTest): so.action_confirm() self.assertFalse(so.visit_ids) + + def test_changing_sale_order_customer_follows_to_tasks_and_subtasks(self): + so = self._generate_sale_order() + so = self._generate_sale_order() + so.company_id.create_default_fsm_visit = False + task_template = self._generate_task_template( + parent=None, + structure=[2, 2], + names=["Parent", "Child", "Grandchild"], + ) + product = self._generate_product(task_template=task_template) + sol = self._generate_sale_order_line(so, product) + + so.action_confirm() + + parent_task = sol.task_id + for task in parent_task._get_all_subtasks() | parent_task: + self.assertEqual(so.partner_shipping_id, task.partner_id) + + so.write( + { + "partner_shipping_id": self.env["res.partner"] + .create( + { + "name": "New shipping address", + "parent_id": so.partner_id.id, + "type": "delivery", + } + ) + .id + } + ) + for task in parent_task._get_all_subtasks() | parent_task: + self.assertEqual(so.partner_shipping_id, task.partner_id)