diff --git a/addons/purchase/invoice.py b/addons/purchase/invoice.py index 0a576768542..66faa5ca7b5 100644 --- a/addons/purchase/invoice.py +++ b/addons/purchase/invoice.py @@ -33,28 +33,12 @@ class AccountInvoice(models.Model): # Load all unsold PO lines @api.onchange('purchase_id') def purchase_order_change(self): - result = [] if not self.purchase_id: return {} if not self.partner_id: self.partner_id = self.purchase_id.partner_id.id - # Keep existing lines. We want to be able to add several PO on the same invoice. - for line in self.invoice_line_ids: - result.append({ - 'purchase_line_id': line.purchase_line_id.id, - 'name': line.name, - 'origin': line.origin, - 'uom_id': line.uom_id.id, - 'product_id': line.product_id.id, - 'account_id': line.account_id.id, - 'price_unit': line.price_unit, - 'quantity': line.quantity, - 'discount': line.discount, - 'account_analytic_id': line.account_analytic_id.id, - 'invoice_line_tax_ids': line.invoice_line_tax_ids.ids, - }) - + new_lines = self.env['account.invoice.line'] for line in self.purchase_id.order_line: # Load a PO line only once if line in self.invoice_line_ids.mapped('purchase_line_id'): @@ -80,13 +64,13 @@ class AccountInvoice(models.Model): 'account_analytic_id': line.account_analytic_id.id, 'invoice_line_tax_ids': invoice_line_tax_ids.ids } - account = self.env['account.invoice.line'].get_invoice_line_account('in_invoice', line.product_id, self.purchase_id.fiscal_position_id, self.env.user.company_id) + 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 - result.append(data) + new_line = new_lines.new(data) + new_lines += new_line - self.invoice_line_ids = False # To avoid duplicates - self.invoice_line_ids = result + self.invoice_line_ids += new_lines self.purchase_id = False return {}