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

# 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),
)