bemade_fsm: correct partner_id on task to use partner_shipping_id from sale order

This commit is contained in:
Marc Durepos 2025-04-24 08:30:16 -04:00
parent ab60babd7d
commit b19da588cd
2 changed files with 25 additions and 7 deletions

View file

@ -111,7 +111,6 @@ 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])]})
# We don't want to see the sub-tasks on the SO
task.child_ids.write(
{
@ -142,7 +141,11 @@ 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
# Use shipping address for FSM tasks for consistency
if project and project.is_fsm:
vals["partner_id"] = self.order_id.partner_shipping_id.id
else:
vals["partner_id"] = self.order_id.partner_id.id
if template.equipment_ids:
vals["equipment_ids"] = template.equipment_ids.ids
return vals
@ -150,6 +153,9 @@ class SaleOrderLine(models.Model):
tmpl = self.product_id.task_template_id
if not tmpl:
task = super()._timesheet_create_task(project)
# For FSM tasks without a template, update partner_id to use shipping address
if project.is_fsm and task:
task.partner_id = self.order_id.partner_shipping_id.id
else:
task = _create_task_from_template(project, tmpl, None)
self.write({"task_id": task.id})

View file

@ -99,6 +99,16 @@ class Task(models.Model):
return res
def write(self, vals):
# Check if we're adding new child tasks
adding_children = False
if 'child_ids' in vals:
for command in vals['child_ids']:
# Command format is [command_code, id, values]
# Command code 0 is CREATE, 1 is UPDATE, 4 is LINK
if command[0] in [0, 1, 4]:
adding_children = True
break
res = super().write(vals)
if not self: # End recursion on empty RecordSet
return res
@ -113,17 +123,19 @@ class Task(models.Model):
for rec in self:
if rec.child_ids:
child_vals = {}
if "site_contacts" in vals:
# If we're adding new children or these fields are being updated, propagate them
if "site_contacts" in vals or adding_children:
child_vals.update(
site_contacts=[Command.set(rec.site_contacts.ids)]
)
if "work_order_contacts" in vals:
if "work_order_contacts" in vals or adding_children:
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)
if "partner_id" in vals or adding_children:
child_vals.update(partner_id=rec.partner_id.id)
if child_vals:
rec.child_ids.write(child_vals)
return res
@api.depends("sale_order_id")