mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
@@ -74,6 +74,7 @@ class ContractLine(models.Model):
|
|||||||
if rec.last_date_invoiced
|
if rec.last_date_invoiced
|
||||||
else rec.date_start - relativedelta(days=1)
|
else rec.date_start - relativedelta(days=1)
|
||||||
)
|
)
|
||||||
|
max_date_end = rec.date_end if not rec.is_auto_renew else False
|
||||||
while (
|
while (
|
||||||
period_date_end
|
period_date_end
|
||||||
and rec._get_generate_forecast_periods_criteria(
|
and rec._get_generate_forecast_periods_criteria(
|
||||||
@@ -85,7 +86,7 @@ class ContractLine(models.Model):
|
|||||||
period_date_start,
|
period_date_start,
|
||||||
rec.recurring_rule_type,
|
rec.recurring_rule_type,
|
||||||
rec.recurring_interval,
|
rec.recurring_interval,
|
||||||
max_date_end=rec.date_end,
|
max_date_end=max_date_end,
|
||||||
)
|
)
|
||||||
recurring_next_date = rec.get_next_invoice_date(
|
recurring_next_date = rec.get_next_invoice_date(
|
||||||
period_date_start,
|
period_date_start,
|
||||||
@@ -93,7 +94,7 @@ class ContractLine(models.Model):
|
|||||||
rec.recurring_invoicing_offset,
|
rec.recurring_invoicing_offset,
|
||||||
rec.recurring_rule_type,
|
rec.recurring_rule_type,
|
||||||
rec.recurring_interval,
|
rec.recurring_interval,
|
||||||
rec.date_end,
|
max_date_end=max_date_end,
|
||||||
)
|
)
|
||||||
if period_date_end and recurring_next_date:
|
if period_date_end and recurring_next_date:
|
||||||
values.append(
|
values.append(
|
||||||
|
|||||||
@@ -135,12 +135,15 @@ class TestContractLineForecastPeriod(TestContractBase):
|
|||||||
'date_end': Date.today() + relativedelta(months=3),
|
'date_end': Date.today() + relativedelta(months=3),
|
||||||
'recurring_rule_type': "monthlylastday",
|
'recurring_rule_type': "monthlylastday",
|
||||||
'recurring_invoicing_type': 'pre-paid',
|
'recurring_invoicing_type': 'pre-paid',
|
||||||
'is_auto_renew': True,
|
'is_auto_renew': False,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.acct_line._onchange_date_start()
|
self.acct_line._onchange_date_start()
|
||||||
self.assertTrue(self.acct_line.forecast_period_ids)
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
||||||
self.assertEqual(len(self.acct_line.forecast_period_ids), 4)
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 4)
|
||||||
|
self.acct_line.write({'is_auto_renew': True})
|
||||||
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
||||||
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 13)
|
||||||
|
|
||||||
@mute_logger("odoo.addons.queue_job.models.base")
|
@mute_logger("odoo.addons.queue_job.models.base")
|
||||||
def test_forecast_period_on_contract_line_update_8(self):
|
def test_forecast_period_on_contract_line_update_8(self):
|
||||||
@@ -260,3 +263,50 @@ class TestContractLineForecastPeriod(TestContractBase):
|
|||||||
Date.to_date("2020-01-01"),
|
Date.to_date("2020-01-01"),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@mute_logger("odoo.addons.queue_job.models.base")
|
||||||
|
def test_forecast_period_for_auto_renew_contract(self):
|
||||||
|
"""If a contract line is set to auto renew the forecast should continue
|
||||||
|
after the date end and stop at the company forecast period"""
|
||||||
|
# Set the company forecast period to three years
|
||||||
|
self.acct_line.contract_id.company_id.contract_forecast_interval = 36
|
||||||
|
self.acct_line.write(
|
||||||
|
{
|
||||||
|
'date_start': Date.today(),
|
||||||
|
'recurring_next_date': Date.today(),
|
||||||
|
'date_end': Date.today() + relativedelta(years=1),
|
||||||
|
'recurring_rule_type': "monthlylastday",
|
||||||
|
'last_date_invoiced': False,
|
||||||
|
'recurring_invoicing_type': 'pre-paid',
|
||||||
|
'is_auto_renew': False,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
||||||
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 13)
|
||||||
|
|
||||||
|
self.acct_line.write({'is_auto_renew': True})
|
||||||
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
||||||
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 37)
|
||||||
|
|
||||||
|
@mute_logger("odoo.addons.queue_job.models.base")
|
||||||
|
def test_forecast_period_for_undefined_date_end_contract(self):
|
||||||
|
"""If a contract line have and undefined date end the forecast should
|
||||||
|
continue to the company forecast period"""
|
||||||
|
self.acct_line.contract_id.company_id.contract_forecast_interval = 36
|
||||||
|
self.acct_line.write(
|
||||||
|
{
|
||||||
|
'date_start': Date.today(),
|
||||||
|
'recurring_next_date': Date.today(),
|
||||||
|
'date_end': Date.today() + relativedelta(years=1),
|
||||||
|
'recurring_rule_type': "monthlylastday",
|
||||||
|
'last_date_invoiced': False,
|
||||||
|
'recurring_invoicing_type': 'pre-paid',
|
||||||
|
'is_auto_renew': False,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
||||||
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 13)
|
||||||
|
|
||||||
|
self.acct_line.write({'date_end': False})
|
||||||
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
||||||
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 37)
|
||||||
|
|||||||
Reference in New Issue
Block a user