[Erp5-report] r27530 - /erp5/trunk/products/ERP5/Document/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jun 11 16:02:32 CEST 2009


Author: fabien
Date: Thu Jun 11 16:02:32 2009
New Revision: 27530

URL: http://svn.erp5.org?rev=27530&view=rev
Log:
- move methods from PaySheetModel.py to TradeCondition.py
- remove unused import and unused inheritance class

Modified:
    erp5/trunk/products/ERP5/Document/PaySheetModel.py
    erp5/trunk/products/ERP5/Document/TradeCondition.py

Modified: erp5/trunk/products/ERP5/Document/PaySheetModel.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/PaySheetModel.py?rev=27530&r1=27529&r2=27530&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/PaySheetModel.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/PaySheetModel.py [utf8] Thu Jun 11 16:02:32 2009
@@ -30,15 +30,8 @@
 
 from Products.ERP5Type import Permissions, PropertySheet
 from Products.ERP5.Document.TradeCondition import TradeCondition
-from Products.CMFCore.utils import getToolByName
-from Products.ERP5Type.XMLMatrix import XMLMatrix
-from Products.ERP5.Document.Delivery import Delivery
-from zLOG import LOG
 
-#XXX TODO: review naming of new methods
-#XXX WARNING: current API naming may change although model should be stable.
-
-class PaySheetModel(TradeCondition, XMLMatrix, Delivery):
+class PaySheetModel(TradeCondition):
   """A PaySheetModel defines calculation rules for paysheets.
 
     PaySheetModel are used to define calculating rules specific to a
@@ -72,140 +65,3 @@
                     , PropertySheet.DefaultAnnotationLine
                     )
 
-  security.declareProtected( Permissions.AccessContentsInformation, 'getCell')
-  def getCell(self, *kw , **kwd):
-    '''
-    Overload the function getCell to be able to search a cell on the
-    inheritance model tree
-    '''
-    cell = XMLMatrix.getCell(self, *kw, **kwd)
-    # if cell not found, look on the inherited models
-    if cell is None:
-      if kwd.has_key('paysheet'):
-        model_list = self.findEffectiveSpecialiseValueList(\
-            start_date=kwd['paysheet'].getStartDate(),
-            stop_date=kwd['paysheet'].getStopDate())
-      else:
-        model_list = self.findSpecialiseValueList(context=self)
-      if self in model_list:
-        model_list.remove(self)
-      for specialised_model in model_list:
-        cell = XMLMatrix.getCell(specialised_model, *kw, **kwd)
-        if cell is not None:
-          return cell
-    return cell
-
-  security.declareProtected(Permissions.AccessContentsInformation,
-      'getReferenceDict')
-  def getReferenceDict(self, portal_type_list, property_list=()):
-    '''Return all objects reference and id of the model wich portal_type is in
-    the portal_type_list. If type does not have a reference, it's ID is used.
-    If property_list is provided, only objects for which at least one of
-    properties is true will be added.
-    '''
-    reference_dict = {}
-    object_list = self.contentValues(portal_type=portal_type_list,
-        sort_on='id')
-    for obj in object_list:
-      keep = (len(property_list) == 0)
-      for property_ in property_list:
-        if obj.hasProperty(property_):
-          keep = 1
-          break
-      if keep:
-        reference_dict[obj.getProperty('reference', obj.getId())] = obj.getId()
-    return reference_dict
-
-  security.declareProtected(Permissions.AccessContentsInformation,
-      'findEffectiveSpecialiseValueList')
-  def findEffectiveSpecialiseValueList(self, start_date=None, stop_date=None):
-    '''Return a list of effective models
-    '''
-    model_list = self.findSpecialiseValueList(self)
-    if start_date is None and stop_date is None:
-      return model_list
-
-    new_list = [model.getEffectiveModel(start_date, stop_date) for model in\
-        model_list]
-    return new_list
-
-  security.declareProtected(Permissions.AccessContentsInformation,
-      'getInheritanceReferenceDict')
-  def getInheritanceReferenceDict(self, portal_type_list,
-      property_list=()):
-    '''Returns a dict with the model url as key and a list of reference as
-    value. Normaly, a Reference appear only one time in the final output.
-    It uses Breadth First Search.
-    If property_list is not empty, documents for which all properties in
-    property_list are false will be skipped.
-    '''
-    model_list = self.findSpecialiseValueList(context=self)
-    reference_list = []
-    model_reference_dict = {}
-    for model in model_list:
-      id_list = []
-      model_reference_list = model.getReferenceDict(
-                           portal_type_list, property_list=property_list)
-      for reference in model_reference_list.keys():
-        if reference not in reference_list:
-          reference_list.append(reference)
-          id_list.append(model_reference_list[reference])
-
-      if id_list != []:
-        model_reference_dict[model.getRelativeUrl()]=id_list
-
-    return model_reference_dict
-
-  security.declareProtected(Permissions.AccessContentsInformation,
-      'getEffectiveModel')
-  def getEffectiveModel(self, start_date=None, stop_date=None):
-    '''return the more appropriate model using effective_date, expiration_date
-    and version number
-    '''
-    reference = self.getReference()
-    if not reference:
-      return self
-
-    effective_model_list = []
-    model_object_list = [result.getObject() for result in \
-        self.portal_catalog(portal_type='Pay Sheet Model',
-                            reference=reference,)]
-                            #sort_on=(('version','descending'),))]
-    # XXX currently, version is not catalogued, so sort using python
-    def sortByVersion(a, b):
-      return cmp(b.getVersion(), a.getVersion())
-    model_object_list.sort(sortByVersion)
-
-    for current_model in model_object_list:
-      # if there is a model with exact dates, return it
-      if start_date == current_model.getEffectiveDate() and \
-          stop_date == current_model.getExpirationDate():
-        effective_model_list.append(current_model)
-    if len(effective_model_list):
-      return effective_model_list[0]
-
-    # else, if there is model wich has effective period containing 
-    # the start_date and the stop date of the paysheet, return it
-    for current_model in model_object_list:
-      if start_date >= current_model.getEffectiveDate() and \
-          stop_date <= current_model.getExpirationDate():
-        effective_model_list.append(current_model)
-    if len(effective_model_list):
-      return effective_model_list[0]
-    # if no effective model are found (ex. because dates are None), return self
-    return self
-
-  security.declareProtected(Permissions.AccessContentsInformation,
-      'getModelIneritanceEffectiveProperty')
-  def getModelIneritanceEffectiveProperty(self, paysheet, property_name):
-    """Get a property from an effective model
-    """
-    v = self.getProperty(property_name)
-    if v:
-      return v
-    model_list = self.findEffectiveSpecialiseValueList(\
-        start_date=paysheet.getStartDate(), stop_date=paysheet.getStopDate())
-    for specialised_model in model_list:
-      v = specialised_model.getProperty(property_name)
-      if v:
-        return v

Modified: erp5/trunk/products/ERP5/Document/TradeCondition.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/TradeCondition.py?rev=27530&r1=27529&r2=27530&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/TradeCondition.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/TradeCondition.py [utf8] Thu Jun 11 16:02:32 2009
@@ -36,15 +36,18 @@
 from Products.ERP5.Document.Transformation import Transformation
 from Products.ERP5.Document.Path import Path
 from Products.ERP5.AggregatedAmountList import AggregatedAmountList
+from Products.ERP5Type.XMLMatrix import XMLMatrix
 
 import zope.interface
 
 # XXX TODO : getTradeModelLineComposedList and findSpecialiseValueList should
 # probably move to Transformation (better names sould be used)
+# XXX TODO: review naming of new methods
+# XXX WARNING: current API naming may change although model should be stable.
 
 class CircularException(Exception): pass
 
-class TradeCondition(Path, Transformation):
+class TradeCondition(Path, Transformation, XMLMatrix):
     """
       Trade Conditions are used to store the conditions (payment, logistic,...)
       which should be applied (and used in the orders) when two companies make
@@ -233,3 +236,141 @@
         if movement.getCausalityValue().getCreateLine():
           final_list.append(movement)
       return final_list
+
+    security.declareProtected( Permissions.AccessContentsInformation, 'getCell')
+    def getCell(self, *kw , **kwd):
+      '''
+      Overload the function getCell to be able to search a cell on the
+      inheritance model tree
+      '''
+      cell = XMLMatrix.getCell(self, *kw, **kwd)
+      # if cell not found, look on the inherited models
+      if cell is None:
+        if kwd.has_key('paysheet'):
+          model_list = self.findEffectiveSpecialiseValueList(\
+              start_date=kwd['paysheet'].getStartDate(),
+              stop_date=kwd['paysheet'].getStopDate())
+        else:
+          model_list = self.findSpecialiseValueList(context=self)
+        if self in model_list:
+          model_list.remove(self)
+        for specialised_model in model_list:
+          cell = XMLMatrix.getCell(specialised_model, *kw, **kwd)
+          if cell is not None:
+            return cell
+      return cell
+
+    security.declareProtected(Permissions.AccessContentsInformation,
+        'getReferenceDict')
+    def getReferenceDict(self, portal_type_list, property_list=None):
+      '''Return all objects reference and id of the model wich portal_type is in
+      the portal_type_list. If type does not have a reference, it's ID is used.
+      If property_list is provided, only objects for which at least one of
+      properties is true will be added.
+      '''
+      if property_list is None:
+        property_list=[]
+      reference_dict = {}
+      object_list = self.contentValues(portal_type=portal_type_list,
+          sort_on='id')
+      for obj in object_list:
+        keep = (len(property_list) == 0)
+        for property_ in property_list:
+          if obj.hasProperty(property_):
+            keep = 1
+            break
+        if keep:
+          reference_dict[obj.getProperty('reference', obj.getId())] = obj.getId()
+      return reference_dict
+
+    security.declareProtected(Permissions.AccessContentsInformation,
+        'findEffectiveSpecialiseValueList')
+    def findEffectiveSpecialiseValueList(self, start_date=None, stop_date=None):
+      '''Return a list of effective models
+      '''
+      model_list = self.findSpecialiseValueList(self)
+      if start_date is None and stop_date is None:
+        return model_list
+      new_list = [model.getEffectiveModel(start_date, stop_date) for model in\
+          model_list]
+      return new_list
+
+    security.declareProtected(Permissions.AccessContentsInformation,
+        'getInheritanceReferenceDict')
+    def getInheritanceReferenceDict(self, portal_type_list,
+        property_list=None):
+      '''Returns a dict with the model url as key and a list of reference as
+      value. Normaly, a Reference appear only one time in the final output.
+      It uses Breadth First Search.
+      If property_list is not empty, documents for which all properties in
+      property_list are false will be skipped.
+      '''
+      if property_list is None:
+        property_list=[]
+      model_list = self.findSpecialiseValueList(context=self)
+      reference_list = []
+      model_reference_dict = {}
+      for model in model_list:
+        id_list = []
+        model_reference_list = model.getReferenceDict(
+                             portal_type_list, property_list=property_list)
+        for reference in model_reference_list.keys():
+          if reference not in reference_list:
+            reference_list.append(reference)
+            id_list.append(model_reference_list[reference])
+        if id_list != []:
+          model_reference_dict[model.getRelativeUrl()]=id_list
+      return model_reference_dict
+
+    security.declareProtected(Permissions.AccessContentsInformation,
+        'getEffectiveModel')
+    def getEffectiveModel(self, start_date=None, stop_date=None):
+      '''return the more appropriate model using effective_date, expiration_date
+      and version number
+      '''
+      reference = self.getReference()
+      if not reference:
+        return self
+      effective_model_list = []
+      model_object_list = [result.getObject() for result in \
+          self.portal_catalog(portal_type=self.portal_type,
+                              reference=reference,)]
+                              #sort_on=(('version','descending'),))]
+      # XXX currently, version is not catalogued, so sort using python
+      def sortByVersion(a, b):
+        return cmp(b.getVersion(), a.getVersion())
+      model_object_list.sort(sortByVersion)
+
+      for current_model in model_object_list:
+        # if there is a model with exact dates, return it
+        if start_date == current_model.getEffectiveDate() and \
+            stop_date == current_model.getExpirationDate():
+          effective_model_list.append(current_model)
+      if len(effective_model_list):
+        return effective_model_list[0]
+
+      # else, if there is model wich has effective period containing 
+      # the start_date and the stop date of the paysheet, return it
+      for current_model in model_object_list:
+        if start_date >= current_model.getEffectiveDate() and \
+            stop_date <= current_model.getExpirationDate():
+          effective_model_list.append(current_model)
+      if len(effective_model_list):
+        return effective_model_list[0]
+      # if no effective model are found (ex. because dates are None), return self
+      return self
+
+    security.declareProtected(Permissions.AccessContentsInformation,
+        'getModelIneritanceEffectiveProperty')
+    def getModelIneritanceEffectiveProperty(self, paysheet, property_name):
+      """Get a property from an effective model
+      """
+      v = self.getProperty(property_name)
+      if v:
+        return v
+      model_list = self.findEffectiveSpecialiseValueList(\
+          start_date=paysheet.getStartDate(), stop_date=paysheet.getStopDate())
+      for specialised_model in model_list:
+        v = specialised_model.getProperty(property_name)
+        if v:
+          return v




More information about the Erp5-report mailing list