# -*- coding: utf-8 -*- # # File: GenericTeleService.py # # Copyright (c) 2007 by CommunesPlone # Generator: ArchGenXML Version 1.5.3 dev/svn # http://plone.org/products/archgenxml # # GNU General Public License (GPL) # # 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., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # __author__ = """Gauthier BASTIEN , Stephan GEULETTE """ __docformat__ = 'plaintext' from AccessControl import ClassSecurityInfo from Products.Archetypes.atapi import * from Products.TeleServices.config import * ##code-section module-header #fill in your manual code here from Acquisition import aq_parent from Products.PlacelessTranslationService import utranslate from Products.CMFCore.utils import getToolByName from Products.validation.interfaces.IValidator import IValidator from Products.validation import validation import logging logger = logging.getLogger('TeleServices') class BelgianNationalRegValidator: #On vérifie le numéro de carte d'identité belge __implements__ = (IValidator, ) def __init__(self, name): self.name = name def __call__(self, value, *args, **kwargs): #the eID card number is 11 number long, we only accept number and '-' and '.' #we test that we only have got numbers and '-' and '.' len_value = len(value) clean_value = ''.join([c for c in value if c in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9','-','.')]) if len_value != len(clean_value): return "This field only accept numbers, indents or points !" clean_value = ''.join([c for c in value if c in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',)]) #we check that there are 11 numbers left if len(clean_value) != 11: return "Your National Register number must be 11 digits long !" first_part = int(clean_value[0:9]) last_part = int(clean_value[9:11]) #the two last digits is the result of 97 les the modulo by 97 of the 10 first digits if last_part != (97 - (first_part%97)): return "This National Register number is not valid !" return True validation.register(BelgianNationalRegValidator('isBelgianNR')) ##/code-section module-header schema = Schema(( StringField( name='name', widget=StringWidget( label='Name', label_msgid='TeleServices_label_name', i18n_domain='TeleServices', ), required=False, searchable=1, default_method="getUserName" ), StringField( name='name2', widget=StringWidget( label='Name2', label_msgid='TeleServices_label_name2', i18n_domain='TeleServices', ), required=False, searchable=1, default_method="getUserName2" ), StringField( name='nationalRegister', index="FieldIndex:brains", widget=StringWidget( description="Please use the following format : 12.12.12-123.12", label='Nationalregister', label_msgid='TeleServices_label_nationalRegister', description_msgid='TeleServices_help_nationalRegister', i18n_domain='TeleServices', ), required=False, searchable=1, default_method="getUserNationalRegister", validators=('isBelgianNR',), write_permission="Manage portal" ), StringField( name='addressStreet', widget=StringWidget( description="Street", label='Addressstreet', label_msgid='TeleServices_label_addressStreet', description_msgid='TeleServices_help_addressStreet', i18n_domain='TeleServices', ), required=False, default_method="getUserAddressStreet" ), StringField( name='addressNumber', widget=StringWidget( description="Address number", label='Addressnumber', label_msgid='TeleServices_label_addressNumber', description_msgid='TeleServices_help_addressNumber', i18n_domain='TeleServices', ), required=False, default_method="getUserAddressNumber" ), StringField( name='addressBox', widget=StringWidget( label='Addressbox', label_msgid='TeleServices_label_addressBox', i18n_domain='TeleServices', ), default_method="getUserAddressBox" ), StringField( name='addressZipCode', widget=StringWidget( label='Addresszipcode', label_msgid='TeleServices_label_addressZipCode', i18n_domain='TeleServices', ), required=False, default_method="getUserAddressZipCode" ), StringField( name='addressCity', widget=StringWidget( label='Addresscity', label_msgid='TeleServices_label_addressCity', i18n_domain='TeleServices', ), required=False, default_method="getUserAddressCity" ), StringField( name='telephoneNumber', widget=StringWidget( label='Telephonenumber', label_msgid='TeleServices_label_telephoneNumber', i18n_domain='TeleServices', ), required=False, default_method="getUserTelephoneNumber" ), StringField( name='gsmNumber', widget=StringWidget( label='Gsmnumber', label_msgid='TeleServices_label_gsmNumber', i18n_domain='TeleServices', ), required=False, default_method="getUserGsmNumber" ), StringField( name='emailAddress', validators=('isEmail',), widget=StringWidget( label='Emailaddress', label_msgid='TeleServices_label_emailAddress', i18n_domain='TeleServices', ), required=False, default_method="getUserEmailAddress" ), BooleanField( name='followDemand', default= True, widget=BooleanField._properties['widget']( description="I wish receive an e-mail at each step of the treatment.", label='Followdemand', label_msgid='TeleServices_label_followDemand', description_msgid='TeleServices_help_followDemand', i18n_domain='TeleServices', ) ), BooleanField( name='excludeFromNav', widget=BooleanField._properties['widget']( visible={'view': 'hidden', 'edit': 'visible'}, description="If selected, this item will not appear in the navigation tree.", label="Exclude from navigation", label_msgid='TeleServices_label_excludeFromNav', description_msgid='TeleServices_help_excludeFromNav', i18n_domain='TeleServices', ), required=False, schemata="metadata", accessor='exclude_from_nav' ), DateTimeField( name='transmissionDate', index="FieldIndex:brains", widget=CalendarWidget( label='Transmissiondate', label_msgid='TeleServices_label_transmissionDate', i18n_domain='TeleServices', ), write_permission="TeleServices: Manage TeleServices" ), ), ) ##code-section after-local-schema #fill in your manual code here ##/code-section after-local-schema GenericTeleService_schema = BaseSchema.copy() + \ schema.copy() ##code-section after-schema #fill in your manual code here ##/code-section after-schema class GenericTeleService(BaseContent): """ """ security = ClassSecurityInfo() __implements__ = (getattr(BaseContent,'__implements__',()),) # This name appears in the 'add' box archetype_name = 'GenericTeleService' meta_type = 'GenericTeleService' portal_type = 'GenericTeleService' allowed_content_types = [] filter_content_types = 0 global_allow = 1 #content_icon = 'GenericTeleService.gif' immediate_view = 'base_view' default_view = 'base_view' suppl_views = () typeDescription = "GenericTeleService" typeDescMsgId = 'description_edit_genericteleservice' _at_rename_after_creation = True schema = GenericTeleService_schema ##code-section class-header #fill in your manual code here ##/code-section class-header # Methods security.declarePublic('sendAnEmail') def sendAnEmail(self, object, template_param, subject_param, comment_param, send_to_address_param): """ This method is called to send an email (here, from workflow scripts and from at_post_create_script) We receive the object and we test if we have to send an e-mail """ #we have to send the mail #we try to send the mail, if there is a problem, the mail is not send but the transition must end try: plone_tool = getToolByName(self, 'plone_utils') teleservices_tool = getToolByName(self, 'portal_teleservices', None) portal = getToolByName(self, 'portal_url').getPortalObject() host = plone_tool.getMailHost() encoding = plone_tool.getSiteEncoding() # logger.info('encoding %s'%encoding) # logger.info('template_param %s'%template_param) # logger.info('subject_param %s'%subject_param) # logger.info('comment_param %s'%comment_param) # logger.info('send_to_address_param %s'%send_to_address_param) template = getattr(self, template_param) send_to_address = send_to_address_param send_from_address = teleservices_tool.getEmailFromAddress().strip() if not send_from_address: send_from_address = portal.email_from_address subject = subject_param message = template(self, contents=comment_param) # logger.info('message %s'%message) # logger.info('send_from_address %s'%send_from_address) result = host.secureSend(message, send_to_address, send_from_address, subject=subject, subtype='plain', charset=encoding, debug=False, From=send_from_address) except Exception, message: logger.warn("There was a problem during the send of an e-mail for object : %s." % object) logger.warn("The exception is : %s." % message) return security.declarePublic('getUserEmailAddress') def getUserEmailAddress(self): """ We get the user e-mail address to set a default value to the field emailAddress """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() return member.getProperty('email') security.declarePublic('at_post_create_script') def at_post_create_script(self): """ Just after creation, we check if the demand has to be excluded from navigation portal_teleservices """ if SET_EXCLUDE_FROM_NAV: #the SET_EXCLUDE_FROM_NAV constant is defined in config.py, if it is set to True, we will setExcludeFromNav(True) on a freshly created request self.setExcludeFromNav(True) #we need to reindex the object for the exclude_from_nav metadata to be set self.reindexObject(self) security.declarePublic('getUserAddressCity') def getUserAddressCity(self): """ We get the user addresscity to set a default value to the field AddressCity CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('addresscity') except ValueError: return "" security.declarePublic('getUserAddressNumber') def getUserAddressNumber(self): """ We get the user addressnumber to set a default value to the field AddressNumber CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('addressnumber') except ValueError: return "" security.declarePublic('getUserAddressStreet') def getUserAddressStreet(self): """ We get the user addressstreet to set a default value to the field AddressStreet CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('addressstreet') except ValueError: return "" security.declarePublic('getUserAddressZipCode') def getUserAddressZipCode(self): """ We get the user addresszipcode to set a default value to the field AddressZipCode CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('addresszipcode') except ValueError: return "" security.declarePublic('getUserName') def getUserName(self): """ We get the user name to set a default value to the field Name CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('name') except ValueError: return "" security.declarePublic('getUserName2') def getUserName2(self): """ We get the user name2 to set a default value to the field Name2 CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('name2') except ValueError: return "" security.declarePublic('getUserNationalRegister') def getUserNationalRegister(self): """ We get the user nationalregister to set a default value to the field NationalRegister CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('nationalregister') except ValueError: return "" security.declarePublic('getUserIdCardNumber') def getUserIdCardNumber(self): """ We get the user idcardnumber to set a default value to the field IdCardNumber CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('idcardnumber') except ValueError: return "" security.declarePublic('getUserAddressBox') def getUserAddressBox(self): """ We get the user addressbox to set a default value to the field AddressBox CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('addressbox') except ValueError: return "" security.declarePublic('getUserTelephoneNumber') def getUserTelephoneNumber(self): """ We get the user telephone number to set a default value to the field telephoneNumber CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('telephone') except ValueError: return "" security.declarePublic('getUserGsmNumber') def getUserGsmNumber(self): """ We get the user GSM number to set a default value to the field gsmNumber CPDescriptive should be installed for this property to exist in portal_memberdata """ m_tool = getToolByName(self, 'portal_membership') member = m_tool.getAuthenticatedMember() try: return member.getProperty('gsm') except ValueError: return "" security.declarePublic('getDefaultNoValue') def getDefaultNoValue(self): """ return the default no value """ return DEFAULT_NO_VALUE security.declarePublic('getDefaultDateNoValue') def getDefaultDateNoValue(self): """ return the default date no value """ return DEFAULT_DATE_NO_VALUE registerType(GenericTeleService, PROJECTNAME) # end of class GenericTeleService ##code-section module-footer #fill in your manual code here ##/code-section module-footer