diff --git a/contract/models/contract_line.py b/contract/models/contract_line.py index b1fa3913..8124786e 100644 --- a/contract/models/contract_line.py +++ b/contract/models/contract_line.py @@ -675,23 +675,18 @@ class ContractLine(models.Model): @api.multi def _update_recurring_next_date(self): for rec in self: - old_date = rec.recurring_next_date - new_date = old_date + self.get_relative_delta( - rec.recurring_rule_type, rec.recurring_interval + last_date_invoiced = rec.next_period_date_end + recurring_next_date = rec._get_recurring_next_date( + last_date_invoiced + relativedelta(days=1), + rec.recurring_invoicing_type, + rec.recurring_rule_type, + rec.recurring_interval, + max_date_end=rec.date_end, ) - if rec.recurring_rule_type == 'monthlylastday': - last_date_invoiced = old_date - elif rec.recurring_invoicing_type == 'post-paid': - last_date_invoiced = old_date - relativedelta(days=1) - elif rec.recurring_invoicing_type == 'pre-paid': - last_date_invoiced = new_date - relativedelta(days=1) - - if rec.date_end and last_date_invoiced >= rec.date_end: - rec.last_date_invoiced = rec.date_end - rec.recurring_next_date = False - else: - rec.last_date_invoiced = last_date_invoiced - rec.recurring_next_date = new_date + rec.write({ + "recurring_next_date": recurring_next_date, + "last_date_invoiced": last_date_invoiced, + }) @api.multi def _init_last_date_invoiced(self): diff --git a/contract/tests/test_contract.py b/contract/tests/test_contract.py index 5a73c63e..925ab2ce 100644 --- a/contract/tests/test_contract.py +++ b/contract/tests/test_contract.py @@ -247,7 +247,7 @@ class TestContract(TestContractBase): self.assertEqual(self.acct_line.last_date_invoiced, last_date_invoiced) def test_contract_monthly_lastday(self): - recurring_next_date = to_date('2018-03-31') + recurring_next_date = to_date('2018-02-28') last_date_invoiced = to_date('2018-02-22') self.acct_line.recurring_next_date = '2018-02-22' self.acct_line.recurring_invoicing_type = 'post-paid' @@ -279,7 +279,7 @@ class TestContract(TestContractBase): ) self.contract.recurring_create_invoice() self.assertEqual( - self.acct_line.recurring_next_date, to_date('2018-04-01') + self.acct_line.recurring_next_date, to_date('2018-3-16') ) self.assertEqual( self.acct_line.last_date_invoiced, to_date('2018-02-28')