[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