diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index a450506c55b..2f9edf23196 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1211,20 +1211,28 @@ class account_invoice_line(models.Model): _order = "invoice_id,sequence,id" @api.one - @api.depends('price_unit', 'discount', 'invoice_line_tax_id', 'quantity', - 'product_id', 'invoice_id.partner_id', 'invoice_id.currency_id', 'invoice_id.company_id') + @api.depends('price_unit', 'discount', 'invoice_line_tax_id', 'quantity', 'product_id', + 'invoice_id.partner_id', 'invoice_id.currency_id', 'invoice_id.company_id') def _compute_price(self): price = self.price_unit * (1 - (self.discount or 0.0) / 100.0) - taxes = self.invoice_line_tax_id.compute_all(price, self.quantity, product=self.product_id, partner=self.invoice_id.partner_id) + taxes = self.invoice_line_tax_id.compute_all(price, self.quantity, + product=self.product_id, + partner=self.invoice_id.partner_id) self.price_subtotal = price_subtotal_signed = taxes['total'] - if self.invoice_id.currency_id != self.invoice_id.company_id.currency_id: - price_subtotal_signed = self.invoice_id.currency_id.with_context(date=self.invoice_id.date_invoice).compute(price_subtotal_signed, self.company_id.currency_id) - sign = self.invoice_id.type in ['in_invoice', 'out_refund'] and -1 or 1 - self.price_subtotal_signed = price_subtotal_signed * sign - if self.invoice_id: - self.price_subtotal = self.invoice_id.currency_id.round(self.price_subtotal) - self.price_subtotal_signed = self.invoice_id.currency_id.round(self.price_subtotal_signed) + if not self.invoice_id: + self.price_subtotal_signed = price_subtotal_signed + else: + inv_cur = self.invoice_id.currency_id + comp_cur = self.invoice_id.company_id.currency_id + + if inv_cur != comp_cur: + inv_cur = inv_cur.with_context(date=self.invoice_id.date_invoice) + price_subtotal_signed = inv_cur.compute(price_subtotal_signed, comp_cur) + + sign = -1 if self.invoice_id.type in ['in_invoice', 'out_refund'] else 1 + self.price_subtotal = inv_cur.round(self.price_subtotal) + self.price_subtotal_signed = inv_cur.round(self.price_subtotal_signed * sign) @api.model def _default_price_unit(self):