feat: Add safety refresh to recalculate current value, quantity, and extra cost during inventory revaluation validation to handle race conditions.
This commit is contained in:
parent
baa34ff7ba
commit
4874173749
Binary file not shown.
@ -99,6 +99,24 @@ class StockInventoryRevaluation(models.Model):
|
|||||||
def action_validate(self):
|
def action_validate(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
|
|
||||||
|
# 0. Safety Refresh: Re-calculate current value/quantity from DB to handle race conditions
|
||||||
|
# Identify layers created UP TO the revaluation date
|
||||||
|
layers = self.env['stock.valuation.layer'].search([
|
||||||
|
('product_id', '=', self.product_id.id),
|
||||||
|
('create_date', '<=', self.date),
|
||||||
|
('company_id', '=', self.company_id.id)
|
||||||
|
])
|
||||||
|
real_qty = sum(layers.mapped('quantity'))
|
||||||
|
real_value = sum(layers.mapped('value'))
|
||||||
|
|
||||||
|
# Update if stale
|
||||||
|
# We assume 'new_value' is the User's Truth (Target).
|
||||||
|
if self.normalization_adjustment:
|
||||||
|
self.current_value = real_value
|
||||||
|
self.quantity = real_qty
|
||||||
|
# Recalculate Extra Cost to ensure: Real + Extra = Target
|
||||||
|
self.extra_cost = self.new_value - self.current_value
|
||||||
|
|
||||||
# If normalizing, we actually expect/allow Extra Cost to be anything,
|
# If normalizing, we actually expect/allow Extra Cost to be anything,
|
||||||
# as long as New Value (Current + Extra) is valid.
|
# as long as New Value (Current + Extra) is valid.
|
||||||
# But legacy check says extra_cost != 0.
|
# But legacy check says extra_cost != 0.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user