Browse Source

[REF] contract: refactor _update_recurring_next_date

Reuse the logic that is now fully located in _get_recurring_next_date.
pull/434/head
Stéphane Bidoul (ACSONE) 5 years ago
parent
commit
aff3781c92
No known key found for this signature in database GPG Key ID: BCAB2555446B5B92
  1. 27
      contract/models/contract_line.py
  2. 4
      contract/tests/test_contract.py

27
contract/models/contract_line.py

@ -675,23 +675,18 @@ class ContractLine(models.Model):
@api.multi @api.multi
def _update_recurring_next_date(self): def _update_recurring_next_date(self):
for rec in 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 @api.multi
def _init_last_date_invoiced(self): def _init_last_date_invoiced(self):

4
contract/tests/test_contract.py

@ -247,7 +247,7 @@ class TestContract(TestContractBase):
self.assertEqual(self.acct_line.last_date_invoiced, last_date_invoiced) self.assertEqual(self.acct_line.last_date_invoiced, last_date_invoiced)
def test_contract_monthly_lastday(self): 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') last_date_invoiced = to_date('2018-02-22')
self.acct_line.recurring_next_date = '2018-02-22' self.acct_line.recurring_next_date = '2018-02-22'
self.acct_line.recurring_invoicing_type = 'post-paid' self.acct_line.recurring_invoicing_type = 'post-paid'
@ -279,7 +279,7 @@ class TestContract(TestContractBase):
) )
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
self.assertEqual( 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.assertEqual(
self.acct_line.last_date_invoiced, to_date('2018-02-28') self.acct_line.last_date_invoiced, to_date('2018-02-28')

Loading…
Cancel
Save