From a4143dae1d19cfb4aa1b59884863f077ca565e4a Mon Sep 17 00:00:00 2001 From: "Thomas Binsfeld (ACSONE)" Date: Mon, 10 Oct 2016 16:38:41 +0200 Subject: [PATCH] [FIX] Inheritance of purchase_order_change by preparing data dictionary Data dictionary filled inside the function purchase_order_change had no possibility of inheritance. opw:690733 --- addons/purchase/models/account_invoice.py | 52 +++++++++++++---------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py index fdfdf7c49e1..38cf5949e04 100644 --- a/addons/purchase/models/account_invoice.py +++ b/addons/purchase/models/account_invoice.py @@ -30,6 +30,35 @@ class AccountInvoice(models.Model): ]} return result + + def _prepare_invoice_line_from_po_line(self, line): + if line.product_id.purchase_method == 'purchase': + qty = line.product_qty - line.qty_invoiced + else: + qty = line.qty_received - line.qty_invoiced + if float_compare(qty, 0.0, precision_rounding=line.product_uom.rounding) <= 0: + qty = 0.0 + taxes = line.taxes_id + invoice_line_tax_ids = self.purchase_id.fiscal_position_id.map_tax(taxes) + invoice_line = self.env['account.invoice.line'] + data = { + 'purchase_line_id': line.id, + 'name': line.name, + 'origin': self.purchase_id.origin, + 'uom_id': line.product_uom.id, + 'product_id': line.product_id.id, + 'account_id': invoice_line.with_context({'journal_id': self.journal_id.id, 'type': 'in_invoice'})._default_account(), + 'price_unit': line.order_id.currency_id.compute(line.price_unit, self.currency_id, round=False), + 'quantity': qty, + 'discount': 0.0, + 'account_analytic_id': line.account_analytic_id.id, + 'invoice_line_tax_ids': invoice_line_tax_ids.ids + } + account = invoice_line.get_invoice_line_account('in_invoice', line.product_id, self.purchase_id.fiscal_position_id, self.env.user.company_id) + if account: + data['account_id'] = account.id + return data + # Load all unsold PO lines @api.onchange('purchase_id') def purchase_order_change(self): @@ -43,28 +72,7 @@ class AccountInvoice(models.Model): # Load a PO line only once if line in self.invoice_line_ids.mapped('purchase_line_id'): continue - if line.product_id.purchase_method == 'purchase': - qty = line.product_qty - line.qty_invoiced - else: - qty = line.qty_received - line.qty_invoiced - if float_compare(qty, 0.0, precision_rounding=line.product_uom.rounding) <= 0: - qty = 0.0 - taxes = line.taxes_id - invoice_line_tax_ids = self.purchase_id.fiscal_position_id.map_tax(taxes) - data = { - 'purchase_line_id': line.id, - 'name': self.purchase_id.name+': '+line.name, - 'origin': self.purchase_id.origin, - 'uom_id': line.product_uom.id, - 'product_id': line.product_id.id, - 'account_id': self.env['account.invoice.line'].with_context({'journal_id': self.journal_id.id, 'type': 'in_invoice'})._default_account(), - 'price_unit': line.order_id.currency_id.compute(line.price_unit, self.currency_id, round=False), - 'quantity': qty, - 'discount': 0.0, - 'account_analytic_id': line.account_analytic_id.id, - 'analytic_tag_ids': line.analytic_tag_ids.ids, - 'invoice_line_tax_ids': invoice_line_tax_ids.ids - } + data = self._prepare_invoice_line_from_po_line(line) account = new_lines.get_invoice_line_account('in_invoice', line.product_id, self.purchase_id.fiscal_position_id, self.env.user.company_id) if account: data['account_id'] = account.id