class IOfficialDoc(model.Schema): """ Marker interface and Dexterity Python Schema for Official Document """ fieldset(_(u'Related Echelon'), fields=[ 'relatedEchelon', ]) relatedEchelon = RelationChoice(title=_(u"Related Echelon"), required=False, source=CatalogSource(Type='Echelon')) title = schema.TextLine( title=_(u"Official Document Title"), required=True, ) docWorkflow = schema.TextLine( title=_(u'Official Document Workflow.'), required=False, ) workflowStatus = schema.TextLine( title=_(u'Workflow Status.'), required=False, ) docHeader = schema.TextLine( title=_(u'Official Document Header.'), required=True, ) docSN = schema.TextLine( title=_(u'Official Document Serial No.'), required=True, ) docDate = schema.Date( title=_(u"Official Document Date."), required=True, ) recipient = schema.TextLine( title=_(u'Recipient'), required=True, ) detail_1 = schema.TextLine( title=_(u'Official Document Detail 1'), required=False, ) detail_2 = schema.TextLine( title=_(u'Official Document Detail 2'), required=False, ) detail_3 = schema.TextLine( title=_(u'Official Document Detail 3'), required=False, ) detail_4 = schema.TextLine( title=_(u'Official Document Detail 4'), required=False, ) detail_5 = schema.TextLine( title=_(u'Official Document Detail 5'), required=False, ) detail_6 = schema.TextLine( title=_(u'Official Document Detail 6'), required=False, ) detail_7 = schema.TextLine( title=_(u'Official Document Detail 7'), required=False, ) detail_8 = schema.TextLine( title=_(u'Official Document Detail 8'), required=False, ) detail_9 = schema.TextLine( title=_(u'Official Document Detail 9'), required=False, ) detail_10 = schema.TextLine( title=_(u'Official Document Detail 10'), required=False, )
class IProblemTable(model.Schema): fieldset( _('Basic Text'), fields=['description_header', 'description_text', 'description_img']) description_header = schema.Text( title=_(u'description header'), required=True, ) description_text = schema.Text( title=_(u'description text'), required=True, ) description_img = namedfile.NamedBlobImage( title=_(u'description Image'), required=True, ) fieldset(_('General Problem'), fields=[ 'problem_people', 'problem_machine', 'problem_materials', 'problem_method', 'problem_EC' ]) problem_people = schema.Text( title=_(u'problem_people'), required=True, ) problem_machine = schema.Text( title=_(u'problem_machine'), required=True, ) problem_materials = schema.Text( title=_(u'problem_materials'), required=True, ) problem_method = schema.Text( title=_(u'problem_method'), required=True, ) problem_EC = schema.Text( title=_(u'problem_EC'), required=True, ) fieldset(_('Smart Problem'), fields=[ 'smart_people', 'smart_machine', 'smart_materials', 'smart_method', 'smart_EC' ]) smart_people = schema.Text( title=_(u'smart_people'), required=True, ) smart_machine = schema.Text( title=_(u'smart_machine'), required=True, ) smart_materials = schema.Text( title=_(u'smart_materials'), required=True, ) smart_method = schema.Text( title=_(u'smart_method'), required=True, ) smart_EC = schema.Text( title=_(u'smart_EC'), required=True, )
class IActa(form.Schema): """ ACTA """ fieldset('acta', label=_(u'Tab acta'), fields=['title', 'horaInici', 'horaFi', 'llocConvocatoria', 'ordenDelDia', 'enllacVideo'] ) fieldset('assistents', label=_(u'Assistents'), fields=['membresConvocats', 'membresConvidats', 'llistaExcusats', 'llistaNoAssistens'] ) dexteritytextindexer.searchable('title') title = schema.TextLine( title=_PMF(u'label_title', default=u'Title'), required=True ) horaInici = schema.Datetime( title=_(u"Session start time"), required=False, ) horaFi = schema.Datetime( title=_(u"Session end time"), required=False, ) llocConvocatoria = schema.TextLine( title=_(u"Session location"), required=False, ) directives.widget(membresConvocats=WysiwygFieldWidget) dexteritytextindexer.searchable('membresConvocats') membresConvocats = schema.Text( title=_(u"Assistants"), description=_(u"Assistants help"), required=False, ) directives.widget(membresConvidats=WysiwygFieldWidget) dexteritytextindexer.searchable('membresConvidats') membresConvidats = schema.Text( title=_(u"Invited members"), description=_(u"Invited members help"), required=False, ) directives.widget(llistaExcusats=WysiwygFieldWidget) dexteritytextindexer.searchable('llistaExcusats') llistaExcusats = schema.Text( title=_(u"Excused members"), description=_(u"Excused members help"), required=False, ) directives.widget(llistaNoAssistens=WysiwygFieldWidget) dexteritytextindexer.searchable('llistaNoAssistens') llistaNoAssistens = schema.Text( title=_(u"No assistents"), description=_(u"No assistents help"), required=False, ) directives.widget(ordenDelDia=WysiwygFieldWidget) dexteritytextindexer.searchable('ordenDelDia') ordenDelDia = schema.Text( title=_(u"Session order"), description=_(u"Session order description"), required=False, ) enllacVideo = schema.TextLine( title=_(u"Video link"), description=_(u"If you want to add a video file, not a url, there is a trick, you must add an Audio Type and leave this field empty."), required=False, )
class ISettings(Interface): """ Controlpanel fields. """ fieldset(_(u'settings_fieldset_server', default=u'Server'), fields=[ 'sync_to_ldap', 'ldap_server_uri', 'ldap_service_user', 'ldap_service_pass' ]) sync_to_ldap = schema.Bool( title=_(u'settings_sync_to_ldap_title', default=u'LDAP Syncing'), description=_( u'settings_sync_to_ldap_description', default= u'If enabled, the CRM will attempt an LDAP connection on sync events.' ), # noqa required=False, default=False, ) ldap_server_uri = schema.TextLine( title=_(u'settings_ldap_server_uri_title', default=u'LDAP Server URI'), default=u'ldap://127.0.0.1', required=False, ) ldap_service_user = schema.TextLine( title=_(u'settings_ldap_service_user_title', default=u'LDAP Service User'), required=False, default=u'cn=admin,dc=example,dc=com', ) ldap_service_pass = schema.Password( title=_(u'settings_ldap_service_pass_title', default=u'LDAP Service Password'), required=False, ) fieldset(_(u'settings_fieldset_dn', default=u'DN'), fields=['users_dn', 'groups_dn', 'accounts_dn', 'archives_dn']) users_dn = schema.TextLine( title=_(u'settings_users_dn_title', default=u'Users DN'), description=_( u'settings_users_dn_description', default=u'Include the users DN. e.g. ou=users,dc=example,dc=com' ), # noqa required=False, default=u'ou=users,dc=example,dc=com', ) groups_dn = schema.TextLine( title=_(u'settings_groups_dn_title', default=u'Groups DN'), description=_( u'settings_groups_dn_description', default=u'Include the groups DN. e.g. ou=groups,dc=example,dc=com' ), # noqa required=False, default=u'ou=groups,dc=example,dc=com', ) accounts_dn = schema.TextLine( title=_(u'settings_accounts_dn_title', default=u'Accounts DN'), description=_( u'settings_accounts_dn_description', default= u'Include the accounts DN. e.g. ou=accounts,dc=example,dc=com' ), # noqa required=False, default=u'ou=accounts,dc=example,dc=com', ) archives_dn = schema.TextLine( title=_(u'settings_archives_dn_title', default=u'Archives DN'), description=_( u'settings_archives_dn_description', default= u'Include the archives DN. e.g. ou=archives,dc=example,dc=com' ), # noqa required=False, default=u'ou=archives,dc=example,dc=com', ) fieldset(_(u'settings_fieldset_mapping', default=u'Mapping'), fields=[ 'ldap_field_mapping_contact', 'ldap_field_mapping_account', 'ldap_objectclass_mapping' ]) ldap_field_mapping_contact = schema.List( title=_(u'settings_ldap_field_mapping_contact_title', default=u'Contact Attribute Mapping'), description=_( u'settings_ldap_field_mapping_contact_description', default= u'Map Plone fields to their corresponding LDAP attributes. Plone|LDAP' ), # noqa value_type=schema.TextLine(), default=[ 'title|cn', 'email|mail', 'firstname|givenname', 'lastname|sn' ], required=False, ) ldap_field_mapping_account = schema.List( title=_(u'settings_ldap_field_mapping_account_title', default=u'Account Attribute Mapping'), description=_( u'settings_ldap_field_mapping_account_description', default= u'Map Plone fields to their corresponding LDAP attributes. Plone|LDAP' ), # noqa value_type=schema.TextLine(), default=['title|cn', 'billing_email|mail', 'ceo|givenname', 'type|sn'], required=False, ) ldap_objectclass_mapping = schema.List( title=_(u'settings_ldap_objectclass_mapping_title', default=u'Content-Type to objectClass Mapping'), description=_( u'settings_ldap_objectclass_mapping_description', default=u'Map Plone Content-Type to an LDAP objectClass. Plone|LDAP' ), # noqa value_type=schema.TextLine(), default=[ 'Group|posixGroup', 'Account|inetOrgPerson', 'Contact|inetOrgPerson' ], required=False, ) fieldset(_(u'settings_fieldset_other', default=u'Other'), fields=['manual_ldap_actions', 'ldap_archiving']) manual_ldap_actions = schema.Bool( title=_(u'settings_manual_ldap_actions_title', default=u'Manual LDAP Actions'), description=_( u'settings_manual_ldap_actions_description', default=u'Enable manual LDAP controls in the actions menu.' ), # noqa required=False, default=False, ) ldap_archiving = schema.Bool( title=_(u'settings_ldap_archiving_title', default=u'LDAP Archiving'), description=_( u'settings_ldap_archiving_description', default= u'If enabled, duplicate LDAP entries will be archived instead of deleted.' ), # noqa required=False, default=False, )
class IHOAHouseReWalkInspection(form.Schema): """ """ fieldset('roof', label=u'Roof', description=u'', fields=['title', 'inspection_datetime', 'passed_datetime', 'inspected_by_first', 'inspected_by_second', 'roof_cond_remains', 'roof_action_required', 'roof_text', 'roof_rewalk_text', 'roof_image', 'roof_rewalk_image'] ) form.mode(title='hidden') title = schema.TextLine( title=_(u"Title"), ) form.mode(inspection_datetime='hidden') inspection_datetime = schema.Datetime( title=_(u'First Inspection Datetime'), description=_(u''), required=False, ) form.mode(passed_datetime='hidden') passed_datetime = schema.Datetime( title=_(u'Secondary Inspection Datetime'), description=_(u''), required=False, ) form.mode(inspected_by_first='hidden') inspected_by_first = schema.TextLine( title=_(u"Primary Inspection By"), required=False, ) form.mode(inspected_by_second='hidden') inspected_by_second = schema.TextLine( title=_(u"Secondary Inspection By"), required=False, ) form.widget(roof_cond_remains=RadioFieldWidget) roof_cond_remains = schema.Choice( title=_(u'Roof Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(roof_action_required='display') roof_action_required = schema.Choice( title=_(u'Roof Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(roof_text='display') roof_text = schema.Text( title=_(u"Roof Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) roof_rewalk_text = schema.Text( title=_(u"Roof Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(roof_image='display') roof_image = NamedBlobImage( title=_(u"Roof Photo"), description=_(u""), required=False, ) roof_rewalk_image = NamedBlobImage( title=_(u"Roof Re-walk Photo"), description=_(u""), required=False, ) fieldset('gutters', label=u'Gutters', description=u'', fields=['gutters_cond_remains', 'gutters_action_required', 'gutters_text', 'gutters_rewalk_text', 'gutters_image', 'gutters_rewalk_image'] ) form.widget(gutters_cond_remains=RadioFieldWidget) gutters_cond_remains = schema.Choice( title=_(u'Gutter Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(gutters_action_required='display') gutters_action_required = schema.Choice( title=_(u'Gutters Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(gutters_text='display') gutters_text = schema.Text( title=_(u"Gutters Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) gutters_rewalk_text = schema.Text( title=_(u"Gutters Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(gutters_image='display') gutters_image = NamedBlobImage( title=_(u"Gutters Photo"), description=_(u""), required=False, ) gutters_rewalk_image = NamedBlobImage( title=_(u"Gutters Re-walk Photo"), description=_(u""), required=False, ) fieldset('exterior_paint', label=u'Exterior Paint', description=u'', fields=['exterior_paint_cond_remains', 'exterior_paint_action_required', 'exterior_paint_text', 'exterior_paint_rewalk_text', 'exterior_paint_image', 'exterior_paint_rewalk_image'] ) form.widget(exterior_paint_cond_remains=RadioFieldWidget) exterior_paint_cond_remains = schema.Choice( title=_(u'Exterior Paint Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(exterior_paint_action_required='display') exterior_paint_action_required = schema.Choice( title=_(u'Exterior Paint Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(exterior_paint_text='display') exterior_paint_text = schema.Text( title=_(u"Exterior Paint Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) exterior_paint_rewalk_text = schema.Text( title=_(u"Exterior Paint Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(exterior_paint_image='display') exterior_paint_image = NamedBlobImage( title=_(u"Exterior Paint Photo"), description=_(u""), required=False, ) exterior_paint_rewalk_image = NamedBlobImage( title=_(u"Exterior Paint Re-walk Photo"), description=_(u""), required=False, ) fieldset('decks', label=u'Decks', description=u'', fields=['decks_cond_remains', 'decks_action_required', 'decks_text', 'decks_rewalk_text', 'decks_image', 'decks_rewalk_image'] ) form.widget(decks_cond_remains=RadioFieldWidget) decks_cond_remains = schema.Choice( title=_(u'Decks Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(decks_action_required='display') decks_action_required = schema.Choice( title=_(u'Decks Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(decks_text='display') decks_text = schema.Text( title=_(u"Decks Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) decks_rewalk_text = schema.Text( title=_(u"Decks Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(decks_image='display') decks_image = NamedBlobImage( title=_(u"Decks Photo"), description=_(u""), required=False, ) decks_rewalk_image = NamedBlobImage( title=_(u"Decks Re-walk Photo"), description=_(u""), required=False, ) fieldset('entry_way', label=u'Entry Way', description=u'', fields=['entry_way_cond_remains', 'entry_way_action_required', 'entry_way_text', 'entry_way_rewalk_text', 'entry_way_image', 'entry_way_rewalk_image'] ) form.widget(entry_way_cond_remains=RadioFieldWidget) entry_way_cond_remains = schema.Choice( title=_(u'Entry Way Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(entry_way_action_required='display') entry_way_action_required = schema.Choice( title=_(u'Entry Way Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(entry_way_text='display') entry_way_text = schema.Text( title=_(u"Entry Way Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) entry_way_rewalk_text = schema.Text( title=_(u"Entry Way Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(entry_way_image='display') entry_way_image = NamedBlobImage( title=_(u"Entry Way Photo"), description=_(u""), required=False, ) entry_way_rewalk_image = NamedBlobImage( title=_(u"Entry Way Re-walk Photo"), description=_(u""), required=False, ) fieldset('paved_surfaces', label=u'Paved Surfaces', description=u'', fields=['paved_surfaces_cond_remains', 'paved_surfaces_action_required', 'paved_surfaces_text', 'paved_surfaces_rewalk_text', 'paved_surfaces_image', 'paved_surfaces_rewalk_image'] ) form.widget(paved_surfaces_cond_remains=RadioFieldWidget) paved_surfaces_cond_remains = schema.Choice( title=_(u'Paved Surfaces Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(paved_surfaces_action_required='display') paved_surfaces_action_required = schema.Choice( title=_(u'Paved Surfaces Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(paved_surfaces_text='display') paved_surfaces_text = schema.Text( title=_(u"Paved Surfaces Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) paved_surfaces_rewalk_text = schema.Text( title=_(u"Paved Surfaces Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(paved_surfaces_image='display') paved_surfaces_image = NamedBlobImage( title=_(u"Paved Surfaces Photo"), description=_(u""), required=False, ) paved_surfaces_rewalk_image = NamedBlobImage( title=_(u"Paved Surfaces Re-walk Photo"), description=_(u""), required=False, ) fieldset('landscaping', label=u'Landscaping', description=u'', fields=['landscaping_cond_remains', 'landscaping_action_required', 'landscaping_text', 'landscaping_rewalk_text', 'landscaping_image', 'landscaping_rewalk_image'] ) form.widget(landscaping_cond_remains=RadioFieldWidget) landscaping_cond_remains = schema.Choice( title=_(u'Landscaping Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(landscaping_action_required='display') landscaping_action_required = schema.Choice( title=_(u'Landscaping Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(landscaping_text='display') landscaping_text = schema.Text( title=_(u"Landscaping Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) landscaping_rewalk_text = schema.Text( title=_(u"Landscaping Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(landscaping_image='display') landscaping_image = NamedBlobImage( title=_(u"Landscaping Photo"), description=_(u""), required=False, ) landscaping_rewalk_image = NamedBlobImage( title=_(u"Landscaping Re-walk Photo"), description=_(u""), required=False, ) fieldset('general_maintenance', label=u'General Maintenance', description=u'', fields=['general_maintenance_cond_remains', 'general_maintenance_action_required', 'general_maintenance_text', 'general_maintenance_rewalk_text', 'general_maintenance_image', 'general_maintenance_rewalk_image'] ) form.widget(general_maintenance_cond_remains=RadioFieldWidget) general_maintenance_cond_remains = schema.Choice( title=_(u'General Maintenance Condition Remains?'), description=_(u''), source=SimpleVocabulary([SimpleTerm(value=True, title=u"Yes"), SimpleTerm(value=False, title=U"No")]), required=False, ) form.mode(general_maintenance_action_required='display') general_maintenance_action_required = schema.Choice( title=_(u'General Maintenance Required Action'), description=_(u''), vocabulary=REQUIRED_ACTION_VOCABULARY, required=False, ) form.mode(general_maintenance_text='display') general_maintenance_text = schema.Text( title=_(u"General Maintenance Issue"), description=_(u""), required=False, max_length=50, ) general_maintenance_rewalk_text = schema.Text( title=_(u"General Maintenance Reinspect Issue"), description=_(u"Comments included in letter and email. 50 character limit"), required=False, max_length=50, ) form.mode(general_maintenance_image='display') general_maintenance_image = NamedBlobImage( title=_(u"General Maintenance Photo"), description=_(u""), required=False, ) general_maintenance_rewalk_image = NamedBlobImage( title=_(u"General Maintenance Re-walk Photo"), description=_(u""), required=False, ) form.mode(redirect_assignments='hidden') redirect_assignments = schema.TextLine(title=_(u"Redirect Assignments"), required=False) @invariant def confirmAction(data): context = data.__context__ context_state = api.content.get_state(obj=context) for fieldset_id in IHOAHOUSEINSPECTION_FIELDSETS: if hasattr(data, '%s_text' % fieldset_id): if getattr(data, '%s_text' % fieldset_id): action_required = getattr(data, '%s_action_required' % fieldset_id) if not action_required: error_keys = fieldset_id.split('_') error_str = ' '.join(error_keys) raise Invalid(_(u"You must provide a required action for %s." % error_str)) if hasattr(data, '%s_action_required' % fieldset_id): if getattr(data, '%s_action_required' % fieldset_id): failure_text = getattr(data, '%s_text' % fieldset_id) if not failure_text: error_keys = fieldset_id.split('_') error_str = ' '.join(error_keys) raise Invalid(_(u"You must provide a description of the issue if action is required for: %s." % error_str)) @invariant def conditionPerists(data): context = data.__context__ context_state = api.content.get_state(obj=context) if context_state in ['failed_final', 'remedied']: for fieldset_id in IHOAHOUSEINSPECTION_FIELDSETS: if hasattr(data, '%s_cond_remains' % fieldset_id): if getattr(data, '%s_cond_remains' % fieldset_id): rewalk_txt = getattr(data, '%s_rewalk_text' % fieldset_id) rewalk_image = getattr(data, '%s_rewalk_image' % fieldset_id) if not rewalk_txt: error_keys = fieldset_id.split('_') error_str = ' '.join(error_keys) raise Invalid(_(u"You must provide an a reason the condition persists for %s." % error_str)) if not rewalk_image: error_keys = fieldset_id.split('_') error_str = ' '.join(error_keys) raise Invalid(_(u"You must provide an a photo of the condition for %s." % error_str)) @invariant def verifyCondition(data): context = data.__context__ context_state = api.content.get_state(obj=context) if context_state in ['failed_final', 'remedied']: for fieldset_id in IHOAHOUSEINSPECTION_FIELDSETS: if hasattr(data, '%s_cond_remains' % fieldset_id): initial_text = getattr(data, '%s_text' % fieldset_id) if initial_text and not getattr(data, '%s_cond_remains' % fieldset_id): error_keys = fieldset_id.split('_') error_str = ' '.join(error_keys) raise Invalid(_(u"You must provide an image for %s." % error_str)) @invariant def imagesRequired(data): context = data.__context__ context_state = api.content.get_state(obj=context) for fieldset_id in IHOAHOUSEINSPECTION_FIELDSETS: if context_state == 'failed_initial': if getattr(data, '%s_text' % fieldset_id): image = getattr(data, '%s_image' % fieldset_id) if not image: error_keys = fieldset_id.split('_') error_str = ' '.join(error_keys) raise Invalid(_(u"You must provide an image for %s." % error_str)) if context_state == 'failed_final': if getattr(data, '%s_rewalk_text' % fieldset_id): image = getattr(data, '%s_rewalk_image' % fieldset_id) if not image: error_keys = fieldset_id.split('_') error_str = ' '.join(error_keys) raise Invalid(_(u"You must provide an image for %s." % error_str))
class IBoosterProposalForm(form.Schema): """ Uses IBoosterClub Schema """ fieldset('booster_club_information', label=u'Booster Club Information', fields=['title', 'booster_organization']) title = schema.TextLine(title=_(u"Club Name"), ) booster_organization = schema.TextLine(title=_(u"LWHS Organization"), ) fieldset('officer_information', label=u'Officer Information', description=getOfficerDescription, fields=[ 'club_president', 'club_secretary', 'club_treasurer', ]) club_president = schema.Choice( title=_(u"President"), vocabulary=u'docent.group.Booster_Members', ) club_secretary = schema.Choice( title=_(u"Secretary"), vocabulary=u'docent.group.Booster_Members', ) club_treasurer = schema.Choice( title=_(u"Treasurer"), vocabulary=u'docent.group.Booster_Members', ) fieldset('advisor_information', label=u'Advisor Information', description=u'', fields=[ 'club_advisor', ]) club_advisor = schema.Choice( title=_(u"LWHS Advisor"), vocabulary=u'docent.group.Advisors', ) # fieldset('agreement_upload', # label=u'File', # description=u'<p>1) We still need the paper form completed and uploaded. Please download the Agreement.</p>' # u'<p>2) Once completed, please upload the form.</p>', # fields=['agreement_file',] # ) # # agreement_file = NamedBlobFile( # title=_(u"File"), # ) fieldset( 'financial_information', label=u'Financial Information', description=u'All booster clubs must satisfy the following criteria:', fields=[ 'dedicated_checking', 'review_officers', 'review_revenue', 'review_officer_one', 'review_officer_two' ]) dedicated_checking = schema.Bool(title=_( u'1. Maintain a dedicated checking account (opened within 30 days of club approval).' ), description=_(u''), constraint=validateAccept) review_officers = schema.Bool( title=_(u'2. Two officers review expenditures.'), description=_(u''), constraint=validateAccept) review_revenue = schema.Bool(title=_(u'3. Two officers review revenues.'), description=_(u''), constraint=validateAccept) review_officer_one = schema.Choice( title=_(u"4. Review Officer One."), description=_( u"Select the name of of your first review officer. It must match one of " u"your club officers."), vocabulary=u'docent.group.Booster_Members', required=True, ) review_officer_two = schema.Choice( title=_(u"5. Review Officer Two."), description=_( u"Select the name of of your second review officer. It must match one of " u"your club officers."), vocabulary=u'docent.group.Booster_Members', required=True, ) fieldset( 'agreement_confirmation', label=u'Agreement', description=_( u'I understand and agree to abide by the membership agreement and ' u'financial reporting requirements'), fields=[ 'agreement_bool', ]) agreement_bool = schema.Bool( title=_(u'I agree'), constraint=validateAccept, ) @invariant def officerInvariant(data): if data.club_president == data.club_secretary: raise Invalid( _(u"The club president and secretary cannot be the same individual." )) @invariant def reviewerInvariant(data): if data.review_officer_one == data.review_officer_two: raise Invalid( _(u"The reviewing officers cannot be the same people.")) club_officers = [ data.club_president, data.club_secretary, data.club_treasurer ] if data.review_officer_one not in club_officers: raise Invalid(_(u"Reviewing officer one must a club officer.")) if data.review_officer_two not in club_officers: raise Invalid(_(u"Reviewing officer two must a club officer."))
class IExtraCredits(model.Schema): """Class to create CAPS Petition for Excess Credits""" title = schema.TextLine( title=(u'First and Last Name'), description=(u'Please enter your First and Last Name'), required=True, constraint=name_check_constraint, ) email = schema.TextLine( title=(u'Email Address'), required=True, constraint=email_constraint, ) emplID = schema.TextLine( title=(u'Empl ID'), description=(u'Enter your CUNYFirst Empl ID'), required=True, min_length=8, max_length=8, ) cellPhoneNumber = schema.TextLine( title=(u'Phone Number (Cell)'), required=False, ) homePhoneNumber = schema.TextLine( title=(u'Phone Number (Home)'), required=False, ) address = schema.TextLine( title=(u'Address'), description=(u'Enter your home address, including apartment number'), required=True, ) city = schema.TextLine( title=(u'City'), required=True, ) zipCode = schema.TextLine( title=(u'Zip Code'), description=(u'Enter your 5 digit zip code'), required=True, min_length=5, max_length=10, ) birthday = schema.Date(title=(u'Date of Birth'), required=True) # Data grid for semester and year form.widget(semesterInfo=DataGridFieldFactory) # form.widget['semesterInfo'].allow_insert = False semesterInfo = schema.List( title=(u'Semester'), value_type=DictRow(title=(u'Semester and Year'), schema=ISemester), required=False, ) form.widget(coursesDropped=DataGridFieldFactory) coursesDropped = schema.List( title=(u'Courses'), value_type=DictRow(title=(u'Courses to be withdrawn from'), schema=ICourses), required=False, ) studentStatement = field.NamedBlobFile( title=(u'Personal Statement'), description= (u'Be sure to include a plan detailing how you will manage this courseload' ), required=True, ) transcript = field.NamedBlobFile( title=(u'Transcript'), description=(u'Petitions without transcripts will not be considered'), required=True) supportingDocument = field.NamedBlobFile( title=(u'Supporting Document'), description=(u'Upload any supporting documentation here'), required=False, ) additionalDocuments = field.NamedBlobFile( title=(u'Additional Documents'), description=(u'Upload additional supporting documentation here'), required=False, ) # Create new fieldset for Committee Approval Field directives.fieldset('Staff Only', fields=[ 'committeeApproval', ]) # Permissions-dependent field for Committee to see who has # note each member's 'vote' on a specific petition permission.read_permission(committeeApproval='cmf.ModifyPortalContent') permission.write_permission(committeeApproval='cmf.ModifyPortalContent') form.widget(committeeApproval=DataGridFieldFactory) committeeApproval = schema.List( title=(u'Committee Member Votes'), value_type=DictRow(title=(u'Please enter your name and vote'), schema=ICommitteeVote), # required=True, )
class IGradeChange(model.Schema): """Class to create Grade Appeal schema""" title = schema.TextLine( title=(u'Name'), description=(u'Please enter your First and Last Name'), required=True, constraint=name_check_constraint, ) petitionReason = schema.Choice( title=(u'Reason for Peition'), values=[ (u"Select One"), (u"Extension INC"), (u"Grade Appeal"), (u"Grade Change"), (u"Other") ], required=True, constraint=choice_constraint ) email = schema.TextLine( title=(u'Email Address'), required=True, constraint=email_constraint, ) emplID = schema.TextLine( title=(u'Empl ID'), description=(u'Enter your CUNYFirst Empl ID'), required=True, min_length=8, max_length=8, ) cellPhoneNumber = schema.TextLine( title=(u'Phone Number (Cell)'), required=False, ) homePhoneNumber = schema.TextLine( title=(u'Phone Number (Home)'), required=False, ) address = schema.TextLine( title=(u'Address'), description=(u'Enter your home address, including apartment number'), required=True, ) city = schema.TextLine( title=(u'City'), required=True, ) zipCode = schema.TextLine( title=(u'Zip Code'), description=(u'Enter your 5 digit zip code'), required=True, min_length=5, max_length=9, ) birthday = schema.Date( title=(u'Date of Birth'), required=True ) # Data grid for semester and year form.widget(semesterInfo=DataGridFieldFactory) semesterInfo = schema.List( title=(u'For what semester'), value_type=DictRow(title=(u'Semester and Year'), schema=ISemester), required=False, ) courseNumSection = schema.TextLine( title=_(u'Course Number and Section'), description=(u'Ex: CHEM 101'), required=True, ) professor = schema.TextLine( title=(u'Course Instructor'), description=(u'Instructor of the afforementioned course'), required=True, ) studentStatement = field.NamedBlobFile( title=(u'Personal Statement'), required=True, ) supportingDocument = field.NamedBlobFile( title=(u'Supporting Document'), description=(u'Upload any supporting documentation here'), required=False, ) # Create new fieldset for Committee Approval Field directives.fieldset( 'Staff Only', fields=[ 'committeeApproval', ] ) # Permissions-dependent field for Committee to see who has # note each member's 'vote' on a specific petition permission.read_permission(committeeApproval='cmf.ModifyPortalContent') permission.write_permission(committeeApproval='cmf.ModifyPortalContent') form.widget(committeeApproval=DataGridFieldFactory) committeeApproval = schema.List( title=(u'Committee Member Votes'), value_type=DictRow( title=(u'Please enter your name and vote'), schema=ICommitteeVote ), # required=True, )
class IPatientSchema(model.Schema): """Patient Content """ directives.omitted("title") title = schema.TextLine(title=u"Title", required=False) directives.omitted("description") description = schema.Text(title=u"Description", required=False) # contact fieldset fieldset("contact", label=u"Contact", fields=["email", "phone", "mobile"]) # address fieldset fieldset("address", label=u"Address", fields=["city", "zipcode", "address", "country"]) # Default mrn = schema.TextLine( title=_(u"label_patient_mrn", default=u"Medical Record #"), description=_(u"Patient Medical Record Number"), required=True, ) patient_id = schema.TextLine( title=_(u"label_patient_id", default=u"ID"), description=_(u"Unique Patient ID"), required=False, ) firstname = schema.TextLine( title=_(u"label_patient_firstname", default=u"Firstname"), description=_(u"Patient firstname"), required=False, ) lastname = schema.TextLine( title=_(u"label_patient_lastname", default=u"Lastname"), description=_(u"Patient lastname"), required=False, ) gender = schema.Choice( title=_(u"label_patient_gender", default=u"Gender"), description=_(u"Patient gender"), source="senaite.patient.vocabularies.gender", default="", required=True, ) # Contact email = schema.TextLine( title=_(u"label_patient_email", default=u"Email"), description=_(u"Patient email address"), required=False, ) phone = schema.TextLine( title=_(u"label_patient_phone", default=u"Phone"), description=_(u"Patient phone number"), required=False, ) mobile = schema.TextLine( title=_(u"label_patient_mobile", default=u"Mobile"), description=_(u"Patient mobile phone number"), required=False, ) # Address address = schema.Text( title=_(u"label_patient_address", default=u"Address"), description=_(u"Patient address"), required=False, ) city = schema.TextLine( title=_(u"label_patient_city", default=u"City"), description=_(u"Patient city"), required=False, ) zipcode = schema.TextLine( title=_(u"label_patient_zipcode", default=u"ZIP"), description=_(u"Patient ZIP Code"), required=False, ) country = schema.Choice( title=_(u"label_patient_country", default=u"Country"), description=_(u"Patient country"), source="senaite.patient.vocabularies.country", required=False, ) directives.widget("birthdate", DatetimeWidget, datepicker_nofuture=True, show_time=False) birthdate = DatetimeField( title=_(u"label_patient_birthdate", default=u"Birthdate"), description=_(u"Patient birthdate"), required=False, ) @invariant def validate_mrn(data): """Checks if the patient MRN # is unique """ # https://community.plone.org/t/dexterity-unique-field-validation context = getattr(data, "__context__", None) if context is not None: if context.mrn == data.mrn: # nothing changed return patient = patient_api.get_patient_by_mrn(data.mrn, full_object=False, include_inactive=True) if patient: raise Invalid(_("Patient Medical Record # must be unique")) @invariant def validate_patient_id(data): """Checks if the patient ID is unique """ pid = data.patient_id # field is not required if not pid: return # https://community.plone.org/t/dexterity-unique-field-validation context = getattr(data, "__context__", None) if context is not None: if context.patient_id == pid: # nothing changed return query = { "portal_type": "Patient", "patient_id": pid, "is_active": True, } patient = patient_api.patient_search(query) if patient: raise Invalid(_("Patient ID must be unique")) @invariant def validate_email(data): """Checks if the email is correct """ if not data.email: return if not is_valid_email_address(data.email): raise Invalid(_("Patient email is invalid"))
class IHomePage(Schema): """Marker for homepage schema""" # Download fieldset('Download', label=u'Download', fields=[ 'download_title', 'download_text', 'download_button_text', 'download_url', 'download_below_button_text', ]) download_title = schema.TextLine( title=u"Title", required=True, ) download_text = RichText( title=u"Text", required=True, ) download_button_text = schema.TextLine( title=u"Button text", required=True, ) download_url = schema.URI( title=u"Download URL", required=True, ) download_below_button_text = RichText( title=u"Text below download button", required=True, ) # Events fieldset('Events', label=u'Events', fields=[ 'event_title', 'event_text', 'event_page', ]) event_title = schema.TextLine( title=u"Title", required=True, ) event_text = RichText( title=u"Text", required=True, ) event_page = RelationChoice( title=u"Events page", vocabulary="plone.app.vocabularies.Catalog", required=True, ) # Community fieldset('Community', label=u'Community', fields=[ 'community_title', 'community_text', 'community_page', ]) community_title = schema.TextLine( title=u"Title", required=True, ) community_text = RichText( title=u"Text", required=True, ) community_page = RelationChoice( title=u"Community page", vocabulary="plone.app.vocabularies.Catalog", required=False, ) # Sponsors fieldset('Sponsors', label=u'Sponsors', fields=[ 'sponsor_title', 'sponsor_text', 'sponsor_page', ]) sponsor_title = schema.TextLine( title=u"Title", required=True, ) sponsor_text = RichText( title=u"Text", required=True, ) sponsor_page = RelationChoice( title=u"Sponsor page", vocabulary="plone.app.vocabularies.Catalog", required=True, )
class IMailer(IAction): """A form action adapter that will e-mail form input.""" directives.write_permission( recipient_name=config.EDIT_ADDRESSING_PERMISSION) directives.read_permission(recipient_name=MODIFY_PORTAL_CONTENT) recipient_name = zope.schema.TextLine( title=_(u"label_formmailer_recipient_fullname", default=u"Recipient's full name"), description=_( u"help_formmailer_recipient_fullname", default=u"The full name of the recipient of the mailed form.", ), default=u"", missing_value=u"", required=False, ) directives.write_permission( recipient_email=config.EDIT_ADDRESSING_PERMISSION) directives.read_permission(recipient_email=MODIFY_PORTAL_CONTENT) recipient_email = Email( title=_(u"label_formmailer_recipient_email", default=u"Recipient's e-mail address"), description=_( u"help_formmailer_recipient_email", default=u"The recipients e-mail address.", ), required=False, ) fieldset( u"addressing", label=_("Addressing"), fields=[ "to_field", "cc_recipients", "bcc_recipients", "replyto_field" ], ) directives.write_permission(to_field=config.EDIT_ADDRESSING_PERMISSION) directives.read_permission(to_field=MODIFY_PORTAL_CONTENT) to_field = zope.schema.Choice( title=_(u"label_formmailer_to_extract", default=u"Extract Recipient From"), description=_( u"help_formmailer_to_extract", default=u"Choose a form field from which you wish to extract " u"input for the To header. If you choose anything other " u'than "None", this will override the "Recipient\'s " ' u"e-mail address setting above. Be very cautious about " u"allowing unguarded user input for this purpose.", ), required=False, vocabulary="easyform.Fields", ) directives.write_permission( cc_recipients=config.EDIT_ADDRESSING_PERMISSION) directives.read_permission(cc_recipients=MODIFY_PORTAL_CONTENT) cc_recipients = zope.schema.Text( title=_(u"label_formmailer_cc_recipients", default=u"CC Recipients"), description=_( u"help_formmailer_cc_recipients", default=u"E-mail addresses which receive a carbon copy.", ), default=u"", missing_value=u"", required=False, ) directives.write_permission( bcc_recipients=config.EDIT_ADDRESSING_PERMISSION) directives.read_permission(bcc_recipients=MODIFY_PORTAL_CONTENT) bcc_recipients = zope.schema.Text( title=_(u"label_formmailer_bcc_recipients", default=u"BCC Recipients"), description=_( u"help_formmailer_bcc_recipients", default=u"E-mail addresses which receive a blind carbon copy.", ), default=u"", missing_value=u"", required=False, ) directives.write_permission(replyto_field=config.EDIT_TECHNICAL_PERMISSION) directives.read_permission(replyto_field=MODIFY_PORTAL_CONTENT) replyto_field = zope.schema.Choice( title=_(u"label_formmailer_replyto_extract", default=u"Extract Reply-To From"), description=_( u"help_formmailer_replyto_extract", default=u"Choose a form field from which you wish to extract " u"input for the Reply-To header. NOTE: You should " u"activate e-mail address verification for the " u"designated field.", ), required=False, vocabulary="easyform.Fields", ) fieldset( u"message", label=PMF("Message"), fields=[ "msg_subject", "subject_field", "body_pre", "body_post", "body_footer", "showAll", "showFields", "includeEmpties", "sendCSV", "sendXML", ], ) directives.read_permission(msg_subject=MODIFY_PORTAL_CONTENT) msg_subject = zope.schema.TextLine( title=_(u"label_formmailer_subject", default=u"Subject"), description=_( u"help_formmailer_subject", default=u"" u"Subject line of message. This is used if you " u"do not specify a subject field or if the field " u"is empty.", ), default=u"Form Submission", missing_value=u"", required=False, ) directives.write_permission(subject_field=config.EDIT_ADVANCED_PERMISSION) directives.read_permission(subject_field=MODIFY_PORTAL_CONTENT) subject_field = zope.schema.Choice( title=_(u"label_formmailer_subject_extract", default=u"Extract Subject From"), description=_( u"help_formmailer_subject_extract", default=u"" u"Choose a form field from which you wish to extract " u"input for the mail subject line.", ), required=False, vocabulary="easyform.Fields", ) directives.read_permission(body_pre=MODIFY_PORTAL_CONTENT) directives.widget("body_pre", TextAreaWidget) body_pre = RichText( title=_(u"label_formmailer_body_pre", default=u"Body (prepended)"), description=_( u"help_formmailer_body_pre", default=u"Text prepended to fields listed in mail-body", ), default=u"", missing_value=u"", default_mime_type="text/x-web-intelligent", allowed_mime_types=("text/x-web-intelligent", ), output_mime_type="text/x-html-safe", required=False, ) directives.read_permission(body_post=MODIFY_PORTAL_CONTENT) directives.widget("body_post", TextAreaWidget) body_post = RichText( title=_(u"label_formmailer_body_post", default=u"Body (appended)"), description=_( u"help_formmailer_body_post", default=u"Text appended to fields listed in mail-body", ), default=u"", missing_value=u"", default_mime_type="text/x-web-intelligent", allowed_mime_types=("text/x-web-intelligent", ), output_mime_type="text/x-html-safe", required=False, ) directives.read_permission(body_footer=MODIFY_PORTAL_CONTENT) directives.widget("body_footer", TextAreaWidget) body_footer = RichText( title=_(u"label_formmailer_body_footer", default=u"Body (signature)"), description=_( u"help_formmailer_body_footer", default=u"Text used as the footer at " u"bottom, delimited from the body by a dashed line.", ), default=u"", missing_value=u"", default_mime_type="text/x-web-intelligent", allowed_mime_types=("text/x-web-intelligent", ), output_mime_type="text/x-html-safe", required=False, ) directives.read_permission(showAll=MODIFY_PORTAL_CONTENT) showAll = zope.schema.Bool( title=_(u"label_mailallfields_text", default=u"Include All Fields"), description=_( u"help_mailallfields_text", default=u"" u"Check this to include input for all fields " u"(except label and file fields). If you check " u"this, the choices in the pick box below " u"will be ignored.", ), default=True, required=False, ) directives.read_permission(showFields=MODIFY_PORTAL_CONTENT) showFields = zope.schema.List( title=_(u"label_mailfields_text", default=u"Show Responses"), description=_( u"help_mailfields_text", default=u"Pick the fields whose inputs you'd like to include in " u"the e-mail.", ), unique=True, required=False, value_type=zope.schema.Choice(vocabulary="easyform.Fields"), ) directives.read_permission(includeEmpties=MODIFY_PORTAL_CONTENT) includeEmpties = zope.schema.Bool( title=_(u"label_mailEmpties_text", default=u"Include Empties"), description=_( u"help_mailEmpties_text", default=u"" u"Check this to include titles " u"for fields that received no input. Uncheck " u"to leave fields with no input out of the e-mail.", ), default=True, required=False, ) directives.read_permission(sendCSV=MODIFY_PORTAL_CONTENT) sendCSV = zope.schema.Bool( title=_(u"label_sendCSV_text", default=u"Send CSV data attachment"), description=_( u"help_sendCSV_text", default=u"" u"Check this to send a CSV file " u"attachment containing the values " u"filled out in the form.", ), default=False, required=False, ) directives.read_permission(sendXML=MODIFY_PORTAL_CONTENT) sendXML = zope.schema.Bool( title=_(u"label_sendXML_text", default=u"Send XML data attachment"), description=_( u"help_sendXML_text", default=u"" u"Check this to send an XML file " u"attachment containing the values " u"filled out in the form.", ), default=False, required=False, ) fieldset(u"template", label=PMF("Template"), fields=["body_pt", "body_type"]) directives.write_permission(body_pt=config.EDIT_TALES_PERMISSION) directives.read_permission(body_pt=MODIFY_PORTAL_CONTENT) body_pt = zope.schema.Text( title=_(u"label_formmailer_body_pt", default=u"Mail-Body Template"), description=_( u"help_formmailer_body_pt", default=u"This is a Zope Page Template used for rendering of " u"the mail-body. You don't need to modify it, but if you " u"know TAL (Zope's Template Attribute Language) have " u"the full power to customize your outgoing mails.", ), defaultFactory=default_mail_body, missing_value=u"", ) directives.write_permission(body_type=config.EDIT_ADVANCED_PERMISSION) directives.read_permission(body_type=MODIFY_PORTAL_CONTENT) body_type = zope.schema.Choice( title=_(u"label_formmailer_body_type", default=u"Mail Format"), description=_( u"help_formmailer_body_type", default=u"Set the mime-type of the mail-body. Change this " u"setting only if you know exactly what you are doing. " u"Leave it blank for default behaviour.", ), default=u"html", vocabulary="easyform.MimeList", ) fieldset(u"headers", label=_("Headers"), fields=["xinfo_headers", "additional_headers"]) directives.widget(xinfo_headers=CheckBoxFieldWidget) directives.write_permission(xinfo_headers=config.EDIT_TECHNICAL_PERMISSION) directives.read_permission(xinfo_headers=MODIFY_PORTAL_CONTENT) xinfo_headers = zope.schema.List( title=_(u"label_xinfo_headers_text", default=u"HTTP Headers"), description=_( u"help_xinfo_headers_text", default=u"" u"Pick any items from the HTTP headers that " u"you'd like to insert as X- headers in the message.", ), unique=True, required=False, default=[u"HTTP_X_FORWARDED_FOR", u"REMOTE_ADDR", u"PATH_INFO"], missing_value=[u"HTTP_X_FORWARDED_FOR", u"REMOTE_ADDR", u"PATH_INFO"], value_type=zope.schema.Choice(vocabulary="easyform.XinfoHeaders"), ) directives.write_permission( additional_headers=config.EDIT_TECHNICAL_PERMISSION) directives.read_permission(additional_headers=MODIFY_PORTAL_CONTENT) additional_headers = zope.schema.List( title=_(u"label_formmailer_additional_headers", default=u"Additional Headers"), description=_( u"help_formmailer_additional_headers", default=u"Additional e-mail-header lines. Only use " u"RFC822-compliant headers.", ), unique=True, required=False, value_type=zope.schema.TextLine(title=_(u"extra_header", default=u"${name} Header", mapping={u"name": u"HTTP"})), ) fieldset( u"overrides", label=_("Overrides"), fields=[ "subjectOverride", "senderOverride", "recipientOverride", "ccOverride", "bccOverride", ], ) directives.write_permission(subjectOverride=config.EDIT_TALES_PERMISSION) directives.read_permission(subjectOverride=MODIFY_PORTAL_CONTENT) subjectOverride = zope.schema.TextLine( title=_(u"label_subject_override_text", default=u"Subject Expression"), description=_( u"help_subject_override_text", default=u"A TALES expression that will be evaluated to override " u"any value otherwise entered for the e-mail subject " u"header. Leave empty if unneeded. Your expression " u"should evaluate as a string. PLEASE NOTE: errors in " u"the evaluation of this expression will cause an error " u"on form display.", ), required=False, default=u"", missing_value=u"", constraint=isTALES, ) directives.write_permission(senderOverride=config.EDIT_TALES_PERMISSION) directives.read_permission(senderOverride=MODIFY_PORTAL_CONTENT) senderOverride = zope.schema.TextLine( title=_(u"label_sender_override_text", default=u"Sender Expression"), description=_( u"help_sender_override_text", default=u"A TALES expression that will be evaluated to override " u'the "From" header. Leave empty if unneeded. ' u"Your expression should evaluate as a string. " u"PLEASE NOTE: errors in the evaluation of this " u"expression will cause an error on form display.", ), required=False, default=u"", missing_value=u"", constraint=isTALES, ) directives.write_permission(recipientOverride=config.EDIT_TALES_PERMISSION) directives.read_permission(recipientOverride=MODIFY_PORTAL_CONTENT) recipientOverride = zope.schema.TextLine( title=_(u"label_recipient_override_text", default=u"Recipient Expression"), description=_( u"help_recipient_override_text", default=u"A TALES expression that will be evaluated to override " u"any value otherwise entered for the recipient " u"e-mail address. You are strongly cautioned against using" u"unvalidated data from the request for this purpose. " u"Leave empty if unneeded. Your expression should " u"evaluate as a string. PLEASE NOTE: errors in the " u"evaluation of this expression will cause " u"an error on form display.", ), required=False, default=u"", missing_value=u"", constraint=isTALES, ) directives.write_permission(ccOverride=config.EDIT_TALES_PERMISSION) directives.read_permission(ccOverride=MODIFY_PORTAL_CONTENT) ccOverride = zope.schema.TextLine( title=_(u"label_cc_override_text", default=u"CC Expression"), description=_( u"help_cc_override_text", default=u"A TALES expression that will be evaluated to override " u"any value otherwise entered for the CC list. You are " u"strongly cautioned against using unvalidated data from " u"the request for this purpose. Leave empty if unneeded. " u"Your expression should evaluate as a sequence of " u"strings. PLEASE NOTE: errors in the evaluation of this " u"expression will cause an error on form display.", ), required=False, default=u"", missing_value=u"", constraint=isTALES, ) directives.write_permission(bccOverride=config.EDIT_TALES_PERMISSION) directives.read_permission(bccOverride=MODIFY_PORTAL_CONTENT) bccOverride = zope.schema.TextLine( title=_(u"label_bcc_override_text", default=u"BCC Expression"), description=_( u"help_bcc_override_text", default=u"A TALES expression that will be evaluated to override " u"any value otherwise entered for the BCC list. " u"You are strongly cautioned against using " u"unvalidated data from the request for this purpose. " u"Leave empty if unneeded. Your expression should " u"evaluate as a sequence of strings. PLEASE NOTE: errors " u"in the evaluation of this expression will cause " u"an error on form display.", ), required=False, default=u"", missing_value=u"", constraint=isTALES, )
class ITeacher(model.Schema): """ Marker interface and Dexterity Python Schema for Teacher """ title = schema.TextLine( title=_(u"Teacher Name."), required=True, ) activation = schema.Bool( title=_(u"Activation"), default=True, required=True, ) isMember = schema.Bool( title=_(u"Is Member"), default=False, required=True, ) idCardNo = schema.TextLine( title=_(u"Id Card Number."), required=True, ) teacherSN = schema.TextLine( title=_(u"Teacher Serial Number."), required=False, ) birthday = schema.Date( title=_(u"Birthday"), required=False, ) homePhone = schema.TextLine( title=_(u"Home Phone Number."), required=False, ) cellPhone = schema.TextLine( title=_(u"Cell Phone Number."), required=False, ) fax = schema.TextLine( title=_(u"Fax Number."), required=False, ) email = schema.TextLine( title=_(u"Email."), required=False, ) idCardAddr = schema.TextLine( title=_(u"ID Card Address."), required=False, ) contactAddr = schema.TextLine( title=_(u"Contact Address."), required=False, ) edu_1 = schema.TextLine( title=_(u"Education 1."), required=False, ) dep_1 = schema.TextLine( title=_(u"Department 1."), required=False, ) degree_1 = schema.TextLine( title=_(u"Degree 1."), required=False, ) gradYear_1 = schema.Int( title=_(u"Graduation Year 1."), min=1900, max=2100, required=False, ) gradMonth_1 = schema.Int( title=_(u"Graduation Month 1."), min=1, max=12, required=False, ) edu_2 = schema.TextLine( title=_(u"Education 2."), required=False, ) dep_2 = schema.TextLine( title=_(u"Department 2."), required=False, ) degree_2 = schema.TextLine( title=_(u"Degree 2."), required=False, ) gradYear_2 = schema.Int( title=_(u"Graduation Year 2."), min=1900, max=2100, required=False, ) gradMonth_2 = schema.Int( title=_(u"Graduation Month 2."), min=1, max=12, required=False, ) edu_3 = schema.TextLine( title=_(u"Education 3."), required=False, ) dep_3 = schema.TextLine( title=_(u"Department 3."), required=False, ) degree_3 = schema.TextLine( title=_(u"Degree 3."), required=False, ) gradYear_3 = schema.Int( title=_(u"Graduation Year 3."), min=1900, max=2100, required=False, ) gradMonth_3 = schema.Int( title=_(u"Graduation Month 3."), min=1, max=12, required=False, ) serviceUnit = schema.TextLine( title=_(u"Service Unit"), required=False, ) serviceDep = schema.TextLine( title=_(u"Service Department"), required=False, ) currentJob = schema.TextLine( title=_(u"Current Job"), required=False, ) startWorkDate = schema.Date( title=_(u"Start Work Date"), required=False, ) unitPhone = schema.TextLine( title=_(u"Unit Phone"), required=False, ) personExp = schema.Text( title=_(u"Person Experience"), required=False, ) license = schema.Text( title=_(u"Person License"), required=False, ) unitAddress = schema.TextLine( title=_(u"Service Unit Address"), required=False, ) creatUser = schema.TextLine( title=_(u"Created User"), required=False, ) fieldset(_(u'Teach Related'), fields=['teachSubjects', 'teachTrainingCenter']) teachSubjects = RelationList( title=_(u'Teach Subjects'), default=[], required=False, value_type=RelationChoice( title=_(u"Subject"), source=CatalogSource(Type='Subject', path='/cshm/resource/course_template'), )) teachTrainingCenter = RelationList( title=_(u'Teach Training Center'), default=[], required=False, value_type=RelationChoice( title=_(u"Training Center"), source=CatalogSource(Type='TrainingCenter', path='/cshm/resource/training_center'), ))
class ICourse(model.Schema): """ id = schema.TextLine( title=_(u'CoStudy Course Id'), required=True, ) """ title = schema.TextLine( title=_(u'CoStudy Course Id'), required=True, ) form.mode(description='hidden') description = schema.Text( title=_(u'CoStudy Course Description'), required=False, ) timeSection = schema.TextLine( title=_(u'Class Time Section'), required=False, ) vMeetingRoom = schema.TextLine( title=_(u'Virtual Meeting Room'), required=False, ) local_language = schema.TextLine( title=_(u'Local Language'), required=False, ) teacher = RelationChoice( title=_(u'Teacher'), source=CatalogSource(portal_type='Teacher'), required=False, ) school = RelationList( title=_(u'Alliance Schools'), value_type=RelationChoice( title=u"School", source=CatalogSource(portal_type=['School', 'Folder'])), required=False, ) hire_school = RelationChoice( title=_(u'Hire School'), source=CatalogSource(portal_type=['School', 'Folder']), required=False, ) studentList = schema.Text( title=_(u'Student List'), description=_(u'format: city,school_name,student_name'), required=False, ) # form.mode(place='hidden') place = schema.TextLine( title=_(u'Place of Study'), required=False, ) form.mode(course_date='hidden') course_date = schema.TextLine( title=_(u'Course Date'), required=False, ) form.mode(course_time='hidden') course_time = schema.TextLine( title=_(u'Course Time'), required=False, ) course_outline = RichText( title=_(u'Course Outline'), required=False, ) fieldset(_(u'coReading'), fields=[ 'coReadingName', 'coReadingId', 'coReadingBank', 'coReadingAccount' ]) coReadingName = schema.TextLine( title=_(u'Co Reading Name'), required=False, ) coReadingId = schema.TextLine( title=_(u'Co Reading Id'), required=False, ) coReadingBank = schema.TextLine( title=_(u'Co Reading Bank'), description=_(u'Bank Name and Branch Name'), required=False, ) coReadingAccount = schema.TextLine( title=_(u'Co Reading Bank Account'), required=False, )
class IFoundationMember(Schema): """A foundation member""" fieldset( 'Contact', label=u'Contact', fields=[ 'fname', 'lname', 'email', 'address', 'city', 'state', 'postalCode', 'country', 'organization', ] ) fieldset( 'Merit', label=u'Merit', fields=[ 'merit', ] ) fieldset( 'Survey', label=u'Survey', fields=[ 'orgsize', 'ploneuse', ] ) fname = schema.TextLine( title=_PMF(u'First name', default=u'First name'), required=True ) lname = schema.TextLine( title=_PMF(u'Last name', default=u'Last name'), required=True ) read_permission(email='ploneorg.core.foundationmember.view') email = schema.TextLine( title=_PMF(u'Email', default=u'Email'), required=True ) read_permission(address='ploneorg.core.foundationmember.view') address = schema.TextLine( title=_PMF(u'Address', default=u'Address'), required=True ) city = schema.TextLine( title=_PMF(u'City', default=u'City'), required=True ) read_permission(state='ploneorg.core.foundationmember.view') state = schema.TextLine( title=_PMF(u'State', default=u'State'), required=True ) read_permission(postalCode='ploneorg.core.foundationmember.view') postalCode = schema.TextLine( title=_PMF(u'Postal code', default=u'Postal code'), required=True ) country = schema.Choice( title=_PMF(u'Country', default=u'Country'), vocabulary=country_vocabulary, required=True ) organization = schema.TextLine( title=_PMF(u'Organization', default=u'Organization'), required=True ) read_permission(merit='ploneorg.core.foundationmember.view') merit = RichText( title=_(u'Contributions'), description=_(u'Describe your contributions to the project.'), required=True ) read_permission(orgsize='ploneorg.core.foundationmember.view') orgsize = schema.Int( title=_(u'Organization size'), description=_( u'Number of people in your organization. It\'s fine to estimate.'), required=False ) read_permission(ploneuse='ploneorg.core.foundationmember.view') ploneuse = RichText( title=_(u'Plone use'), description=_(u'How is Plone used by your organization?'), required=False )
class IContactDetails(model.Schema): """Contact details behavior""" form.write_permission(use_parent_address='collective.contact.core.UseParentAddress') fieldset( 'contact_details', label=_(u'Contact details'), fields=CONTACT_DETAILS_FIELDS ) fieldset( 'address', label=_(u'Address'), fields=('use_parent_address', 'parent_address') + ADDRESS_FIELDS ) email = schema.TextLine( title=_(u"Email"), constraint=validateEmail, required=False, ) phone = schema.TextLine( title=_(u"Phone"), required=False, constraint=validatePhone, ) cell_phone = schema.TextLine( title=_(u"Cell phone"), required=False, ) fax = schema.TextLine( title=_(u"Fax"), required=False, ) website = schema.TextLine( title=_(u"Website"), required=False, ) im_handle = schema.TextLine( title=_('Instant messenger handle'), required=False, ) use_parent_address = MasterSelectBoolField( title=_("Use the belonging entity address"), slave_fields=( {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'country', 'action': 'show', 'hide_values': 0, 'siblings': True, }, {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'region', 'action': 'show', 'hide_values': 0, 'siblings': True, }, {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'zip_code', 'action': 'show', 'hide_values': 0, 'siblings': True, }, {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'city', 'action': 'show', 'hide_values': 0, 'siblings': True, }, {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'number', 'action': 'show', 'hide_values': 0, 'siblings': True, }, {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'street', 'action': 'show', 'hide_values': 0, 'siblings': True, }, {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'additional_address_details', 'action': 'show', 'hide_values': 0, 'siblings': True, }, {'masterSelector': '#form-widgets-IContactDetails-use_parent_address-0, #oform-widgets-use_parent_address-0', 'name': 'parent_address', 'action': 'hide', 'hide_values': 0, 'siblings': True, }, ), default=True, required=False, ) parent_address = RichText( default_mime_type='text/html', output_mime_type='text/html', required=False, ) form.mode(parent_address='display') country = schema.TextLine( title=_('Country'), required=False, ) zip_code = schema.TextLine( title=_('Zip Code'), required=False, ) city = schema.TextLine( title=_('City'), required=False, ) street = schema.TextLine( title=_('Street'), required=False, ) number = schema.TextLine( title=_('Number'), required=False, ) region = schema.TextLine( title=_('Region'), required=False, ) additional_address_details = schema.TextLine( title=_('Additional address details'), required=False, )
class IFrontpage(Interface): text = RichText( title=_(u'frontpage_text_title', default=u'Text'), description=_( u'frontpage_text_description', default=u'Add a description below the carousel.'), # noqa required=False, ) show_title = schema.Bool( title=_(u"frontpage_show_title_title", default="Show title"), description=_(u'frontpage_show_title_description', default=u'Enable or disable frontpage title.'), # noqa required=False, default=True, ) show_description = schema.Bool( title=_(u"frontpage_show_description_title", default="Show description"), # noqa description=_( u'frontpage_show_description_description', default=u'Enable or disable frontpage description.'), # noqa required=False, default=True, ) show_text = schema.Bool( title=_(u"frontpage_show_text_title", default="Show text"), description=_( u'frontpage_show_text_description', default=u'Enable or disable text below carousel.'), # noqa required=False, default=True, ) fieldset( 'carousel', label=_(u'frontpage_fieldset_carousel_label', default=u'Carousel'), # noqa fields=('show_carousel', 'carousel_animation', 'carousel_autoscroll'), # noqa ) show_carousel = schema.Bool( title=_(u"frontpage_show_carousel_title", default="Show carousel"), description=_( u'frontpage_show_carousel_description', default=u'Select to display a carousel on the frontpage.'), # noqa required=False, default=True, ) carousel_animation = schema.Choice( title=_(u'frontpage_carousel_animation_title', default=u'Animation'), description=_( u'frontpage_carousel_animation_description', default=u'Select a transition effect for the carousel.'), # noqa vocabulary=EffectVocabulary, required=False, ) carousel_autoscroll = schema.Int( title=_(u'frontpage_carousel_autoscroll_title', default=u'Autoscroll'), description=_( u'frontpage_carousel_autoscroll_description', default=u'Select transition delay for the carousel.'), # noqa default=5000, required=False, ) fieldset( 'news', label=_(u'frontpage_fieldset_news_label', default=u'News'), fields=('show_news', 'limit_news', 'default_image'), ) show_news = schema.Bool( title=_(u"frontpage_show_news_title", default="Show news"), description=_( u'frontpage_show_news_description', default=u'Enable to display news tiles below carousel.'), # noqa required=False, default=True, ) default_image = NamedBlobImage( title=_(u'frontpage_default_image_title', default='Default news item image'), # noqa description=_( u'frontpage_default_image_description', default=u'Upload a default news item image. Recommended.'), # noqa required=False, ) limit_news = schema.Choice( title=_(u"frontpage_limit_news_title", default="Number of News items"), description=_(u'frontpage_limit_news_description', default=u'Limit the number of displayed items.'), # noqa vocabulary=NewsVocabulary, required=False, default=6, )
class IHOANeighborhood(form.Schema): """Uses IDublinCore """ street_addresses = schema.List( title=_(u"Street Addresses"), description=_( u"Please provide a list of street addresses for this neighborhood." ), value_type=schema.TextLine(), ) city = schema.TextLine( title=_(u"City"), description= _(u"Please provide the city to be used with addresses in this neighborhood." )) state = schema.TextLine( title=_(u"State Abbreviation"), description= _(u"Please provide the state abbreviation to be used with addresses in this neighborhood." )) zipcode = schema.TextLine( title=_(u"Zipcode"), description=_(u"Which zipcode does this neighborhood use?")) secretary_email = Email( title=_(u"Executive Secretary Email"), description=_(u"Email address of the Executive Secretary"), required=True, ) fieldset('initial_messages', label=u'Initial Inspection Messages', description=u'', fields=[ 'initial_pass_message', 'initial_fail_message', ]) initial_pass_message = schema.Text( title=_(u"Initial Passed Inspection Message"), description= _(u"This message is used for both email and postal messages to be sent." ), required=False, ) initial_fail_message = schema.Text( title=_(u"Initial Fail Inspection Message"), description= _(u"This message is used for both email and postal messages to be sent." ), required=False, ) fieldset('rewalk_messages', label=u'Re-walk Inspection Messages', description=u'', fields=[ 'rewalk_pass_message', 'rewalk_fail_message', ]) rewalk_pass_message = schema.Text( title=_(u"Reinspect Passed Inspection Message"), description= _(u"This message is used for both email and postal messages to be sent." ), required=False, ) rewalk_fail_message = schema.Text( title=_(u"Reinspect Fail Message"), description= _(u"This message is used for both email and postal messages to be sent." ), required=False, )
class IProduct(model.Schema): fieldset(_('Product Info'), fields=['title', 'productNo', 'rating', 'cover', 'description', 'category', 'subcategory', 'relatedProduct']) title = schema.TextLine( title=_(u'Title'), required=True, ) productNo = schema.TextLine( title=_(u'Product Number'), required=True, ) rating = schema.Int( title=_(u'Rating'), required=True, default=4, constraint=rating_constraint, ) cover = namedfile.NamedBlobImage( title=_(u'Cover Image'), required=True, ) description = schema.Text( title=_(u'Description'), required=False ) category = schema.TextLine( title=_(u'Category'), required=True ) subcategory = schema.TextLine( title=_(u'Subcategory'), required=True ) relatedProduct = RelationList( title=_(u"Related Product"), default=[], value_type=RelationChoice( title=_(u"Related"), source=CatalogSource(portal_type='Product') ), required=False, ) @invariant def price_invariant(data): if data.price < data.salePrice: raise Invalid(_(u'The sale price is bigger than price!')) if data.price < data.disc_amount: raise Invalid(_(u'The Discount Amount is bigger than price!')) fieldset(_('More Info'), fields=['brand', 'productCode', 'availability', 'downloadFile', 'feature', 'specification']) brand = schema.TextLine( title=_(u'Brand'), required=True ) productCode = schema.TextLine( title=_(u'Product Code'), required=False ) availability = schema.Bool( title=(u'Availability'), default=True, required=False ) downloadFile = namedfile.NamedBlobFile( title=_(u'Download File'), required=False, ) feature = RichText( title=_(u'Feature'), required=False ) specification = schema.List( title=_(u'specification'), description=_(u'ex. clockspeed:100mhz'), value_type=schema.TextLine(), required=False, ) fieldset(_('Product Price'), fields=['price', 'salePrice', 'l_c_price', 'l_b_price', 'l_a_price', 'disc_amount']) price = schema.Int( title=_(u'Price'), description=_(u'Enter USD$'), required=True, ) salePrice = schema.Int( title=_(u'Sale Price'), description=_(u'Enter USD$'), required=False ) l_c_price = schema.Int( title=_(u'Level C Group Price'), description=_(u'Enter USD$'), required=False ) l_b_price = schema.Int( title=_(u'Level B Group Price'), description=_(u'Enter USD$'), required=False ) l_a_price = schema.Int( title=_(u'Level A Group Price'), description=_(u'Enter USD$'), required=False ) disc_amount = schema.Int( title=_(u'Discount Amount'), description=_(u'Enter USD$'), default=0, min=0, required=False ) fieldset(_('Slider'), fields=['img1', 'img2', 'img3', 'img4']) img1 = NamedBlobImage( title=_(u"Slider Image1"), required=False, ) img2 = NamedBlobImage( title=_(u"Slider Image2"), required=False, ) img3 = NamedBlobImage( title=_(u"Slider Image3"), required=False, ) img4 = NamedBlobImage( title=_(u"Slider Image4"), required=False, ) fieldset(_('Index Information'), fields=['indexCategory', 'bestSeller', 'timeLimit']) directives.widget(indexCategory=CheckBoxFieldWidget) indexCategory = schema.List( title=_(u"Index Category"), description=_(u'Select the classification of this product (Most View, Special, Latest)'), value_type=schema.Choice( vocabulary=categoryVocabulary, ), required=False, ) bestSeller = schema.Bool( title=_(u"Best Seller"), required=False, ) timeLimit = schema.Datetime( title=_(u'Time Limit'), description=_(u'If you want to set the time limit, you must put this product in the "Promotions" folder'), constraint=future_date, required=False, )
class IProduct(model.Schema): title = schema.TextLine( title=_(u'Name'), required=True, ) modelNo = schema.TextLine( title=_(u'Model No'), required=False, ) beApplicable = schema.TextLine( title=_(u'Be Applicable'), required=False, ) characteristic = schema.TextLine( title=_(u'Characteristic'), required=False, ) description = schema.Text( title=_(u'Description'), required=False, ) body = RichText( title=_(u'Product Description'), required=False, ) cover = NamedBlobImage( title=_(u"Cover Image"), required=True, ) category = schema.TextLine( title=_(u'Category'), required=True, ) subject = schema.TextLine( title=_(u'Subject'), required=True, ) fieldset(_('Slider'), fields=['img1', 'img2', 'img3', 'img4', 'img5']) img1 = NamedBlobImage( title=_(u"Slider Image1"), required=False, ) img2 = NamedBlobImage( title=_(u"Slider Image2"), required=False, ) img3 = NamedBlobImage( title=_(u"Slider Image3"), required=False, ) img4 = NamedBlobImage( title=_(u"Slider Image4"), required=False, ) img5 = NamedBlobImage( title=_(u"Slider Image5"), required=False, )
class IHOAHouse(form.Schema): """ """ fieldset('house_information', label=u'House Information', description=u'Home details', fields=[ 'title', 'div', 'lot', 'street_number', 'street_address', 'city', 'state', 'zipcode', 'picture', 'geo_coordinates_lat', 'geo_coordinates_long', 'last_sale_date', 'rental', ]) form.mode(title='hidden') title = schema.TextLine( title=_(u"Title"), required=False, ) div = schema.Choice( title=_(u"Division Number"), description=_(u""), vocabulary=u'docent.hoa.div_numbers', required=False, ) lot = schema.Choice( title=_(u"Lot Number"), description=_(u""), vocabulary=u'docent.hoa.lot_numbers', required=False, ) street_number = schema.TextLine(title=_(u"Street Number"), description=_(u"")) street_address = schema.Choice( title=_(u"Street Address"), description=_(u""), vocabulary=u'docent.hoa.street_addresses', ) form.mode(city='hidden') city = schema.TextLine( title=_(u"City"), description= _(u"Please provide the city to be used with addresses in this neighborhood." ), defaultFactory=getNeighborhoodCity, ) form.mode(state='hidden') state = schema.TextLine( title=_(u"State Abbreviation"), description= _(u"Please provide the state abbreviation to be used with addresses in this neighborhood." ), defaultFactory=getNeighborhoodState, ) form.mode(zipcode='hidden') zipcode = schema.TextLine( title=_(u"Zipcode"), description=_(u"Which zipcode does this neighborhood use?"), defaultFactory=getNeighborhoodZipCode, ) picture = NamedBlobImage( title=_(u"Upload an image of the home."), required=False, ) geo_coordinates_lat = schema.TextLine( title=_(u"Geo Coordinates Latitude"), description=_(u""), required=False, ) geo_coordinates_long = schema.TextLine( title=_(u"Geo Coordinates Longitude"), description=_(u""), required=False, ) last_sale_date = schema.Date( title=_(u"Last Sale Date"), description=_(u""), required=False, ) rental = schema.Bool( title=_(u'Is this a rental property?'), description=_(u''), required=False, ) fieldset('owner_information', label=u'Owner Information', description=u'Owner details', fields=[ 'owner_one', 'owner_two', ]) owner_one = schema.Choice( title=_(u"Owner One"), description=_(u""), vocabulary=u'docent.hoa.home_owner', ) owner_two = schema.Choice( title=_(u"Owner Two"), description=_(u""), vocabulary=u'docent.hoa.home_owner', required=False, ) fieldset('resident_information', label=u'Resident Information', description=u'Resident details', fields=[ 'resident_one', 'resident_two', ]) resident_one = schema.Choice( title=_(u"Renter One"), description=_(u""), vocabulary=u'docent.hoa.renters', required=False, ) resident_two = schema.Choice( title=_(u"Renter Two"), description=_(u""), vocabulary=u'docent.hoa.renters', required=False, ) fieldset('property_manager', label=u'Propertry Manager', description=u'', fields=[ 'property_manager', ]) property_manager = schema.Choice( title=_(u"Property Manager"), description=_(u""), vocabulary=u'docent.hoa.property_managers', required=False, ) @invariant def ownersInvariant(data): owner_one = data.owner_one owner_two = data.owner_two if owner_one and owner_two: if owner_one == owner_two: raise Invalid( _(u"Owners One and Two cannot be the same individual.")) @invariant def residentInvariant(data): resident_one = data.resident_one resident_two = data.resident_two if resident_one and resident_two: if resident_one == resident_two: raise Invalid( _(u"Resident One and Two cannot be the same individual.")) @invariant def lotInvariant(data): lot = data.lot try: int(lot) except ValueError: raise Invalid(_(u"Lot is not a valid number.")) if len(lot) != 3: raise Invalid( _(u"Lot is not in the correct format (ie 045 for lot 45)"))