Skip to content

Commit

Permalink
Merge c6e078b into 7694b30
Browse files Browse the repository at this point in the history
  • Loading branch information
sbejaoui committed Dec 16, 2019
2 parents 7694b30 + c6e078b commit cdb89ea
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 13 deletions.
19 changes: 12 additions & 7 deletions contract_forecast/models/contract_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,11 @@ def _generate_forecast_periods(self):
)
period_date_end = last_date_invoiced
recurring_next_date = rec.recurring_next_date
while rec._get_generate_forecast_periods_criteria(
period_date_end
while (
recurring_next_date
and rec._get_generate_forecast_periods_criteria(
period_date_end
)
):
period_dates = rec._get_period_to_invoice(
last_date_invoiced,
Expand All @@ -95,11 +98,13 @@ def _generate_forecast_periods(self):
)
)
last_date_invoiced = period_date_end
recurring_next_date = (
recurring_next_date
+ self.get_relative_delta(
rec.recurring_rule_type, rec.recurring_interval
)
recurring_next_date = rec.get_next_invoice_date(
last_date_invoiced + relativedelta(days=1),
rec.recurring_invoicing_type,
rec.recurring_invoicing_offset,
rec.recurring_rule_type,
rec.recurring_interval,
max_date_end=rec.date_end,
)
return self.env["contract.line.forecast.period"].create(values)

Expand Down
114 changes: 108 additions & 6 deletions contract_forecast/tests/test_contract_line_forecast_period.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Copyright 2019 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from datetime import date
from dateutil.relativedelta import relativedelta

from odoo.fields import Date
from odoo.addons.contract.tests.test_contract import TestContractBase
from odoo.tools import mute_logger

Expand All @@ -15,9 +15,9 @@ def setUp(self):
context=dict(self.env.context, test_queue_job_no_delay=True)
)
super(TestContractLineForecastPeriod, self).setUp()
self.this_year = date.today().year
self.line_vals["date_start"] = date.today()
self.line_vals["recurring_next_date"] = date.today()
self.this_year = Date.today().year
self.line_vals["date_start"] = Date.today()
self.line_vals["recurring_next_date"] = Date.today()
self.acct_line = self.env["contract.line"].create(self.line_vals)

@mute_logger("odoo.addons.queue_job.models.base")
Expand Down Expand Up @@ -132,15 +132,15 @@ def test_forecast_period_on_contract_line_update_6(self):
def test_forecast_period_on_contract_line_update_7(self):
self.acct_line.write(
{
'date_end': date.today() + relativedelta(months=3),
'date_end': Date.today() + relativedelta(months=3),
'recurring_rule_type': "monthlylastday",
'recurring_invoicing_type': 'pre-paid',
'is_auto_renew': True,
}
)
self.acct_line._onchange_date_start()
self.assertTrue(self.acct_line.forecast_period_ids)
self.assertEqual(len(self.acct_line.forecast_period_ids), 13)
self.assertEqual(len(self.acct_line.forecast_period_ids), 4)

@mute_logger("odoo.addons.queue_job.models.base")
def test_forecast_period_on_contract_line_update_8(self):
Expand All @@ -158,3 +158,105 @@ def test_forecast_period_on_contract_line_update_8(self):
)
self.assertTrue(self.acct_line.forecast_period_ids)
self.assertEqual(len(self.acct_line.forecast_period_ids), 1)

@mute_logger("odoo.addons.queue_job.models.base")
def test_forecast_period_on_contract_line_update_9(self):
self.acct_line.write(
{
'date_start': "2019-01-14",
'recurring_next_date': "2019-01-31",
'date_end': "2020-01-14",
'recurring_rule_type': "monthlylastday",
'last_date_invoiced': False,
'recurring_invoicing_type': 'post-paid',
}
)
self.assertTrue(self.acct_line.forecast_period_ids)
self.assertEqual(len(self.acct_line.forecast_period_ids), 13)
self.assertEqual(
(
self.acct_line.forecast_period_ids[0].date_start,
self.acct_line.forecast_period_ids[0].date_end,
self.acct_line.forecast_period_ids[0].date_invoice,
),
(
Date.to_date("2019-01-14"),
Date.to_date("2019-01-31"),
Date.to_date("2019-01-31"),
),
)
self.assertEqual(
(
self.acct_line.forecast_period_ids[1].date_start,
self.acct_line.forecast_period_ids[1].date_end,
self.acct_line.forecast_period_ids[1].date_invoice,
),
(
Date.to_date("2019-02-01"),
Date.to_date("2019-02-28"),
Date.to_date("2019-02-28"),
),
)
self.assertEqual(
(
self.acct_line.forecast_period_ids[-1].date_start,
self.acct_line.forecast_period_ids[-1].date_end,
self.acct_line.forecast_period_ids[-1].date_invoice,
),
(
Date.to_date("2020-01-01"),
Date.to_date("2020-01-14"),
Date.to_date("2020-01-14"),
),
)

@mute_logger("odoo.addons.queue_job.models.base")
def test_forecast_period_on_contract_line_update_10(self):
self.acct_line.write(
{
'date_start': "2019-01-14",
'recurring_next_date': "2019-01-14",
'date_end': "2020-01-14",
'recurring_rule_type': "monthlylastday",
'last_date_invoiced': False,
'recurring_invoicing_type': 'pre-paid',
}
)
self.assertTrue(self.acct_line.forecast_period_ids)
self.assertEqual(len(self.acct_line.forecast_period_ids), 13)
self.assertEqual(
(
self.acct_line.forecast_period_ids[0].date_start,
self.acct_line.forecast_period_ids[0].date_end,
self.acct_line.forecast_period_ids[0].date_invoice,
),
(
Date.to_date("2019-01-14"),
Date.to_date("2019-01-31"),
Date.to_date("2019-01-14"),
),
)
self.assertEqual(
(
self.acct_line.forecast_period_ids[1].date_start,
self.acct_line.forecast_period_ids[1].date_end,
self.acct_line.forecast_period_ids[1].date_invoice,
),
(
Date.to_date("2019-02-01"),
Date.to_date("2019-02-28"),
Date.to_date("2019-02-01"),
),
)
self.assertEqual(
(
self.acct_line.forecast_period_ids[-1].date_start,
self.acct_line.forecast_period_ids[-1].date_end,
self.acct_line.forecast_period_ids[-1].date_invoice,
),
(
Date.to_date("2020-01-01"),
Date.to_date("2020-01-14"),
Date.to_date("2020-01-01"),
),
)

0 comments on commit cdb89ea

Please sign in to comment.