[FIX] contract: Don't execute onchange after invoice creation + Tests with duplicated name

- Don't execute onchange after invoice creation
  Using that approach (that is the current one in core)  has a lot of side effects and
  performance bottlenecks. You can read odoo/odoo#40156 for summarizing them.
  This also improves the handling of the values of payment term an fiscal position
  for using the partner ones if not set.
- Tests with duplicated name
  So they are not executed at all. Detected by chance looking for a test for the other PR.
This commit is contained in:
Pedro M. Baeza
2019-12-02 13:25:07 +01:00
committed by Christopher Rogos
parent ab32fa5f30
commit 912480c68d
71 changed files with 86 additions and 85 deletions

View File

@@ -281,19 +281,26 @@ class ContractContract(models.Model):
invoice_type = 'out_invoice'
if self.contract_type == 'purchase':
invoice_type = 'in_invoice'
return {
'name': self.code,
'type': invoice_type,
vinvoice = self.env['account.invoice'].new({
'partner_id': self.invoice_partner_id.id,
'type': invoice_type,
})
vinvoice._onchange_partner_id()
invoice_vals = vinvoice._convert_to_write(vinvoice._cache)
invoice_vals.update({
'name': self.code,
'currency_id': currency.id,
'date_invoice': date_invoice,
'journal_id': journal.id,
'origin': self.name,
'company_id': self.company_id.id,
'user_id': self.user_id.id,
'payment_term_id': self.payment_term_id.id,
'fiscal_position_id': self.fiscal_position_id.id,
}
})
if self.payment_term_id:
invoice_vals['payment_term_id'] = self.payment_term_id.id
if self.fiscal_position_id:
invoice_vals['fiscal_position_id'] = self.fiscal_position_id.id
return invoice_vals
@api.multi
def action_contract_send(self):
@@ -354,12 +361,6 @@ class ContractContract(models.Model):
@api.model
def _finalize_invoice_creation(self, invoices):
for invoice in invoices:
payment_term = invoice.payment_term_id
fiscal_position = invoice.fiscal_position_id
invoice._onchange_partner_id()
invoice.payment_term_id = payment_term
invoice.fiscal_position_id = fiscal_position
invoices.compute_taxes()
@api.model