From 7499f8a0999d3d3199f00d64815a554f7e04e942 Mon Sep 17 00:00:00 2001 From: Alessandro Uffreduzzi Date: Tue, 26 Nov 2024 14:49:41 +0100 Subject: [PATCH] [FIX] sale_commission_product_criteria_domain: onchange partner agents --- .../models/partner.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/sale_commission_product_criteria_domain/models/partner.py b/sale_commission_product_criteria_domain/models/partner.py index 129106a63..779ad327e 100644 --- a/sale_commission_product_criteria_domain/models/partner.py +++ b/sale_commission_product_criteria_domain/models/partner.py @@ -39,19 +39,24 @@ def _compute_allowed_commission_group_ids_domain(self): @api.onchange("agent_ids") def _onchange_agent_ids(self): for rec in self: - exiting_agents = rec.commission_item_agent_ids.mapped("agent_id") + # ._origin avoids an issue with NewId + # res.partner(,) != res.partner(1,) + # but we also need to preserve virtual records (which ._origin discards) + current_agents = tuple(x._origin or x for x in rec.agent_ids) + existing_commission_agents = rec.commission_item_agent_ids.mapped( + "agent_id" + ) to_create = [ { "agent_id": x.id, "group_ids": [(6, 0, x.allowed_commission_group_ids.ids)], } - for x in rec.agent_ids.filtered( - lambda x: x.commission_id.commission_type == "product_restricted" - ) - if x not in exiting_agents + for x in current_agents + if (x not in existing_commission_agents) + and (x.commission_id.commission_type == "product_restricted") ] to_delete = rec.commission_item_agent_ids.filtered( - lambda x: x.agent_id in (exiting_agents - rec.agent_ids) + lambda x: x.agent_id not in current_agents ) if to_delete: rec.update(