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 dc7ae49..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,7 +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"] = parent and parent.partner_id and parent.partner_id.id + 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 e705dfc..54f7eb1 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): @@ -109,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 d9d2b48..28d357c 100644 --- a/bemade_fsm/tests/test_sale_order.py +++ b/bemade_fsm/tests/test_sale_order.py @@ -348,15 +348,16 @@ class TestSalesOrder(BemadeFSMBaseTest): so.write( { - "partner_shipping_id": self.env["res.partner"].create( + "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)