changeset 5c6896abae16 in modules/stock:default
details: https://hg.tryton.org/modules/stock?cmd=changeset&node=5c6896abae16
description:
        Limit size of grouping_filter ids

        The list of ids in grouping_filter are used inside an IN-clause so we 
must
        limit the size.

        issue10589
        review379471002
diffstat:

 inventory.py |  23 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)

diffs (46 lines):

diff -r 49b558494120 -r 5c6896abae16 inventory.py
--- a/inventory.py      Fri Oct 22 15:47:33 2021 +0200
+++ b/inventory.py      Sat Oct 30 02:27:19 2021 +0200
@@ -1,11 +1,14 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+from collections import defaultdict
+
 from sql import Null
 
 from trytond.i18n import gettext
 from trytond.model import Workflow, Model, ModelView, ModelSQL, fields, Check
 from trytond.model.exceptions import AccessError
 from trytond.pyson import Eval, Bool, If
+from trytond.tools import grouped_slice
 from trytond.transaction import Transaction
 from trytond.pool import Pool
 from trytond.wizard import Wizard, StateView, StateTransition, Button
@@ -257,15 +260,19 @@
             if inventory.state == 'done':
                 continue
             # Compute product quantities
-            if fill:
-                product_ids = None
-            else:
-                product_ids = [l.product.id for l in inventory.lines]
             with Transaction().set_context(stock_date_end=inventory.date):
-                pbl = Product.products_by_location(
-                    [inventory.location.id],
-                    grouping=grouping,
-                    grouping_filter=(product_ids,))
+                if fill:
+                    pbl = Product.products_by_location(
+                        [inventory.location.id],
+                        grouping=grouping)
+                else:
+                    product_ids = [l.product.id for l in inventory.lines]
+                    pbl = defaultdict(int)
+                    for product_ids in grouped_slice(product_ids):
+                        pbl.update(Product.products_by_location(
+                                [inventory.location.id],
+                                grouping=grouping,
+                                grouping_filter=(list(product_ids),)))
 
             # Index some data
             product2type = {}

Reply via email to