changeset d865960839f5 in modules/product_cost_fifo:default
details:
https://hg.tryton.org/modules/product_cost_fifo?cmd=changeset;node=d865960839f5
description:
Do not update average cost price if the quantity is negative
This is the same test done in Move._compute_product_cost_price. When
the stock
quantity is below zero, the average cost price should not change.
And we process the incoming move first in order to keep quantity
positive
where possible.
issue9484
review325801002
diffstat:
product.py | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diffs (35 lines):
diff -r d22c29f6a03d -r d865960839f5 product.py
--- a/product.py Mon Jul 13 20:48:13 2020 +0200
+++ b/product.py Wed Jul 29 23:50:03 2020 +0200
@@ -143,9 +143,7 @@
return move.from_location.type == 'storage'
def compute_fifo_cost_price(quantity, date):
- fifo_moves = self.get_fifo_move(
- float(quantity),
- date=current_moves[-1].effective_date)
+ fifo_moves = self.get_fifo_move(float(quantity), date=date)
cost_price = Decimal(0)
consumed_qty = 0
@@ -159,6 +157,11 @@
if consumed_qty:
return round_price(cost_price / Decimal(str(consumed_qty)))
+ # For each day, process the incoming moves first
+ # in order to keep quantity positive where possible
+ # We do not re-browse because we expect only small changes
+ moves = sorted(moves, key=lambda m: (
+ m.effective_date, out_move(m), m.id))
current_moves = []
current_out_qty = 0
current_cost_price = cost_price
@@ -181,7 +184,7 @@
m for m in out_moves
if m.cost_price != fifo_cost_price],
dict(cost_price=fifo_cost_price))
- if quantity:
+ if quantity > 0 and quantity + current_out_qty >= 0:
cost_price = (
((current_cost_price * (
quantity + current_out_qty))