Commit 37d61e23 authored by Rafael Monnerat's avatar Rafael Monnerat Committed by Xiaowu Zhang

Make Builder able to generate Temp Objects

 Introduce temp_object parameter on builder.build() and propagate it
 over until the newContent() calls. This change allow use create
 Temporary Documents intestead real ones, like a "preview".
parent da08eb9b
......@@ -320,7 +320,8 @@ class SimulatedDeliveryBuilder(BuilderMixin):
solveDivergence = UnrestrictedMethod(_solveDivergence)
def _createDelivery(self, delivery_module, movement_list, activate_kw):
def _createDelivery(self, delivery_module, movement_list, activate_kw,
temp_object):
"""
Refer to the docstring in GeneratedDeliveryBuilder.
Unlike GeneratedDeliveryBuilder, SimulatedDeliveryBuilder needs to respect
......@@ -336,7 +337,7 @@ class SimulatedDeliveryBuilder(BuilderMixin):
# from scratch
new_delivery_id = str(delivery_module.generateNewId())
delivery = super(SimulatedDeliveryBuilder, self)._createDelivery(
delivery_module, movement_list, activate_kw)
delivery_module, movement_list, activate_kw, temp_object)
else:
# from duplicated original delivery
cp = tryMethodCallWithTemporaryPermission(
......@@ -353,7 +354,8 @@ class SimulatedDeliveryBuilder(BuilderMixin):
return delivery
def _createDeliveryLine(self, delivery, movement_list, activate_kw):
def _createDeliveryLine(self, delivery, movement_list, activate_kw,
temp_object):
"""
Refer to the docstring in GeneratedDeliveryBuilder.
Unlike GeneratedDeliveryBuilder, SimulatedDeliveryBuilder needs to respect
......@@ -370,6 +372,7 @@ class SimulatedDeliveryBuilder(BuilderMixin):
delivery_line = delivery.newContent(
portal_type=self.getDeliveryLinePortalType(),
variation_category_list=[],
temp_object=temp_object,
activate_kw=activate_kw)
else:
# from duplicated original line
......@@ -390,7 +393,7 @@ class SimulatedDeliveryBuilder(BuilderMixin):
return delivery_line
def _createDeliveryCell(self, delivery_line, movement, activate_kw,
base_id, cell_key):
base_id, cell_key, temp_object):
"""
Refer to the docstring in GeneratedDeliveryBuilder.
Unlike GeneratedDeliveryBuilder, SimulatedDeliveryBuilder needs to respect
......@@ -404,7 +407,7 @@ class SimulatedDeliveryBuilder(BuilderMixin):
# from scratch
cell = delivery_line.newCell(base_id=base_id, \
portal_type=self.getDeliveryCellPortalType(),
activate_kw=activate_kw,*cell_key)
activate_kw=activate_kw,temp_object=temp_object, *cell_key)
else:
# from duplicated original line
cp = tryMethodCallWithTemporaryPermission(
......
......@@ -100,7 +100,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
security.declarePublic('build')
def build(self, applied_rule_uid=None, movement_relative_url_list=None,
delivery_relative_url_list=None, movement_list=None,
explanation=None, business_link=None, activate_kw=None, **kw):
explanation=None, business_link=None, activate_kw=None,
temp_object=0, **kw):
"""
Build deliveries from a list of movements
......@@ -142,7 +143,7 @@ class BuilderMixin(XMLObject, Amount, Predicate):
root_group_node,
delivery_relative_url_list=delivery_relative_url_list,
movement_list=movement_list, activate_kw=activate_kw,
**kw)
temp_object=temp_object, **kw)
# Call a script after building
self.callAfterBuildingScript(delivery_list, movement_list, **kw)
return delivery_list
......@@ -321,7 +322,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
@UnrestrictedMethod
def buildDeliveryList(self, movement_group_node,
delivery_relative_url_list=None,
movement_list=None, update=True, **kw):
movement_list=None, update=True,
temp_object=0, **kw):
"""
Build deliveries from a list of movements
"""
......@@ -354,10 +356,12 @@ class BuilderMixin(XMLObject, Amount, Predicate):
movement_group_node,
self.getDeliveryMovementGroupList(),
delivery_to_update_list=delivery_to_update_list,
temp_object=temp_object,
**kw)
return delivery_list
def _createDelivery(self, delivery_module, movement_list, activate_kw):
def _createDelivery(self, delivery_module, movement_list, activate_kw,
temp_object):
"""
Create a new delivery in case where a builder may not update
an existing one.
......@@ -365,13 +369,15 @@ class BuilderMixin(XMLObject, Amount, Predicate):
return delivery_module.newContent(
portal_type=self.getDeliveryPortalType(),
created_by_builder=1,
activate_kw=activate_kw)
activate_kw=activate_kw,
temp_object=temp_object)
def _processDeliveryGroup(self, delivery_module, movement_group_node,
collect_order_list, movement_group_node_list=None,
delivery_to_update_list=None,
divergence_list=None,
activate_kw=None, force_update=0, **kw):
activate_kw=None, force_update=0,
temp_object=0, **kw):
"""
Build delivery from a list of movement
"""
......@@ -397,7 +403,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
delivery_to_update_list=delivery_to_update_list,
divergence_list=divergence_list,
activate_kw=activate_kw,
force_update=force_update)
force_update=force_update,
temp_object=temp_object)
delivery_list.extend(new_delivery_list)
force_update = 0
else:
......@@ -419,7 +426,7 @@ class BuilderMixin(XMLObject, Amount, Predicate):
if delivery is None:
delivery = self._createDelivery(delivery_module,
movement_group_node.getMovementList(),
activate_kw)
activate_kw, temp_object)
# Put properties on delivery
self._setUpdated(delivery, 'delivery')
if property_dict:
......@@ -434,11 +441,13 @@ class BuilderMixin(XMLObject, Amount, Predicate):
self.getDeliveryLineMovementGroupList()[1:],
divergence_list=divergence_list,
activate_kw=activate_kw,
force_update=force_update)
force_update=force_update,
temp_object=temp_object)
delivery_list.append(delivery)
return delivery_list
def _createDeliveryLine(self, delivery, movement_list, activate_kw):
def _createDeliveryLine(self, delivery, movement_list, activate_kw,
temp_object):
"""
Create a new delivery line in case where a builder may not update
an existing one.
......@@ -446,12 +455,14 @@ class BuilderMixin(XMLObject, Amount, Predicate):
return delivery.newContent(
portal_type=self.getDeliveryLinePortalType(),
created_by_builder=1,
activate_kw=activate_kw)
activate_kw=activate_kw,
temp_object=temp_object)
def _processDeliveryLineGroup(self, delivery, movement_group_node,
collect_order_list, movement_group_node_list=None,
divergence_list=None,
activate_kw=None, force_update=0, **kw):
activate_kw=None, force_update=0,
temp_object=0, **kw):
"""
Build delivery line from a list of movement on a delivery
"""
......@@ -472,7 +483,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
movement_group_node_list=movement_group_node_list,
divergence_list=divergence_list,
activate_kw=activate_kw,
force_update=force_update)
force_update=force_update,
temp_object=temp_object)
else:
# Test if we can update an existing line, or if we need to create a new
# one
......@@ -490,7 +502,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
delivery_line = self._createDeliveryLine(
delivery,
movement_group_node.getMovementList(),
activate_kw)
activate_kw,
temp_object)
# Put properties on delivery line
self._setUpdated(delivery_line, 'line')
if property_dict:
......@@ -506,7 +519,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
movement_group_node_list=movement_group_node_list,
divergence_list=divergence_list,
activate_kw=activate_kw,
force_update=force_update)
force_update=force_update,
temp_object=temp_object)
return
# Update variation category list on line
......@@ -532,7 +546,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
update_existing_line=update_existing_line,
divergence_list=divergence_list,
activate_kw=activate_kw,
force_update=force_update)
force_update=force_update,
temp_object=temp_object)
else:
self._processDeliveryCellGroup(
delivery_line,
......@@ -541,10 +556,11 @@ class BuilderMixin(XMLObject, Amount, Predicate):
update_existing_line=update_existing_line,
divergence_list=divergence_list,
activate_kw=activate_kw,
force_update=force_update)
force_update=force_update,
temp_object=temp_object)
def _createDeliveryCell(self, delivery_line, movement, activate_kw,
base_id, cell_key):
base_id, cell_key, temp_object):
"""
Create a new delivery cell in case where a builder may not update
an existing one.
......@@ -552,6 +568,7 @@ class BuilderMixin(XMLObject, Amount, Predicate):
cell = delivery_line.newCell(base_id=base_id,
portal_type=self.getDeliveryCellPortalType(),
activate_kw=activate_kw,
temp_object=temp_object,
*cell_key)
return cell
......@@ -559,7 +576,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
collect_order_list, movement_group_node_list=None,
update_existing_line=0,
divergence_list=None,
activate_kw=None, force_update=0):
activate_kw=None, force_update=0,
temp_object=0):
"""
Build delivery cell from a list of movement on a delivery line
or complete delivery line
......@@ -582,7 +600,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
update_existing_line=update_existing_line,
divergence_list=divergence_list,
activate_kw=activate_kw,
force_update=force_update)
force_update=force_update,
temp_object=temp_object)
else:
movement_list = movement_group_node.getMovementList()
if len(movement_list) != 1:
......@@ -636,7 +655,8 @@ class BuilderMixin(XMLObject, Amount, Predicate):
omit_optional_variation=1)
if not delivery_line.hasCell(base_id=base_id, *cell_key):
cell = self._createDeliveryCell(delivery_line, movement,
activate_kw, base_id, cell_key)
activate_kw, base_id, cell_key,
temp_object)
vcl = movement.getVariationCategoryList()
cell._edit(category_list=vcl,
# XXX hardcoded value
......
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