From af44327d1c9ea20ca7cedd06119f7b2a5320775c Mon Sep 17 00:00:00 2001
From: Jean-Paul Smets <jp@nexedi.com>
Date: Mon, 7 Jun 2010 21:08:05 +0000
Subject: [PATCH] Hacked to work forcibly.

git-svn-id: https://svn.erp5.org/repos/public/erp5/sandbox/amount_generator@36065 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/Document/SubscriptionItem.py | 34 +++++++++++++++--------
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/product/ERP5/Document/SubscriptionItem.py b/product/ERP5/Document/SubscriptionItem.py
index 2a5d1cdfb6..1cde3d8e67 100644
--- a/product/ERP5/Document/SubscriptionItem.py
+++ b/product/ERP5/Document/SubscriptionItem.py
@@ -36,6 +36,8 @@ from Products.ERP5.Document.Item import Item
 from Products.ERP5.mixin.rule import MovementGeneratorMixin
 from Products.ERP5.mixin.periodicity import PeriodicityMixin
 
+from zLOG import LOG
+
 class SubscriptionItem(Item, MovementGeneratorMixin, PeriodicityMixin):
   """
     A SubscriptionItem is an Item which expands itself
@@ -138,6 +140,10 @@ class SubscriptionItem(Item, MovementGeneratorMixin, PeriodicityMixin):
     return my_applied_rule
 
   # IMovementGenerator interface implementation
+  def _getUpdatePropertyDict(self, input_movement):
+    # Default implementation bellow can be overriden by subclasses
+    return {}
+
   def _getInputMovementList(self, movement_list=None, rounding=None):
     """
       Generate the list of input movements by looking at all
@@ -146,13 +152,15 @@ class SubscriptionItem(Item, MovementGeneratorMixin, PeriodicityMixin):
       TODO: clever handling of quantity (based on the nature
       of resource, ie. float or unit)
     """
+    from Products.ERP5Type.Document import newTempMovement
     result = []
     catalog_tool = getToolByName(self, 'portal_catalog')
 
     # Try to find the source open order
     open_order_movement_list = self.getAggregateRelatedValueList(
-                portal_type="Open Order Line") # XXX-JPS Hard Coded    
-    if not open_order_movement_list: return result
+                portal_type="Open Sale Order Line") # XXX-JPS Hard Coded    
+    if not open_order_movement_list:
+      return result
 
     # Find out which parent open orders
     explanation_uid_list = map(lambda x:x.getParentUid(), open_order_movement_list) # Instead, should call getDeliveryValue or equivalent
@@ -161,10 +169,10 @@ class SubscriptionItem(Item, MovementGeneratorMixin, PeriodicityMixin):
 
     # Now generate movements for each valid open order
     for movement in open_order_movement_list:
-      if movement.getParentValue().getValidationState() == 'open': # XXX-JPS hard coding
+      if movement.getParentValue().getValidationState() in ('open', 'validated'): # XXX-JPS hard coding
         resource = movement.getResource()
-        start_date = movement.getStartDate()
-        stop_date = movement.getStopDate()
+        start_date = movement.getStartDateRangeMin() # Is this appropriate ?
+        stop_date = movement.getStartDateRangeMax() # Is this appropriate ?
         source = movement.getSource()
         source_section = movement.getSourceSection()
         destination = movement.getDestination()
@@ -172,11 +180,13 @@ class SubscriptionItem(Item, MovementGeneratorMixin, PeriodicityMixin):
         quantity = self.getQuantity() # Is it so ? XXX-JPS
         quantity_unit = movement.getQuantityUnit()
         price = movement.getPrice()
-        current_date = start_date
+        specialise = movement.getSpecialise()
+        current_date = self.getNextPeriodicalDate(start_date)
+        id_index = 0
         while current_date < stop_date:
           next_date = self.getNextPeriodicalDate(current_date)
-          movement = self.newContent(temp_object=1,  
-                                     portal_type='Sale Order Line', # XXX-JPS Hard Coded
+          generated_movement = newTempMovement(self, 'subscription_%s' % id_index)
+          generated_movement._edit(  aggregate_value=self,
                                      resource=resource,
                                      quantity=quantity,
                                      quantity_unit=quantity_unit,
@@ -187,10 +197,12 @@ class SubscriptionItem(Item, MovementGeneratorMixin, PeriodicityMixin):
                                      source_section=source_section,
                                      destination=destination,
                                      destination_section=destination_section,
-                                     delivery_value=movement # ???
+                                     specialise=specialise,
+                                #     delivery_value=movement # ??? to be confirmed - if we want order step or not
                                     )
-          result.append(movement)
+          result.append(generated_movement)
           current_date = next_date
+          id_index += 1
 
     # And now return result
-    return result
+    return result
\ No newline at end of file
-- 
2.30.9