From d73aa24b4a8f03cf540cb36effeef94deb82a24d Mon Sep 17 00:00:00 2001 From: Andrea Date: Fri, 14 Feb 2020 16:57:54 +0100 Subject: [PATCH] [FIX] contract_price_revision: Skip revising lines that are not valid anymore cherry-pick db5c3d647225dde2b20214932a060aa279554b07 --- .../wizards/contract_price_revision.py | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/contract_price_revision/wizards/contract_price_revision.py b/contract_price_revision/wizards/contract_price_revision.py index 2260eb0dc..8ab883050 100644 --- a/contract_price_revision/wizards/contract_price_revision.py +++ b/contract_price_revision/wizards/contract_price_revision.py @@ -25,12 +25,9 @@ class ContractPriceRevisionWizard(models.TransientModel): def action_apply(self): ContractLine = self.env['contract.line'] - active_ids = self.env.context['active_ids'] - for line in self.env['contract.contract'].browse(active_ids).mapped( - 'contract_line_ids'): - if (line.automatic_price or line.successor_contract_line_id or - not line.recurring_next_date): - continue + active_ids = self.env.context.get('active_ids') + contracts = self.env['contract.contract'].browse(active_ids) + for line in self._get_contract_lines_to_revise(contracts): line.update({ 'date_end': self.date_start - relativedelta(days=1), }) @@ -52,3 +49,16 @@ class ContractPriceRevisionWizard(models.TransientModel): 'contract', 'action_customer_contract') action['domain'] = [('id', 'in', active_ids)] return action + + def _get_contract_lines_to_revise(self, contracts): + self.ensure_one() + to_revise = ( + contracts.mapped("contract_line_ids") + .filtered( + lambda x: not x.automatic_price + and not x.successor_contract_line_id + and x.recurring_next_date + and (not x.date_end or x.date_end >= self.date_start) + ) + ) + return to_revise