Commit a395dc91 authored by Fabien Morin's avatar Fabien Morin

- move methods from PaySheetModel.py to TradeCondition.py

- remove unused import and unused inheritance class


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@27530 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 0b638d4b
...@@ -30,15 +30,8 @@ from AccessControl import ClassSecurityInfo ...@@ -30,15 +30,8 @@ from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.TradeCondition import TradeCondition 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 class PaySheetModel(TradeCondition):
#XXX WARNING: current API naming may change although model should be stable.
class PaySheetModel(TradeCondition, XMLMatrix, Delivery):
"""A PaySheetModel defines calculation rules for paysheets. """A PaySheetModel defines calculation rules for paysheets.
PaySheetModel are used to define calculating rules specific to a PaySheetModel are used to define calculating rules specific to a
...@@ -72,140 +65,3 @@ class PaySheetModel(TradeCondition, XMLMatrix, Delivery): ...@@ -72,140 +65,3 @@ class PaySheetModel(TradeCondition, XMLMatrix, Delivery):
, PropertySheet.DefaultAnnotationLine , 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
...@@ -36,15 +36,18 @@ from Products.ERP5Type import Permissions, PropertySheet, interfaces ...@@ -36,15 +36,18 @@ from Products.ERP5Type import Permissions, PropertySheet, interfaces
from Products.ERP5.Document.Transformation import Transformation from Products.ERP5.Document.Transformation import Transformation
from Products.ERP5.Document.Path import Path from Products.ERP5.Document.Path import Path
from Products.ERP5.AggregatedAmountList import AggregatedAmountList from Products.ERP5.AggregatedAmountList import AggregatedAmountList
from Products.ERP5Type.XMLMatrix import XMLMatrix
import zope.interface import zope.interface
# XXX TODO : getTradeModelLineComposedList and findSpecialiseValueList should # XXX TODO : getTradeModelLineComposedList and findSpecialiseValueList should
# probably move to Transformation (better names sould be used) # 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 CircularException(Exception): pass
class TradeCondition(Path, Transformation): class TradeCondition(Path, Transformation, XMLMatrix):
""" """
Trade Conditions are used to store the conditions (payment, logistic,...) Trade Conditions are used to store the conditions (payment, logistic,...)
which should be applied (and used in the orders) when two companies make which should be applied (and used in the orders) when two companies make
...@@ -233,3 +236,141 @@ class TradeCondition(Path, Transformation): ...@@ -233,3 +236,141 @@ class TradeCondition(Path, Transformation):
if movement.getCausalityValue().getCreateLine(): if movement.getCausalityValue().getCreateLine():
final_list.append(movement) final_list.append(movement)
return final_list 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
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