From ee29424ca51b8941f4d6e272bfca9846ec3b2ed1 Mon Sep 17 00:00:00 2001 From: Alain Takoudjou <alain.takoudjou@nexedi.com> Date: Mon, 13 Oct 2014 10:59:46 +0000 Subject: [PATCH] Support multiple open order line with the same effective_date. If 2 lines have the same effective date (catalog has a 1 second precision), always return the validate and open first. Commit: 02d06501ce38bc24d5d045968a53017d9b96b312 Changes applied from history: http://git.erp5.org/gitweb/erp5.git/history/refs/heads/interaction-drop:/product/ERP5/Document/SubscriptionItem.py?js=1 --- product/ERP5/Document/SubscriptionItem.py | 24 +++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/product/ERP5/Document/SubscriptionItem.py b/product/ERP5/Document/SubscriptionItem.py index d21842c982..8f8848079e 100644 --- a/product/ERP5/Document/SubscriptionItem.py +++ b/product/ERP5/Document/SubscriptionItem.py @@ -30,6 +30,7 @@ import zope.interface from AccessControl import ClassSecurityInfo +from Products.CMFCore.utils import getToolByName from Products.ERP5Type import Permissions, PropertySheet, interfaces from Products.ERP5.Document.Item import Item from Products.ERP5.mixin.composition import CompositionMixin @@ -112,19 +113,24 @@ class SubscriptionItem(Item, CompositionMixin, MovementGeneratorMixin, """ 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 Sale Order Line") # XXX-JPS Hard Coded - if not open_order_movement_list: - return result - - # Now generate movements for each valid open order - for movement in open_order_movement_list: # YXU-Why we have a list here? - if movement.getParentValue().getValidationState() in ('open', 'validated'): # XXX-JPS hard coding + for movement in catalog_tool(portal_type="Open Sale Order Line", + default_aggregate_uid=self.getUid(), + validation_state=('open', 'validated', 'archived'), # XXX-JPS hard coding + sort_on=(('effective_date', 'descending'), + # Do not return archived if effective dates are identical + ('validation_state', 'descending')), + limit=1 # Note Luke: Support the newest Open Order which defines + # something for current subscription item + ): # YXU-Why we have a list here? resource = movement.getResource() start_date = movement.getStartDate() stop_date = movement.getStopDate() + if start_date is None or stop_date is None or start_date>=stop_date: + # infinity nor time back machine does not exist + continue source = movement.getSource() source_section = movement.getSourceSection() source_decision = movement.getSourceDecision() @@ -144,8 +150,6 @@ class SubscriptionItem(Item, CompositionMixin, MovementGeneratorMixin, id_index = 0 while current_date < stop_date: next_date = self.getNextPeriodicalDate(current_date) - if next_date > stop_date: - next_date = stop_date generated_movement = newTempMovement(self, 'subscription_%s' % id_index) generated_movement._edit( aggregate_value=self, resource=resource, -- 2.30.9