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]):

Reply via email to