1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from .common import TestSaleProjectCommon
from odoo.tests import HttpCase
from odoo.tests.common import tagged
@tagged('post_install', '-at_install')
class TestAnalyticDistribution(HttpCase, TestSaleProjectCommon):
def test_project_transmits_analytic_plans_to_sol_distribution(self):
AnalyticPlan = self.env['account.analytic.plan']
plan_a = self.analytic_plan
plan_b = AnalyticPlan.sudo().search([
('parent_id', '=', False),
('id', '!=', plan_a.id),
], limit=1)
plan_b = plan_b or AnalyticPlan.create({'name': 'Q'})
account_a, account_b = self.env['account.analytic.account'].create([{
'name': 'account',
'plan_id': plan.id,
} for plan in (plan_a, plan_b)])
project = self.env['project.project'].create({
'name': 'X',
plan_a._column_name(): account_a.id,
plan_b._column_name(): account_b.id,
})
sale_order = self.env['sale.order'].create({
'partner_id': self.partner.id,
'project_id': project.id,
})
sale_order_line = self.env['sale.order.line'].create({
'order_id': sale_order.id,
'product_id': self.product.id,
})
self.assertEqual(
sale_order_line.analytic_distribution,
{f'{account_a.id},{account_b.id}': 100},
"The sale order line's analytic distribution should have one line containing all the accounts of the project's plans"
)
def test_sol_analytic_distribution_project_template_service(self):
sale_order = self.env['sale.order'].create({'partner_id': self.partner.id})
sale_order_line = self.env['sale.order.line'].create({
'order_id': sale_order.id,
'product_id': self.product_delivery_manual5.id,
})
self.assertFalse(
sale_order_line.analytic_distribution,
"No default analytic distribution should be set on the SOL as no project is linked to the SO, and we do not "
"take the project template set on the product into account.",
)
sale_order.action_confirm()
self.assertEqual(
sale_order_line.analytic_distribution,
{str(sale_order.project_id.account_id.id): 100},
"The analytic distribution of the SOL should be set to the account of the generated project.",
)
def test_sol_analytic_distribution_task_in_project_service(self):
self.project_global.account_id = self.analytic_account_sale
sale_order = self.env['sale.order'].create({'partner_id': self.partner.id})
sale_order_line = self.env['sale.order.line'].create({
'order_id': sale_order.id,
'product_id': self.product_delivery_manual2.id,
})
self.assertEqual(
sale_order_line.analytic_distribution,
{str(self.project_global.account_id.id): 100},
"The analytic distribution of the SOL should be set to the account of the project set on the product.",
)
|