From d0bfcfd41dd4549f401be8b75ec49e800aa47fa7 Mon Sep 17 00:00:00 2001 From: Thomas Binsfeld Date: Fri, 22 Jul 2016 09:10:38 +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/invoice.py | 53 +++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/addons/purchase/invoice.py b/addons/purchase/invoice.py index 6b8b278edda..d1382aff305 100644 --- a/addons/purchase/invoice.py +++ b/addons/purchase/invoice.py @@ -30,6 +30,34 @@ 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,30 +71,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': 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, - 'invoice_line_tax_ids': invoice_line_tax_ids.ids - } - 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 + data = self._prepare_invoice_line_from_po_line(line) new_line = new_lines.new(data) new_line._set_additional_fields(self) new_lines += new_line