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

Last change on this file since 15948 was 15861, checked in by Henrik Bettermann, 5 years ago

Add phone field. Fix test.

  • Property svn:keywords set to Id
File size: 29.5 KB
Line 
1## $Id: interfaces.py 15861 2019-12-01 08:45:25Z 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)
36from waeup.kofa.university.vocabularies import StudyModeSource
37from kofacustom.nigeria.applicants.interfaces import (
38    LGASource, high_qual, high_grade, exam_types,
39    INigeriaUGApplicant, INigeriaPGApplicant,
40    INigeriaApplicantOnlinePayment,
41    INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
42    INigeriaApplicantUpdateByRegNo,
43    IPUTMEApplicantEdit,
44    )
45from waeup.aaue.interfaces import MessageFactory as _
46from waeup.aaue.payments.interfaces import ICustomOnlinePayment
47
48programme_types_vocab = SimpleKofaVocabulary(
49    (_('Undergraduate Programme (100 level)'), 'regular'),
50    (_('Direct Entry (200 level)'), 'direct'),
51    (_('not applicable'), 'na'),
52    )
53
54certificate_types_vocab = SimpleKofaVocabulary(
55    (_('Full-time Degree'), 'ft'),
56    (_('Part-time Degree'), 'pt'),
57    (_('Diploma'), 'dp'),
58    (_('Masters Degree'), 'ma'),
59    (_('Doctorate Degree'), 'phd'),
60    )
61
62document_types_vocab = SimpleKofaVocabulary(
63    (_('Certificate'), 'certificate'),
64    (_('Result'), 'result'),
65    (_('Transcript'), 'transcript'),
66    (_('Studentship'), 'studship'),
67    )
68
69request_types_vocab = SimpleKofaVocabulary(
70    (_('Scanned Result'), 'result'),
71    (_('Scanned Certificate'), 'certificate'),
72    (_('Scanned Transcript'), 'transcript'),
73    (_('Attestation'), 'attest'),
74    (_('Proficiency in English Language'), 'english'),
75    )
76
77class ICustomUGApplicant(IApplicantBaseData):
78    """An undergraduate applicant.
79
80    This interface defines the least common multiple of all fields
81    in ug application forms. In customized forms, fields can be excluded by
82    adding them to the UG_OMIT* tuples.
83    """
84
85    #programme_type = schema.Choice(
86    #    title = _(u'Programme Type'),
87    #    vocabulary = programme_types_vocab,
88    #    required = False,
89    #    )
90
91    nationality = schema.Choice(
92        source = nats_vocab,
93        title = _(u'Nationality'),
94        required = True,
95        )
96
97    lga = schema.Choice(
98        source = LGASource(),
99        title = _(u'State/LGA (Nigerians only)'),
100        required = False,
101        )
102
103    perm_address = schema.Text(
104        title = _(u'Permanent Address'),
105        required = False,
106        )
107
108    home_town = schema.TextLine(
109        title = _(u'Home Town'),
110        required = False,
111        )
112
113    #jamb_reg_number = schema.TextLine(
114    #    title = _(u'JAMB Registration Number'),
115    #    required = False,
116    #    )
117
118    jamb_score = schema.Int(
119        title = _(u'Total JAMB Score'),
120        required = False,
121        )
122
123    jamb_subjects = schema.Text(
124        title = _(u'JAMB Subjects and Scores'),
125        required = False,
126        )
127
128    course1 = schema.Choice(
129        title = _(u'1st Choice Course of Study'),
130        source = AppCatCertificateSource(),
131        required = False,
132        )
133
134    course2 = schema.Choice(
135        title = _(u'2nd Choice Course of Study'),
136        source = AppCatCertificateSource(),
137        required = False,
138        )
139
140    course3 = schema.Choice(
141        title = _(u'3rd Choice Course of Study'),
142        source = AppCatCertificateSource(),
143        required = False,
144        )
145
146    fst_sit_fname = schema.TextLine(
147        title = _(u'Full Name'),
148        required = False,
149        readonly = False,
150        )
151
152    fst_sit_no = schema.TextLine(
153        title = _(u'Exam Number'),
154        required = False,
155        readonly = False,
156        )
157
158    fst_sit_sc_pin = schema.TextLine(
159        title = _(u'Scratch Card Pin'),
160        required = False,
161        readonly = False,
162        )
163
164    fst_sit_sc_serial_number = schema.TextLine(
165        title = _(u'Scratch Card Serial Number'),
166        required = False,
167        readonly = False,
168        )
169
170    fst_sit_date = FormattedDate(
171        title = _(u'Exam Date'),
172        required = False,
173        readonly = False,
174        show_year = True,
175        )
176
177    fst_sit_type = schema.Choice(
178        title = _(u'Exam Type'),
179        required = False,
180        readonly = False,
181        vocabulary = exam_types,
182        )
183
184    fst_sit_results = schema.List(
185        title = _(u'Exam Results'),
186        value_type = ResultEntryField(),
187        required = False,
188        readonly = False,
189        defaultFactory=list,
190        )
191
192    scd_sit_fname = schema.TextLine(
193        title = _(u'Full Name'),
194        required = False,
195        readonly = False,
196        )
197
198    scd_sit_no = schema.TextLine(
199        title = _(u'Exam Number'),
200        required = False,
201        readonly = False,
202        )
203
204    scd_sit_sc_pin = schema.TextLine(
205        title = _(u'Scratch Card Pin'),
206        required = False,
207        readonly = False,
208        )
209
210    scd_sit_sc_serial_number = schema.TextLine(
211        title = _(u'Scratch Card Serial Number'),
212        required = False,
213        readonly = False,
214        )
215
216    scd_sit_date = FormattedDate(
217        title = _(u'Exam Date'),
218        required = False,
219        readonly = False,
220        show_year = True,
221        )
222
223    scd_sit_type = schema.Choice(
224        title = _(u'Exam Type'),
225        required = False,
226        readonly = False,
227        vocabulary = exam_types,
228        )
229
230    scd_sit_results = schema.List(
231        title = _(u'Exam Results'),
232        value_type = ResultEntryField(),
233        required = False,
234        readonly = False,
235        defaultFactory=list,
236        )
237
238    alr_fname = schema.TextLine(
239        title = _(u'Full Name'),
240        required = False,
241        readonly = False,
242        )
243
244    alr_no = schema.TextLine(
245        title = _(u'Exam Number'),
246        required = False,
247        readonly = False,
248        )
249
250    alr_date = FormattedDate(
251        title = _(u'Exam Date'),
252        required = False,
253        readonly = False,
254        show_year = True,
255        )
256
257    alr_results = schema.List(
258        title = _(u'Exam Results'),
259        value_type = ResultEntryField(),
260        required = False,
261        readonly = False,
262        defaultFactory=list,
263        )
264
265    hq_type = schema.Choice(
266        title = _(u'Qualification Obtained'),
267        required = False,
268        readonly = False,
269        vocabulary = high_qual,
270        )
271
272    hq_fname = schema.TextLine(
273        title = _(u'Full Name'),
274        required = False,
275        readonly = False,
276        )
277
278    hq_matric_no = schema.TextLine(
279        title = _(u'Former Matric Number'),
280        required = False,
281        readonly = False,
282        )
283
284    hq_degree = schema.Choice(
285        title = _(u'Class of Degree'),
286        required = False,
287        readonly = False,
288        vocabulary = high_grade,
289        )
290
291    hq_school = schema.TextLine(
292        title = _(u'Institution Attended'),
293        required = False,
294        readonly = False,
295        )
296
297    hq_session = schema.TextLine(
298        title = _(u'Years Attended'),
299        required = False,
300        readonly = False,
301        )
302
303    hq_disc = schema.TextLine(
304        title = _(u'Discipline'),
305        required = False,
306        readonly = False,
307        )
308
309    hq_type2 = schema.Choice(
310        title = _(u'Qualification Obtained'),
311        required = False,
312        readonly = False,
313        vocabulary = high_qual,
314        )
315
316    hq_fname2 = schema.TextLine(
317        title = _(u'Full Name'),
318        required = False,
319        readonly = False,
320        )
321
322    hq_matric_no2 = schema.TextLine(
323        title = _(u'Former Matric Number'),
324        required = False,
325        readonly = False,
326        )
327
328    hq_degree2 = schema.Choice(
329        title = _(u'Class of Degree'),
330        required = False,
331        readonly = False,
332        vocabulary = high_grade,
333        )
334
335    hq_school2 = schema.TextLine(
336        title = _(u'Institution Attended'),
337        required = False,
338        readonly = False,
339        )
340
341    hq_session2 = schema.TextLine(
342        title = _(u'Years Attended'),
343        required = False,
344        readonly = False,
345        )
346
347    hq_disc2 = schema.TextLine(
348        title = _(u'Discipline'),
349        required = False,
350        readonly = False,
351        )
352
353    hq_type3 = schema.Choice(
354        title = _(u'Qualification Obtained'),
355        required = False,
356        readonly = False,
357        vocabulary = high_qual,
358        )
359
360    hq_fname3 = schema.TextLine(
361        title = _(u'Full Name'),
362        required = False,
363        readonly = False,
364        )
365
366    hq_matric_no3 = schema.TextLine(
367        title = _(u'Former Matric Number'),
368        required = False,
369        readonly = False,
370        )
371
372    hq_degree3 = schema.Choice(
373        title = _(u'Class of Degree'),
374        required = False,
375        readonly = False,
376        vocabulary = high_grade,
377        )
378
379    hq_school3 = schema.TextLine(
380        title = _(u'Institution Attended'),
381        required = False,
382        readonly = False,
383        )
384
385    hq_session3 = schema.TextLine(
386        title = _(u'Years Attended'),
387        required = False,
388        readonly = False,
389        )
390
391    hq_disc3 = schema.TextLine(
392        title = _(u'Discipline'),
393        required = False,
394        readonly = False,
395        )
396
397    nysc_year = schema.Int(
398        title = _(u'Nysc Year'),
399        required = False,
400        readonly = False,
401        )
402
403    nysc_location = schema.TextLine(
404        title = _(u'Nysc Location'),
405        required = False,
406        )
407
408    nysc_lga = schema.Choice(
409        source = LGASource(),
410        title = _(u'Nysc LGA'),
411        required = False,
412        )
413
414    employer = schema.TextLine(
415        title = _(u'Employer'),
416        required = False,
417        readonly = False,
418        )
419
420    emp_position = schema.TextLine(
421        title = _(u'Employer Position'),
422        required = False,
423        readonly = False,
424        )
425
426    emp_start = FormattedDate(
427        title = _(u'Start Date'),
428        required = False,
429        readonly = False,
430        show_year = True,
431        )
432
433    emp_end = FormattedDate(
434        title = _(u'End Date'),
435        required = False,
436        readonly = False,
437        show_year = True,
438        )
439
440    emp_reason = schema.TextLine(
441        title = _(u'Reason for Leaving'),
442        required = False,
443        readonly = False,
444        )
445
446    employer2 = schema.TextLine(
447        title = _(u'2nd Employer'),
448        required = False,
449        readonly = False,
450        )
451
452    emp2_position = schema.TextLine(
453        title = _(u'2nd Employer Position'),
454        required = False,
455        readonly = False,
456        )
457
458    emp2_start = FormattedDate(
459        title = _(u'Start Date'),
460        required = False,
461        readonly = False,
462        show_year = True,
463        )
464
465    emp2_end = FormattedDate(
466        title = _(u'End Date'),
467        required = False,
468        readonly = False,
469        show_year = True,
470        )
471
472    emp2_reason = schema.TextLine(
473        title = _(u'Reason for Leaving'),
474        required = False,
475        readonly = False,
476        )
477
478    former_matric = schema.TextLine(
479        title = _(u'If yes, matric number'),
480        required = False,
481        readonly = False,
482        )
483
484    notice = schema.Text(
485        title = _(u'Notice'),
486        required = False,
487        )
488
489
490    master_sheet_number = schema.TextLine(
491        title = _(u'Master Sheet Number'),
492        required = False,
493        readonly = False,
494        )
495
496    screening_venue = schema.TextLine(
497        title = _(u'Screening Venue'),
498        required = False,
499        )
500
501    screening_date = schema.TextLine(
502        title = _(u'Screening Date'),
503        required = False,
504        )
505
506    screening_score = schema.Int(
507        title = _(u'Screening Points'),
508        required = False,
509        )
510
511    student_id = schema.TextLine(
512        title = _(u'Student Id'),
513        required = False,
514        readonly = False,
515        )
516
517    course_admitted = schema.Choice(
518        title = _(u'Admitted Course of Study'),
519        source = CertificateSource(),
520        required = False,
521        )
522
523    locked = schema.Bool(
524        title = _(u'Form locked'),
525        default = False,
526        )
527
528    @invariant
529    def course_choice(applicant):
530        if applicant.course1 == applicant.course2:
531            raise Invalid(_("2nd choice course must differ from 1st choice course."))
532        if applicant.course1 == applicant.course3:
533            raise Invalid(_("3rd choice course must differ from 1st choice course."))
534        if applicant.course2 == applicant.course3:
535            raise Invalid(_("3rd choice course must differ from 2nd choice course."))
536
537#ICustomUGApplicant['programme_type'].order = IApplicantBaseData[
538#    'reg_number'].order
539
540class ICustomPGApplicant(INigeriaPGApplicant):
541    """A postgraduate applicant.
542
543    This interface defines the least common multiple of all fields
544    in pg application forms. In customized forms, fields can be excluded by
545    adding them to the PG_OMIT* tuples.
546    """
547
548class ITranscriptApplicant(IKofaObject):
549    """A transcript applicant.
550    """
551
552    suspended = schema.Bool(
553        title = _(u'Account suspended'),
554        default = False,
555        required = False,
556        )
557
558    locked = schema.Bool(
559        title = _(u'Form locked'),
560        default = False,
561        required = False,
562        )
563
564    applicant_id = schema.TextLine(
565        title = _(u'Applicant Id'),
566        required = False,
567        readonly = False,
568        )
569
570    reg_number = TextLineChoice(
571        title = _(u'Kofa Registration Number'),
572        readonly = False,
573        required = True,
574        source = contextual_reg_num_source,
575        )
576
577    firstname = schema.TextLine(
578        title = _(u'First Name'),
579        required = True,
580        )
581
582    middlename = schema.TextLine(
583        title = _(u'Middle Name'),
584        required = False,
585        )
586
587    lastname = schema.TextLine(
588        title = _(u'Last Name (Surname)'),
589        required = True,
590        )
591
592    matric_number = schema.TextLine(
593        title = _(u'Matriculation Number'),
594        readonly = False,
595        required = True,
596        )
597
598    date_of_birth = FormattedDate(
599        title = _(u'Date of Birth'),
600        required = False,
601        #date_format = u'%d/%m/%Y', # Use grok-instance-wide default
602        show_year = True,
603        )
604
605    sex = schema.Choice(
606        title = _(u'Gender'),
607        source = GenderSource(),
608        required = True,
609        )
610
611    place_of_birth = schema.TextLine(
612        title = _(u'Place of Birth'),
613        readonly = False,
614        required = False,
615        )
616
617    nationality = schema.Choice(
618        vocabulary = nats_vocab,
619        title = _(u'Nationality'),
620        required = False,
621        )
622
623    email = schema.ASCIILine(
624        title = _(u'Email Address'),
625        required = True,
626        constraint=validate_email,
627        )
628
629    phone = PhoneNumber(
630        title = _(u'Phone'),
631        description = u'',
632        required = False,
633        )
634
635    perm_address = schema.Text(
636        title = _(u'Current Local Address'),
637        required = False,
638        readonly = False,
639        )
640
641    dispatch_address = schema.Text(
642        title = _(u'Dispatch Addresses'),
643        description = u'Addresses to which transcript should be posted.',
644        required = False,
645        readonly = False,
646        )
647
648    entry_mode = schema.Choice(
649        title = _(u'Entry Mode'),
650        source = StudyModeSource(),
651        required = False,
652        readonly = False,
653        )
654
655    entry_session = schema.Choice(
656        title = _(u'Entry Session'),
657        source = academic_sessions_vocab,
658        required = False,
659        readonly = False,
660        )
661
662    end_session = schema.Choice(
663        title = _(u'End Session'),
664        source = academic_sessions_vocab,
665        required = False,
666        readonly = False,
667        )
668
669    course_studied = schema.Choice(
670        title = _(u'Course of Study / Degree'),
671        source = CertificateSource(),
672        required = False,
673        readonly = False,
674        )
675
676    purpose = schema.TextLine(
677        title = _(u'Purpose of this Application'),
678        readonly = False,
679        required = False,
680        )
681
682    course_changed = schema.Choice(
683        title = _(u'Change of Study Course'),
684        description = u'If yes, select previous course of study.',
685        source = CertificateSource(),
686        readonly = False,
687        required = False,
688        )
689
690    change_level = schema.Choice(
691        title = _(u'Change Level'),
692        description = u'If yes, select level at which you changed course of study.',
693        source = StudyLevelSource(),
694        required = False,
695        readonly = False,
696        )
697
698    no_copies = schema.Choice(
699        title = _(u'Number of Copies'),
700        description = u'Must correspond with the number of dispatch addresses above.',
701        values=[1, 2, 3, 4],
702        required = False,
703        readonly = False,
704        default = 1,
705        )
706
707class ICertificateRequest(IKofaObject):
708    """A transcript applicant.
709    """
710
711    suspended = schema.Bool(
712        title = _(u'Account suspended'),
713        default = False,
714        required = False,
715        )
716
717    locked = schema.Bool(
718        title = _(u'Form locked'),
719        default = False,
720        required = False,
721        )
722
723    applicant_id = schema.TextLine(
724        title = _(u'Applicant Id'),
725        required = False,
726        readonly = False,
727        )
728
729    reg_number = TextLineChoice(
730        title = _(u'Kofa Registration Number'),
731        readonly = False,
732        required = True,
733        source = contextual_reg_num_source,
734        )
735
736    firstname = schema.TextLine(
737        title = _(u'First Name'),
738        required = True,
739        )
740
741    middlename = schema.TextLine(
742        title = _(u'Middle Name'),
743        required = False,
744        )
745
746    lastname = schema.TextLine(
747        title = _(u'Last Name (Surname)'),
748        required = True,
749        )
750
751    matric_number = schema.TextLine(
752        title = _(u'Matriculation Number'),
753        readonly = False,
754        required = True,
755        )
756
757    date_of_birth = FormattedDate(
758        title = _(u'Date of Birth'),
759        required = False,
760        #date_format = u'%d/%m/%Y', # Use grok-instance-wide default
761        show_year = True,
762        )
763
764    sex = schema.Choice(
765        title = _(u'Gender'),
766        source = GenderSource(),
767        required = True,
768        )
769
770    place_of_birth = schema.TextLine(
771        title = _(u'Place of Birth'),
772        readonly = False,
773        required = False,
774        )
775
776    nationality = schema.Choice(
777        vocabulary = nats_vocab,
778        title = _(u'Nationality'),
779        required = False,
780        )
781
782    email = schema.ASCIILine(
783        title = _(u'Email Address'),
784        required = True,
785        constraint=validate_email,
786        )
787
788    phone = PhoneNumber(
789        title = _(u'Phone'),
790        description = u'',
791        required = False,
792        )
793
794    entry_session = schema.Choice(
795        title = _(u'Entry Session'),
796        source = academic_sessions_vocab,
797        required = False,
798        readonly = False,
799        )
800
801    end_session = schema.Choice(
802        title = _(u'End Session'),
803        source = academic_sessions_vocab,
804        required = False,
805        readonly = False,
806        )
807
808    course_studied = schema.Choice(
809        title = _(u'Course of Study / Degree'),
810        source = CertificateSource(),
811        required = True,
812        readonly = False,
813        )
814
815    certificate_type = schema.Choice(
816        title = _(u'Certificate Type'),
817        vocabulary = certificate_types_vocab,
818        required = False,
819        )
820
821
822class IVerificationRequest(IKofaObject):
823    """A applicant asking for verification.
824    """
825
826    suspended = schema.Bool(
827        title = _(u'Account suspended'),
828        default = False,
829        required = False,
830        )
831
832    locked = schema.Bool(
833        title = _(u'Form locked'),
834        default = False,
835        required = False,
836        )
837
838    applicant_id = schema.TextLine(
839        title = _(u'Applicant Id'),
840        required = False,
841        readonly = False,
842        )
843
844    #reg_number = TextLineChoice(
845    #    title = _(u'Kofa Registration Number'),
846    #    readonly = False,
847    #    required = True,
848    #    source = contextual_reg_num_source,
849    #    )
850
851    firstname = schema.TextLine(
852        title = _(u'First Name'),
853        required = True,
854        )
855
856    middlename = schema.TextLine(
857        title = _(u'Middle Name'),
858        required = False,
859        )
860
861    lastname = schema.TextLine(
862        title = _(u'Last Name (Surname)'),
863        required = True,
864        )
865
866    sex = schema.Choice(
867        title = _(u'Gender'),
868        source = GenderSource(),
869        required = True,
870        )
871
872    email = schema.ASCIILine(
873        title = _(u'Email Address'),
874        required = True,
875        constraint=validate_email,
876        )
877
878    phone = PhoneNumber(
879        title = _(u'Phone'),
880        description = u'',
881        required = False,
882        )
883
884    matric_number = schema.TextLine(
885        title = _(u'Verification Body Reference Number'),
886        readonly = False,
887        required = True,
888        )
889
890    body_address = schema.Text(
891        title = _(u'Verification Body Address'),
892        required = True,
893        )
894
895    document_type = schema.Choice(
896        title = _(u'Document Type'),
897        vocabulary = document_types_vocab,
898        required = True,
899        )
900
901class ISendByEmailRequest(IKofaObject):
902    """A applicant asking for sending an email.
903    """
904
905    suspended = schema.Bool(
906        title = _(u'Account suspended'),
907        default = False,
908        required = False,
909        )
910
911    locked = schema.Bool(
912        title = _(u'Form locked'),
913        default = False,
914        required = False,
915        )
916
917    applicant_id = schema.TextLine(
918        title = _(u'Applicant Id'),
919        required = False,
920        readonly = False,
921        )
922
923    firstname = schema.TextLine(
924        title = _(u'First Name'),
925        required = True,
926        )
927
928    middlename = schema.TextLine(
929        title = _(u'Middle Name'),
930        required = False,
931        )
932
933    lastname = schema.TextLine(
934        title = _(u'Last Name (Surname)'),
935        required = True,
936        )
937
938    sex = schema.Choice(
939        title = _(u'Gender'),
940        source = GenderSource(),
941        required = True,
942        )
943
944    email = schema.ASCIILine(
945        title = _(u"Applicant's Email Address"),
946        required = True,
947        constraint=validate_email,
948        )
949
950    phone = PhoneNumber(
951        title = _(u'Phone'),
952        description = u'',
953        required = False,
954        )
955
956    body_address = schema.Text(
957        title = _(u'Address of Requesting Organization'),
958        required = True,
959        )
960
961    body_email = schema.ASCIILine(
962        title = _(u"Email Address of Requesting Organization"),
963        required = True,
964        constraint=validate_email,
965        )
966
967    request_type = schema.Choice(
968        title = _(u'Request Type'),
969        vocabulary = request_types_vocab,
970        required = True,
971        )
972
973    document_type = schema.Choice(
974        title = _(u'Document Type'),
975        vocabulary = document_types_vocab,
976        required = True,
977        )
978
979class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant,
980                       ITranscriptApplicant, ICertificateRequest,
981                       IVerificationRequest, ISendByEmailRequest):
982    """An interface for all types of applicants.
983
984    Attention: The ICustomPGApplicant field seetings will be overwritten
985    by ICustomPGApplicant field settings. If a field is defined
986    in both interfaces zope.schema validates only against the
987    constraints in ICustomUGApplicant. This does not affect the forms
988    since they are build on either ICustomUGApplicant or ICustomPGApplicant.
989    """
990
991    def writeLogMessage(view, comment):
992        """Adds an INFO message to the log file
993        """
994
995    def createStudent():
996        """Create a student object from applicatnt data
997        and copy applicant object.
998        """
999
1000class ICustomUGApplicantEdit(ICustomUGApplicant):
1001    """An undergraduate applicant interface for edit forms.
1002
1003    Here we can repeat the fields from base data and set the
1004    `required` and `readonly` attributes to True to further restrict
1005    the data access. Or we can allow only certain certificates to be
1006    selected by choosing the appropriate source.
1007
1008    We cannot omit fields here. This has to be done in the
1009    respective form page.
1010    """
1011
1012    #programme_type = schema.Choice(
1013    #    title = _(u'Programme Type'),
1014    #    vocabulary = programme_types_vocab,
1015    #    required = True,
1016    #    )
1017
1018    date_of_birth = FormattedDate(
1019        title = _(u'Date of Birth'),
1020        required = True,
1021        show_year = True,
1022        )
1023
1024    course1 = schema.Choice(
1025        title = _(u'1st Choice Course of Study'),
1026        source = AppCatCertificateSource(),
1027        required = True,
1028        )
1029
1030    course2 = schema.Choice(
1031        title = _(u'2nd Choice Course of Study'),
1032        source = AppCatCertificateSource(),
1033        required = True,
1034        )
1035
1036    course3 = schema.Choice(
1037        title = _(u'3rd Choice Course of Study'),
1038        source = AppCatCertificateSource(),
1039        required = True,
1040        )
1041
1042    fst_sit_fname = schema.TextLine(
1043        title = _(u'Full Name'),
1044        required = True,
1045        readonly = False,
1046        )
1047
1048    fst_sit_no = schema.TextLine(
1049        title = _(u'Exam Number'),
1050        required = True,
1051        readonly = False,
1052        )
1053
1054    fst_sit_sc_pin = schema.TextLine(
1055        title = _(u'Scratch Card Pin'),
1056        required = True,
1057        readonly = False,
1058        )
1059
1060    fst_sit_sc_serial_number = schema.TextLine(
1061        title = _(u'Scratch Card Serial Number'),
1062        required = True,
1063        readonly = False,
1064        )
1065
1066    fst_sit_date = FormattedDate(
1067        title = _(u'Exam Date'),
1068        required = True,
1069        readonly = False,
1070        show_year = True,
1071        )
1072
1073    fst_sit_type = schema.Choice(
1074        title = _(u'Exam Type'),
1075        required = True,
1076        readonly = False,
1077        vocabulary = exam_types,
1078        )
1079
1080    # course1 works only on manage pages. On edit pages course1 input is missing
1081    # and no Invalid exception is raised.
1082    # NoInputData: NoInputD...course1'
1083    # Therefore, we check and compare course1 on CustomApplicantEditFormPage.
1084    @invariant
1085    def course_choice(applicant):
1086        if applicant.course2 == applicant.course3:
1087            raise Invalid(_("3rd choice course must differ from 2nd choice course."))
1088
1089#ICustomUGApplicantEdit['programme_type'].order = ICustomUGApplicant[
1090#    'programme_type'].order
1091ICustomUGApplicantEdit['date_of_birth'].order = ICustomUGApplicant[
1092    'date_of_birth'].order
1093ICustomUGApplicantEdit['course1'].order = ICustomUGApplicant[
1094    'course1'].order
1095ICustomUGApplicantEdit['course2'].order = ICustomUGApplicant[
1096    'course2'].order
1097ICustomUGApplicantEdit['course3'].order = ICustomUGApplicant[
1098    'course3'].order
1099ICustomUGApplicantEdit['fst_sit_fname'].order = ICustomUGApplicant[
1100    'fst_sit_fname'].order
1101ICustomUGApplicantEdit['fst_sit_no'].order = ICustomUGApplicant[
1102    'fst_sit_no'].order
1103ICustomUGApplicantEdit['fst_sit_sc_pin'].order = ICustomUGApplicant[
1104    'fst_sit_sc_pin'].order
1105ICustomUGApplicantEdit['fst_sit_sc_serial_number'].order = ICustomUGApplicant[
1106    'fst_sit_sc_serial_number'].order
1107ICustomUGApplicantEdit['fst_sit_date'].order = ICustomUGApplicant[
1108    'fst_sit_date'].order
1109ICustomUGApplicantEdit['fst_sit_type'].order = ICustomUGApplicant[
1110    'fst_sit_type'].order
1111
1112class ICustomPGApplicantEdit(INigeriaPGApplicantEdit):
1113    """A postgraduate applicant interface for editing.
1114
1115    Here we can repeat the fields from base data and set the
1116    `required` and `readonly` attributes to True to further restrict
1117    the data access. Or we can allow only certain certificates to be
1118    selected by choosing the appropriate source.
1119
1120    We cannot omit fields here. This has to be done in the
1121    respective form page.
1122    """
1123
1124class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
1125    """An applicant payment via payment gateways.
1126
1127    """
1128
1129class IPUTMEApplicantEdit(IPUTMEApplicantEdit):
1130    """An undergraduate applicant interface for editing.
1131
1132    Here we can repeat the fields from base data and set the
1133    `required` and `readonly` attributes to True to further restrict
1134    the data access. Or we can allow only certain certificates to be
1135    selected by choosing the appropriate source.
1136
1137    We cannot omit fields here. This has to be done in the
1138    respective form page.
1139    """
1140
1141class ICustomApplicantUpdateByRegNo(ICustomApplicant):
1142    """Representation of an applicant.
1143
1144    Skip regular reg_number validation if reg_number is used for finding
1145    the applicant object.
1146    """
1147
1148    reg_number = schema.TextLine(
1149        title = u'Registration Number',
1150        required = False,
1151        )
1152
1153
1154
1155
Note: See TracBrowser for help on using the repository browser.