From f107f77ead6830744547aaf3370073146ae44889 Mon Sep 17 00:00:00 2001
From: Guillaume Michon <guillaume@nexedi.com>
Date: Fri, 23 Sep 2005 08:20:18 +0000
Subject: [PATCH] Commented useless methods and fixed inventory behavior

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@3831 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/Document/InventoryCell.py | 410 ++++++++++++-------------
 product/ERP5/Document/InventoryLine.py | 308 +++++++++----------
 2 files changed, 352 insertions(+), 366 deletions(-)

diff --git a/product/ERP5/Document/InventoryCell.py b/product/ERP5/Document/InventoryCell.py
index 475fa8f741..ce6a080005 100755
--- a/product/ERP5/Document/InventoryCell.py
+++ b/product/ERP5/Document/InventoryCell.py
@@ -68,225 +68,213 @@ class InventoryCell(DeliveryCell):
                       )
 
     def _edit(self, REQUEST=None, force_update = 0, **kw):
-      kw = kw.copy()
-      item_id_list = kw.get('item_id_list', None)
-      if item_id_list is not None: del kw['item_id_list']
-      produced_item_id_list = kw.get('produced_item_id_list', None)
-      if produced_item_id_list is not None: del kw['produced_item_id_list']
-      consumed_item_id_list = kw.get('consumed_item_id_list', None)
-      if consumed_item_id_list is not None: del kw['consumed_item_id_list']
-      DeliveryCell._edit(self, REQUEST=REQUEST, force_update = force_update, **kw)
-      # Update consumption last
-      if item_id_list is not None:
-        self._setItemIdList(item_id_list)
-      if produced_item_id_list is not None :
-        self._setProducedItemIdList(produced_item_id_list)
-      if consumed_item_id_list is not None :
-        self._setConsumedItemIdList(consumed_item_id_list)
+      DeliveryLine._edit(self, REQUEST=REQUEST, force_update = force_update, **kw)
+      # Calculate inventory
+      item_list = self.getAggregateValueList()
+      if len(item_list) > 0:
+        inventory = 0
+        for item in item_list:
+          if item.getQuantity() not in (None, ''):
+            inventory += item.getQuantity()
+        self.setInventory(inventory)
+      
 
-    security.declareProtected(Permissions.AccessContentsInformation, 'getQuantity')
-    def getQuantity(self):
-      """
-        Computes a quantity which allows to reach inventory
-
-        Bug fix method for Coramy purpose - Coramy used production_quantity as property
-        list of mapped value which generated errors of stock. It can be safely removed in
-        the near future.
-      """
-      aself = aq_base(self)
-      if hasattr(aself, 'production_quantity') or  hasattr(aself, 'consumption_quantity'):
-        # Error - we must fix this
-        if getattr(aself, 'production_quantity', 0.0) > 0.0:
-          self.setProductionQuantity(aself.production_quantity)
-        elif getattr(aself, 'consumption_quantity', 0.0) > 0.0:
-          self.setConsumptionQuantity(aself.consumption_quantity)
-        if hasattr(aself, 'production_quantity'):
-          delattr(self, 'production_quantity')
-        if hasattr(aself, 'consumption_quantity'):
-          delattr(self, 'consumption_quantity')
-        if hasattr(self, 'mapped_value_property_list'):
-          if 'consumption_quantity' in self.mapped_value_property_list:
-            self.mapped_value_property_list = filter(lambda s: s != 'consumption_quantity'
-                                                             , self.mapped_value_property_list)
-          if 'production_quantity' in self.mapped_value_property_list:
-            self.mapped_value_property_list = filter(lambda s: s != 'production_quantity'
-                                                             , self.mapped_value_property_list)
-          if 'quantity' not in self.mapped_value_property_list:
-            self.mapped_value_property_list = list(self.mapped_value_property_list) + ['quantity']
-      # First check if quantity already exists
-      quantity = self._baseGetQuantity()
-      if quantity not in (0.0, 0, None):
-        return quantity
-      # Make sure inventory is defined somewhere (here or parent)
-      if getattr(aq_base(self), 'inventory', None) is None:
-        return 0.0 # No inventory defined, so no quantity
-      # Find total of movements in the past - XXX
-      resource_value = self.getResourceValue()
-      if resource_value is not None:
-        # Inventories can only be done in "real" locations / sectinos, not categories thereof
-        #  -> therefore we use node and section
-        current_inventory = resource_value.getInventory( \
-                                at_date          = self.getStartDate()
-                              , variation_text   = self.getVariationText()
-                              , node             = self.getDestination()
-                              , section_category = self.getDestinationSection()  # We want to consolidate
-                              , simulation_state = self.getPortalCurrentInventoryStateList()
-                              )
-        inventory = self.getInventory()
-        if current_inventory in (None, ''):
-          current_inventory = 0.0
-        return self.getInventory() - current_inventory
-      return self.getInventory()
-
-    security.declareProtected( Permissions.AccessContentsInformation, 'getInventory' )
-    def getInventory(self):
+    security.declareProtected(Permissions.AccessContentsInformation, 'getTotalInventory')
+    def getTotalInventory(self):
       """
-        No acquisition for inventories: either defined or None
+        Returns the inventory if no cell or the total inventory if cells
       """
-      if 'inventory' in self.getMappedValuePropertyList([]):
-        return getattr(aq_base(self), 'inventory', None)
+      if not self.hasCellContent():
+        return self.getInventory()
       else:
-        return None # return None
-
-    def _setItemIdList(self, value):
-      """
-        Computes total_quantity of all given items and stores this total_quantity
-        in the inventory attribute of the cell
-      """
-      if value is None:
-        return
-      previous_item_list = self.getAggregateValueList()
-      given_item_id_list = value
-      item_object_list = []
-      for item in given_item_id_list:
-        item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
-        if len(item_result_list) == 1:
-          try:
-            object = item_result_list[0].getObject()
-          except:
-            object = None
-        else:
-          object = None
-        if object is not None:
-          # if item was in previous_item_list keep it
-          if object in previous_item_list:
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-          # if new item verify if variated_resource of item == variated_resource of movement
-          elif (self.getResource() == object.getResource()) \
-           and (self.getVariationCategoryList() == object.getVariationCategoryList()):
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-      # update item_id_list and build relation
-      self.setAggregateValueList(item_object_list)
-      # update inventory if needed
-      if len(item_object_list) > 0:
-        quantity = 0
-        for object_item in item_object_list:
-          quantity += object_item.getRemainingQuantity()
-        self.setInventory(quantity)
+        # Use MySQL
+        aggregate = self.InventoryLine_zGetTotal()[0]
+        return aggregate.total_inventory or 0.0
 
-    def _setProducedItemIdList(self, value):
-      """
-        Computes total_quantity of all given items and stores this total_quantity
-        in the quantity attribute of the cell
-      """
-      if value is None:
-        return
-      previous_item_list = self.getAggregateValueList()
-      given_item_id_list = value
-      item_object_list = []
-      for item in given_item_id_list:
-        item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
-        if len(item_result_list) == 1:
-          try:
-            object = item_result_list[0].getObject()
-          except:
-            object = None
-        else:
-          object = None
-        if object is not None:
-          # if item was in previous_item_list keep it
-          if object in previous_item_list:
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-          # if new item verify if variated_resource of item == variated_resource of movement
-          elif (self.getResource() == object.getResource()) \
-           and (self.getVariationCategoryList() == object.getVariationCategoryList()):
-            # now verify if item can be moved (not already done)
-            last_location_title = object.getLastLocationTitle()
-            if self.getDestinationTitle() != last_location_title or last_location_title == '':
-              # we can add this item to the list of aggregated items
-              item_object_list.append(object)
-      # update item_id_list and build relation
-      self.setAggregateValueList(item_object_list)
-      # update inventory if needed
-      if len(item_object_list) > 0:
-        quantity = 0
-        for object_item in item_object_list:
-          quantity += object_item.getQuantity()
-        self.setProductionQuantity(quantity)
-
-    def _setConsumedItemIdList(self, value):
-      """
-        Computes total_quantity of all given items and stores this total_quantity
-        in the quantity attribute of the cell
-      """
-      if value is None:
-        return
-      previous_item_list = self.getAggregateValueList()
-      given_item_id_list = value
-      item_object_list = []
-      for item in given_item_id_list:
-        item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
-        if len(item_result_list) == 1:
-          try :
-            object = item_result_list[0].getObject()
-          except :
-            object = None
-        else :
-          object = None
-        if object is not None:
-          # if item was in previous_item_list keep it
-          if object in previous_item_list:
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-          # if new item verify if variated_resource of item == variated_resource of movement
-          elif (self.getResource() == object.getResource()) \
-           and (self.getVariationCategoryList() == object.getVariationCategoryList()):
-            # now verify if item can be moved (not already done)
-            last_location_title = object.getLastLocationTitle()
-            if self.getDestinationTitle() == last_location_title or last_location_title == '':
-              # we can add this item to the list of aggregated items
-              item_object_list.append(object)
-      # update item_id_list and build relation
-      self.setAggregateValueList(item_object_list)
-      # update inventory if needed
-      if len(item_object_list) > 0:
-        quantity = 0
-        for object_item in item_object_list:
-          quantity += object_item.getRemainingQuantity()
-          # we reset the location of the item
-          object_item.setLocation('')
-        self.setConsumptionQuantity(quantity)
-
-    def getProducedItemIdList(self):
-      """
-        Returns list of items if production_quantity != 0.0
-      """
-      if self.getProductionQuantity() != 0.0:
-        return self.getItemIdList()
-      else:
-        return []
-
-    def getConsumedItemIdList(self):
+    security.declareProtected(Permissions.AccessContentsInformation, 'getQuantity')
+    def getQuantity(self):
       """
-        Returns list of items if consumption_quantity != 0.0
+        Computes a quantity which allows to reach inventory
       """
-      if self.getConsumptionQuantity() != 0.0:
-        return self.getItemIdList()
+      if not self.hasCellContent():
+        # First check if quantity already exists
+        quantity = self._baseGetQuantity()
+        if quantity not in (0.0, 0, None):
+          return quantity
+        # Make sure inventory is defined somewhere (here or parent)
+        if getattr(aq_base(self), 'inventory', None) is None:
+          return 0.0 # No inventory defined, so no quantity
+        # Find total of movements in the past - XXX
+        resource_value = self.getResourceValue()
+        if resource_value is not None:
+          # Inventories can only be done in "real" locations / sectinos, not categories thereof
+          #  -> therefore we use node and section
+          current_inventory = resource_value.getInventory( \
+                                  to_date          = self.getStartDate()
+                                , variation_text   = self.getVariationText()
+                                , node             = self.getDestination()
+                                , section_category = self.getDestinationSection()
+                                , simulation_state = self.getPortalCurrentInventoryStateList()
+                                )
+          inventory = self.getInventory()
+          if current_inventory in (None, ''):
+            current_inventory = 0.0
+          return self.getInventory() - current_inventory
+        return self.getInventory()
       else:
-        return []
+        return None
+      
+      
+# XXX Following methods should be useless now
+#     security.declareProtected( Permissions.AccessContentsInformation, 'getInventory' )
+#     def getInventory(self):
+#       """
+#         No acquisition for inventories: either defined or None
+#       """
+#       if 'inventory' in self.getMappedValuePropertyList([]):
+#         return getattr(aq_base(self), 'inventory', None)
+#       else:
+#         return None # return None
+# 
+#     def _setItemIdList(self, value):
+#       """
+#         Computes total_quantity of all given items and stores this total_quantity
+#         in the inventory attribute of the cell
+#       """
+#       if value is None:
+#         return
+#       previous_item_list = self.getAggregateValueList()
+#       given_item_id_list = value
+#       item_object_list = []
+#       for item in given_item_id_list:
+#         item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
+#         if len(item_result_list) == 1:
+#           try:
+#             object = item_result_list[0].getObject()
+#           except:
+#             object = None
+#         else:
+#           object = None
+#         if object is not None:
+#           # if item was in previous_item_list keep it
+#           if object in previous_item_list:
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#           # if new item verify if variated_resource of item == variated_resource of movement
+#           elif (self.getResource() == object.getResource()) \
+#            and (self.getVariationCategoryList() == object.getVariationCategoryList()):
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#       # update item_id_list and build relation
+#       self.setAggregateValueList(item_object_list)
+#       # update inventory if needed
+#       if len(item_object_list) > 0:
+#         quantity = 0
+#         for object_item in item_object_list:
+#           quantity += object_item.getRemainingQuantity()
+#         self.setInventory(quantity)
+# 
+#     def _setProducedItemIdList(self, value):
+#       """
+#         Computes total_quantity of all given items and stores this total_quantity
+#         in the quantity attribute of the cell
+#       """
+#       if value is None:
+#         return
+#       previous_item_list = self.getAggregateValueList()
+#       given_item_id_list = value
+#       item_object_list = []
+#       for item in given_item_id_list:
+#         item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
+#         if len(item_result_list) == 1:
+#           try:
+#             object = item_result_list[0].getObject()
+#           except:
+#             object = None
+#         else:
+#           object = None
+#         if object is not None:
+#           # if item was in previous_item_list keep it
+#           if object in previous_item_list:
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#           # if new item verify if variated_resource of item == variated_resource of movement
+#           elif (self.getResource() == object.getResource()) \
+#            and (self.getVariationCategoryList() == object.getVariationCategoryList()):
+#             # now verify if item can be moved (not already done)
+#             last_location_title = object.getLastLocationTitle()
+#             if self.getDestinationTitle() != last_location_title or last_location_title == '':
+#               # we can add this item to the list of aggregated items
+#               item_object_list.append(object)
+#       # update item_id_list and build relation
+#       self.setAggregateValueList(item_object_list)
+#       # update inventory if needed
+#       if len(item_object_list) > 0:
+#         quantity = 0
+#         for object_item in item_object_list:
+#           quantity += object_item.getQuantity()
+#         self.setProductionQuantity(quantity)
+# 
+#     def _setConsumedItemIdList(self, value):
+#       """
+#         Computes total_quantity of all given items and stores this total_quantity
+#         in the quantity attribute of the cell
+#       """
+#       if value is None:
+#         return
+#       previous_item_list = self.getAggregateValueList()
+#       given_item_id_list = value
+#       item_object_list = []
+#       for item in given_item_id_list:
+#         item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
+#         if len(item_result_list) == 1:
+#           try :
+#             object = item_result_list[0].getObject()
+#           except :
+#             object = None
+#         else :
+#           object = None
+#         if object is not None:
+#           # if item was in previous_item_list keep it
+#           if object in previous_item_list:
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#           # if new item verify if variated_resource of item == variated_resource of movement
+#           elif (self.getResource() == object.getResource()) \
+#            and (self.getVariationCategoryList() == object.getVariationCategoryList()):
+#             # now verify if item can be moved (not already done)
+#             last_location_title = object.getLastLocationTitle()
+#             if self.getDestinationTitle() == last_location_title or last_location_title == '':
+#               # we can add this item to the list of aggregated items
+#               item_object_list.append(object)
+#       # update item_id_list and build relation
+#       self.setAggregateValueList(item_object_list)
+#       # update inventory if needed
+#       if len(item_object_list) > 0:
+#         quantity = 0
+#         for object_item in item_object_list:
+#           quantity += object_item.getRemainingQuantity()
+#           # we reset the location of the item
+#           object_item.setLocation('')
+#         self.setConsumptionQuantity(quantity)
+# 
+#     def getProducedItemIdList(self):
+#       """
+#         Returns list of items if production_quantity != 0.0
+#       """
+#       if self.getProductionQuantity() != 0.0:
+#         return self.getItemIdList()
+#       else:
+#         return []
+# 
+#     def getConsumedItemIdList(self):
+#       """
+#         Returns list of items if consumption_quantity != 0.0
+#       """
+#       if self.getConsumptionQuantity() != 0.0:
+#         return self.getItemIdList()
+#       else:
+#         return []
 
     # Inventory cataloging
     security.declareProtected(Permissions.AccessContentsInformation, 'getConvertedInventory')
diff --git a/product/ERP5/Document/InventoryLine.py b/product/ERP5/Document/InventoryLine.py
index cc366d7c22..1cba90bfcb 100755
--- a/product/ERP5/Document/InventoryLine.py
+++ b/product/ERP5/Document/InventoryLine.py
@@ -68,21 +68,16 @@ class InventoryLine(DeliveryLine):
                       )
 
     def _edit(self, REQUEST=None, force_update = 0, **kw):
-      kw = kw.copy()
-      item_id_list = kw.get('item_id_list', None)
-      if item_id_list is not None: del kw['item_id_list']
-      produced_item_id_list = kw.get('produced_item_id_list', None)
-      if produced_item_id_list is not None: del kw['produced_item_id_list']
-      consumed_item_id_list = kw.get('consumed_item_id_list', None)
-      if consumed_item_id_list is not None: del kw['consumed_item_id_list']
       DeliveryLine._edit(self, REQUEST=REQUEST, force_update = force_update, **kw)
-      # Update consumption last
-      if item_id_list is not None:
-        self._setItemIdList(item_id_list)
-      if produced_item_id_list is not None :
-        self._setProducedItemIdList(produced_item_id_list)
-      if consumed_item_id_list is not None :
-        self._setConsumedItemIdList(consumed_item_id_list)
+      # Calculate inventory
+      item_list = self.getAggregateValueList()
+      if len(item_list) > 0:
+        inventory = 0
+        for item in item_list:
+          if item.getQuantity() not in (None, ''):
+            inventory += item.getQuantity()
+        self.setInventory(inventory)
+      
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getTotalInventory')
     def getTotalInventory(self):
@@ -115,159 +110,162 @@ class InventoryLine(DeliveryLine):
           # Inventories can only be done in "real" locations / sectinos, not categories thereof
           #  -> therefore we use node and section
           current_inventory = resource_value.getInventory( \
-                                  at_date          = self.getStartDate()
+                                  to_date          = self.getStartDate()
                                 , variation_text   = self.getVariationText()
                                 , node             = self.getDestination()
-                                , section_category = self.getDestinationSection()
+                                , section = self.getDestinationSection() #section_category
                                 , simulation_state = self.getPortalCurrentInventoryStateList()
                                 )
           inventory = self.getInventory()
           if current_inventory in (None, ''):
             current_inventory = 0.0
+          LOG('return 1', 0, '%s - %s' % (repr(self.getInventory()), repr(current_inventory)))
           return self.getInventory() - current_inventory
+        LOG('return 2', 0, repr(self.getInventory()))
         return self.getInventory()
       else:
         return None
 
-    def _setItemIdList(self, value):
-      """
-        Computes total_quantity of all given items and stores this total_quantity
-        in the inventory attribute of the cell
-      """
-      if value is None:
-        return
-      previous_item_list = self.getAggregateValueList()
-      given_item_id_list = value
-      item_object_list = []
-      for item in given_item_id_list:
-        item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
-        if len(item_result_list) == 1:
-          try:
-            object = item_result_list[0].getObject()
-          except :
-            object = None
-        else:
-          object = None
-        if object is not None:
-          # if item was in previous_item_list keep it
-          if object in previous_item_list:
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-          # if new item verify if variated_resource of item == variated_resource of movement
-          elif (self.getResource() == object.getResource()) \
-           and (self.getVariationCategoryList() == object.getVariationCategoryList()):
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-      # update item_id_list and build relation
-      self.setAggregateValueList(item_object_list)
-      # update inventory if needed
-      if len(item_object_list) > 0:
-        quantity = 0
-        for object_item in item_object_list:
-          quantity += object_item.getQuantity()
-        self.setInventory(quantity)
-
-    def _setProducedItemIdList(self, value):
-      """
-        Computes total_quantity of all given items and stores this total_quantity
-        in the quantity attribute of the cell
-      """
-      if value is None:
-        return
-      previous_item_list = self.getAggregateValueList()
-      given_item_id_list = value
-      item_object_list = []
-      for item in given_item_id_list:
-        item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
-        if len(item_result_list) == 1:
-          try:
-            object = item_result_list[0].getObject()
-          except:
-            object = None
-        else:
-          object = None
-        if object is not None:
-          # if item was in previous_item_list keep it
-          if object in previous_item_list:
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-          # if new item verify if variated_resource of item == variated_resource of movement
-          elif (self.getResource() == object.getResource()) \
-           and (self.getVariationCategoryList() == object.getVariationCategoryList()):
-            # now verify if item can be moved (not already done)
-            last_location_title = object.getLastLocationTitle()
-            if self.getDestinationTitle() != last_location_title or last_location_title == '':
-              # we can add this item to the list of aggregated items
-              item_object_list.append(object)
-      # update item_id_list and build relation
-      self.setAggregateValueList(item_object_list)
-      # update inventory if needed
-      if len(item_object_list) > 0:
-        quantity = 0
-        for object_item in item_object_list:
-          quantity += object_item.getQuantity()
-        self.setProductionQuantity(quantity)
-
-    def _setConsumedItemIdList(self, value):
-      """
-        Computes total_quantity of all given items and stores this total_quantity
-        in the quantity attribute of the cell
-      """
-      if value is None:
-        return
-      previous_item_list = self.getAggregateValueList()
-      given_item_id_list = value
-      item_object_list = []
-      for item in given_item_id_list:
-        item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
-        if len(item_result_list) == 1:
-          try:
-            object = item_result_list[0].getObject()
-          except:
-            object = None
-        else:
-          object = None
-        if object is not None:
-          # if item was in previous_item_list keep it
-          if object in previous_item_list:
-            # we can add this item to the list of aggregated items
-            item_object_list.append(object)
-          # if new item verify if variated_resource of item == variated_resource of movement
-          elif (self.getResource() == object.getResource()) \
-           and (self.getVariationCategoryList() == object.getVariationCategoryList()):
-            # now verify if item can be moved (not already done)
-            last_location_title = object.getLastLocationTitle()
-            if self.getDestinationTitle() == last_location_title or last_location_title == '':
-              # we can add this item to the list of aggregated items
-              item_object_list.append(object)
-      # update item_id_list and build relation
-      self.setAggregateValueList(item_object_list)
-      # update inventory if needed
-      if len(item_object_list) > 0:
-        quantity = 0
-        for object_item in item_object_list:
-          quantity += object_item.getRemainingQuantity()
-          # we reset the location of the item
-          object_item.setLocation('')
-        self.setConsumptionQuantity(quantity)
-
-    def getProducedItemIdList(self):
-      """
-        Returns list of items if production_quantity != 0.0
-      """
-      if self.getProductionQuantity() != 0.0:
-        return self.getItemIdList()
-      else:
-        return []
-
-    def getConsumedItemIdList(self):
-      """
-        Returns list of items if consumption_quantity != 0.0
-      """
-      if self.getConsumptionQuantity() != 0.0:
-        return self.getItemIdList()
-      else:
-        return []
+# XXX Following method should be useless now
+#     def _setItemIdList(self, value):
+#       """
+#         Computes total_quantity of all given items and stores this total_quantity
+#         in the inventory attribute of the cell
+#       """
+#       if value is None:
+#         return
+#       previous_item_list = self.getAggregateValueList()
+#       given_item_id_list = value
+#       item_object_list = []
+#       for item in given_item_id_list:
+#         item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
+#         if len(item_result_list) == 1:
+#           try:
+#             object = item_result_list[0].getObject()
+#           except :
+#             object = None
+#         else:
+#           object = None
+#         if object is not None:
+#           # if item was in previous_item_list keep it
+#           if object in previous_item_list:
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#           # if new item verify if variated_resource of item == variated_resource of movement
+#           elif (self.getResource() == object.getResource()) \
+#            and (self.getVariationCategoryList() == object.getVariationCategoryList()):
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#       # update item_id_list and build relation
+#       self.setAggregateValueList(item_object_list)
+#       # update inventory if needed
+#       if len(item_object_list) > 0:
+#         quantity = 0
+#         for object_item in item_object_list:
+#           quantity += object_item.getQuantity()
+#         self.setInventory(quantity)
+# 
+#     def _setProducedItemIdList(self, value):
+#       """
+#         Computes total_quantity of all given items and stores this total_quantity
+#         in the quantity attribute of the cell
+#       """
+#       if value is None:
+#         return
+#       previous_item_list = self.getAggregateValueList()
+#       given_item_id_list = value
+#       item_object_list = []
+#       for item in given_item_id_list:
+#         item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
+#         if len(item_result_list) == 1:
+#           try:
+#             object = item_result_list[0].getObject()
+#           except:
+#             object = None
+#         else:
+#           object = None
+#         if object is not None:
+#           # if item was in previous_item_list keep it
+#           if object in previous_item_list:
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#           # if new item verify if variated_resource of item == variated_resource of movement
+#           elif (self.getResource() == object.getResource()) \
+#            and (self.getVariationCategoryList() == object.getVariationCategoryList()):
+#             # now verify if item can be moved (not already done)
+#             last_location_title = object.getLastLocationTitle()
+#             if self.getDestinationTitle() != last_location_title or last_location_title == '':
+#               # we can add this item to the list of aggregated items
+#               item_object_list.append(object)
+#       # update item_id_list and build relation
+#       self.setAggregateValueList(item_object_list)
+#       # update inventory if needed
+#       if len(item_object_list) > 0:
+#         quantity = 0
+#         for object_item in item_object_list:
+#           quantity += object_item.getQuantity()
+#         self.setProductionQuantity(quantity)
+# 
+#     def _setConsumedItemIdList(self, value):
+#       """
+#         Computes total_quantity of all given items and stores this total_quantity
+#         in the quantity attribute of the cell
+#       """
+#       if value is None:
+#         return
+#       previous_item_list = self.getAggregateValueList()
+#       given_item_id_list = value
+#       item_object_list = []
+#       for item in given_item_id_list:
+#         item_result_list = self.portal_catalog(id=item, portal_type="Piece Tissu")
+#         if len(item_result_list) == 1:
+#           try:
+#             object = item_result_list[0].getObject()
+#           except:
+#             object = None
+#         else:
+#           object = None
+#         if object is not None:
+#           # if item was in previous_item_list keep it
+#           if object in previous_item_list:
+#             # we can add this item to the list of aggregated items
+#             item_object_list.append(object)
+#           # if new item verify if variated_resource of item == variated_resource of movement
+#           elif (self.getResource() == object.getResource()) \
+#            and (self.getVariationCategoryList() == object.getVariationCategoryList()):
+#             # now verify if item can be moved (not already done)
+#             last_location_title = object.getLastLocationTitle()
+#             if self.getDestinationTitle() == last_location_title or last_location_title == '':
+#               # we can add this item to the list of aggregated items
+#               item_object_list.append(object)
+#       # update item_id_list and build relation
+#       self.setAggregateValueList(item_object_list)
+#       # update inventory if needed
+#       if len(item_object_list) > 0:
+#         quantity = 0
+#         for object_item in item_object_list:
+#           quantity += object_item.getRemainingQuantity()
+#           # we reset the location of the item
+#           object_item.setLocation('')
+#         self.setConsumptionQuantity(quantity)
+# 
+#     def getProducedItemIdList(self):
+#       """
+#         Returns list of items if production_quantity != 0.0
+#       """
+#       if self.getProductionQuantity() != 0.0:
+#         return self.getItemIdList()
+#       else:
+#         return []
+# 
+#     def getConsumedItemIdList(self):
+#       """
+#         Returns list of items if consumption_quantity != 0.0
+#       """
+#       if self.getConsumptionQuantity() != 0.0:
+#         return self.getItemIdList()
+#       else:
+#         return []
 
     # Inventory cataloging
     security.declareProtected(Permissions.AccessContentsInformation, 'getConvertedInventory')
-- 
2.30.9