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

Last change on this file since 17874 was 17874, checked in by Henrik Bettermann, 3 months ago

Add NIN.

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