You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
6.7 KiB
160 lines
6.7 KiB
# 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.addons.contract.tests.test_contract import TestContractBase
|
|
from odoo.tools import mute_logger
|
|
|
|
|
|
class TestContractLineForecastPeriod(TestContractBase):
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def setUp(self):
|
|
self.env = self.env(
|
|
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.acct_line = self.env["contract.line"].create(self.line_vals)
|
|
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def test_forecast_period_creation(self):
|
|
self.acct_line.write(
|
|
{
|
|
'date_start': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'recurring_next_date': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'date_end': "{this_year}-12-31".format(
|
|
this_year=self.this_year),
|
|
'recurring_rule_type': "monthly",
|
|
'recurring_invoicing_type': 'pre-paid',
|
|
}
|
|
)
|
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 12)
|
|
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def test_forecast_period_on_contract_line_update_1(self):
|
|
self.acct_line.write(
|
|
{
|
|
'date_start': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'recurring_next_date': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'date_end': "{this_year}-12-31".format(
|
|
this_year=self.this_year),
|
|
'recurring_rule_type': "yearly",
|
|
'recurring_invoicing_type': 'pre-paid',
|
|
}
|
|
)
|
|
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_2(self):
|
|
self.acct_line.write(
|
|
{
|
|
'date_start': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'recurring_next_date': "{this_year}-01-31".format(
|
|
this_year=self.this_year),
|
|
'date_end': "{this_year}-06-05".format(
|
|
this_year=self.this_year),
|
|
'recurring_rule_type': "monthlylastday",
|
|
'recurring_invoicing_type': 'pre-paid',
|
|
}
|
|
)
|
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 6)
|
|
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def test_forecast_period_on_contract_line_update_3(self):
|
|
self.assertEqual(self.acct_line.price_subtotal, 50)
|
|
self.acct_line.write({"price_unit": 50})
|
|
self.assertEqual(self.acct_line.price_subtotal, 25)
|
|
self.assertEqual(
|
|
self.acct_line.forecast_period_ids[0].price_subtotal, 25
|
|
)
|
|
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def test_forecast_period_on_contract_line_update_4(self):
|
|
self.assertEqual(self.acct_line.price_subtotal, 50)
|
|
self.acct_line.write({"discount": 0})
|
|
self.assertEqual(self.acct_line.price_subtotal, 100)
|
|
self.assertEqual(
|
|
self.acct_line.forecast_period_ids[0].price_subtotal, 100
|
|
)
|
|
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def test_forecast_period_on_contract_line_update_5(self):
|
|
self.acct_line.cancel()
|
|
self.assertFalse(self.acct_line.forecast_period_ids)
|
|
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def test_forecast_period_on_contract_line_update_6(self):
|
|
self.acct_line.write(
|
|
{
|
|
'date_start': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'recurring_next_date': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'date_end': "{this_year}-01-28".format(
|
|
this_year=self.this_year),
|
|
'recurring_rule_type': "monthly",
|
|
'recurring_invoicing_type': 'pre-paid',
|
|
}
|
|
)
|
|
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_6(self):
|
|
self.acct_line.write(
|
|
{
|
|
'date_start': "{this_year}-01-01".format(
|
|
this_year=self.this_year),
|
|
'recurring_next_date': "{this_year}-02-01".format(
|
|
this_year=self.this_year),
|
|
'date_end': "{this_year}-01-28".format(
|
|
this_year=self.this_year),
|
|
'recurring_rule_type': "monthly",
|
|
'recurring_invoicing_type': 'post-paid',
|
|
}
|
|
)
|
|
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_7(self):
|
|
self.acct_line.write(
|
|
{
|
|
'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)
|
|
|
|
@mute_logger("odoo.addons.queue_job.models.base")
|
|
def test_forecast_period_on_contract_line_update_8(self):
|
|
self.acct_line.write(
|
|
{
|
|
'date_start': "{this_year}-01-14".format(
|
|
this_year=self.this_year),
|
|
'recurring_next_date': "{this_year}-01-31".format(
|
|
this_year=self.this_year),
|
|
'date_end': "{this_year}-01-14".format(
|
|
this_year=self.this_year),
|
|
'recurring_rule_type': "monthlylastday",
|
|
'recurring_invoicing_type': 'post-paid',
|
|
}
|
|
)
|
|
self.assertTrue(self.acct_line.forecast_period_ids)
|
|
self.assertEqual(len(self.acct_line.forecast_period_ids), 1)
|