129 lines
5.2 KiB
Python
129 lines
5.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
from odoo.fields import Command
|
|
|
|
|
|
class TestAccountBudgetCommon(AccountTestInvoicingCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
# ==== Products ====
|
|
cls.product_a = cls.env['product.product'].create({
|
|
'name': 'product_a',
|
|
'standard_price': 100.0,
|
|
'supplier_taxes_id': False
|
|
})
|
|
cls.product_b = cls.env['product.product'].create({
|
|
'name': 'product_b',
|
|
'standard_price': 100.0,
|
|
'supplier_taxes_id': False
|
|
})
|
|
|
|
# ==== Analytic accounts ====
|
|
|
|
cls.analytic_plan_projects = cls.env['account.analytic.plan'].create({'name': 'Projects'})
|
|
cls.analytic_plan_departments = cls.env['account.analytic.plan'].create({'name': 'Departments test'})
|
|
|
|
cls.project_column_name = cls.analytic_plan_projects._column_name()
|
|
cls.department_column_name = cls.analytic_plan_departments._column_name()
|
|
|
|
cls.analytic_account_partner_a = cls.env['account.analytic.account'].create({
|
|
'name': 'analytic_account_partner_a',
|
|
'partner_id': cls.partner_a.id,
|
|
'plan_id': cls.analytic_plan_projects.id,
|
|
})
|
|
cls.analytic_account_partner_b = cls.env['account.analytic.account'].create({
|
|
'name': 'analytic_account_partner_b',
|
|
'partner_id': cls.partner_b.id,
|
|
'plan_id': cls.analytic_plan_projects.id,
|
|
})
|
|
cls.analytic_account_administratif = cls.env['account.analytic.account'].create({
|
|
'name': 'analytic_account_administratif',
|
|
'plan_id': cls.analytic_plan_departments.id,
|
|
})
|
|
cls.analytic_account_administratif_2 = cls.env['account.analytic.account'].create({
|
|
'name': 'analytic_account_administratif_2',
|
|
'plan_id': cls.analytic_plan_departments.id,
|
|
})
|
|
|
|
# ==== Budget Analytic ====
|
|
|
|
cls.budget_analytic_revenue = cls.env['budget.analytic'].create({
|
|
'name': 'Budget 2019: Revenue',
|
|
'date_from': '2019-01-01',
|
|
'date_to': '2019-12-31',
|
|
'budget_type': 'revenue',
|
|
'state': 'draft',
|
|
'user_id': cls.env.ref('base.user_admin').id,
|
|
'budget_line_ids': [
|
|
Command.create({
|
|
'budget_amount': 35000,
|
|
cls.project_column_name: cls.analytic_account_partner_a.id,
|
|
}),
|
|
Command.create({
|
|
'budget_amount': 10000,
|
|
cls.project_column_name: cls.analytic_account_partner_b.id,
|
|
}),
|
|
Command.create({
|
|
cls.project_column_name: cls.analytic_account_partner_b.id,
|
|
cls.department_column_name: cls.analytic_account_administratif.id,
|
|
'budget_amount': 10000.0,
|
|
}),
|
|
]
|
|
})
|
|
|
|
cls.budget_analytic_expense = cls.env['budget.analytic'].create({
|
|
'name': 'Budget 2019: Expense',
|
|
'date_from': '2019-01-01',
|
|
'date_to': '2019-12-31',
|
|
'budget_type': 'expense',
|
|
'state': 'draft',
|
|
'user_id': cls.env.ref('base.user_admin').id,
|
|
'budget_line_ids': [
|
|
Command.create({
|
|
'budget_amount': 55000,
|
|
cls.project_column_name: cls.analytic_account_partner_a.id,
|
|
}),
|
|
Command.create({
|
|
'budget_amount': 9000,
|
|
cls.project_column_name: cls.analytic_account_partner_b.id,
|
|
}),
|
|
Command.create({
|
|
cls.project_column_name: cls.analytic_account_partner_b.id,
|
|
cls.department_column_name: cls.analytic_account_administratif.id,
|
|
'budget_amount': 10000.0,
|
|
}),
|
|
]
|
|
})
|
|
|
|
cls.budget_analytic_both = cls.env['budget.analytic'].create({
|
|
'name': 'Budget 2019: Both',
|
|
'date_from': '2019-01-01',
|
|
'date_to': '2019-12-31',
|
|
'budget_type': 'both',
|
|
'state': 'draft',
|
|
'user_id': cls.env.ref('base.user_admin').id,
|
|
'budget_line_ids': [
|
|
Command.create({
|
|
'budget_amount': 20000,
|
|
cls.project_column_name: cls.analytic_account_partner_a.id,
|
|
}),
|
|
Command.create({
|
|
'budget_amount': 5000,
|
|
cls.project_column_name: cls.analytic_account_partner_b.id,
|
|
}),
|
|
Command.create({
|
|
cls.project_column_name: cls.analytic_account_partner_b.id,
|
|
cls.department_column_name: cls.analytic_account_administratif.id,
|
|
'budget_amount': 10000.0,
|
|
}),
|
|
]
|
|
})
|
|
|
|
def assertBudgetLine(self, budget_line, *, achieved):
|
|
budget_line.invalidate_recordset(['achieved_amount'])
|
|
self.assertRecordValues(budget_line, [{'achieved_amount': achieved}])
|