From b19da588cd690518f02d078a461e8cce7e341bda Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Thu, 24 Apr 2025 08:30:16 -0400 Subject: [PATCH] bemade_fsm: correct partner_id on task to use partner_shipping_id from sale order --- bemade_fsm/models/sale_order_line.py | 10 ++++++++-- bemade_fsm/models/task.py | 22 +++++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/bemade_fsm/models/sale_order_line.py b/bemade_fsm/models/sale_order_line.py index 72d4e0d..bd193e6 100644 --- a/bemade_fsm/models/sale_order_line.py +++ b/bemade_fsm/models/sale_order_line.py @@ -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}) diff --git a/bemade_fsm/models/task.py b/bemade_fsm/models/task.py index 0e93791..d101531 100644 --- a/bemade_fsm/models/task.py +++ b/bemade_fsm/models/task.py @@ -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")