From faca51f12604a55b4c9eca3d3e227152a1bfe2f2 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Fri, 24 Oct 2025 14:49:42 +0000 Subject: [PATCH] [IMP] commission_simple: allow to restart commission computation on the same period without deleting all commission results --- commission_simple/models/commission_profile.py | 1 + commission_simple/models/commission_result.py | 2 ++ .../wizards/commission_compute.py | 18 +++++++----------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/commission_simple/models/commission_profile.py b/commission_simple/models/commission_profile.py index 76b6c87..7f3f044 100644 --- a/commission_simple/models/commission_profile.py +++ b/commission_simple/models/commission_profile.py @@ -104,6 +104,7 @@ class CommissionProfileAssignment(models.Model): 'profile_id': self.profile_id.id, 'date_range_id': date_range.id, 'assign_type': self.assign_type, + 'assignment_id': self.id, 'company_id': self.company_id.id, } return vals diff --git a/commission_simple/models/commission_result.py b/commission_simple/models/commission_result.py index fa8d876..76125ac 100644 --- a/commission_simple/models/commission_result.py +++ b/commission_simple/models/commission_result.py @@ -17,6 +17,8 @@ class CommissionResult(models.Model): readonly=True, tracking=True) profile_id = fields.Many2one( 'commission.profile', string='Commission Profile', readonly=True, tracking=True) + assignment_id = fields.Many2one( + 'commission.profile.assignment', string="Commission Profile Assignment", readonly=True) assign_type = fields.Selection('_assign_type_selection', readonly=True, tracking=True) company_id = fields.Many2one( 'res.company', string='Company', ondelete='cascade', diff --git a/commission_simple/wizards/commission_compute.py b/commission_simple/wizards/commission_compute.py index d24faee..0d21d4c 100644 --- a/commission_simple/wizards/commission_compute.py +++ b/commission_simple/wizards/commission_compute.py @@ -47,17 +47,12 @@ class CommissionCompute(models.TransientModel): if not self.date_start: raise UserError(_("Missing Period Start Date.")) creso = self.env['commission.result'] - existing_commissions = creso.search([ + existing_commissions = creso.search_read([ ('date_start', '=', self.date_start), ('company_id', '=', self.company_id.id), - ]) - if existing_commissions: - raise UserError(_( - '%(count)s commissions already exist(s) with start date %(date_start)s in company %(company)s.', - count=len(existing_commissions), - date_start=format_date(self.env, self.date_start), - company=self.company_id.display_name)) - com_result_ids = self._core_compute() + ], ['assignment_id']) + exclude_assignment_ids = [x['assignment_id'][0] for x in existing_commissions if x['assignment_id']] + com_result_ids = self._core_compute(exclude_assignment_ids) if not com_result_ids: raise UserError(_('No commissions generated.')) action = self.env['ir.actions.actions']._for_xml_id( @@ -68,10 +63,11 @@ class CommissionCompute(models.TransientModel): }) return action - def _core_compute(self): + def _core_compute(self, exclude_assignment_ids): rules = self.env['commission.rule'].load_all_rules() com_result_ids = [] - assignments = self.env['commission.profile.assignment'].search([('company_id', '=', self.company_id.id)]) + assignments = self.env['commission.profile.assignment'].search( + [('company_id', '=', self.company_id.id), ('id', 'not in', exclude_assignment_ids)]) date_range_type2date_range = {} for assignment in assignments: profile = assignment.profile_id