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

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

Check transcript application id before submission.

  • Property svn:keywords set to Id
File size: 31.3 KB
Line 
1## $Id: interfaces.py 15954 2020-01-25 15:22:09Z 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'Application 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'Application 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'Application 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 IFedexRequest(IKofaObject):
902    """A applicant requests payment for courier.
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'Application Id'),
919        required = False,
920        readonly = False,
921        )
922
923    trans_id = schema.TextLine(
924        title = _(u'Transcript Application Id'),
925        required = True,
926        readonly = False,
927        )
928
929    #reg_number = TextLineChoice(
930    #    title = _(u'Kofa Registration Number'),
931    #    readonly = False,
932    #    required = True,
933    #    source = contextual_reg_num_source,
934    #    )
935
936    firstname = schema.TextLine(
937        title = _(u'First Name'),
938        required = True,
939        )
940
941    middlename = schema.TextLine(
942        title = _(u'Middle Name'),
943        required = False,
944        )
945
946    lastname = schema.TextLine(
947        title = _(u'Last Name (Surname)'),
948        required = True,
949        )
950
951    sex = schema.Choice(
952        title = _(u'Gender'),
953        source = GenderSource(),
954        required = True,
955        )
956
957    email = schema.ASCIILine(
958        title = _(u'Email Address'),
959        required = True,
960        constraint=validate_email,
961        )
962
963    phone = PhoneNumber(
964        title = _(u'Phone'),
965        description = u'',
966        required = False,
967        )
968
969    matric_number = schema.TextLine(
970        title = _(u'WES Reference Number (where applicable)'),
971        readonly = False,
972        required = False,
973        )
974
975    dispatch_address = schema.Text(
976        title = _(u'Dispatch Address'),
977        required = True,
978        )
979
980class ISendByEmailRequest(IKofaObject):
981    """A applicant asking for sending an email.
982    """
983
984    suspended = schema.Bool(
985        title = _(u'Account suspended'),
986        default = False,
987        required = False,
988        )
989
990    locked = schema.Bool(
991        title = _(u'Form locked'),
992        default = False,
993        required = False,
994        )
995
996    applicant_id = schema.TextLine(
997        title = _(u'Applicant Id'),
998        required = False,
999        readonly = False,
1000        )
1001
1002    firstname = schema.TextLine(
1003        title = _(u'First Name'),
1004        required = True,
1005        )
1006
1007    middlename = schema.TextLine(
1008        title = _(u'Middle Name'),
1009        required = False,
1010        )
1011
1012    lastname = schema.TextLine(
1013        title = _(u'Last Name (Surname)'),
1014        required = True,
1015        )
1016
1017    sex = schema.Choice(
1018        title = _(u'Gender'),
1019        source = GenderSource(),
1020        required = True,
1021        )
1022
1023    email = schema.ASCIILine(
1024        title = _(u"Applicant's Email Address"),
1025        required = True,
1026        constraint=validate_email,
1027        )
1028
1029    phone = PhoneNumber(
1030        title = _(u'Phone'),
1031        description = u'',
1032        required = False,
1033        )
1034
1035    body_address = schema.Text(
1036        title = _(u'Address of Requesting Organization'),
1037        required = True,
1038        )
1039
1040    body_email = schema.ASCIILine(
1041        title = _(u"Email Address of Requesting Organization"),
1042        required = True,
1043        constraint=validate_email,
1044        )
1045
1046    request_type = schema.Choice(
1047        title = _(u'Request Type'),
1048        vocabulary = request_types_vocab,
1049        required = True,
1050        )
1051
1052    document_type = schema.Choice(
1053        title = _(u'Document Type'),
1054        vocabulary = document_types_vocab,
1055        required = True,
1056        )
1057
1058class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant,
1059                       ITranscriptApplicant, ICertificateRequest,
1060                       IVerificationRequest, ISendByEmailRequest,
1061                       IFedexRequest):
1062    """An interface for all types of applicants.
1063
1064    Attention: The ICustomPGApplicant field seetings will be overwritten
1065    by ICustomPGApplicant field settings. If a field is defined
1066    in both interfaces zope.schema validates only against the
1067    constraints in ICustomUGApplicant. This does not affect the forms
1068    since they are build on either ICustomUGApplicant or ICustomPGApplicant.
1069    """
1070
1071    def writeLogMessage(view, comment):
1072        """Adds an INFO message to the log file
1073        """
1074
1075    def createStudent():
1076        """Create a student object from applicatnt data
1077        and copy applicant object.
1078        """
1079
1080class ICustomUGApplicantEdit(ICustomUGApplicant):
1081    """An undergraduate applicant interface for edit forms.
1082
1083    Here we can repeat the fields from base data and set the
1084    `required` and `readonly` attributes to True to further restrict
1085    the data access. Or we can allow only certain certificates to be
1086    selected by choosing the appropriate source.
1087
1088    We cannot omit fields here. This has to be done in the
1089    respective form page.
1090    """
1091
1092    #programme_type = schema.Choice(
1093    #    title = _(u'Programme Type'),
1094    #    vocabulary = programme_types_vocab,
1095    #    required = True,
1096    #    )
1097
1098    date_of_birth = FormattedDate(
1099        title = _(u'Date of Birth'),
1100        required = True,
1101        show_year = True,
1102        )
1103
1104    course1 = schema.Choice(
1105        title = _(u'1st Choice Course of Study'),
1106        source = AppCatCertificateSource(),
1107        required = True,
1108        )
1109
1110    course2 = schema.Choice(
1111        title = _(u'2nd Choice Course of Study'),
1112        source = AppCatCertificateSource(),
1113        required = True,
1114        )
1115
1116    course3 = schema.Choice(
1117        title = _(u'3rd Choice Course of Study'),
1118        source = AppCatCertificateSource(),
1119        required = True,
1120        )
1121
1122    fst_sit_fname = schema.TextLine(
1123        title = _(u'Full Name'),
1124        required = True,
1125        readonly = False,
1126        )
1127
1128    fst_sit_no = schema.TextLine(
1129        title = _(u'Exam Number'),
1130        required = True,
1131        readonly = False,
1132        )
1133
1134    fst_sit_sc_pin = schema.TextLine(
1135        title = _(u'Scratch Card Pin'),
1136        required = True,
1137        readonly = False,
1138        )
1139
1140    fst_sit_sc_serial_number = schema.TextLine(
1141        title = _(u'Scratch Card Serial Number'),
1142        required = True,
1143        readonly = False,
1144        )
1145
1146    fst_sit_date = FormattedDate(
1147        title = _(u'Exam Date'),
1148        required = True,
1149        readonly = False,
1150        show_year = True,
1151        )
1152
1153    fst_sit_type = schema.Choice(
1154        title = _(u'Exam Type'),
1155        required = True,
1156        readonly = False,
1157        vocabulary = exam_types,
1158        )
1159
1160    # course1 works only on manage pages. On edit pages course1 input is missing
1161    # and no Invalid exception is raised.
1162    # NoInputData: NoInputD...course1'
1163    # Therefore, we check and compare course1 on CustomApplicantEditFormPage.
1164    @invariant
1165    def course_choice(applicant):
1166        if applicant.course2 == applicant.course3:
1167            raise Invalid(_("3rd choice course must differ from 2nd choice course."))
1168
1169#ICustomUGApplicantEdit['programme_type'].order = ICustomUGApplicant[
1170#    'programme_type'].order
1171ICustomUGApplicantEdit['date_of_birth'].order = ICustomUGApplicant[
1172    'date_of_birth'].order
1173ICustomUGApplicantEdit['course1'].order = ICustomUGApplicant[
1174    'course1'].order
1175ICustomUGApplicantEdit['course2'].order = ICustomUGApplicant[
1176    'course2'].order
1177ICustomUGApplicantEdit['course3'].order = ICustomUGApplicant[
1178    'course3'].order
1179ICustomUGApplicantEdit['fst_sit_fname'].order = ICustomUGApplicant[
1180    'fst_sit_fname'].order
1181ICustomUGApplicantEdit['fst_sit_no'].order = ICustomUGApplicant[
1182    'fst_sit_no'].order
1183ICustomUGApplicantEdit['fst_sit_sc_pin'].order = ICustomUGApplicant[
1184    'fst_sit_sc_pin'].order
1185ICustomUGApplicantEdit['fst_sit_sc_serial_number'].order = ICustomUGApplicant[
1186    'fst_sit_sc_serial_number'].order
1187ICustomUGApplicantEdit['fst_sit_date'].order = ICustomUGApplicant[
1188    'fst_sit_date'].order
1189ICustomUGApplicantEdit['fst_sit_type'].order = ICustomUGApplicant[
1190    'fst_sit_type'].order
1191
1192class ICustomPGApplicantEdit(INigeriaPGApplicantEdit):
1193    """A postgraduate applicant interface for editing.
1194
1195    Here we can repeat the fields from base data and set the
1196    `required` and `readonly` attributes to True to further restrict
1197    the data access. Or we can allow only certain certificates to be
1198    selected by choosing the appropriate source.
1199
1200    We cannot omit fields here. This has to be done in the
1201    respective form page.
1202    """
1203
1204class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
1205    """An applicant payment via payment gateways.
1206
1207    """
1208
1209class IPUTMEApplicantEdit(IPUTMEApplicantEdit):
1210    """An undergraduate applicant interface for editing.
1211
1212    Here we can repeat the fields from base data and set the
1213    `required` and `readonly` attributes to True to further restrict
1214    the data access. Or we can allow only certain certificates to be
1215    selected by choosing the appropriate source.
1216
1217    We cannot omit fields here. This has to be done in the
1218    respective form page.
1219    """
1220
1221class ICustomApplicantUpdateByRegNo(ICustomApplicant):
1222    """Representation of an applicant.
1223
1224    Skip regular reg_number validation if reg_number is used for finding
1225    the applicant object.
1226    """
1227
1228    reg_number = schema.TextLine(
1229        title = u'Registration Number',
1230        required = False,
1231        )
1232
1233
1234
1235
Note: See TracBrowser for help on using the repository browser.