mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
[ADD] contract_price_revision: new module to update contract prices easily
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user