67 lines
2.8 KiB
Python
67 lines
2.8 KiB
Python
from odoo import Command
|
|
from .common import TestAccountBudgetCommon
|
|
from odoo.tests import tagged
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestUncommittedAmount(TestAccountBudgetCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
cls.one_thousand_budget = cls.env['budget.analytic'].create({
|
|
'name': '1.000$ Budget',
|
|
'date_from': '2025-01-01',
|
|
'date_to': '2025-12-31',
|
|
'budget_type': 'expense',
|
|
'state': 'draft',
|
|
'user_id': cls.env.ref('base.user_admin').id,
|
|
'budget_line_ids': [
|
|
Command.create({
|
|
'budget_amount': 1000,
|
|
cls.project_column_name: cls.analytic_account_partner_a.id,
|
|
}),
|
|
]
|
|
})
|
|
cls.one_thousand_budget.action_budget_confirm()
|
|
|
|
def test_uncommited_amount_is_above_budget(self):
|
|
po = self.env['purchase.order'].create({
|
|
'partner_id': self.partner_a.id,
|
|
'date_order': '2025-01-11',
|
|
'order_line': [
|
|
Command.create({
|
|
'product_id': self.product_a.id,
|
|
'analytic_distribution': {self.analytic_account_partner_a.id: 100},
|
|
'product_qty': 1,
|
|
'price_unit': 200,
|
|
}),
|
|
Command.create({
|
|
'product_id': self.product_a.id,
|
|
'analytic_distribution': {self.analytic_account_partner_a.id: 100},
|
|
'product_qty': 1,
|
|
'price_unit': 200,
|
|
}),
|
|
Command.create({
|
|
'product_id': self.product_a.id,
|
|
'analytic_distribution': {self.analytic_account_partner_a.id: 100},
|
|
'product_qty': 1,
|
|
'price_unit': 200,
|
|
}),
|
|
]
|
|
})
|
|
|
|
self.assertFalse(po.is_above_budget, "The purchase order should not be above budget")
|
|
self.assertFalse(po.order_line.filtered('is_above_budget'), "No purchase order line should be above budget")
|
|
|
|
po.order_line.price_unit = 600
|
|
self.env['purchase.order.line'].invalidate_model(['is_above_budget'])
|
|
self.assertTrue(po.is_above_budget, "The purchase order should be exceeding budget now.")
|
|
self.assertFalse(po.order_line.filtered('is_above_budget'), "No purchase order line should be above budget")
|
|
|
|
po.order_line[2].price_unit = 2000
|
|
self.env['purchase.order.line'].invalidate_model(['is_above_budget'])
|
|
self.assertTrue(po.is_above_budget, "The purchase order should still be exceeding budget.")
|
|
self.assertEqual(po.order_line.mapped('is_above_budget'), [False, False, True], "The first purchase order line should go above budget on its own.")
|