[FIX] account: analytic default + add test

* Analytic defaults keep their old value
* The date_maturity is non-sense, it isn't set on lines needing analytic
* Analytic default should work for misc. operations too, but only for
  product/service lines on invoice documents.

closes odoo/odoo#60904

X-original-commit: 4d2b8dd1bef40c592215728fab6c31f192176e93
Signed-off-by: Laurent Smet <smetl@users.noreply.github.com>
Signed-off-by: wan <william-andre@users.noreply.github.com>
This commit is contained in:
wan
2020-10-28 14:08:02 +00:00
parent c7debd2edb
commit c514e54b9d
2 changed files with 32 additions and 6 deletions
+5 -6
View File
@@ -1665,7 +1665,8 @@ class AccountMove(models.Model):
# Which is wrong in some case
# It's better to set the account_id before the partner_id
# Ensure related fields are well copied.
line.partner_id = self.partner_id.commercial_partner_id
if line.partner_id != self.partner_id.commercial_partner_id:
line.partner_id = self.partner_id.commercial_partner_id
line.date = self.date
line.recompute_tax_line = True
line.currency_id = self.currency_id
@@ -3097,18 +3098,16 @@ class AccountMoveLine(models.Model):
return self.product_id.uom_id
return False
@api.depends('product_id', 'account_id', 'partner_id', 'date_maturity')
@api.depends('product_id', 'account_id', 'partner_id', 'date')
def _compute_analytic_account(self):
for record in self:
record.analytic_account_id = (record._origin or record).analytic_account_id
record.analytic_tag_ids = (record._origin or record).analytic_tag_ids
if not record.exclude_from_invoice_tab:
if not record.exclude_from_invoice_tab or not record.move_id.is_invoice(include_receipts=True):
rec = self.env['account.analytic.default'].account_get(
product_id=record.product_id.id,
partner_id=record.partner_id.commercial_partner_id.id or record.move_id.partner_id.commercial_partner_id.id,
account_id=record.account_id.id,
user_id=record.env.uid,
date=record.date_maturity,
date=record.date,
company_id=record.move_id.company_id.id
)
if rec:
@@ -1319,6 +1319,33 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
},
], self.move_vals)
def test_out_invoice_line_onchange_analytic_2(self):
self.env.user.groups_id += self.env.ref('analytic.group_analytic_accounting')
analytic_account = self.env['account.analytic.account'].create({
'name': 'test_analytic_account1',
'code': 'TEST1'
})
self.invoice.write({'invoice_line_ids': [(1, self.invoice.invoice_line_ids.ids[0], {
'analytic_account_id': analytic_account.id,
})]})
self.assertRecordValues(self.invoice.invoice_line_ids, [
{'analytic_account_id': analytic_account.id},
{'analytic_account_id': False},
])
# We can remove the analytic account, it is not recomputed by an invalidation
self.invoice.write({'invoice_line_ids': [(1, self.invoice.invoice_line_ids.ids[0], {
'analytic_account_id': False,
})]})
self.assertRecordValues(self.invoice.invoice_line_ids, [
{'analytic_account_id': False},
{'analytic_account_id': False},
])
def test_out_invoice_line_onchange_cash_rounding_1(self):
move_form = Form(self.invoice)
# Add a cash rounding having 'add_invoice_line'.