changeset d8626b61190e in modules/stock:default
details: https://hg.tryton.org/modules/stock?cmd=changeset;node=d8626b61190e
description:
Ensure quantity field is always for today with future dates
An empty stock_date_end is converted into max date in
compute_quantities_query
and forecast context should be explicitly disable.
issue9044
review282931002
diffstat:
move.py | 11 ++++++-----
tests/test_stock.py | 25 ++++++++++++++++++++-----
2 files changed, 26 insertions(+), 10 deletions(-)
diffs (67 lines):
diff -r c0de02892891 -r d8626b61190e move.py
--- a/move.py Sat Feb 15 01:40:11 2020 +0100
+++ b/move.py Sat Feb 15 01:41:47 2020 +0100
@@ -48,16 +48,17 @@
def _quantity_context(cls, name):
pool = Pool()
Date = pool.get('ir.date')
-
+ today = Date.today()
context = Transaction().context
new_context = {}
+ stock_date_end = context.get('stock_date_end')
if name == 'quantity':
- if (context.get('stock_date_end')
- and context['stock_date_end'] > Date.today()):
- new_context['stock_date_end'] = Date.today()
+ new_context['forecast'] = False
+ if (stock_date_end or datetime.date.max) > today:
+ new_context['stock_date_end'] = today
elif name == 'forecast_quantity':
new_context['forecast'] = True
- if not context.get('stock_date_end'):
+ if not stock_date_end:
new_context['stock_date_end'] = datetime.date.max
return new_context
diff -r c0de02892891 -r d8626b61190e tests/test_stock.py
--- a/tests/test_stock.py Sat Feb 15 01:40:11 2020 +0100
+++ b/tests/test_stock.py Sat Feb 15 01:41:47 2020 +0100
@@ -231,17 +231,32 @@
'forecast': True,
}, 6),
]
+ today_quantity = 4
def tests_product_quantity(context, quantity):
with transaction.set_context(locations=[storage.id]):
product_reloaded = Product(product.id)
if (not context.get('stock_date_end')
- or context['stock_date_end'] > today
- or context.get('forecast')):
- self.assertEqual(product_reloaded.forecast_quantity,
- quantity)
+ or context['stock_date_end'] > today):
+ self.assertEqual(
+ product_reloaded.forecast_quantity, quantity,
+ msg='context %r' % context)
+ self.assertEqual(
+ product_reloaded.quantity, today_quantity,
+ msg='context %r' % context)
+ elif context.get('forecast'):
+ self.assertEqual(
+ product_reloaded.forecast_quantity, quantity,
+ msg='context %r' % context)
+ elif context.get('stock_date_end') == today:
+ self.assertEqual(product_reloaded.quantity, quantity,
+ msg='context %r' % context)
else:
- self.assertEqual(product_reloaded.quantity, quantity)
+ self.assertEqual(
+ product_reloaded.forecast_quantity, quantity,
+ msg='context %r' % context)
+ self.assertEqual(product_reloaded.quantity, quantity,
+ msg='context %r' % context)
def tests_product_search_quantity(context, quantity):
with transaction.set_context(locations=[storage.id]):