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

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

Add gender field.

  • Property svn:keywords set to Id
File size: 29.2 KB
Line 
1## $Id: interfaces.py 15791 2019-11-10 19:54:03Z 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    matric_number = schema.TextLine(
879        title = _(u'Verification Body Reference Number'),
880        readonly = False,
881        required = True,
882        )
883
884    body_address = schema.Text(
885        title = _(u'Verification Body Address'),
886        required = True,
887        )
888
889    document_type = schema.Choice(
890        title = _(u'Document Type'),
891        vocabulary = document_types_vocab,
892        required = True,
893        )
894
895class ISendByEmailRequest(IKofaObject):
896    """A applicant asking for sending an email.
897    """
898
899    suspended = schema.Bool(
900        title = _(u'Account suspended'),
901        default = False,
902        required = False,
903        )
904
905    locked = schema.Bool(
906        title = _(u'Form locked'),
907        default = False,
908        required = False,
909        )
910
911    applicant_id = schema.TextLine(
912        title = _(u'Applicant Id'),
913        required = False,
914        readonly = False,
915        )
916
917    firstname = schema.TextLine(
918        title = _(u'First Name'),
919        required = True,
920        )
921
922    middlename = schema.TextLine(
923        title = _(u'Middle Name'),
924        required = False,
925        )
926
927    lastname = schema.TextLine(
928        title = _(u'Last Name (Surname)'),
929        required = True,
930        )
931
932    sex = schema.Choice(
933        title = _(u'Gender'),
934        source = GenderSource(),
935        required = True,
936        )
937
938    email = schema.ASCIILine(
939        title = _(u"Applicant's Email Address"),
940        required = True,
941        constraint=validate_email,
942        )
943
944    body_address = schema.Text(
945        title = _(u'Address of Requesting Organization'),
946        required = True,
947        )
948
949    body_email = schema.ASCIILine(
950        title = _(u"Email Address of Requesting Organization"),
951        required = True,
952        constraint=validate_email,
953        )
954
955    request_type = schema.Choice(
956        title = _(u'Request Type'),
957        vocabulary = request_types_vocab,
958        required = True,
959        )
960
961    document_type = schema.Choice(
962        title = _(u'Document Type'),
963        vocabulary = document_types_vocab,
964        required = True,
965        )
966
967class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant,
968                       ITranscriptApplicant, ICertificateRequest,
969                       IVerificationRequest, ISendByEmailRequest):
970    """An interface for all types of applicants.
971
972    Attention: The ICustomPGApplicant field seetings will be overwritten
973    by ICustomPGApplicant field settings. If a field is defined
974    in both interfaces zope.schema validates only against the
975    constraints in ICustomUGApplicant. This does not affect the forms
976    since they are build on either ICustomUGApplicant or ICustomPGApplicant.
977    """
978
979    def writeLogMessage(view, comment):
980        """Adds an INFO message to the log file
981        """
982
983    def createStudent():
984        """Create a student object from applicatnt data
985        and copy applicant object.
986        """
987
988class ICustomUGApplicantEdit(ICustomUGApplicant):
989    """An undergraduate applicant interface for edit forms.
990
991    Here we can repeat the fields from base data and set the
992    `required` and `readonly` attributes to True to further restrict
993    the data access. Or we can allow only certain certificates to be
994    selected by choosing the appropriate source.
995
996    We cannot omit fields here. This has to be done in the
997    respective form page.
998    """
999
1000    #programme_type = schema.Choice(
1001    #    title = _(u'Programme Type'),
1002    #    vocabulary = programme_types_vocab,
1003    #    required = True,
1004    #    )
1005
1006    date_of_birth = FormattedDate(
1007        title = _(u'Date of Birth'),
1008        required = True,
1009        show_year = True,
1010        )
1011
1012    course1 = schema.Choice(
1013        title = _(u'1st Choice Course of Study'),
1014        source = AppCatCertificateSource(),
1015        required = True,
1016        )
1017
1018    course2 = schema.Choice(
1019        title = _(u'2nd Choice Course of Study'),
1020        source = AppCatCertificateSource(),
1021        required = True,
1022        )
1023
1024    course3 = schema.Choice(
1025        title = _(u'3rd Choice Course of Study'),
1026        source = AppCatCertificateSource(),
1027        required = True,
1028        )
1029
1030    fst_sit_fname = schema.TextLine(
1031        title = _(u'Full Name'),
1032        required = True,
1033        readonly = False,
1034        )
1035
1036    fst_sit_no = schema.TextLine(
1037        title = _(u'Exam Number'),
1038        required = True,
1039        readonly = False,
1040        )
1041
1042    fst_sit_sc_pin = schema.TextLine(
1043        title = _(u'Scratch Card Pin'),
1044        required = True,
1045        readonly = False,
1046        )
1047
1048    fst_sit_sc_serial_number = schema.TextLine(
1049        title = _(u'Scratch Card Serial Number'),
1050        required = True,
1051        readonly = False,
1052        )
1053
1054    fst_sit_date = FormattedDate(
1055        title = _(u'Exam Date'),
1056        required = True,
1057        readonly = False,
1058        show_year = True,
1059        )
1060
1061    fst_sit_type = schema.Choice(
1062        title = _(u'Exam Type'),
1063        required = True,
1064        readonly = False,
1065        vocabulary = exam_types,
1066        )
1067
1068    # course1 works only on manage pages. On edit pages course1 input is missing
1069    # and no Invalid exception is raised.
1070    # NoInputData: NoInputD...course1'
1071    # Therefore, we check and compare course1 on CustomApplicantEditFormPage.
1072    @invariant
1073    def course_choice(applicant):
1074        if applicant.course2 == applicant.course3:
1075            raise Invalid(_("3rd choice course must differ from 2nd choice course."))
1076
1077#ICustomUGApplicantEdit['programme_type'].order = ICustomUGApplicant[
1078#    'programme_type'].order
1079ICustomUGApplicantEdit['date_of_birth'].order = ICustomUGApplicant[
1080    'date_of_birth'].order
1081ICustomUGApplicantEdit['course1'].order = ICustomUGApplicant[
1082    'course1'].order
1083ICustomUGApplicantEdit['course2'].order = ICustomUGApplicant[
1084    'course2'].order
1085ICustomUGApplicantEdit['course3'].order = ICustomUGApplicant[
1086    'course3'].order
1087ICustomUGApplicantEdit['fst_sit_fname'].order = ICustomUGApplicant[
1088    'fst_sit_fname'].order
1089ICustomUGApplicantEdit['fst_sit_no'].order = ICustomUGApplicant[
1090    'fst_sit_no'].order
1091ICustomUGApplicantEdit['fst_sit_sc_pin'].order = ICustomUGApplicant[
1092    'fst_sit_sc_pin'].order
1093ICustomUGApplicantEdit['fst_sit_sc_serial_number'].order = ICustomUGApplicant[
1094    'fst_sit_sc_serial_number'].order
1095ICustomUGApplicantEdit['fst_sit_date'].order = ICustomUGApplicant[
1096    'fst_sit_date'].order
1097ICustomUGApplicantEdit['fst_sit_type'].order = ICustomUGApplicant[
1098    'fst_sit_type'].order
1099
1100class ICustomPGApplicantEdit(INigeriaPGApplicantEdit):
1101    """A postgraduate applicant interface for editing.
1102
1103    Here we can repeat the fields from base data and set the
1104    `required` and `readonly` attributes to True to further restrict
1105    the data access. Or we can allow only certain certificates to be
1106    selected by choosing the appropriate source.
1107
1108    We cannot omit fields here. This has to be done in the
1109    respective form page.
1110    """
1111
1112class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
1113    """An applicant payment via payment gateways.
1114
1115    """
1116
1117class IPUTMEApplicantEdit(IPUTMEApplicantEdit):
1118    """An undergraduate applicant interface for editing.
1119
1120    Here we can repeat the fields from base data and set the
1121    `required` and `readonly` attributes to True to further restrict
1122    the data access. Or we can allow only certain certificates to be
1123    selected by choosing the appropriate source.
1124
1125    We cannot omit fields here. This has to be done in the
1126    respective form page.
1127    """
1128
1129class ICustomApplicantUpdateByRegNo(ICustomApplicant):
1130    """Representation of an applicant.
1131
1132    Skip regular reg_number validation if reg_number is used for finding
1133    the applicant object.
1134    """
1135
1136    reg_number = schema.TextLine(
1137        title = u'Registration Number',
1138        required = False,
1139        )
1140
1141
1142
1143
Note: See TracBrowser for help on using the repository browser.