source: main/waeup.aaue/trunk/src/waeup/aaue/applicants/interfaces.py @ 17540

Last change on this file since 17540 was 17085, checked in by Henrik Bettermann, 2 years ago

Request request types.

  • Property svn:keywords set to Id
File size: 47.1 KB
Line 
1## $Id: interfaces.py 17085 2022-09-06 05:49:54Z henrik $
2##
3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18"""Customized interfaces of the university application package.
19"""
20
21from zope import schema
22from zope.interface import Attribute, invariant, Invalid
23from waeup.kofa.applicants.interfaces import (
24    IApplicantBaseData,
25    AppCatCertificateSource, CertificateSource)
26from waeup.kofa.schoolgrades import ResultEntryField
27from waeup.kofa.interfaces import (
28    SimpleKofaVocabulary, academic_sessions_vocab, validate_email)
29from waeup.kofa.schema import FormattedDate, TextLineChoice, PhoneNumber
30from waeup.kofa.interfaces import IKofaObject
31from waeup.kofa.students.vocabularies import (
32    nats_vocab, GenderSource, StudyLevelSource)
33from waeup.kofa.applicants.interfaces import (
34    contextual_reg_num_source,
35    IApplicantBaseData,
36    IApplicantRefereeReport)
37from waeup.kofa.refereeentries import RefereeEntryField
38from waeup.kofa.university.vocabularies import StudyModeSource
39from kofacustom.nigeria.applicants.interfaces import (
40    LGASource, high_qual, high_grade, exam_types,
41    INigeriaUGApplicant, INigeriaPGApplicant,
42    INigeriaApplicantOnlinePayment,
43    INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
44    INigeriaApplicantUpdateByRegNo,
45    IPUTMEApplicantEdit,
46    )
47from waeup.aaue.interfaces import MessageFactory as _
48from waeup.aaue.payments.interfaces import ICustomOnlinePayment
49
50programme_types_vocab = SimpleKofaVocabulary(
51    (_('Undergraduate Programme (100 level)'), 'regular'),
52    (_('Direct Entry (200 level)'), 'direct'),
53    (_('not applicable'), 'na'),
54    )
55
56certificate_types_vocab = SimpleKofaVocabulary(
57    (_('Full-time Degree'), 'ft'),
58    (_('Part-time Degree'), 'pt'),
59    (_('Diploma'), 'dp'),
60    (_('Masters Degree'), 'ma'),
61    (_('Doctorate Degree'), 'phd'),
62    )
63
64document_types_vocab = SimpleKofaVocabulary(
65    (_('Certificate'), 'certificate'),
66    (_('Result'), 'result'),
67    (_('Transcript'), 'transcript'),
68    (_('Studentship'), 'studship'),
69    )
70
71application_types_vocab = SimpleKofaVocabulary(
72    (_('Academic Staff Positions'), 'academic'),
73    (_('Senior Non-Teaching Staff'), 'senior'),
74    (_('Junior Staff (Non-Teaching)'), 'junior'),
75    )
76
77request_types_vocab = SimpleKofaVocabulary(
78    #(_('Scanned Result'), 'result'),
79    #(_('Scanned Certificate'), 'certificate'),
80    #(_('Scanned Transcript'), 'transcript'),
81    (_('Attestation'), 'attest'),
82    (_('Proficiency in English Language'), 'english'),
83    )
84
85rating_vocab = SimpleKofaVocabulary(
86    (_('Excellent'), 'e'),
87    (_('Very good'), 'vg'),
88    (_('Good'), 'g'),
89    (_('Slightly above average'), 'saa'),
90    (_('Average'), 'a'),
91    (_('Below average'), 'ba'),
92    (_('Unable to assess'), 'unable'),
93    )
94
95overallpromise_vocab = SimpleKofaVocabulary(
96    (_('Very good (highest 10%)'), 'vg'),
97    (_('Good (next 15%)'), 'g'),
98    (_('Above average (next 15%)'), 'aa'),
99    (_('Average (middle 20%)'), 'a'),
100    (_('Below average (lower 10%)'), 'ba'),
101    )
102
103
104class ICustomUGApplicant(IApplicantBaseData):
105    """An undergraduate applicant.
106
107    This interface defines the least common multiple of all fields
108    in ug application forms. In customized forms, fields can be excluded by
109    adding them to the UG_OMIT* tuples.
110    """
111
112    #programme_type = schema.Choice(
113    #    title = _(u'Programme Type'),
114    #    vocabulary = programme_types_vocab,
115    #    required = False,
116    #    )
117
118    nationality = schema.Choice(
119        source = nats_vocab,
120        title = _(u'Nationality'),
121        required = True,
122        )
123
124    lga = schema.Choice(
125        source = LGASource(),
126        title = _(u'State/LGA (Nigerians only)'),
127        required = False,
128        )
129
130    perm_address = schema.Text(
131        title = _(u'Permanent Address'),
132        required = False,
133        )
134
135    home_town = schema.TextLine(
136        title = _(u'Home Town'),
137        required = False,
138        )
139
140    #jamb_reg_number = schema.TextLine(
141    #    title = _(u'JAMB Registration Number'),
142    #    required = False,
143    #    )
144
145    jamb_score = schema.Int(
146        title = _(u'Total JAMB Score'),
147        required = False,
148        )
149
150    jamb_subjects = schema.Text(
151        title = _(u'JAMB Subjects and Scores'),
152        required = False,
153        )
154
155    course1 = schema.Choice(
156        title = _(u'1st Choice Course of Study'),
157        source = AppCatCertificateSource(),
158        required = False,
159        )
160
161    course2 = schema.Choice(
162        title = _(u'2nd Choice Course of Study'),
163        source = AppCatCertificateSource(),
164        required = False,
165        )
166
167    course3 = schema.Choice(
168        title = _(u'3rd Choice Course of Study'),
169        source = AppCatCertificateSource(),
170        required = False,
171        )
172
173    fst_sit_fname = schema.TextLine(
174        title = _(u'Name in Full'),
175        required = False,
176        readonly = False,
177        )
178
179    fst_sit_no = schema.TextLine(
180        title = _(u'Exam Number'),
181        required = False,
182        readonly = False,
183        )
184
185    fst_sit_sc_pin = schema.TextLine(
186        title = _(u'Scratch Card Pin'),
187        required = False,
188        readonly = False,
189        )
190
191    fst_sit_sc_serial_number = schema.TextLine(
192        title = _(u'Scratch Card Serial Number'),
193        required = False,
194        readonly = False,
195        )
196
197    fst_sit_date = FormattedDate(
198        title = _(u'Exam Date'),
199        required = False,
200        readonly = False,
201        show_year = True,
202        )
203
204    fst_sit_type = schema.Choice(
205        title = _(u'Exam Type'),
206        required = False,
207        readonly = False,
208        vocabulary = exam_types,
209        )
210
211    fst_sit_results = schema.List(
212        title = _(u'Exam Results'),
213        value_type = ResultEntryField(),
214        required = False,
215        readonly = False,
216        defaultFactory=list,
217        )
218
219    scd_sit_fname = schema.TextLine(
220        title = _(u'Name in Full'),
221        required = False,
222        readonly = False,
223        )
224
225    scd_sit_no = schema.TextLine(
226        title = _(u'Exam Number'),
227        required = False,
228        readonly = False,
229        )
230
231    scd_sit_sc_pin = schema.TextLine(
232        title = _(u'Scratch Card Pin'),
233        required = False,
234        readonly = False,
235        )
236
237    scd_sit_sc_serial_number = schema.TextLine(
238        title = _(u'Scratch Card Serial Number'),
239        required = False,
240        readonly = False,
241        )
242
243    scd_sit_date = FormattedDate(
244        title = _(u'Exam Date'),
245        required = False,
246        readonly = False,
247        show_year = True,
248        )
249
250    scd_sit_type = schema.Choice(
251        title = _(u'Exam Type'),
252        required = False,
253        readonly = False,
254        vocabulary = exam_types,
255        )
256
257    scd_sit_results = schema.List(
258        title = _(u'Exam Results'),
259        value_type = ResultEntryField(),
260        required = False,
261        readonly = False,
262        defaultFactory=list,
263        )
264
265    alr_fname = schema.TextLine(
266        title = _(u'Name in Full'),
267        required = False,
268        readonly = False,
269        )
270
271    alr_no = schema.TextLine(
272        title = _(u'Exam Number'),
273        required = False,
274        readonly = False,
275        )
276
277    alr_date = FormattedDate(
278        title = _(u'Exam Date'),
279        required = False,
280        readonly = False,
281        show_year = True,
282        )
283
284    alr_results = schema.List(
285        title = _(u'Exam Results'),
286        value_type = ResultEntryField(),
287        required = False,
288        readonly = False,
289        defaultFactory=list,
290        )
291
292    hq_type = schema.Choice(
293        title = _(u'Qualification Obtained'),
294        required = False,
295        readonly = False,
296        vocabulary = high_qual,
297        )
298
299    hq_fname = schema.TextLine(
300        title = _(u'Name in Full'),
301        required = False,
302        readonly = False,
303        )
304
305    hq_matric_no = schema.TextLine(
306        title = _(u'Former Matric Number'),
307        required = False,
308        readonly = False,
309        )
310
311    hq_degree = schema.Choice(
312        title = _(u'Class of Degree'),
313        required = False,
314        readonly = False,
315        vocabulary = high_grade,
316        )
317
318    hq_school = schema.TextLine(
319        title = _(u'Institution Attended'),
320        required = False,
321        readonly = False,
322        )
323
324    hq_session = schema.TextLine(
325        title = _(u'Years Attended'),
326        required = False,
327        readonly = False,
328        )
329
330    hq_disc = schema.TextLine(
331        title = _(u'Discipline'),
332        required = False,
333        readonly = False,
334        )
335
336    hq_type2 = schema.Choice(
337        title = _(u'Qualification Obtained'),
338        required = False,
339        readonly = False,
340        vocabulary = high_qual,
341        )
342
343    hq_fname2 = schema.TextLine(
344        title = _(u'Name in Full'),
345        required = False,
346        readonly = False,
347        )
348
349    hq_matric_no2 = schema.TextLine(
350        title = _(u'Former Matric Number'),
351        required = False,
352        readonly = False,
353        )
354
355    hq_degree2 = schema.Choice(
356        title = _(u'Class of Degree'),
357        required = False,
358        readonly = False,
359        vocabulary = high_grade,
360        )
361
362    hq_school2 = schema.TextLine(
363        title = _(u'Institution Attended'),
364        required = False,
365        readonly = False,
366        )
367
368    hq_session2 = schema.TextLine(
369        title = _(u'Years Attended'),
370        required = False,
371        readonly = False,
372        )
373
374    hq_disc2 = schema.TextLine(
375        title = _(u'Discipline'),
376        required = False,
377        readonly = False,
378        )
379
380    hq_type3 = schema.Choice(
381        title = _(u'Qualification Obtained'),
382        required = False,
383        readonly = False,
384        vocabulary = high_qual,
385        )
386
387    hq_fname3 = schema.TextLine(
388        title = _(u'Name in Full'),
389        required = False,
390        readonly = False,
391        )
392
393    hq_matric_no3 = schema.TextLine(
394        title = _(u'Former Matric Number'),
395        required = False,
396        readonly = False,
397        )
398
399    hq_degree3 = schema.Choice(
400        title = _(u'Class of Degree'),
401        required = False,
402        readonly = False,
403        vocabulary = high_grade,
404        )
405
406    hq_school3 = schema.TextLine(
407        title = _(u'Institution Attended'),
408        required = False,
409        readonly = False,
410        )
411
412    hq_session3 = schema.TextLine(
413        title = _(u'Years Attended'),
414        required = False,
415        readonly = False,
416        )
417
418    hq_disc3 = schema.TextLine(
419        title = _(u'Discipline'),
420        required = False,
421        readonly = False,
422        )
423
424    nysc_year = schema.Int(
425        title = _(u'Nysc Year'),
426        required = False,
427        readonly = False,
428        )
429
430    nysc_location = schema.TextLine(
431        title = _(u'Nysc Location'),
432        required = False,
433        )
434
435    nysc_lga = schema.Choice(
436        source = LGASource(),
437        title = _(u'Nysc LGA'),
438        required = False,
439        )
440
441    employer = schema.TextLine(
442        title = _(u'Employer'),
443        required = False,
444        readonly = False,
445        )
446
447    emp_position = schema.TextLine(
448        title = _(u'Employer Position'),
449        required = False,
450        readonly = False,
451        )
452
453    emp_start = FormattedDate(
454        title = _(u'Start Date'),
455        required = False,
456        readonly = False,
457        show_year = True,
458        )
459
460    emp_end = FormattedDate(
461        title = _(u'End Date'),
462        required = False,
463        readonly = False,
464        show_year = True,
465        )
466
467    emp_reason = schema.TextLine(
468        title = _(u'Reason for Leaving'),
469        required = False,
470        readonly = False,
471        )
472
473    employer2 = schema.TextLine(
474        title = _(u'2nd Employer'),
475        required = False,
476        readonly = False,
477        )
478
479    emp2_position = schema.TextLine(
480        title = _(u'2nd Employer Position'),
481        required = False,
482        readonly = False,
483        )
484
485    emp2_start = FormattedDate(
486        title = _(u'Start Date'),
487        required = False,
488        readonly = False,
489        show_year = True,
490        )
491
492    emp2_end = FormattedDate(
493        title = _(u'End Date'),
494        required = False,
495        readonly = False,
496        show_year = True,
497        )
498
499    emp2_reason = schema.TextLine(
500        title = _(u'Reason for Leaving'),
501        required = False,
502        readonly = False,
503        )
504
505    former_matric = schema.TextLine(
506        title = _(u'If yes, matric number'),
507        required = False,
508        readonly = False,
509        )
510
511    notice = schema.Text(
512        title = _(u'Notice'),
513        required = False,
514        )
515
516
517    master_sheet_number = schema.TextLine(
518        title = _(u'Master Sheet Number'),
519        required = False,
520        readonly = False,
521        )
522
523    screening_venue = schema.TextLine(
524        title = _(u'Screening Venue'),
525        required = False,
526        )
527
528    screening_date = schema.TextLine(
529        title = _(u'Screening Date'),
530        required = False,
531        )
532
533    screening_score = schema.Int(
534        title = _(u'Screening Points'),
535        required = False,
536        )
537
538    student_id = schema.TextLine(
539        title = _(u'Student Id'),
540        required = False,
541        readonly = False,
542        )
543
544    course_admitted = schema.Choice(
545        title = _(u'Admitted Course of Study'),
546        source = CertificateSource(),
547        required = False,
548        )
549
550    locked = schema.Bool(
551        title = _(u'Form locked'),
552        default = False,
553        )
554
555    @invariant
556    def course_choice(applicant):
557        if applicant.course1 == applicant.course2:
558            raise Invalid(_("2nd choice course must differ from 1st choice course."))
559        if applicant.course1 == applicant.course3:
560            raise Invalid(_("3rd choice course must differ from 1st choice course."))
561        if applicant.course2 == applicant.course3:
562            raise Invalid(_("3rd choice course must differ from 2nd choice course."))
563
564#ICustomUGApplicant['programme_type'].order = IApplicantBaseData[
565#    'reg_number'].order
566
567
568class ICustomPGApplicant(IApplicantBaseData):
569    """A postgraduate applicant.
570
571    This interface defines the least common multiple of all fields
572    in pg application forms. In customized forms, fields can be excluded by
573    adding them to the PG_OMIT* tuples.
574    """
575
576    nationality = schema.Choice(
577        source = nats_vocab,
578        title = _(u'Nationality'),
579        required = True,
580        )
581    lga = schema.Choice(
582        source = LGASource(),
583        title = _(u'State/LGA (Nigerians only)'),
584        required = False,
585        )
586    #perm_address = schema.Text(
587    #    title = _(u'Permanent Address'),
588    #    required = False,
589    #    )
590    course1 = schema.Choice(
591        title = _(u'1st Choice Course of Study'),
592        source = AppCatCertificateSource(),
593        required = True,
594        )
595    course2 = schema.Choice(
596        title = _(u'2nd Choice Course of Study'),
597        source = AppCatCertificateSource(),
598        required = False,
599        )
600    abstract = schema.Text(
601        title = _(u'Summary of Research Proposal'),
602        description = _(u'Brief abstract of intended project/research work'),
603        required = False,
604        )
605    fst_sit_fname = schema.TextLine(
606        title = _(u'Name in Full'),
607        required = False,
608        readonly = False,
609        )
610    fst_sit_no = schema.TextLine(
611        title = _(u'Exam Number'),
612        required = False,
613        readonly = False,
614        )
615    fst_sit_date = FormattedDate(
616        title = _(u'Exam Date'),
617        required = False,
618        readonly = False,
619        show_year = True,
620        )
621    fst_sit_type = schema.Choice(
622        title = _(u'Exam Type'),
623        required = False,
624        readonly = False,
625        vocabulary = exam_types,
626        )
627    fst_sit_results = schema.List(
628        title = _(u'Exam Results'),
629        value_type = ResultEntryField(),
630        required = False,
631        readonly = False,
632        defaultFactory=list,
633        )
634    scd_sit_fname = schema.TextLine(
635        title = _(u'Name in Full'),
636        required = False,
637        readonly = False,
638        )
639    scd_sit_no = schema.TextLine(
640        title = _(u'Exam Number'),
641        required = False,
642        readonly = False,
643        )
644    scd_sit_date = FormattedDate(
645        title = _(u'Exam Date'),
646        required = False,
647        readonly = False,
648        show_year = True,
649        )
650    scd_sit_type = schema.Choice(
651        title = _(u'Exam Type'),
652        required = False,
653        readonly = False,
654        vocabulary = exam_types,
655        )
656    scd_sit_results = schema.List(
657        title = _(u'Exam Results'),
658        value_type = ResultEntryField(),
659        required = False,
660        readonly = False,
661        defaultFactory=list,
662        )
663    hq_type = schema.Choice(
664        title = _(u'Qualification Obtained'),
665        required = False,
666        readonly = False,
667        vocabulary = high_qual,
668        )
669    hq_fname = schema.TextLine(
670        title = _(u'Name in Full'),
671        required = False,
672        readonly = False,
673        )
674    hq_matric_no = schema.TextLine(
675        title = _(u'Former Matric Number'),
676        required = False,
677        readonly = False,
678        )
679    hq_degree = schema.Choice(
680        title = _(u'Class of Degree'),
681        required = False,
682        readonly = False,
683        vocabulary = high_grade,
684        )
685    hq_school = schema.TextLine(
686        title = _(u'Institution Attended'),
687        required = False,
688        readonly = False,
689        )
690    hq_session = schema.TextLine(
691        title = _(u'Years Attended'),
692        required = False,
693        readonly = False,
694        )
695    hq_disc = schema.TextLine(
696        title = _(u'Discipline'),
697        required = False,
698        readonly = False,
699        )
700    hq_type2 = schema.Choice(
701        title = _(u'Qualification Obtained'),
702        required = False,
703        readonly = False,
704        vocabulary = high_qual,
705        )
706
707    hq_fname2 = schema.TextLine(
708        title = _(u'Name in Full'),
709        required = False,
710        readonly = False,
711        )
712
713    hq_matric_no2 = schema.TextLine(
714        title = _(u'Former Matric Number'),
715        required = False,
716        readonly = False,
717        )
718
719    hq_degree2 = schema.Choice(
720        title = _(u'Class of Degree'),
721        required = False,
722        readonly = False,
723        vocabulary = high_grade,
724        )
725
726    hq_school2 = schema.TextLine(
727        title = _(u'Institution Attended'),
728        required = False,
729        readonly = False,
730        )
731
732    hq_session2 = schema.TextLine(
733        title = _(u'Years Attended'),
734        required = False,
735        readonly = False,
736        )
737
738    hq_disc2 = schema.TextLine(
739        title = _(u'Discipline'),
740        required = False,
741        readonly = False,
742        )
743
744    hq_type3 = schema.Choice(
745        title = _(u'Qualification Obtained'),
746        required = False,
747        readonly = False,
748        vocabulary = high_qual,
749        )
750
751    hq_fname3 = schema.TextLine(
752        title = _(u'Name in Full'),
753        required = False,
754        readonly = False,
755        )
756
757    hq_matric_no3 = schema.TextLine(
758        title = _(u'Former Matric Number'),
759        required = False,
760        readonly = False,
761        )
762
763    hq_degree3 = schema.Choice(
764        title = _(u'Class of Degree'),
765        required = False,
766        readonly = False,
767        vocabulary = high_grade,
768        )
769
770    hq_school3 = schema.TextLine(
771        title = _(u'Institution Attended'),
772        required = False,
773        readonly = False,
774        )
775
776    hq_session3 = schema.TextLine(
777        title = _(u'Years Attended'),
778        required = False,
779        readonly = False,
780        )
781
782    hq_disc3 = schema.TextLine(
783        title = _(u'Discipline'),
784        required = False,
785        readonly = False,
786        )
787
788    hq_type4 = schema.Choice(
789        title = _(u'Qualification Obtained'),
790        required = False,
791        readonly = False,
792        vocabulary = high_qual,
793        )
794
795    hq_fname4 = schema.TextLine(
796        title = _(u'Name in Full'),
797        required = False,
798        readonly = False,
799        )
800
801    hq_matric_no4 = schema.TextLine(
802        title = _(u'Former Matric Number'),
803        required = False,
804        readonly = False,
805        )
806
807    hq_degree4 = schema.Choice(
808        title = _(u'Class of Degree'),
809        required = False,
810        readonly = False,
811        vocabulary = high_grade,
812        )
813
814    hq_school4 = schema.TextLine(
815        title = _(u'Institution Attended'),
816        required = False,
817        readonly = False,
818        )
819
820    hq_session4 = schema.TextLine(
821        title = _(u'Years Attended'),
822        required = False,
823        readonly = False,
824        )
825
826    hq_disc4 = schema.TextLine(
827        title = _(u'Discipline'),
828        required = False,
829        readonly = False,
830        )
831    presently_inst = schema.TextLine(
832        title = _(u'If yes, name of institution'),
833        required = False,
834        readonly = False,
835        )
836    nysc_year = schema.Int(
837        title = _(u'Nysc Year'),
838        required = False,
839        readonly = False,
840        )
841    nysc_lga = schema.Choice(
842        source = LGASource(),
843        title = _(u'Nysc Location'),
844        description = _(u'Leave blank for exception letters.'),
845        required = False,
846        )
847    employer = schema.TextLine(
848        title = _(u'Employer'),
849        required = False,
850        readonly = False,
851        )
852    emp_position = schema.TextLine(
853        title = _(u'Employer Position'),
854        required = False,
855        readonly = False,
856        )
857    emp_start = FormattedDate(
858        title = _(u'Start Date'),
859        required = False,
860        readonly = False,
861        show_year = True,
862        )
863    emp_end = FormattedDate(
864        title = _(u'End Date'),
865        required = False,
866        readonly = False,
867        show_year = True,
868        )
869    emp_reason = schema.TextLine(
870        title = _(u'Reason for Leaving'),
871        required = False,
872        readonly = False,
873        )
874    employer2 = schema.TextLine(
875        title = _(u'2nd Employer'),
876        required = False,
877        readonly = False,
878        )
879    emp2_position = schema.TextLine(
880        title = _(u'2nd Employer Position'),
881        required = False,
882        readonly = False,
883        )
884    emp2_start = FormattedDate(
885        title = _(u'Start Date'),
886        required = False,
887        readonly = False,
888        show_year = True,
889        )
890    emp2_end = FormattedDate(
891        title = _(u'End Date'),
892        required = False,
893        readonly = False,
894        show_year = True,
895        )
896    emp2_reason = schema.TextLine(
897        title = _(u'Reason for Leaving'),
898        required = False,
899        readonly = False,
900        )
901    former_matric = schema.TextLine(
902        title = _(u'If yes, matric number'),
903        required = False,
904        readonly = False,
905        )
906    notice = schema.Text(
907        title = _(u'Notice'),
908        required = False,
909        readonly = False,
910        )
911    screening_venue = schema.TextLine(
912        title = _(u'Screening Venue'),
913        required = False,
914        )
915    screening_date = schema.TextLine(
916        title = _(u'Screening Date'),
917        required = False,
918        )
919    screening_score = schema.Float(
920        title = _(u'Screening Score (%)'),
921        required = False,
922        )
923    student_id = schema.TextLine(
924        title = _(u'Student Id'),
925        required = False,
926        readonly = False,
927        )
928    course_admitted = schema.Choice(
929        title = _(u'Admitted Course of Study'),
930        source = CertificateSource(),
931        required = False,
932        readonly = False,
933        )
934    locked = schema.Bool(
935        title = _(u'Form locked'),
936        default = False,
937        required = False,
938        )
939
940    referees = schema.List(
941        title = _(u'Referees'),
942        value_type = RefereeEntryField(),
943        description = _(u'Maximum 3 referees'),
944        required = True,
945        defaultFactory=list,
946        )
947
948class ITranscriptApplicant(IKofaObject):
949    """A transcript applicant.
950    """
951
952    suspended = schema.Bool(
953        title = _(u'Account suspended'),
954        default = False,
955        required = False,
956        )
957
958    locked = schema.Bool(
959        title = _(u'Form locked'),
960        default = False,
961        required = False,
962        )
963
964    applicant_id = schema.TextLine(
965        title = _(u'Application Id'),
966        required = False,
967        readonly = False,
968        )
969
970    reg_number = TextLineChoice(
971        title = _(u'Kofa Registration Number'),
972        readonly = False,
973        required = True,
974        source = contextual_reg_num_source,
975        )
976
977    firstname = schema.TextLine(
978        title = _(u'First Name'),
979        required = True,
980        )
981
982    middlename = schema.TextLine(
983        title = _(u'Middle Name'),
984        required = False,
985        )
986
987    lastname = schema.TextLine(
988        title = _(u'Last Name (Surname)'),
989        required = True,
990        )
991
992    matric_number = schema.TextLine(
993        title = _(u'Matriculation Number'),
994        readonly = False,
995        required = True,
996        )
997
998    date_of_birth = FormattedDate(
999        title = _(u'Date of Birth'),
1000        required = False,
1001        #date_format = u'%d/%m/%Y', # Use grok-instance-wide default
1002        show_year = True,
1003        )
1004
1005    sex = schema.Choice(
1006        title = _(u'Gender'),
1007        source = GenderSource(),
1008        required = True,
1009        )
1010
1011    place_of_birth = schema.TextLine(
1012        title = _(u'Place of Birth'),
1013        readonly = False,
1014        required = False,
1015        )
1016
1017    nationality = schema.Choice(
1018        vocabulary = nats_vocab,
1019        title = _(u'Nationality'),
1020        required = False,
1021        )
1022
1023    email = schema.ASCIILine(
1024        title = _(u'Email Address'),
1025        required = True,
1026        constraint=validate_email,
1027        )
1028
1029    phone = PhoneNumber(
1030        title = _(u'Phone'),
1031        description = u'',
1032        required = False,
1033        )
1034
1035    perm_address = schema.Text(
1036        title = _(u'Current Local Address'),
1037        required = False,
1038        readonly = False,
1039        )
1040
1041    dispatch_address = schema.Text(
1042        title = _(u'Dispatch Addresses'),
1043        description = u'Addresses to which transcript should be posted.',
1044        required = False,
1045        readonly = False,
1046        )
1047
1048    entry_mode = schema.Choice(
1049        title = _(u'Entry Mode'),
1050        source = StudyModeSource(),
1051        required = False,
1052        readonly = False,
1053        )
1054
1055    entry_session = schema.Choice(
1056        title = _(u'Entry Session'),
1057        source = academic_sessions_vocab,
1058        required = False,
1059        readonly = False,
1060        )
1061
1062    end_session = schema.Choice(
1063        title = _(u'End Session'),
1064        source = academic_sessions_vocab,
1065        required = False,
1066        readonly = False,
1067        )
1068
1069    course_studied = schema.Choice(
1070        title = _(u'Course of Study / Degree'),
1071        source = CertificateSource(),
1072        required = False,
1073        readonly = False,
1074        )
1075
1076    purpose = schema.TextLine(
1077        title = _(u'Purpose of this Application'),
1078        readonly = False,
1079        required = False,
1080        )
1081
1082    course_changed = schema.Choice(
1083        title = _(u'Change of Study Course'),
1084        description = u'If yes, select previous course of study.',
1085        source = CertificateSource(),
1086        readonly = False,
1087        required = False,
1088        )
1089
1090    change_level = schema.Choice(
1091        title = _(u'Change Level'),
1092        description = u'If yes, select level at which you changed course of study.',
1093        source = StudyLevelSource(),
1094        required = False,
1095        readonly = False,
1096        )
1097
1098    applied_before_date = FormattedDate(
1099        title = _(u'Applied and obtained Transcript before?'),
1100        description = u'If yes, select month and year of application.',
1101        required = False,
1102        show_year = True,
1103        )
1104
1105
1106    no_copies = schema.Choice(
1107        title = _(u'Number of Copies'),
1108        description = u'Must correspond with the number of dispatch addresses above.',
1109        values=[1, 2, 3, 4],
1110        required = False,
1111        readonly = False,
1112        default = 1,
1113        )
1114
1115class ICertificateRequest(IKofaObject):
1116    """A transcript applicant.
1117    """
1118
1119    suspended = schema.Bool(
1120        title = _(u'Account suspended'),
1121        default = False,
1122        required = False,
1123        )
1124
1125    locked = schema.Bool(
1126        title = _(u'Form locked'),
1127        default = False,
1128        required = False,
1129        )
1130
1131    applicant_id = schema.TextLine(
1132        title = _(u'Application Id'),
1133        required = False,
1134        readonly = False,
1135        )
1136
1137    reg_number = TextLineChoice(
1138        title = _(u'Kofa Registration Number'),
1139        readonly = False,
1140        required = True,
1141        source = contextual_reg_num_source,
1142        )
1143
1144    firstname = schema.TextLine(
1145        title = _(u'First Name'),
1146        required = True,
1147        )
1148
1149    middlename = schema.TextLine(
1150        title = _(u'Middle Name'),
1151        required = False,
1152        )
1153
1154    lastname = schema.TextLine(
1155        title = _(u'Last Name (Surname)'),
1156        required = True,
1157        )
1158
1159    matric_number = schema.TextLine(
1160        title = _(u'Matriculation Number'),
1161        readonly = False,
1162        required = True,
1163        )
1164
1165    date_of_birth = FormattedDate(
1166        title = _(u'Date of Birth'),
1167        required = False,
1168        #date_format = u'%d/%m/%Y', # Use grok-instance-wide default
1169        show_year = True,
1170        )
1171
1172    sex = schema.Choice(
1173        title = _(u'Gender'),
1174        source = GenderSource(),
1175        required = True,
1176        )
1177
1178    place_of_birth = schema.TextLine(
1179        title = _(u'Place of Birth'),
1180        readonly = False,
1181        required = False,
1182        )
1183
1184    nationality = schema.Choice(
1185        vocabulary = nats_vocab,
1186        title = _(u'Nationality'),
1187        required = False,
1188        )
1189
1190    email = schema.ASCIILine(
1191        title = _(u'Email Address'),
1192        required = True,
1193        constraint=validate_email,
1194        )
1195
1196    phone = PhoneNumber(
1197        title = _(u'Phone'),
1198        description = u'',
1199        required = False,
1200        )
1201
1202    entry_session = schema.Choice(
1203        title = _(u'Entry Session'),
1204        source = academic_sessions_vocab,
1205        required = False,
1206        readonly = False,
1207        )
1208
1209    end_session = schema.Choice(
1210        title = _(u'End Session'),
1211        source = academic_sessions_vocab,
1212        required = False,
1213        readonly = False,
1214        )
1215
1216    course_studied = schema.Choice(
1217        title = _(u'Course of Study / Degree'),
1218        source = CertificateSource(),
1219        required = True,
1220        readonly = False,
1221        )
1222
1223    certificate_type = schema.Choice(
1224        title = _(u'Certificate Type'),
1225        vocabulary = certificate_types_vocab,
1226        required = False,
1227        )
1228
1229
1230class IVerificationRequest(IKofaObject):
1231    """A applicant asking for verification.
1232    """
1233
1234    suspended = schema.Bool(
1235        title = _(u'Account suspended'),
1236        default = False,
1237        required = False,
1238        )
1239
1240    locked = schema.Bool(
1241        title = _(u'Form locked'),
1242        default = False,
1243        required = False,
1244        )
1245
1246    applicant_id = schema.TextLine(
1247        title = _(u'Application Id'),
1248        required = False,
1249        readonly = False,
1250        )
1251
1252    #reg_number = TextLineChoice(
1253    #    title = _(u'Kofa Registration Number'),
1254    #    readonly = False,
1255    #    required = True,
1256    #    source = contextual_reg_num_source,
1257    #    )
1258
1259    firstname = schema.TextLine(
1260        title = _(u'First Name'),
1261        required = True,
1262        )
1263
1264    middlename = schema.TextLine(
1265        title = _(u'Middle Name'),
1266        required = False,
1267        )
1268
1269    lastname = schema.TextLine(
1270        title = _(u'Last Name (Surname)'),
1271        required = True,
1272        )
1273
1274    sex = schema.Choice(
1275        title = _(u'Gender'),
1276        source = GenderSource(),
1277        required = True,
1278        )
1279
1280    email = schema.ASCIILine(
1281        title = _(u'Email Address'),
1282        required = True,
1283        constraint=validate_email,
1284        )
1285
1286    phone = PhoneNumber(
1287        title = _(u'Phone'),
1288        description = u'',
1289        required = False,
1290        )
1291
1292    matric_number = schema.TextLine(
1293        title = _(u'Verification Body Reference Number'),
1294        readonly = False,
1295        required = True,
1296        )
1297
1298    body_address = schema.Text(
1299        title = _(u'Verification Body Address'),
1300        required = True,
1301        )
1302
1303    document_type = schema.Choice(
1304        title = _(u'Document Type'),
1305        vocabulary = document_types_vocab,
1306        required = True,
1307        )
1308
1309class IFedexRequest(IKofaObject):
1310    """A applicant requests payment for courier.
1311    """
1312
1313    suspended = schema.Bool(
1314        title = _(u'Account suspended'),
1315        default = False,
1316        required = False,
1317        )
1318
1319    locked = schema.Bool(
1320        title = _(u'Form locked'),
1321        default = False,
1322        required = False,
1323        )
1324
1325    applicant_id = schema.TextLine(
1326        title = _(u'Application Id'),
1327        required = False,
1328        readonly = False,
1329        )
1330
1331    trans_id = schema.TextLine(
1332        title = _(u'Transcript Application Id'),
1333        required = True,
1334        readonly = False,
1335        #description = u'This serve as a unique identifier which '
1336        #               'allows the the officer to verify the transcript '
1337        #               'in order to avoid errors before dispatch.',
1338        )
1339
1340    #reg_number = TextLineChoice(
1341    #    title = _(u'Kofa Registration Number'),
1342    #    readonly = False,
1343    #    required = True,
1344    #    source = contextual_reg_num_source,
1345    #    )
1346
1347    firstname = schema.TextLine(
1348        title = _(u'First Name'),
1349        required = True,
1350        )
1351
1352    middlename = schema.TextLine(
1353        title = _(u'Middle Name'),
1354        required = False,
1355        )
1356
1357    lastname = schema.TextLine(
1358        title = _(u'Last Name (Surname)'),
1359        required = True,
1360        )
1361
1362    sex = schema.Choice(
1363        title = _(u'Gender'),
1364        source = GenderSource(),
1365        required = True,
1366        )
1367
1368    email = schema.ASCIILine(
1369        title = _(u'Email Address'),
1370        required = True,
1371        constraint=validate_email,
1372        )
1373
1374    phone = PhoneNumber(
1375        title = _(u'Phone'),
1376        description = u'',
1377        required = False,
1378        )
1379
1380    matric_number = schema.TextLine(
1381        title = _(u'WES Reference Number (where applicable)'),
1382        readonly = False,
1383        required = False,
1384        )
1385
1386    dispatch_address = schema.Text(
1387        title = _(u'Dispatch Address'),
1388        required = True,
1389        )
1390
1391class IRecruitment(IKofaObject):
1392    """A recruitment application.
1393    """
1394
1395    suspended = schema.Bool(
1396        title = _(u'Account suspended'),
1397        default = False,
1398        required = False,
1399        )
1400
1401    locked = schema.Bool(
1402        title = _(u'Form locked'),
1403        default = False,
1404        required = False,
1405        )
1406
1407    applicant_id = schema.TextLine(
1408        title = _(u'Application Id'),
1409        required = False,
1410        readonly = False,
1411        )
1412
1413    #reg_number = TextLineChoice(
1414    #    title = _(u'Kofa Registration Number'),
1415    #    readonly = False,
1416    #    required = True,
1417    #    source = contextual_reg_num_source,
1418    #    )
1419
1420    application_types = schema.Choice(
1421        title = _(u'Application Category'),
1422        vocabulary = application_types_vocab,
1423        required = True,
1424        )
1425
1426    position_comment = schema.Text(
1427        title = _(u'Desired Position'),
1428        required = True,
1429        description = u'Copy and paste the vacant position '
1430                       'text from the <a target="_blank" '
1431                       'href="https://aauekpoma.edu.ng/">university website</a>.',
1432        )
1433
1434    firstname = schema.TextLine(
1435        title = _(u'First Name'),
1436        required = True,
1437        )
1438
1439    middlename = schema.TextLine(
1440        title = _(u'Middle Name'),
1441        required = False,
1442        )
1443
1444    lastname = schema.TextLine(
1445        title = _(u'Last Name (Surname)'),
1446        required = True,
1447        )
1448
1449    sex = schema.Choice(
1450        title = _(u'Gender'),
1451        source = GenderSource(),
1452        required = True,
1453        )
1454
1455    email = schema.ASCIILine(
1456        title = _(u'Email Address'),
1457        required = True,
1458        constraint=validate_email,
1459        )
1460
1461    phone = PhoneNumber(
1462        title = _(u'Phone'),
1463        description = u'',
1464        required = False,
1465        )
1466
1467    address = schema.Text(
1468        title = _(u'Address'),
1469        required = True,
1470        )
1471
1472class ISendByEmailRequest(IKofaObject):
1473    """A applicant asking for sending an email.
1474    """
1475
1476    suspended = schema.Bool(
1477        title = _(u'Account suspended'),
1478        default = False,
1479        required = False,
1480        )
1481
1482    locked = schema.Bool(
1483        title = _(u'Form locked'),
1484        default = False,
1485        required = False,
1486        )
1487
1488    applicant_id = schema.TextLine(
1489        title = _(u'Applicant Id'),
1490        required = False,
1491        readonly = False,
1492        )
1493
1494    firstname = schema.TextLine(
1495        title = _(u'First Name'),
1496        required = True,
1497        )
1498
1499    middlename = schema.TextLine(
1500        title = _(u'Middle Name'),
1501        required = False,
1502        )
1503
1504    lastname = schema.TextLine(
1505        title = _(u'Last Name (Surname)'),
1506        required = True,
1507        )
1508
1509    sex = schema.Choice(
1510        title = _(u'Gender'),
1511        source = GenderSource(),
1512        required = True,
1513        )
1514
1515    email = schema.ASCIILine(
1516        title = _(u"Applicant's Email Address"),
1517        required = True,
1518        constraint=validate_email,
1519        )
1520
1521    phone = PhoneNumber(
1522        title = _(u'Phone'),
1523        description = u'',
1524        required = False,
1525        )
1526
1527    body_address = schema.Text(
1528        title = _(u'Address of Requesting Organization'),
1529        required = True,
1530        )
1531
1532    body_email = schema.ASCIILine(
1533        title = _(u"Email Address of Requesting Organization"),
1534        required = True,
1535        constraint=validate_email,
1536        )
1537
1538    request_type = schema.Choice(
1539        title = _(u'Request Type'),
1540        vocabulary = request_types_vocab,
1541        required = True,
1542        )
1543
1544    document_type = schema.Choice(
1545        title = _(u'Document Type'),
1546        vocabulary = document_types_vocab,
1547        required = True,
1548        )
1549
1550class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant,
1551                       ITranscriptApplicant, ICertificateRequest,
1552                       IVerificationRequest, ISendByEmailRequest,
1553                       IFedexRequest, IRecruitment):
1554    """An interface for all types of applicants.
1555
1556    Attention: The ICustomPGApplicant field seetings will be overwritten
1557    by ICustomPGApplicant field settings. If a field is defined
1558    in both interfaces zope.schema validates only against the
1559    constraints in ICustomUGApplicant. This does not affect the forms
1560    since they are build on either ICustomUGApplicant or ICustomPGApplicant.
1561    """
1562
1563    def writeLogMessage(view, comment):
1564        """Adds an INFO message to the log file
1565        """
1566
1567    def createStudent():
1568        """Create a student object from applicatnt data
1569        and copy applicant object.
1570        """
1571
1572class ICustomUGApplicantEdit(ICustomUGApplicant):
1573    """An undergraduate applicant interface for edit forms.
1574
1575    Here we can repeat the fields from base data and set the
1576    `required` and `readonly` attributes to True to further restrict
1577    the data access. Or we can allow only certain certificates to be
1578    selected by choosing the appropriate source.
1579
1580    We cannot omit fields here. This has to be done in the
1581    respective form page.
1582    """
1583
1584    #programme_type = schema.Choice(
1585    #    title = _(u'Programme Type'),
1586    #    vocabulary = programme_types_vocab,
1587    #    required = True,
1588    #    )
1589
1590    date_of_birth = FormattedDate(
1591        title = _(u'Date of Birth'),
1592        required = True,
1593        show_year = True,
1594        )
1595
1596    course1 = schema.Choice(
1597        title = _(u'1st Choice Course of Study'),
1598        source = AppCatCertificateSource(),
1599        required = True,
1600        )
1601
1602    course2 = schema.Choice(
1603        title = _(u'2nd Choice Course of Study'),
1604        source = AppCatCertificateSource(),
1605        required = True,
1606        )
1607
1608    course3 = schema.Choice(
1609        title = _(u'3rd Choice Course of Study'),
1610        source = AppCatCertificateSource(),
1611        required = True,
1612        )
1613
1614    fst_sit_fname = schema.TextLine(
1615        title = _(u'Name in Full'),
1616        required = True,
1617        readonly = False,
1618        )
1619
1620    fst_sit_no = schema.TextLine(
1621        title = _(u'Exam Number'),
1622        required = True,
1623        readonly = False,
1624        )
1625
1626    fst_sit_sc_pin = schema.TextLine(
1627        title = _(u'Scratch Card Pin'),
1628        required = True,
1629        readonly = False,
1630        )
1631
1632    fst_sit_sc_serial_number = schema.TextLine(
1633        title = _(u'Scratch Card Serial Number'),
1634        required = True,
1635        readonly = False,
1636        )
1637
1638    fst_sit_date = FormattedDate(
1639        title = _(u'Exam Date'),
1640        required = True,
1641        readonly = False,
1642        show_year = True,
1643        )
1644
1645    fst_sit_type = schema.Choice(
1646        title = _(u'Exam Type'),
1647        required = True,
1648        readonly = False,
1649        vocabulary = exam_types,
1650        )
1651
1652    # course1 works only on manage pages. On edit pages course1 input is missing
1653    # and no Invalid exception is raised.
1654    # NoInputData: NoInputD...course1'
1655    # Therefore, we check and compare course1 on CustomApplicantEditFormPage.
1656    @invariant
1657    def course_choice(applicant):
1658        if applicant.course2 == applicant.course3:
1659            raise Invalid(_("3rd choice course must differ from 2nd choice course."))
1660
1661#ICustomUGApplicantEdit['programme_type'].order = ICustomUGApplicant[
1662#    'programme_type'].order
1663ICustomUGApplicantEdit['date_of_birth'].order = ICustomUGApplicant[
1664    'date_of_birth'].order
1665ICustomUGApplicantEdit['course1'].order = ICustomUGApplicant[
1666    'course1'].order
1667ICustomUGApplicantEdit['course2'].order = ICustomUGApplicant[
1668    'course2'].order
1669ICustomUGApplicantEdit['course3'].order = ICustomUGApplicant[
1670    'course3'].order
1671ICustomUGApplicantEdit['fst_sit_fname'].order = ICustomUGApplicant[
1672    'fst_sit_fname'].order
1673ICustomUGApplicantEdit['fst_sit_no'].order = ICustomUGApplicant[
1674    'fst_sit_no'].order
1675ICustomUGApplicantEdit['fst_sit_sc_pin'].order = ICustomUGApplicant[
1676    'fst_sit_sc_pin'].order
1677ICustomUGApplicantEdit['fst_sit_sc_serial_number'].order = ICustomUGApplicant[
1678    'fst_sit_sc_serial_number'].order
1679ICustomUGApplicantEdit['fst_sit_date'].order = ICustomUGApplicant[
1680    'fst_sit_date'].order
1681ICustomUGApplicantEdit['fst_sit_type'].order = ICustomUGApplicant[
1682    'fst_sit_type'].order
1683
1684class ICustomPGApplicantEdit(ICustomPGApplicant):
1685    """A postgraduate applicant interface for editing.
1686
1687    Here we can repeat the fields from base data and set the
1688    `required` and `readonly` attributes to True to further restrict
1689    the data access. Or we can allow only certain certificates to be
1690    selected by choosing the appropriate source.
1691
1692    We cannot omit fields here. This has to be done in the
1693    respective form page.
1694    """
1695
1696    email = schema.ASCIILine(
1697        title = _(u'Email Address'),
1698        required = True,
1699        constraint=validate_email,
1700        )
1701    date_of_birth = FormattedDate(
1702        title = _(u'Date of Birth'),
1703        required = True,
1704        show_year = True,
1705        )
1706
1707ICustomPGApplicantEdit[
1708    'date_of_birth'].order =  ICustomPGApplicant['date_of_birth'].order
1709ICustomPGApplicantEdit[
1710    'email'].order =  ICustomPGApplicant['email'].order
1711
1712class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
1713    """An applicant payment via payment gateways.
1714
1715    """
1716
1717class IPUTMEApplicantEdit(IPUTMEApplicantEdit):
1718    """An undergraduate applicant interface for editing.
1719
1720    Here we can repeat the fields from base data and set the
1721    `required` and `readonly` attributes to True to further restrict
1722    the data access. Or we can allow only certain certificates to be
1723    selected by choosing the appropriate source.
1724
1725    We cannot omit fields here. This has to be done in the
1726    respective form page.
1727    """
1728
1729class ICustomApplicantUpdateByRegNo(ICustomApplicant):
1730    """Representation of an applicant.
1731
1732    Skip regular reg_number validation if reg_number is used for finding
1733    the applicant object.
1734    """
1735
1736    reg_number = schema.TextLine(
1737        title = u'Registration Number',
1738        required = False,
1739        )
1740
1741class ICustomApplicantRefereeReport(IApplicantRefereeReport):
1742    """A referee report.
1743    """
1744
1745    referee_rank = schema.TextLine(
1746        title = _(u'Referee Rank or Profession'),
1747        required = False,
1748        )
1749
1750    referee_inst = schema.TextLine(
1751        title = _(u'Referee Institution/University'),
1752        required = False,
1753        )
1754
1755    duration = schema.Text(
1756        title = _(u'How long and in what capacity have you known the candidate?'),
1757        required = False,
1758        )
1759
1760    itellectual = schema.Choice(
1761        title = _(u'Intellectual Capacity'),
1762        required = False,
1763        readonly = False,
1764        vocabulary = rating_vocab,
1765        )
1766
1767    persistent = schema.Choice(
1768        title = _(u'Capacity for Persistent and Independent Academic Study'),
1769        required = False,
1770        readonly = False,
1771        vocabulary = rating_vocab,
1772        )
1773
1774    imaginative = schema.Choice(
1775        title = _(u'Ability for Imaginative Thought'),
1776        required = False,
1777        readonly = False,
1778        vocabulary = rating_vocab,
1779        )
1780
1781    productive = schema.Choice(
1782        title = _(u'Promise of Productive Scholarship'),
1783        required = False,
1784        readonly = False,
1785        vocabulary = rating_vocab,
1786        )
1787
1788    previous = schema.Choice(
1789        title = _(u'Quality of Previous Work'),
1790        required = False,
1791        readonly = False,
1792        vocabulary = rating_vocab,
1793        )
1794
1795    expression = schema.Choice(
1796        title = _(u'Oral and Written Expression in English'),
1797        required = False,
1798        readonly = False,
1799        vocabulary = rating_vocab,
1800        )
1801
1802    personality = schema.Text(
1803        title = _(u'Please comment on the candidate\'s personality '
1804            'with particular reference to his/her moral character, emotional '
1805            'and physical stabilty'),
1806        required = False,
1807        )
1808
1809    #promise = schema.Choice(
1810    #    title = _(u'Candidate\'s overall promise'),
1811    #    required = False,
1812    #    readonly = False,
1813    #    vocabulary = overallpromise_vocab,
1814    #    )
1815
1816    report = schema.Text(
1817        title = _(u'Any other relevant information which would help '
1818            'in determining the candidate\'s suitability?'),
1819        required = False,
1820        )
1821
1822    objection = schema.Text(
1823        title = _(u'Have you any objection to the contents of this '
1824            'evaluation being disclosed to any award-given body if '
1825            'the need arises?'),
1826        required = False,
1827        )
1828
1829    ability = schema.Choice(
1830        title = _(u'Ability to Work in a Team'),
1831        required = False,
1832        readonly = False,
1833        vocabulary = rating_vocab,
1834        )
1835
1836    overall = schema.Choice(
1837        title = _(u'Overall Assessment of Candidate'),
1838        required = False,
1839        readonly = False,
1840        vocabulary = rating_vocab,
1841        )
Note: See TracBrowser for help on using the repository browser.