Commit f67b3c0a authored by Nicolas Delaby's avatar Nicolas Delaby

Add New Constraint CategoryAcquiredMembershipState

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@26761 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 7798d619
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
# Romain Courteaud <romain@nexedi.com>
# Nicolas Delaby <nicolas@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from Products.ERP5Type.Constraint.Constraint import Constraint
# from Products.ERP5Type.Utils import convertToUpperCase
class CategoryAcquiredMembershipState(Constraint):
"""
This method check the acquired category membership is in a
valid workflow state.
For example we can check if every Order has
a source validated.
Configuration exemple:
{ 'id' : 'source',
'description' : '',
'type' : 'CategoryAcquiredMembershipState',
'portal_type' : ('Organisation', ),
'base_category' : ('subordination',),
'validation_state': ('validated', ),
'message_different_state': 'Organisation must be validated',
},
"""
_message_id_list = ['message_different_state']
message_different_state = \
"${workflow_variable} for object ${membership_url} is ${current_state} " \
"which is not in ${valid_state_list}"
def checkConsistency(self, obj, fixit=0):
"""Check the object's consistency.
"""
if not self._checkConstraintCondition(obj):
return []
error_list = []
# Retrieve values inside de PropertySheet (_constraints)
base_category = self.constraint_definition['base_category']
portal_type = self.constraint_definition['portal_type']
membership_list = obj.getAcquiredValueList(base_category,
portal_type=portal_type)
state_var_list = self.constraint_definition.copy()
state_var_list.pop('portal_type')
state_var_list.pop('base_category')
for workflow_variable, valid_state_list in state_var_list.items():
for membership in membership_list:
current_state = membership.getProperty(workflow_variable)
if current_state not in valid_state_list:
mapping = dict(workflow_variable=workflow_variable,
membership_url=membership.getRelativeUrl(),
current_state=current_state,
valid_state_list=str(valid_state_list),)
message_id = 'message_different_state'
# Add error
error_list.append(self._generateError(obj,
self._getMessage(message_id), mapping))
return error_list
......@@ -14,3 +14,4 @@ from TALESConstraint import TALESConstraint
from ContentExistence import ContentExistence
from StringAttributeMatch import StringAttributeMatch
from CategoryMembershipState import CategoryMembershipState
from CategoryAcquiredMembershipState import CategoryAcquiredMembershipState
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