diff --git a/contract/models/contract_line.py b/contract/models/contract_line.py index b889d7808..7aeeca188 100644 --- a/contract/models/contract_line.py +++ b/contract/models/contract_line.py @@ -540,7 +540,7 @@ class ContractLine(models.Model): def _onchange_date_start(self): for rec in self.filtered('date_start'): rec.recurring_next_date = self.get_next_invoice_date( - rec.date_start, + rec.next_period_date_start, rec.recurring_invoicing_type, rec.recurring_invoicing_offset, rec.recurring_rule_type, @@ -808,6 +808,23 @@ class ContractLine(models.Model): "recurring_next_date": new_recurring_next_date, }) + @api.multi + def _prepare_value_for_stop(self, date_end, manual_renew_needed): + self.ensure_one() + return { + 'date_end': date_end, + 'is_auto_renew': False, + 'manual_renew_needed': manual_renew_needed, + 'recurring_next_date': self.get_next_invoice_date( + self.next_period_date_start, + self.recurring_invoicing_type, + self.recurring_invoicing_offset, + self.recurring_rule_type, + self.recurring_interval, + max_date_end=date_end, + ), + } + @api.multi def stop(self, date_end, manual_renew_needed=False, post_message=True): """ @@ -824,14 +841,11 @@ class ContractLine(models.Model): else: if not rec.date_end or rec.date_end > date_end: old_date_end = rec.date_end - values = { - 'date_end': date_end, - 'is_auto_renew': False, - 'manual_renew_needed': manual_renew_needed, - } - if rec.last_date_invoiced == date_end: - values['recurring_next_date'] = False - rec.write(values) + rec.write( + rec._prepare_value_for_stop( + date_end, manual_renew_needed + ) + ) if post_message: msg = _( """Contract line for {product} diff --git a/contract/tests/test_contract.py b/contract/tests/test_contract.py index 5b6ee68bb..6e59ab640 100644 --- a/contract/tests/test_contract.py +++ b/contract/tests/test_contract.py @@ -2315,3 +2315,19 @@ class TestContract(TestContractBase): 'recurring_next_date': '2019-01-01', 'last_date_invoiced': '2019-06-01', }) + + def test_stop_and_update_recurring_invoice_date(self): + self.acct_line.write( + { + 'date_start': '2019-01-01', + 'date_end': '2019-12-31', + 'recurring_next_date': '2020-01-01', + 'recurring_invoicing_type': 'post-paid', + 'recurring_rule_type': 'yearly', + } + ) + self.acct_line.stop(to_date('2019-05-31')) + self.assertEqual(self.acct_line.date_end, to_date('2019-05-31')) + self.assertEqual( + self.acct_line.recurring_next_date, to_date('2019-06-01') + )