summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Binsfeld <thomas.binsfeld@acsone.eu>2016-07-22 09:10:38 +0200
committerGoffin Simon <sig@odoo.com>2016-10-13 22:30:40 +0200
commitd0bfcfd41dd4549f401be8b75ec49e800aa47fa7 (patch)
treec80dd6fd49c733fc4e693127032a99ad578e7004
parenta2f0dda366a9dc08fbd4a2348575dbc407e022f6 (diff)
[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
-rw-r--r--addons/purchase/invoice.py53
1 files 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