Commit 0d702108 authored by Arnaud Fontaine's avatar Arnaud Fontaine

erp5_budget: Fix errors/warnings reported by pylint.

parent b876df9a
...@@ -34,33 +34,32 @@ from Products.ERP5.mixin.variated import VariatedMixin ...@@ -34,33 +34,32 @@ from Products.ERP5.mixin.variated import VariatedMixin
class Budget(Predicate, VariatedMixin): class Budget(Predicate, VariatedMixin):
""" """
Budget means a kind of budget stock. Budget means a kind of budget stock.
""" """
# Default Properties # Default Properties
property_sheets = ( PropertySheet.Base property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject , PropertySheet.XMLObject
, PropertySheet.SimpleItem , PropertySheet.SimpleItem
, PropertySheet.CategoryCore , PropertySheet.CategoryCore
, PropertySheet.Folder , PropertySheet.Folder
, PropertySheet.Predicate , PropertySheet.Predicate
, PropertySheet.SortIndex , PropertySheet.SortIndex
, PropertySheet.Task , PropertySheet.Task
, PropertySheet.Arrow , PropertySheet.Arrow
, PropertySheet.Budget , PropertySheet.Budget
, PropertySheet.Path , PropertySheet.Path
, PropertySheet.VariationRange , PropertySheet.VariationRange
, PropertySheet.Reference , PropertySheet.Reference
, PropertySheet.Version , PropertySheet.Version
) )
# CMF Type Definition # CMF Type Definition
meta_type='ERP5 Budget' meta_type='ERP5 Budget'
portal_type='Budget' portal_type='Budget'
add_permission = Permissions.AddPortalContent add_permission = Permissions.AddPortalContent
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
\ No newline at end of file
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>Budget</string> </value> <value> <string>Budget</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.Budget</string> </value> <value> <string>Products.ERP5.Document.Budget</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.Budget</string> </value> <value> <string>document.erp5.Budget</string> </value>
...@@ -37,15 +49,7 @@ ...@@ -37,15 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W: 37, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 42, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 59, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 60, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 61, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 64, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 65, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -55,13 +59,28 @@ ...@@ -55,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -74,7 +93,7 @@ ...@@ -74,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -83,7 +102,7 @@ ...@@ -83,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -35,133 +35,133 @@ from Products.ERP5.Document.MetaNode import MetaNode ...@@ -35,133 +35,133 @@ from Products.ERP5.Document.MetaNode import MetaNode
from Products.ERP5.Document.Movement import Movement from Products.ERP5.Document.Movement import Movement
class BudgetCell(Predicate, MetaNode, Movement): class BudgetCell(Predicate, MetaNode, Movement):
""" Budget Cell defines a cell of budget. """ Budget Cell defines a cell of budget.
XXX This is not a Movement, but we need getDestinationCredit XXX This is not a Movement, but we need getDestinationCredit
XXX This is not a MetaNode XXX This is not a MetaNode
"""
# Default Properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.SimpleItem
, PropertySheet.Folder
, PropertySheet.Predicate
, PropertySheet.SortIndex
, PropertySheet.CategoryCore
, PropertySheet.DublinCore
, PropertySheet.Task
, PropertySheet.Arrow
, PropertySheet.Amount
, PropertySheet.Budget
, PropertySheet.MappedValue
, PropertySheet.VariationRange
)
# CMF Type Definition
meta_type='ERP5 Budget Cell'
portal_type='Budget Cell'
add_permission = Permissions.AddPortalContent
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareProtected(Permissions.AccessContentsInformation, 'getTitle')
def getTitle(self):
""" """
Return a calculated title.
"""
script = self._getTypeBasedMethod('asTitle')
if script is not None:
return script()
raise UnboundLocalError(
"Did not find title script for portal type: %r" %
self.getPortalType())
security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentInventory')
def getCurrentInventory(self, at_date=None, **kw):
""" Returns current inventory.
at_date parameter can be used to take into account budget transactions
before that date.
"""
kw['node_uid'] = self.getUid()
resource = self.getResourceValue()
if resource is not None:
kw['resource_uid'] = resource.getUid()
if at_date:
kw['at_date'] = at_date
sign = self.getParentValue().BudgetLine_getConsumptionSign()
return sign * self.portal_simulation.getCurrentInventory(**kw)
security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentBalance')
def getCurrentBalance(self, at_date=None):
"""
Returns current balance
"""
sign = self.getParentValue().BudgetLine_getConsumptionSign()
return sign * self.getQuantity(0.0) + self.getCurrentInventory(at_date=at_date)
# Default Properties security.declareProtected(Permissions.AccessContentsInformation, 'getConsumedBudget')
property_sheets = ( PropertySheet.Base def getConsumedBudget(self, src__=0):
, PropertySheet.XMLObject """
, PropertySheet.SimpleItem Return consumed budget.
, PropertySheet.Folder """
, PropertySheet.Predicate script = self._getTypeBasedMethod('getConsumedBudget')
, PropertySheet.SortIndex if script is not None:
, PropertySheet.CategoryCore return script(src__=src__)
, PropertySheet.DublinCore raise UnboundLocalError(
, PropertySheet.Task "Did not find consumed budget script for portal type: %r" %
, PropertySheet.Arrow self.getPortalType())
, PropertySheet.Amount
, PropertySheet.Budget security.declareProtected(Permissions.AccessContentsInformation, 'getAvailableBudget')
, PropertySheet.MappedValue def getAvailableBudget(self, at_date=None):
, PropertySheet.VariationRange """
) Return available budget.
"""
# CMF Type Definition return self.getCurrentBalance(at_date=at_date) - self.getEngagedBudget()
meta_type='ERP5 Budget Cell'
portal_type='Budget Cell' security.declareProtected(Permissions.AccessContentsInformation, 'getEngagedBudget')
add_permission = Permissions.AddPortalContent def getEngagedBudget(self, src__=0):
"""
# Declarative security Return Engaged budget.
security = ClassSecurityInfo() """
security.declareObjectProtected(Permissions.AccessContentsInformation) script = self._getTypeBasedMethod('getEngagedBudget')
if script is not None:
security.declareProtected(Permissions.AccessContentsInformation, 'getTitle') return script(src__=src__)
def getTitle(self): raise UnboundLocalError(
""" "Did not find engaged budget script for portal type: %r" %
Return a calculated title. self.getPortalType())
"""
script = self._getTypeBasedMethod('asTitle') security.declareProtected(Permissions.AccessContentsInformation,
if script is not None: 'getExplanationValue')
return script() def getExplanationValue(self):
raise UnboundLocalError,\ """Explanation has no meaning for a budget cell"""
"Did not find title script for portal type: %r" %\ return None
self.getPortalType()
security.declareProtected(Permissions.ModifyPortalContent,
security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentInventory') 'setSourceCredit')
def getCurrentInventory(self, at_date=None, **kw): def setSourceCredit(self, source_credit):
""" Returns current inventory. """Set the quantity.
Overloaded from movement, we always set the quantity, even if not passed
at_date parameter can be used to take into account budget transactions """
before that date. try:
""" source_credit = float(source_credit)
kw['node_uid'] = self.getUid() except TypeError:
resource = self.getResourceValue() source_credit = 0.0
if resource is not None: Movement.setSourceCredit(self, source_credit)
kw['resource_uid'] = resource.getUid()
if at_date: def setSourceDebit(self, source_debit):
kw['at_date'] = at_date """Set the quantity.
sign = self.getParentValue().BudgetLine_getConsumptionSign() Overloaded from movement, we always set the quantity, even if not passed
return sign * self.portal_simulation.getCurrentInventory(**kw) """
try:
security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentBalance') source_debit = float(source_debit)
def getCurrentBalance(self, at_date=None): except TypeError:
""" source_debit = 0.0
Returns current balance Movement.setSourceDebit(self, source_debit)
"""
sign = self.getParentValue().BudgetLine_getConsumptionSign() security.declareProtected(Permissions.ModifyPortalContent,
return sign * self.getQuantity(0.0) + self.getCurrentInventory(at_date=at_date) 'setDestinationDebit', 'setDestinationCredit' )
setDestinationDebit = setSourceCredit
security.declareProtected(Permissions.AccessContentsInformation, 'getConsumedBudget') setDestinationCredit = setSourceDebit
def getConsumedBudget(self, src__=0): \ No newline at end of file
"""
Return consumed budget.
"""
script = self._getTypeBasedMethod('getConsumedBudget')
if script is not None:
return script(src__=src__)
raise UnboundLocalError,\
"Did not find consumed budget script for portal type: %r" % \
self.getPortalType()
security.declareProtected(Permissions.AccessContentsInformation, 'getAvailableBudget')
def getAvailableBudget(self, at_date=None):
"""
Return available budget.
"""
return self.getCurrentBalance(at_date=at_date) - self.getEngagedBudget()
security.declareProtected(Permissions.AccessContentsInformation, 'getEngagedBudget')
def getEngagedBudget(self, src__=0):
"""
Return Engaged budget.
"""
script = self._getTypeBasedMethod('getEngagedBudget')
if script is not None:
return script(src__=src__)
raise UnboundLocalError,\
"Did not find engaged budget script for portal type: %r" % \
self.getPortalType()
security.declareProtected(Permissions.AccessContentsInformation,
'getExplanationValue')
def getExplanationValue(self, default=None):
"""Explanation has no meaning for a budget cell"""
return default
security.declareProtected(Permissions.ModifyPortalContent,
'setSourceCredit')
def setSourceCredit(self, source_credit):
"""Set the quantity.
Overloaded from movement, we always set the quantity, even if not passed
"""
try:
source_credit = float(source_credit)
except TypeError:
source_credit = 0.0
Movement.setSourceCredit(self, source_credit)
def setSourceDebit(self, source_debit):
"""Set the quantity.
Overloaded from movement, we always set the quantity, even if not passed
"""
try:
source_debit = float(source_debit)
except TypeError:
source_debit = 0.0
Movement.setSourceDebit(self, source_debit)
security.declareProtected( Permissions.ModifyPortalContent,
'setDestinationDebit', 'setDestinationCredit' )
setDestinationDebit = setSourceCredit
setDestinationCredit = setSourceDebit
...@@ -32,37 +32,35 @@ from Products.ERP5Type import Permissions, PropertySheet ...@@ -32,37 +32,35 @@ from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.DeliveryLine import DeliveryLine from Products.ERP5.Document.DeliveryLine import DeliveryLine
class BudgetTransaction(DeliveryLine): class BudgetTransaction(DeliveryLine):
""" """
BudgetTransaction an order or transfer of budget. BudgetTransaction an order or transfer of budget.
""" """
# Default Properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.Amount
, PropertySheet.Task
, PropertySheet.Arrow
, PropertySheet.Movement
, PropertySheet.Price
, PropertySheet.VariationRange
, PropertySheet.ItemAggregation
)
# CMF Type Definition
meta_type='ERP5 Budget Transaction'
portal_type='Budget Transaction'
add_permission = Permissions.AddPortalContent
# Declarative security # Default Properties
security = ClassSecurityInfo() property_sheets = ( PropertySheet.Base
security.declareObjectProtected(Permissions.AccessContentsInformation) , PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.Amount
, PropertySheet.Task
, PropertySheet.Arrow
, PropertySheet.Movement
, PropertySheet.Price
, PropertySheet.VariationRange
, PropertySheet.ItemAggregation
)
# CMF Type Definition
meta_type='ERP5 Budget Transaction'
portal_type='Budget Transaction'
add_permission = Permissions.AddPortalContent
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'isAccountable') 'isAccountable')
def isAccountable(self): def isAccountable(self):
""" """
Supersedes the DeliveryLine definition Supersedes the DeliveryLine definition
""" """
return 1 return 1
\ No newline at end of file
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>BudgetTransaction</string> </value> <value> <string>BudgetTransaction</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.BudgetTransaction</string> </value> <value> <string>Products.ERP5.Document.BudgetTransaction</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.BudgetTransaction</string> </value> <value> <string>document.erp5.BudgetTransaction</string> </value>
...@@ -37,19 +49,7 @@ ...@@ -37,19 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W: 35, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 40, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 52, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 53, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 54, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 57, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 58, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 61, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 63, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 64, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 67, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -59,13 +59,28 @@ ...@@ -59,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -78,7 +93,7 @@ ...@@ -78,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -87,7 +102,7 @@ ...@@ -87,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -33,25 +33,24 @@ from Products.ERP5Type import Permissions, PropertySheet ...@@ -33,25 +33,24 @@ from Products.ERP5Type import Permissions, PropertySheet
class BudgetTransfer(Supply): class BudgetTransfer(Supply):
""" """
BudgetTransfer ... BudgetTransfer ...
""" """
# Default Properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.Folder
, PropertySheet.Task
, PropertySheet.Arrow
, PropertySheet.Movement
)
# Default Properties # CMF Type Definition
property_sheets = ( PropertySheet.Base meta_type='ERP5 Budget Transfer'
, PropertySheet.XMLObject portal_type='Budget Transfer'
, PropertySheet.CategoryCore add_permission = Permissions.AddPortalContent
, PropertySheet.Folder
, PropertySheet.Task
, PropertySheet.Arrow
, PropertySheet.Movement
)
# CMF Type Definition # Declarative security
meta_type='ERP5 Budget Transfer' security = ClassSecurityInfo()
portal_type='Budget Transfer' security.declareObjectProtected(Permissions.AccessContentsInformation)
add_permission = Permissions.AddPortalContent \ No newline at end of file
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>BudgetTransfer</string> </value> <value> <string>BudgetTransfer</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.BudgetTransfer</string> </value> <value> <string>Products.ERP5.Document.BudgetTransfer</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.BudgetTransfer</string> </value> <value> <string>document.erp5.BudgetTransfer</string> </value>
...@@ -37,15 +49,7 @@ ...@@ -37,15 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W: 36, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 41, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 51, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 52, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 53, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 56, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 57, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -55,13 +59,28 @@ ...@@ -55,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -74,7 +93,7 @@ ...@@ -74,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -83,7 +102,7 @@ ...@@ -83,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -35,24 +35,23 @@ from Products.ERP5Type import Permissions, PropertySheet ...@@ -35,24 +35,23 @@ from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.SupplyLine import SupplyLine from Products.ERP5.Document.SupplyLine import SupplyLine
class BudgetTransferLine(SupplyLine): class BudgetTransferLine(SupplyLine):
""" """
BudgetTransferLine BudgetTransferLine
""" """
# Default Properties
# Default Properties property_sheets = ( PropertySheet.Base
property_sheets = ( PropertySheet.Base , PropertySheet.XMLObject
, PropertySheet.XMLObject , PropertySheet.CategoryCore
, PropertySheet.CategoryCore , PropertySheet.Amount
, PropertySheet.Amount , PropertySheet.Task
, PropertySheet.Task , PropertySheet.Arrow
, PropertySheet.Arrow )
)
# CMF Type Definition
# CMF Type Definition meta_type='ERP5 Budget Transfer Line'
meta_type='ERP5 Budget Transfer Line' portal_type='Budget Transfer Line'
portal_type='Budget Transfer Line' add_permission = Permissions.AddPortalContent
add_permission = Permissions.AddPortalContent
# Declarative security
# Declarative security security = ClassSecurityInfo()
security = ClassSecurityInfo() security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareObjectProtected(Permissions.AccessContentsInformation) \ No newline at end of file
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>BudgetTransferLine</string> </value> <value> <string>BudgetTransferLine</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.BudgetTransferLine</string> </value> <value> <string>Products.ERP5.Document.BudgetTransferLine</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.BudgetTransferLine</string> </value> <value> <string>document.erp5.BudgetTransferLine</string> </value>
...@@ -37,15 +49,7 @@ ...@@ -37,15 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W: 38, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 43, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 52, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 53, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 54, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 57, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 58, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -55,13 +59,28 @@ ...@@ -55,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -74,7 +93,7 @@ ...@@ -74,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -83,7 +102,7 @@ ...@@ -83,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -30,7 +30,6 @@ from AccessControl import ClassSecurityInfo ...@@ -30,7 +30,6 @@ from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type import Permissions, PropertySheet
from erp5.component.document.BudgetVariation import BudgetVariation from erp5.component.document.BudgetVariation import BudgetVariation
class CategoryBudgetVariation(BudgetVariation): class CategoryBudgetVariation(BudgetVariation):
""" A budget variation based on a category """ A budget variation based on a category
""" """
...@@ -141,7 +140,7 @@ class CategoryBudgetVariation(BudgetVariation): ...@@ -141,7 +140,7 @@ class CategoryBudgetVariation(BudgetVariation):
for criterion_category in context.getMembershipCriterionCategoryList(): for criterion_category in context.getMembershipCriterionCategoryList():
if '/' not in criterion_category: # safe ... if '/' not in criterion_category: # safe ...
continue continue
criterion_base_category, category_url = criterion_category.split('/', 1) criterion_base_category, _ = criterion_category.split('/', 1)
if criterion_base_category == base_category: if criterion_base_category == base_category:
if uid_based_axis: if uid_based_axis:
category_uid = self.getPortalObject().portal_categories\ category_uid = self.getPortalObject().portal_categories\
...@@ -184,8 +183,9 @@ class CategoryBudgetVariation(BudgetVariation): ...@@ -184,8 +183,9 @@ class CategoryBudgetVariation(BudgetVariation):
axis = '%s_uid' % axis axis = '%s_uid' % axis
if self.getProperty('full_consumption_detail'): if self.getProperty('full_consumption_detail'):
for title, category in self.getBudgetLineVariationRangeCategoryList(context): for _, category in self.getBudgetLineVariationRangeCategoryList(context):
if not category: continue if not category:
continue
if axis.endswith('_uid'): if axis.endswith('_uid'):
# XXX move out getattrs # XXX move out getattrs
category = self.getPortalObject().portal_categories\ category = self.getPortalObject().portal_categories\
......
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>CategoryBudgetVariation</string> </value> <value> <string>CategoryBudgetVariation</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.CategoryBudgetVariation</string> </value> <value> <string>Products.ERP5.Document.CategoryBudgetVariation</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.CategoryBudgetVariation</string> </value> <value> <string>document.erp5.CategoryBudgetVariation</string> </value>
...@@ -37,10 +49,7 @@ ...@@ -37,10 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W:144, 31: Unused variable \'category_url\' (unused-variable)</string>
<string>W:187, 10: Unused variable \'title\' (unused-variable)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -50,13 +59,28 @@ ...@@ -50,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -69,7 +93,7 @@ ...@@ -69,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -78,7 +102,7 @@ ...@@ -78,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -33,7 +33,6 @@ from erp5.component.document.BudgetVariation import BudgetVariation ...@@ -33,7 +33,6 @@ from erp5.component.document.BudgetVariation import BudgetVariation
from Products.ZSQLCatalog.SQLCatalog import Query, NegatedQuery, ComplexQuery from Products.ZSQLCatalog.SQLCatalog import Query, NegatedQuery, ComplexQuery
class NodeBudgetVariation(BudgetVariation): class NodeBudgetVariation(BudgetVariation):
""" A budget variation for node """ A budget variation for node
...@@ -282,7 +281,7 @@ class NodeBudgetVariation(BudgetVariation): ...@@ -282,7 +281,7 @@ class NodeBudgetVariation(BudgetVariation):
found = False found = False
for node_url in category_list: for node_url in category_list:
if node_url != '%s/budget_special_node/none' % base_category: if node_url != '%s/budget_special_node/none' % base_category:
__traceback_info__ = (node_url, ) __traceback_info__ = (node_url, ) # pylint: disable=unused-variable
if uid_based_axis: if uid_based_axis:
query_dict.setdefault(axis, []).append( query_dict.setdefault(axis, []).append(
portal_categories.getCategoryValue(node_url, portal_categories.getCategoryValue(node_url,
......
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>NodeBudgetVariation</string> </value> <value> <string>NodeBudgetVariation</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.NodeBudgetVariation</string> </value> <value> <string>Products.ERP5.Document.NodeBudgetVariation</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.NodeBudgetVariation</string> </value> <value> <string>document.erp5.NodeBudgetVariation</string> </value>
...@@ -37,10 +49,7 @@ ...@@ -37,10 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W:133, 6: Unused variable \'consumption_dict\' (unused-variable)</string>
<string>W:284, 8: Unused variable \'__traceback_info__\' (unused-variable)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -50,13 +59,28 @@ ...@@ -50,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -69,7 +93,7 @@ ...@@ -69,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -78,7 +102,7 @@ ...@@ -78,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -27,54 +27,53 @@ ...@@ -27,54 +27,53 @@
############################################################################## ##############################################################################
from Products.ERP5Type.mixin.constraint import ConstraintMixin from Products.ERP5Type.mixin.constraint import ConstraintMixin
from Products.ERP5Type import PropertySheet
class TransactionQuantityValueFeasabilityConstraint(ConstraintMixin): class TransactionQuantityValueFeasabilityConstraint(ConstraintMixin):
"""
Check if the quantity of the transaction is possible
for the source and the destination
This is only relevant for ZODB Property Sheets (filesystem Property
Sheets rely on Products.ERP5.Constraint.TransactionQuantityValueFeasability
instead).
"""
meta_type = 'ERP5 Transaction Quantity Value Feasability Constraint'
portal_type = 'Transaction Quantity Value Feasability Constraint'
def _checkConsistency(self, obj, fixit=0, **_):
""" """
Check if the quantity of the transaction is possible Check if the quantity of the transaction is possible
for the source and the destination for the source and the destination
This is only relevant for ZODB Property Sheets (filesystem Property
Sheets rely on Products.ERP5.Constraint.TransactionQuantityValueFeasability
instead).
""" """
meta_type = 'ERP5 Transaction Quantity Value Feasability Constraint' errors = []
portal_type = 'Transaction Quantity Value Feasability Constraint' source_cell = obj.getSourceValue()
destination_cell = obj.getDestinationValue()
def _checkConsistency(self, object, fixit=0): # Check for source and destination
""" for node, sign, node_title in ((source_cell, 1, 'source'),
Check if the quantity of the transaction is possible (destination_cell, -1, 'destination')):
for the source and the destination # As the quantity can change a few lines letter,
""" # we need to get it each time.
errors = [] object_quantity = obj.getQuantity()
source_cell = object.getSourceValue() quantity = object_quantity * sign
destination_cell = object.getDestinationValue() if node is not None:
# Check for source and destination balance = node.getCurrentBalance()
for node, sign, node_title in ((source_cell, 1, 'source'), is_transaction_ok = 1
(destination_cell, -1, 'destination')): # Check if balance and quantity have the same sign
# As the quantity can change a few lines letter, if ((balance < 0) and (quantity < 0)):
# we need to get it each time. if balance > quantity:
object_quantity = object.getQuantity() is_transaction_ok = 0
quantity = object_quantity * sign elif ((balance >= 0) and (quantity >= 0)):
if node is not None: if balance < quantity:
balance = node.getCurrentBalance() is_transaction_ok = 0
is_transaction_ok = 1 # Raise error
# Check if balance and quantity have the same sign if not is_transaction_ok:
if ((balance < 0) and (quantity < 0)): if fixit != 0:
if balance > quantity: obj.setQuantity(balance)
is_transaction_ok = 0 else:
elif ((balance >= 0) and (quantity >= 0)): error_message = 'The quantity "%s" of the transaction is not ' \
if balance < quantity: 'compatible with budget "%s" defined on the ' \
is_transaction_ok = 0 '%s "%s".' % \
# Raise error (object_quantity, balance, node_title, node)
if not is_transaction_ok: # Add error
if fixit != 0: errors.append(self._generateError(obj, error_message))
object.setQuantity(balance) return errors
else:
error_message = 'The quantity "%s" of the transaction is not ' \
'compatible with budget "%s" defined on the ' \
'%s "%s".' % \
(object_quantity, balance, node_title, node)
# Add error
errors.append(self._generateError(object, error_message))
return errors
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>TransactionQuantityValueFeasabilityConstraint</string> </value> <value> <string>TransactionQuantityValueFeasabilityConstraint</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.TransactionQuantityValueFeasabilityConstraint</string> </value> <value> <string>Products.ERP5.Document.TransactionQuantityValueFeasabilityConstraint</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.TransactionQuantityValueFeasabilityConstraint</string> </value> <value> <string>document.erp5.TransactionQuantityValueFeasabilityConstraint</string> </value>
...@@ -37,38 +49,7 @@ ...@@ -37,38 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W: 33, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 41, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 42, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 44, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 45, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 49, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 50, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 51, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 53, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 57, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 58, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 59, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 60, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 61, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 63, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 64, 0: Bad indentation. Found 12 spaces, expected 10 (bad-indentation)</string>
<string>W: 65, 0: Bad indentation. Found 14 spaces, expected 12 (bad-indentation)</string>
<string>W: 66, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 67, 0: Bad indentation. Found 12 spaces, expected 10 (bad-indentation)</string>
<string>W: 68, 0: Bad indentation. Found 14 spaces, expected 12 (bad-indentation)</string>
<string>W: 70, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 71, 0: Bad indentation. Found 12 spaces, expected 10 (bad-indentation)</string>
<string>W: 72, 0: Bad indentation. Found 14 spaces, expected 12 (bad-indentation)</string>
<string>W: 73, 0: Bad indentation. Found 12 spaces, expected 10 (bad-indentation)</string>
<string>W: 74, 0: Bad indentation. Found 14 spaces, expected 12 (bad-indentation)</string>
<string>W: 79, 0: Bad indentation. Found 14 spaces, expected 12 (bad-indentation)</string>
<string>W: 80, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 44, 32: Redefining built-in \'object\' (redefined-builtin)</string>
<string>W: 44, 4: Arguments number differs from overridden \'_checkConsistency\' method (arguments-differ)</string>
<string>W: 30, 0: Unused PropertySheet imported from Products.ERP5Type (unused-import)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -78,13 +59,28 @@ ...@@ -78,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -97,7 +93,7 @@ ...@@ -97,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -106,7 +102,7 @@ ...@@ -106,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -27,46 +27,44 @@ ...@@ -27,46 +27,44 @@
############################################################################## ##############################################################################
from Products.ERP5Type.mixin.constraint import ConstraintMixin from Products.ERP5Type.mixin.constraint import ConstraintMixin
from Products.ERP5Type import PropertySheet
class TransactionQuantityValueValidityConstraint(ConstraintMixin): class TransactionQuantityValueValidityConstraint(ConstraintMixin):
"""
This is only relevant for ZODB Property Sheets (filesystem Property
Sheets rely on Products.ERP5.Constraint.TransactionQuantityValueValidity
instead).
"""
meta_type = 'ERP5 Transaction Quantity Value Validity Constraint'
portal_type = 'Transaction Quantity Value Validity Constraint'
def _checkConsistency(self, obj, fixit=0, **_):
""" """
This is only relevant for ZODB Property Sheets (filesystem Property Check if the quantity of the transaction is greater than the
Sheets rely on Products.ERP5.Constraint.TransactionQuantityValueValidity balance of the source.
instead).
""" """
meta_type = 'ERP5 Transaction Quantity Value Validity Constraint' errors = []
portal_type = 'Transaction Quantity Value Validity Constraint'
def _checkConsistency(self, object, fixit=0):
"""
Check if the quantity of the transaction is greater than the
balance of the source.
"""
errors = []
source_cell = object.getSourceValue() source_cell = obj.getSourceValue()
destination_cell = object.getDestinationValue() destination_cell = obj.getDestinationValue()
if (source_cell is not None) and \ if source_cell is not None and destination_cell is not None:
(destination_cell is not None): # XXX Dirty code !
# XXX Dirty code ! quantity = obj.getQuantity()
quantity = object.getQuantity() budget_list = obj.getPortalObject().budget_module.objectValues()
budget_list = object.getPortalObject().budget_module.objectValues() max_quantity = 0
max_quantity = 0 for obj in budget_list:
for obj in budget_list: for item in obj.objectValues():
for item in obj.objectValues(): if item.getPortalType() == 'Budget Transfer Line' and \
if (item.getPortalType() == 'Budget Transfer Line') and \ item.getSourceValue() == source_cell and \
(item.getSourceValue() == source_cell) and \ item.getDestinationValue() == destination_cell:
(item.getDestinationValue() == destination_cell): max_quantity = item.getQuantity()
max_quantity = item.getQuantity() if quantity > max_quantity:
if quantity > max_quantity: if fixit != 0:
if fixit != 0: self.setQuantity(max_quantity)
self.setQuantity(max_quantity) else:
else: error_message = 'The quantity of the transaction is greater than ' \
error_message = 'The quantity of the transaction is greater than ' \ 'the transferable maximum quantity (TMQ): ' \
'the transferable maximum quantity (TMQ): ' \
'TMQ = %.2f' % max_quantity 'TMQ = %.2f' % max_quantity
# Add error # Add error
errors.append(self._generateError(object, error_message)) errors.append(self._generateError(obj, error_message))
return errors return errors
\ No newline at end of file
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>TransactionQuantityValueValidityConstraint</string> </value> <value> <string>TransactionQuantityValueValidityConstraint</string> </value>
...@@ -14,6 +20,12 @@ ...@@ -14,6 +20,12 @@
<key> <string>default_source_reference</string> </key> <key> <string>default_source_reference</string> </key>
<value> <string>Products.ERP5.Document.TransactionQuantityValueValidityConstraint</string> </value> <value> <string>Products.ERP5.Document.TransactionQuantityValueValidityConstraint</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>document.erp5.TransactionQuantityValueValidityConstraint</string> </value> <value> <string>document.erp5.TransactionQuantityValueValidityConstraint</string> </value>
...@@ -37,34 +49,7 @@ ...@@ -37,34 +49,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W: 33, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 38, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 39, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 41, 0: Bad indentation. Found 4 spaces, expected 2 (bad-indentation)</string>
<string>W: 42, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 46, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 48, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 49, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 51, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 54, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 55, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 56, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 57, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 58, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 59, 0: Bad indentation. Found 13 spaces, expected 10 (bad-indentation)</string>
<string>W: 62, 0: Bad indentation. Found 15 spaces, expected 12 (bad-indentation)</string>
<string>W: 63, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)</string>
<string>W: 64, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 65, 0: Bad indentation. Found 12 spaces, expected 10 (bad-indentation)</string>
<string>W: 66, 0: Bad indentation. Found 10 spaces, expected 8 (bad-indentation)</string>
<string>W: 67, 0: Bad indentation. Found 12 spaces, expected 10 (bad-indentation)</string>
<string>W: 71, 0: Bad indentation. Found 12 spaces, expected 10 (bad-indentation)</string>
<string>W: 72, 0: Bad indentation. Found 6 spaces, expected 4 (bad-indentation)</string>
<string>W: 41, 32: Redefining built-in \'object\' (redefined-builtin)</string>
<string>W: 41, 4: Arguments number differs from overridden \'_checkConsistency\' method (arguments-differ)</string>
<string>W: 30, 0: Unused PropertySheet imported from Products.ERP5Type (unused-import)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
...@@ -74,13 +59,28 @@ ...@@ -74,13 +59,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
......
...@@ -85,7 +85,7 @@ class TestBudget(ERP5TypeTestCase): ...@@ -85,7 +85,7 @@ class TestBudget(ERP5TypeTestCase):
budget = self.portal.budget_module.newContent( budget = self.portal.budget_module.newContent(
portal_type='Budget') portal_type='Budget')
budget_line = budget.newContent(portal_type='Budget Line') budget_line = budget.newContent(portal_type='Budget Line')
budget_cell = budget_line.newContent(portal_type='Budget Cell') budget_line.newContent(portal_type='Budget Cell')
self.assertEqual([], budget.checkConsistency()) self.assertEqual([], budget.checkConsistency())
def test_budget_cell_node_variation_with_aggregate(self): def test_budget_cell_node_variation_with_aggregate(self):
...@@ -626,17 +626,18 @@ class TestBudget(ERP5TypeTestCase): ...@@ -626,17 +626,18 @@ class TestBudget(ERP5TypeTestCase):
self.assertEqual(2, len(budget_line.contentValues())) self.assertEqual(2, len(budget_line.contentValues()))
test_class_self = self
class ReferenceQuery: class ReferenceQuery:
"""Helper class to compare queries """Helper class to compare queries
""" """
def __eq__(me, query): def __eq__(self, query):
self.assertTrue(isinstance(query, ComplexQuery)) test_class_self.assertTrue(isinstance(query, ComplexQuery))
self.assertEqual(query.logical_operator, 'or') test_class_self.assertEqual(query.logical_operator, 'or')
self.assertEqual(2, len(query.query_list)) test_class_self.assertEqual(2, len(query.query_list))
self.assertEqual(query.query_list[0].kw, {'project_uid': None}) test_class_self.assertEqual(query.query_list[0].kw, {'project_uid': None})
self.assertEqual(query.query_list[1].kw, test_class_self.assertEqual(query.query_list[1].kw,
{'project_uid': {'project_uid':
[self.portal.organisation_module.my_organisation.getUid()]}) [test_class_self.portal.organisation_module.my_organisation.getUid()]})
return True return True
self.assertEqual( self.assertEqual(
...@@ -730,12 +731,13 @@ class TestBudget(ERP5TypeTestCase): ...@@ -730,12 +731,13 @@ class TestBudget(ERP5TypeTestCase):
self.assertEqual(1, len(budget_line.contentValues())) self.assertEqual(1, len(budget_line.contentValues()))
test_class_self = self
class ReferenceQuery: class ReferenceQuery:
"""Helper class to compare queries """Helper class to compare queries
""" """
def __eq__(me, query): def __eq__(self, query):
self.assertTrue(isinstance(query, Query)) test_class_self.assertTrue(isinstance(query, Query))
self.assertEqual(query.kw, {'project_uid': None}) test_class_self.assertEqual(query.kw, {'project_uid': None})
return True return True
self.assertEqual( self.assertEqual(
......
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