Commit 04c6f717 authored by Sebastien Robin's avatar Sebastien Robin

new way of indexing inventories, we insert dummy lines in the stock table


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@4799 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent b69518c5
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.Delivery import Delivery from Products.ERP5.Document.Delivery import Delivery
from Acquisition import aq_base
from zLOG import LOG
class Inventory(Delivery): class Inventory(Delivery):
""" """
...@@ -64,3 +66,87 @@ class Inventory(Delivery): ...@@ -64,3 +66,87 @@ class Inventory(Delivery):
Returns the current state in simulation Returns the current state in simulation
""" """
return 'delivered' # For now, consider that Inventory has no workflow XXX return 'delivered' # For now, consider that Inventory has no workflow XXX
def immediateReindexObject(self,**kw):
"""
Rewrite reindexObject so that we can insert lines in stock table
to make sure all stock values for resources in this inventory
is equal to null before the date of this inventory
"""
resource_and_variation_list = []
stock_object_list = []
from Products.ERP5Type.Document import newTempDeliveryLine
start_date = self.getStartDate()
node = self.getDestination()
for movement in self.getMovementList():
resource = movement.getResourceValue()
variation_text = movement.getVariationText()
if (resource,variation_text) not in resource_and_variation_list:
resource_and_variation_list.append((resource,variation_text))
current_inventory_list = resource.getInventoryList( \
to_date = start_date
, variation_text = variation_text
, node = node
, simulation_state = self.getPortalCurrentInventoryStateList()
, group_by_sub_variation = 1
, group_by_variation = 1
)
kwd = {'uid':self.getUid()}
kwd['start_date'] = start_date
variation_list = variation_text.split('/n')
for inventory in current_inventory_list:
sub_variation_list = []
if inventory.sub_variation_text is not None:
sub_variation_list = inventory.sub_variation_text.split('\n')
category_list = self.getCategoryList()
if inventory.total_quantity != 0:
temp_delivery_line = newTempDeliveryLine(self,
self.getId())
kwd['quantity'] = - inventory.total_quantity
category_list.append('resource/%s' % inventory.resource_relative_url)
category_list.extend(variation_list)
category_list.extend(sub_variation_list)
kwd['category_list'] = category_list
temp_delivery_line.edit(**kwd)
stock_object_list.append(temp_delivery_line)
object_list = [self]
self.portal_catalog.catalogObjectList(object_list)
self.portal_catalog.catalogObjectList(stock_object_list,
method_id_list=('z_catalog_stock_list',),
disable_cache=1)
security.declarePublic( 'recursiveReindexObject' )
def recursiveReindexObject(self, *args, **kw):
"""
Do not use group_method_id for the inventory, but it can
be used for inventory lines and cells
"""
root_indexable = int(getattr(self.getPortalObject(),'isIndexable',1))
self._reindexObject()
if self.isIndexable and root_indexable:
self.activate(group_method_id='portal_catalog/catalogObjectList',
expand_method_id='getIndexableChildValueList',
**kw).recursiveImmediateReindexObject(*args, **kw)
security.declareProtected( Permissions.AccessContentsInformation, 'getIndexableChildValueList' )
def getIndexableChildValueList(self):
"""
Get indexable childen recursively.
"""
value_list = []
if self.isIndexable:
#value_list.append(self) # do not include self
for c in self.objectValues():
if hasattr(aq_base(c), 'getIndexableChildValueList'):
value_list.extend(c.getIndexableChildValueList())
return value_list
def _reindexObject(self, *args, **kw):
"""
Defined here because we want to
Make sure to call without the group_method_id for inventories
"""
root_indexable = int(getattr(self.getPortalObject(),'isIndexable',1))
if self.isIndexable and root_indexable:
self.activate(**kw).immediateReindexObject(*args, **kw)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment