From 54d0c56130cdda5c2e1011114b936b1498fb886b Mon Sep 17 00:00:00 2001 From: Jean-Paul Smets <jp@nexedi.com> Date: Mon, 1 Jan 2007 08:51:08 +0000 Subject: [PATCH] Moved from ERP5OOo git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11827 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../Constraint/DocumentReferenceConstraint.py | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 product/ERP5/Constraint/DocumentReferenceConstraint.py diff --git a/product/ERP5/Constraint/DocumentReferenceConstraint.py b/product/ERP5/Constraint/DocumentReferenceConstraint.py new file mode 100644 index 0000000000..69835e34fc --- /dev/null +++ b/product/ERP5/Constraint/DocumentReferenceConstraint.py @@ -0,0 +1,76 @@ +############################################################################## +# +# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved. +# Jerome Perrin <jerome@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 import Constraint +from Products.ERP5Type.Message import Message +N_ = lambda msg, **kw: Message('erp5_ui', msg, **kw) +_MARKER = [] + +class DocumentReferenceConstraint(Constraint): + """ + This constraint checks if the document has all required coordinates + (reference, version and language) and if there is no other document with + the same coordinates. + + Fixing is not implemented on purpose + (although we could, e.g. by changing version number) + """ + + def checkConsistency(self, object, fixit=0, throw=False): # XXX-JPS throw is not part of API - Please remove + """ + Implement here the consistency checker + """ + # XXX we probably could check reference syntax here, based on regexp in preferences? + error_list = [] + + for req in ('reference', 'language', 'version'): + if object.getProperty(req) in (None, ''): + message = '%s is not defined' % req # XXX-JPS Is translation required here with a Message class ? + error_list.append(self._generateError(object, N_(message))) + if error_list: + if throw: # XXX-JPS throw is not part of API - Please remove + raise Exception(str(error_list)) + return error_list + res = object.portal_catalog(reference=object.getReference(), language=object.getLanguage(), + version=object.getVersion(), portal_type=object.getPortalDocumentTypeList()) + res = list(res) + if len(res) == 2: # this object and another object + message = 'E: another object %s - %s - %s exists' % (object.getReference(), + object.getLanguage(), object.getVersion()) + error_list.append(self._generateError(object, N_(message))) + if len(res) > 2: # this is very serious since there are many objects with the same reference + raise Exception('Fatal error: multiple objects %s - %s - %s exist' % (object.getReference(), + object.getLanguage(), object.getVersion())) + #error_list.append(self._generateError(object, N_(s))) + if hasattr(object, 'Document_additionalConsistencyCheck'): + message = object.Document_additionalConsistencyCheck() + if message not in (None, ''): + error_list.append(self._generateError(object, N_(message))) + if error_list and throw: # XXX-JPS throw is not part of API - Please remove + raise Exception(str(error_list)) + return error_list -- 2.30.9