Commit 92e74804 authored by Nicolas Delaby's avatar Nicolas Delaby

New Constraint as mirror of CategoryMembershipState for related categories


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31955 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent fd67a7d4
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Sebastien Robin <seb@nexedi.com>
# Courteaud Romain <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.CategoryMembershipState \
import CategoryMembershipState
class CategoryRelatedMembershipState(CategoryMembershipState):
"""
This method checks if an object respects the arity from a category reverse
membership point of view and is in a valid workflow state.
For example we can check if every Order has at
most one Order Applied Rule in expected simulation_states.
Configuration example:
{ 'id' : 'applied_rule',
'description' : 'There must at most one Applied Rule using this order',
'type' : 'CategoryRelatedMembershipArityState',
'portal_type' : ('Applied Rule', ),
'base_category' : ('causality',)
'simulation_state': ('planned', ),
'message_different_state': 'Applied Rule must be planned',
'condition' : 'python: object.getPortalType() == 'Foo',
},
"""
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']
related_membership_list = obj._getRelatedValueList(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 related_membership in related_membership_list:
current_state = related_membership.getProperty(workflow_variable)
if current_state not in valid_state_list:
mapping = dict(workflow_variable=workflow_variable,
membership_url=related_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
# -*- coding: utf-8 -*-
from Constraint import Constraint from Constraint import Constraint
from PropertyTypeValidity import PropertyTypeValidity from PropertyTypeValidity import PropertyTypeValidity
from CategoryMembershipArity import CategoryMembershipArity from CategoryMembershipArity import CategoryMembershipArity
...@@ -15,3 +16,5 @@ from ContentExistence import ContentExistence ...@@ -15,3 +16,5 @@ from ContentExistence import ContentExistence
from StringAttributeMatch import StringAttributeMatch from StringAttributeMatch import StringAttributeMatch
from CategoryMembershipState import CategoryMembershipState from CategoryMembershipState import CategoryMembershipState
from CategoryAcquiredMembershipState import CategoryAcquiredMembershipState from CategoryAcquiredMembershipState import CategoryAcquiredMembershipState
from CategoryRelatedMembershipState import CategoryRelatedMembershipState
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