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

Last change on this file since 17751 was 17719, checked in by Henrik Bettermann, 8 months ago

Add new application form and change existing ones.

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