Commit a79ec10b authored by Romain Courteaud's avatar Romain Courteaud

Copy properties on the Simulation Movement, instead of using acquisition.

Thanks to Rafael Monnerat.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@9866 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 61256a59
...@@ -95,10 +95,11 @@ class OrderRule(DeliveryRule): ...@@ -95,10 +95,11 @@ class OrderRule(DeliveryRule):
else: else:
existing_movement_list.append(movement) existing_movement_list.append(movement)
immutable_movement_list.append(movement) immutable_movement_list.append(movement)
# Create or modify movements # Create or modify movements
for movement in order_movement_list: for movement in order_movement_list:
related_order = movement.getOrderRelatedValue() related_order = movement.getOrderRelatedValue()
property_dict = self._getExpandablePropertyDict(applied_rule, movement)
if related_order is None: if related_order is None:
if movement.getParentUid() == movement.getExplanationUid(): if movement.getParentUid() == movement.getExplanationUid():
# We are on a line # We are on a line
...@@ -107,7 +108,6 @@ class OrderRule(DeliveryRule): ...@@ -107,7 +108,6 @@ class OrderRule(DeliveryRule):
# We are on a cell # We are on a cell
new_id = "%s_%s" % (movement.getParentId(), movement.getId()) new_id = "%s_%s" % (movement.getParentId(), movement.getId())
# Generate a simulation movement # Generate a simulation movement
LOG("OrderRule, expand", WARNING, "Hardcoded state list")
applied_rule.newContent( applied_rule.newContent(
portal_type=movement_type, portal_type=movement_type,
id=new_id, id=new_id,
...@@ -115,34 +115,15 @@ class OrderRule(DeliveryRule): ...@@ -115,34 +115,15 @@ class OrderRule(DeliveryRule):
order_ratio=1, order_ratio=1,
delivery_ratio=1, delivery_ratio=1,
deliverable=1, deliverable=1,
# source=movement.getSource(), **property_dict )
# source_section=movement.getSourceSection(),
# destination=movement.getDestination(),
# destination_section=movement.getDestinationSection(),
# quantity=movement.getQuantity(),
# resource=movement.getResource(),
# variation_category_list=movement.getVariationCategoryList(),
# variation_property_dict=movement.getVariationPropertyDict(),
# start_date=movement.getStartDate(),
# stop_date=movement.getStopDate(),
**kw)
elif related_order in existing_movement_list: elif related_order in existing_movement_list:
if related_order not in immutable_movement_list: if related_order not in immutable_movement_list:
# modification allowed # modification allowed
related_order.edit( related_order.edit(
order_value=movement, order_value=movement,
# source=movement.getSource(), **property_dict)
# source_section=movement.getSourceSection(),
# destination=movement.getDestination(),
# destination_section=movement.getDestinationSection(),
# quantity=movement.getQuantity(),
# resource=movement.getResource(),
# variation_category_list=movement.getVariationCategoryList(),
# variation_property_dict=movement.getVariationPropertyDict(),
# start_date=movement.getStartDate(),
# stop_date=movement.getStopDate(),
**kw)
#related_order.setLastExpandSimulationState(order.getSimulationState()) #related_order.setLastExpandSimulationState(order.getSimulationState())
else: else:
...@@ -169,3 +150,26 @@ class OrderRule(DeliveryRule): ...@@ -169,3 +150,26 @@ class OrderRule(DeliveryRule):
Checks that the movement is divergent Checks that the movement is divergent
""" """
return Rule.isDivergent(self, movement) return Rule.isDivergent(self, movement)
security.declareProtected(Permissions.AccessContentsInformation,
'_getExpandablePropertyDict')
def _getExpandablePropertyDict(self, applied_rule, movement,
default_property_list=None, **kw):
"""
Return a Dictionary with the Properties used to edit
the simulation movement
"""
property_dict = {}
if default_property_list is None:
LOG("Order Rule , _getPropertiesTo", WARNING,
"Hardcoded properties set")
default_property_list = (
'source_section', 'destination_section', 'source',
'destination', 'resource', 'variation_category_list',
'aggregate_list', 'start_date', 'stop_date')
for prop in default_property_list:
property_dict[prop] = movement.getProperty(prop)
return property_dict
...@@ -33,7 +33,7 @@ from Products.ERP5.Document.OrderRule import OrderRule ...@@ -33,7 +33,7 @@ from Products.ERP5.Document.OrderRule import OrderRule
from Products.ERP5.Document.TransformationSourcingRule import\ from Products.ERP5.Document.TransformationSourcingRule import\
TransformationSourcingRuleMixin TransformationSourcingRuleMixin
from zLOG import LOG from zLOG import LOG, WARNING
class ProductionOrderRule(OrderRule): class ProductionOrderRule(OrderRule):
""" """
...@@ -60,14 +60,26 @@ class ProductionOrderRule(OrderRule): ...@@ -60,14 +60,26 @@ class ProductionOrderRule(OrderRule):
) )
# Simulation workflow # Simulation workflow
security.declareProtected(Permissions.ModifyPortalContent, 'expand') security.declareProtected(Permissions.AccessContentsInformation,
def expand(self, applied_rule, force=0, **kw): '_getExpandablePropertyDict')
def _getExpandablePropertyDict(self, applied_rule, movement,
default_property_list=None, **kw):
""" """
Expands the current movement downward. Return a Dictionary with the Properties used to edit
-> new status -> expanded the simulation movement.
An applied rule can be expanded only if its parent movement
is expanded.
""" """
property_dict = {}
if default_property_list is None:
LOG("Order Rule , _getExpandablePropertyDict", WARNING,
"Hardcoded properties set")
default_property_list = (
'destination_section',
'destination', 'resource',
'variation_category_list',
'aggregate_list',
'start_date', 'stop_date')
supply_chain = self.getSupplyChain(applied_rule) supply_chain = self.getSupplyChain(applied_rule)
# We got a supply chain # We got a supply chain
# Try to get the last SupplyLink # Try to get the last SupplyLink
...@@ -76,14 +88,17 @@ class ProductionOrderRule(OrderRule): ...@@ -76,14 +88,17 @@ class ProductionOrderRule(OrderRule):
# Now, we have to generate Simulation Movement, in order to # Now, we have to generate Simulation Movement, in order to
# create a ProductionPackingList. # create a ProductionPackingList.
destination_node = last_link.getDestinationValue() destination_node = last_link.getDestinationValue()
source_value = destination_node.getDestinationValue() source_value = destination_node.getDestination()
source_section_value = last_link.getDestinationSectionValue() source_section_value = last_link.getDestinationSection()
if source_value is not None: if source_value is not None:
kw["source_value"] = source_value property_dict["source"] = source_value
if source_section_value is not None: if source_section_value is not None:
kw["source_section_value"] = source_section_value property_dict["source_section"] = source_section_value
# Pass to base class
OrderRule.expand(self, applied_rule, force=force, **kw) for prop in default_property_list:
property_dict[prop] = movement.getProperty(prop)
return property_dict
from Products.ERP5Type.Utils import monkeyPatch from Products.ERP5Type.Utils import monkeyPatch
monkeyPatch(TransformationSourcingRuleMixin, ProductionOrderRule) monkeyPatch(TransformationSourcingRuleMixin, ProductionOrderRule)
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