[FIX] sale: analytic plan with applicability on invoice
Steps to reproduce * Create an analytic plan with the domain as `invoice` * Create an analytic account for the above plan * Create an analytic distribution model and include condition as account prefix (4000), and product. * Create a sale order, confirm and create an invoice Issue During the conversion from the Sale Order to the Invoice, the analytic plan is not applied Cause The analytic distribution is set even where there is none. Therefore, the compute is not trigger opw-3109003 closes odoo/odoo#110202 X-original-commit: fd5249ea8687f24e7c9c2a2a3bcbb8cc14333efd Signed-off-by: William André (wan) <wan@odoo.com>
This commit is contained in:
@@ -1081,17 +1081,17 @@ class SaleOrderLine(models.Model):
|
||||
'discount': self.discount,
|
||||
'price_unit': self.price_unit,
|
||||
'tax_ids': [Command.set(self.tax_id.ids)],
|
||||
'analytic_distribution': self.analytic_distribution,
|
||||
'sale_line_ids': [Command.link(self.id)],
|
||||
'is_downpayment': self.is_downpayment,
|
||||
}
|
||||
analytic_account_id = self.order_id.analytic_account_id.id
|
||||
if self.analytic_distribution and not self.display_type:
|
||||
res['analytic_distribution'] = self.analytic_distribution
|
||||
if analytic_account_id and not self.display_type:
|
||||
res['analytic_distribution'] = res['analytic_distribution'] or {}
|
||||
if self.analytic_distribution:
|
||||
res['analytic_distribution'][analytic_account_id] = self.analytic_distribution.get(analytic_account_id, 0) + 100
|
||||
if 'analytic_distribution' in res:
|
||||
res['analytic_distribution'][analytic_account_id] = res['analytic_distribution'].get(analytic_account_id, 0) + 100
|
||||
else:
|
||||
res['analytic_distribution'][analytic_account_id] = 100
|
||||
res['analytic_distribution'] = {analytic_account_id: 100}
|
||||
if optional_values:
|
||||
res.update(optional_values)
|
||||
if self.display_type:
|
||||
|
||||
@@ -494,6 +494,40 @@ class TestSaleToInvoice(TestSaleCommon):
|
||||
aml = self.env['account.move.line'].search([('move_id', 'in', so.invoice_ids.ids)])[0]
|
||||
self.assertRecordValues(aml, [{'analytic_distribution': {str(analytic_account_default.id): 100, str(analytic_account_so.id): 100}}])
|
||||
|
||||
def test_invoice_analytic_rule_with_account_prefix(self):
|
||||
"""
|
||||
Test whether, when an analytic account rule is set within the scope (applicability) of invoice
|
||||
and with an account prefix set,
|
||||
the default analytic account is correctly set during the conversion from so to invoice
|
||||
"""
|
||||
self.env.user.groups_id += self.env.ref('analytic.group_analytic_accounting')
|
||||
analytic_plan_default = self.env['account.analytic.plan'].create({
|
||||
'name': 'default',
|
||||
'applicability_ids': [Command.create({
|
||||
'business_domain': 'invoice',
|
||||
'applicability': 'optional',
|
||||
})]
|
||||
})
|
||||
analytic_account_default = self.env['account.analytic.account'].create({'name': 'default', 'plan_id': analytic_plan_default.id})
|
||||
|
||||
analytic_distribution_model = self.env['account.analytic.distribution.model'].create({
|
||||
'account_prefix': '400000',
|
||||
'analytic_distribution': {analytic_account_default.id: 100},
|
||||
'product_id': self.product_a.id,
|
||||
})
|
||||
|
||||
so = self.env['sale.order'].create({'partner_id': self.partner_a.id})
|
||||
self.env['sale.order.line'].create({
|
||||
'order_id': so.id,
|
||||
'name': 'test',
|
||||
'product_id': self.product_a.id
|
||||
})
|
||||
self.assertFalse(so.order_line.analytic_distribution, "There should be no tag set.")
|
||||
so.action_confirm()
|
||||
so.order_line.qty_delivered = 1
|
||||
aml = so._create_invoices().invoice_line_ids
|
||||
self.assertRecordValues(aml, [{'analytic_distribution': analytic_distribution_model.analytic_distribution}])
|
||||
|
||||
def test_invoice_after_product_return_price_not_default(self):
|
||||
so = self.env['sale.order'].create({
|
||||
'name': 'Sale order',
|
||||
|
||||
Reference in New Issue
Block a user