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.
71 lines
2.7 KiB
71 lines
2.7 KiB
# Copyright 2019 Tecnativa - Vicent Cubells <vicent.cubells@tecnativa.com>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from odoo.tests import common
|
|
from odoo import fields
|
|
|
|
|
|
class TestContractPriceRevision(common.SavepointCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestContractPriceRevision, cls).setUpClass()
|
|
partner = cls.env['res.partner'].create({
|
|
'name': 'Partner test',
|
|
})
|
|
product = cls.env['product.product'].create({
|
|
'name': 'Test Product',
|
|
})
|
|
cls.contract = cls.env['account.analytic.account'].create({
|
|
'name': 'Contract test',
|
|
'partner_id': partner.id,
|
|
'date_start': fields.Date.today(),
|
|
'recurring_next_date': fields.Date.to_string(
|
|
fields.date.today() + relativedelta(days=7)),
|
|
'recurring_rule_type': 'monthly',
|
|
'recurring_invoice_line_ids': [(0, 0, {
|
|
'product_id': product.id,
|
|
'quantity': 1.0,
|
|
'uom_id': product.uom_id.id,
|
|
'name': product.name,
|
|
'price_unit': 33.0,
|
|
'automatic_price': True,
|
|
}), (0, 0, {
|
|
'product_id': product.id,
|
|
'quantity': 1.0,
|
|
'uom_id': product.uom_id.id,
|
|
'name': product.name,
|
|
'price_unit': 25.0,
|
|
'automatic_price': False,
|
|
})]
|
|
})
|
|
|
|
def execute_wizard(self):
|
|
wizard = self.env['create.revision.line.wizard'].create({
|
|
'date_start': fields.Date.today(),
|
|
'date_end': fields.Date.to_string(
|
|
fields.date.today() + relativedelta(years=1)),
|
|
'variation_percent': 100.0,
|
|
})
|
|
wizard.with_context(
|
|
{'active_ids': [self.contract.id]}).action_apply()
|
|
|
|
def test_contract_price_revision_wizard(self):
|
|
self.assertEqual(len(self.contract.recurring_invoice_line_ids.ids), 2)
|
|
self.execute_wizard()
|
|
self.assertEqual(len(self.contract.recurring_invoice_line_ids.ids), 3)
|
|
lines = self.contract.mapped('recurring_invoice_line_ids').filtered(
|
|
lambda x: x.price_unit == 50.0)
|
|
self.assertEqual(len(lines), 1)
|
|
|
|
def test_contract_price_revision_invoicing(self):
|
|
self.execute_wizard()
|
|
self.contract.recurring_create_invoice()
|
|
invoices = self.env['account.invoice'].search([
|
|
('contract_id', '=', self.contract.id)])
|
|
self.assertEqual(len(invoices), 1)
|
|
lines = invoices.mapped('invoice_line_ids')
|
|
self.assertEqual(len(lines), 2)
|
|
lines = lines.filtered(lambda x: x.price_unit == 50.0)
|
|
self.assertEqual(len(lines), 1)
|