Compare commits

...

2 commits

Author SHA1 Message Date
Marc Durepos
96e5b2d2fe [FIX] bemade_fsm: update partner when SO shipping location changes 2024-09-25 10:19:09 -04:00
Marc Durepos
31c3695c3e working on fix 2024-09-25 08:17:43 -04:00
4 changed files with 58 additions and 9 deletions

View file

@ -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

View file

@ -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

View file

@ -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")

View file

@ -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)