From 976499ac782f9704bf1eb26067b5c4b3a9b22b24 Mon Sep 17 00:00:00 2001
From: Olivier Colson <oco@odoo.com>
Date: Wed, 6 Jun 2018 15:24:59 +0200
Subject: [PATCH] [FIX] purchase: anglosaxon valuation: use date instead of
 date_invoice for currency conversions.

---
 addons/purchase/models/account_invoice.py                 | 8 ++++----
 .../tests/test_anglo_saxon_valuation_reconciliation.py    | 1 +
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py
index fd01afa29a01..349455a43491 100644
--- a/addons/purchase/models/account_invoice.py
+++ b/addons/purchase/models/account_invoice.py
@@ -52,7 +52,7 @@ class AccountInvoice(models.Model):
             '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.with_context(date=self.date_invoice).compute(line.price_unit, self.currency_id, round=False),
+            'price_unit': line.order_id.currency_id.with_context(date=self.date).compute(line.price_unit, self.currency_id, round=False),
             'quantity': qty,
             'discount': 0.0,
             'account_analytic_id': line.account_analytic_id.id,
@@ -99,7 +99,7 @@ class AccountInvoice(models.Model):
     def _onchange_currency_id(self):
         if self.currency_id:
             for line in self.invoice_line_ids.filtered(lambda r: r.purchase_line_id):
-                line.price_unit = line.purchase_id.currency_id.with_context(date=self.date_invoice).compute(line.purchase_line_id.price_unit, self.currency_id, round=False)
+                line.price_unit = line.purchase_id.currency_id.with_context(date=self.date).compute(line.purchase_line_id.price_unit, self.currency_id, round=False)
 
     @api.onchange('invoice_line_ids')
     def _onchange_origin(self):
@@ -170,7 +170,7 @@ class AccountInvoice(models.Model):
                     if i_line.product_id.cost_method != 'standard' and i_line.purchase_line_id:
                         po_currency = i_line.purchase_id.currency_id
                         #for average/fifo/lifo costing method, fetch real cost price from incomming moves
-                        valuation_price_unit = po_currency.with_context(date=inv.date_invoice).compute(i_line.purchase_line_id.product_uom._compute_price(i_line.purchase_line_id.price_unit, i_line.uom_id), inv.currency_id, round=False)
+                        valuation_price_unit = po_currency.with_context(date=inv.date).compute(i_line.purchase_line_id.product_uom._compute_price(i_line.purchase_line_id.price_unit, i_line.uom_id), inv.currency_id, round=False)
                         stock_move_obj = self.env['stock.move']
                         valuation_stock_move = stock_move_obj.search([
                             ('purchase_line_id', '=', i_line.purchase_line_id.id),
@@ -196,7 +196,7 @@ class AccountInvoice(models.Model):
 
                         elif i_line.product_id.cost_method == 'fifo':
                             # In this condition, we have a real price-valuated product which has not yet been received
-                            valuation_price_unit = po_currency.with_context(date=inv.date_invoice).compute(i_line.purchase_line_id.price_unit, inv.currency_id, round=False)
+                            valuation_price_unit = po_currency.with_context(date=inv.date).compute(i_line.purchase_line_id.price_unit, inv.currency_id, round=False)
 
                     interim_account_price = valuation_price_unit * line_quantity
                     invoice_cur_prec = inv.currency_id.decimal_places
diff --git a/addons/purchase/tests/test_anglo_saxon_valuation_reconciliation.py b/addons/purchase/tests/test_anglo_saxon_valuation_reconciliation.py
index d26d2a43edb2..fea9c9e38d09 100644
--- a/addons/purchase/tests/test_anglo_saxon_valuation_reconciliation.py
+++ b/addons/purchase/tests/test_anglo_saxon_valuation_reconciliation.py
@@ -53,6 +53,7 @@ class TestValuationReconciliation(ValuationReconciliationTestCase):
             'name': 'vendor bill',
             'type': 'in_invoice',
             'date_invoice': '2017-12-31',
+            'date': '2017-12-31',
             'account_id': account_receivable.id,
         })
         rslt.purchase_order_change()
-- 
GitLab