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.
395 lines
12 KiB
395 lines
12 KiB
# Copyright 2018 ACSONE SA/NV.
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo import fields
|
|
from odoo.tests.common import TransactionCase
|
|
|
|
|
|
def to_date(date):
|
|
return fields.Date.to_date(date)
|
|
|
|
|
|
class TestProductTemplate(TransactionCase):
|
|
def setUp(self):
|
|
super(TestProductTemplate, self).setUp()
|
|
self.partner = self.env.ref("base.res_partner_2")
|
|
self.product = self.env.ref("product.product_product_1")
|
|
self.contract = self.env["contract.contract"].create(
|
|
{
|
|
"name": "Test Contract 2",
|
|
"partner_id": self.partner.id,
|
|
"pricelist_id": self.partner.property_product_pricelist.id,
|
|
"contract_type": "purchase",
|
|
"contract_line_ids": [
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"product_id": self.product.id,
|
|
"name": "Services from #START# to #END#",
|
|
"quantity": 1,
|
|
"uom_id": self.product.uom_id.id,
|
|
"price_unit": 100,
|
|
"discount": 50,
|
|
"recurring_rule_type": "monthly",
|
|
"recurring_interval": 1,
|
|
"date_start": "2016-02-15",
|
|
"recurring_next_date": "2016-02-29",
|
|
},
|
|
)
|
|
],
|
|
}
|
|
)
|
|
self.contract_line = self.contract.contract_line_ids[0]
|
|
|
|
def test_compute_prorated(self):
|
|
def update_contract_line(
|
|
case,
|
|
recurring_rule_type,
|
|
recurring_interval,
|
|
recurring_invoicing_type,
|
|
date_start,
|
|
recurring_next_date,
|
|
date_end,
|
|
last_date_invoiced=False,
|
|
):
|
|
self.contract_line.write(
|
|
{
|
|
"recurring_rule_type": recurring_rule_type,
|
|
"recurring_invoicing_type": recurring_invoicing_type,
|
|
"recurring_interval": recurring_interval,
|
|
"date_start": date_start,
|
|
"recurring_next_date": recurring_next_date,
|
|
"date_end": date_end,
|
|
"last_date_invoiced": last_date_invoiced,
|
|
}
|
|
)
|
|
|
|
def error_message(
|
|
case,
|
|
recurring_rule_type,
|
|
recurring_interval,
|
|
recurring_invoicing_type,
|
|
date_start,
|
|
recurring_next_date,
|
|
date_end,
|
|
last_date_invoiced=False,
|
|
):
|
|
return (
|
|
"%s : Error in %s every %d %s case, start %s, next %s, end %s,"
|
|
" last %s"
|
|
% (
|
|
case,
|
|
recurring_invoicing_type,
|
|
recurring_interval,
|
|
recurring_rule_type,
|
|
date_start,
|
|
recurring_next_date,
|
|
date_end,
|
|
last_date_invoiced or "",
|
|
)
|
|
)
|
|
|
|
combinations = [
|
|
(
|
|
1.00,
|
|
(
|
|
"Case 1",
|
|
"monthly",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2018-01-05"),
|
|
to_date("2018-01-05"),
|
|
False,
|
|
),
|
|
),
|
|
(
|
|
1.00,
|
|
(
|
|
"Case 2",
|
|
"monthly",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2018-01-05"),
|
|
to_date("2018-02-01"),
|
|
False,
|
|
to_date("2018-01-31"),
|
|
),
|
|
),
|
|
(
|
|
1.00,
|
|
(
|
|
"Case 3",
|
|
"monthly",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2017-01-05"),
|
|
to_date("2018-02-01"),
|
|
to_date("2018-03-01"),
|
|
to_date("2018-01-31"),
|
|
),
|
|
),
|
|
(
|
|
0.892,
|
|
(
|
|
"Case 4",
|
|
"monthly",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2017-01-05"),
|
|
to_date("2018-02-01"),
|
|
to_date("2018-02-25"),
|
|
to_date("2018-01-31"),
|
|
),
|
|
),
|
|
(
|
|
1.00,
|
|
(
|
|
"Case 5",
|
|
"monthly",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-01-05"),
|
|
to_date("2018-02-05"),
|
|
False,
|
|
),
|
|
),
|
|
(
|
|
0.87,
|
|
(
|
|
"Case 6",
|
|
"monthly",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-01-05"),
|
|
to_date("2018-02-01"),
|
|
False,
|
|
),
|
|
),
|
|
(
|
|
1.00,
|
|
(
|
|
"Case 7",
|
|
"monthly",
|
|
1,
|
|
"post-paid",
|
|
to_date("2017-01-05"),
|
|
to_date("2018-02-01"),
|
|
to_date("2018-03-01"),
|
|
to_date("2017-12-31"),
|
|
),
|
|
),
|
|
(
|
|
0.892,
|
|
(
|
|
"Case 8",
|
|
"monthly",
|
|
1,
|
|
"post-paid",
|
|
to_date("2017-01-05"),
|
|
to_date("2018-03-01"),
|
|
to_date("2018-02-25"),
|
|
to_date("2018-01-31"),
|
|
),
|
|
),
|
|
(
|
|
1.00,
|
|
(
|
|
"Case 9",
|
|
"monthlylastday",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-01-01"),
|
|
to_date("2018-01-31"),
|
|
to_date("2018-02-25"),
|
|
),
|
|
),
|
|
(
|
|
0.87,
|
|
(
|
|
"Case 10",
|
|
"monthlylastday",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-01-05"),
|
|
to_date("2018-01-31"),
|
|
to_date("2018-02-25"),
|
|
),
|
|
),
|
|
(
|
|
0.892,
|
|
(
|
|
"Case 11",
|
|
"monthlylastday",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-01-05"),
|
|
to_date("2018-02-28"),
|
|
to_date("2018-02-25"),
|
|
to_date("2018-01-31"),
|
|
),
|
|
),
|
|
(
|
|
0.5,
|
|
(
|
|
"Case 12",
|
|
"monthlylastday",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-02-01"),
|
|
to_date("2018-02-28"),
|
|
to_date("2018-02-14"),
|
|
),
|
|
),
|
|
(
|
|
0.5,
|
|
(
|
|
"Case 13",
|
|
"monthlylastday",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-02-15"),
|
|
to_date("2018-02-28"),
|
|
False,
|
|
),
|
|
),
|
|
(
|
|
0.032,
|
|
(
|
|
"Case 14",
|
|
"monthlylastday",
|
|
1,
|
|
"post-paid",
|
|
to_date("2017-02-15"),
|
|
to_date("2018-01-31"),
|
|
False,
|
|
to_date("2018-01-30"),
|
|
),
|
|
),
|
|
(
|
|
1.035,
|
|
(
|
|
"Case 15",
|
|
"monthlylastday",
|
|
1,
|
|
"post-paid",
|
|
to_date("2017-02-15"),
|
|
to_date("2018-02-28"),
|
|
False,
|
|
to_date("2018-01-30"),
|
|
),
|
|
),
|
|
(
|
|
0.032,
|
|
(
|
|
"Case 16",
|
|
"monthly",
|
|
1,
|
|
"post-paid",
|
|
to_date("2017-02-15"),
|
|
to_date("2018-02-01"),
|
|
False,
|
|
to_date("2018-01-30"),
|
|
),
|
|
),
|
|
(
|
|
1.035,
|
|
(
|
|
"Case 17",
|
|
"monthly",
|
|
1,
|
|
"post-paid",
|
|
to_date("2017-02-15"),
|
|
to_date("2018-03-01"),
|
|
False,
|
|
to_date("2018-01-30"),
|
|
),
|
|
),
|
|
(
|
|
0.032,
|
|
(
|
|
"Case 18",
|
|
"monthly",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2017-02-15"),
|
|
to_date("2018-01-01"),
|
|
False,
|
|
to_date("2018-01-30"),
|
|
),
|
|
),
|
|
(
|
|
1.035,
|
|
(
|
|
"Case 19",
|
|
"monthly",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2017-02-15"),
|
|
to_date("2018-02-01"),
|
|
False,
|
|
to_date("2018-01-30"),
|
|
),
|
|
),
|
|
(
|
|
1.0,
|
|
(
|
|
"Case 18",
|
|
"monthlylastday",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2017-02-15"),
|
|
to_date("2018-01-31"),
|
|
False,
|
|
to_date("2017-12-31"),
|
|
),
|
|
),
|
|
(
|
|
1.566,
|
|
(
|
|
"Case 19",
|
|
"monthlylastday",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2018-03-15"),
|
|
to_date("2018-04-30"),
|
|
False,
|
|
),
|
|
),
|
|
(
|
|
1.48,
|
|
(
|
|
"Case 20",
|
|
"monthly",
|
|
1,
|
|
"post-paid",
|
|
to_date("2018-03-15"),
|
|
to_date("2018-04-30"),
|
|
False,
|
|
),
|
|
),
|
|
(
|
|
2.53,
|
|
(
|
|
"Case 21",
|
|
"monthly",
|
|
1,
|
|
"pre-paid",
|
|
to_date("2018-03-15"),
|
|
to_date("2018-04-30"),
|
|
False,
|
|
),
|
|
),
|
|
]
|
|
for result, combination in combinations:
|
|
update_contract_line(*combination)
|
|
dates = self.contract_line._get_period_to_invoice(
|
|
self.contract_line.last_date_invoiced,
|
|
self.contract_line.recurring_next_date,
|
|
)
|
|
self.assertAlmostEqual(
|
|
result,
|
|
self.contract_line.compute_prorated(*dates),
|
|
places=2,
|
|
msg=error_message(*combination),
|
|
)
|