[FIX] purchase_stock: traceback on empty date
Configure a product having category set with: - Costing Method: Average Cost (AVCO) - Inventory Valuation: Manual Create a purchase order with the product Confirm Receive Products Create bill (do not set date) Confirm Traceback will appear: 'AssertionError: convert amount from unknown date' It occurs because of an attempted currency conversion without a date As the bill is without date it should raise an UserError instead opw-3628295 closes odoo/odoo#147367 X-original-commit: 03436a006f31f4bf42336fe31514161562c9b180 Signed-off-by: Adrien Widart (awt) <awt@odoo.com> Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
This commit is contained in:
committed by
Djamel Touati
parent
1f1a95282d
commit
93fe7f9e6a
@@ -203,20 +203,22 @@ class AccountMoveLine(models.Model):
|
||||
aml = self
|
||||
|
||||
aml_gross_price_unit = aml._get_gross_unit_price()
|
||||
aml_price_unit = aml.currency_id._convert(aml_gross_price_unit, aml.company_id.currency_id, aml.company_id, aml.move_id.invoice_date, round=False)
|
||||
# convert from aml currency to company currency
|
||||
aml_price_unit = aml_gross_price_unit / aml.currency_rate
|
||||
aml_price_unit = aml.product_uom_id._compute_price(aml_price_unit, product_uom)
|
||||
|
||||
unit_valuation_difference = aml_price_unit - layer_price_unit
|
||||
|
||||
# Generate the AML values for the already out quantities
|
||||
unit_valuation_difference_curr = self.company_id.currency_id._convert(unit_valuation_difference, self.currency_id, self.company_id, self.move_id.invoice_date, round=False)
|
||||
# convert from company currency to aml currency
|
||||
unit_valuation_difference_curr = unit_valuation_difference * self.currency_rate
|
||||
unit_valuation_difference_curr = product_uom._compute_price(unit_valuation_difference_curr, self.product_uom_id)
|
||||
out_qty_to_invoice = product_uom._compute_quantity(out_qty_to_invoice, self.product_uom_id)
|
||||
if not float_is_zero(unit_valuation_difference_curr * out_qty_to_invoice, precision_rounding=self.currency_id.rounding):
|
||||
aml_vals_list += self._prepare_pdiff_aml_vals(out_qty_to_invoice, unit_valuation_difference_curr)
|
||||
|
||||
# Generate the SVL values for the on hand quantities (and impact the parent layer)
|
||||
po_pu_curr = po_line.currency_id._convert(po_line.price_unit, self.currency_id, self.company_id, self.move_id.invoice_date, round=False)
|
||||
po_pu_curr = po_line.currency_id._convert(po_line.price_unit, self.currency_id, self.company_id, self.move_id.invoice_date or self.date or fields.Date.context_today(self), round=False)
|
||||
price_difference_curr = po_pu_curr - aml_gross_price_unit
|
||||
if not float_is_zero(unit_valuation_difference * qty_to_correct, precision_rounding=self.company_id.currency_id.rounding):
|
||||
svl_vals = self._prepare_pdiff_svl_vals(layer, sign * qty_to_correct, unit_valuation_difference, price_difference_curr)
|
||||
|
||||
@@ -7,7 +7,7 @@ from freezegun import freeze_time
|
||||
from unittest.mock import patch
|
||||
|
||||
import odoo
|
||||
from odoo import fields
|
||||
from odoo import fields, exceptions
|
||||
from odoo.tests import Form
|
||||
from odoo.tests.common import TransactionCase, tagged
|
||||
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
||||
@@ -2806,3 +2806,34 @@ class TestStockValuationWithCOA(AccountTestInvoicingCommon):
|
||||
move2.picked = True
|
||||
picking2.button_validate()
|
||||
self.assertAlmostEqual(move2.stock_valuation_layer_ids.unit_cost, price_unit_USD)
|
||||
|
||||
def test_pdiff_date_usererror(self):
|
||||
"""
|
||||
Test pdiff operations complete without errors in case we don't have
|
||||
the bill date. A UserError is raised as usual.
|
||||
"""
|
||||
self.product1.product_tmpl_id.categ_id.property_cost_method = 'average'
|
||||
|
||||
po = self.env['purchase.order'].create({
|
||||
'partner_id': self.partner_id.id,
|
||||
'order_line': [
|
||||
(0, 0, {
|
||||
'name': self.product1.name,
|
||||
'product_id': self.product1.id,
|
||||
'product_qty': 1.0,
|
||||
'product_uom': self.product1.uom_po_id.id,
|
||||
'price_unit': 100.0,
|
||||
'taxes_id': False,
|
||||
}),
|
||||
],
|
||||
})
|
||||
po.button_confirm()
|
||||
|
||||
receipt = po.picking_ids
|
||||
receipt.move_ids.move_line_ids.quantity = 1.0
|
||||
receipt.button_validate()
|
||||
|
||||
action = po.action_create_invoice()
|
||||
bill = self.env["account.move"].browse(action["res_id"])
|
||||
with self.assertRaises(exceptions.UserError):
|
||||
bill.action_post()
|
||||
|
||||
Reference in New Issue
Block a user