source: main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/interfaces.py @ 14587

Last change on this file since 14587 was 14274, checked in by Henrik Bettermann, 8 years ago

Add provisionally_cleared field an allow students to edit
their clearance data if set.

  • Property svn:keywords set to Id
File size: 14.5 KB
RevLine 
[8862]1## $Id: interfaces.py 14274 2016-11-15 09:12:51Z henrik $
2##
3## Copyright (C) 2012 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##
18from zope import schema
[12503]19from zope.interface import Attribute, invariant, Invalid
[8862]20from waeup.kofa.schema import TextLineChoice
21from waeup.kofa.interfaces import SimpleKofaVocabulary, academic_sessions_vocab
[9567]22from waeup.kofa.schema import FormattedDate, PhoneNumber
[8862]23from waeup.kofa.schoolgrades import ResultEntryField
[13734]24from waeup.kofa.students.vocabularies import nats_vocab, StudyLevelSource
[8862]25from waeup.kofa.students.interfaces import (
26    IStudentBase, IUGStudentClearance, IPGStudentClearance,
27    IStudentPersonal, IStudentNavigation, IStudentStudyLevel,
28    IStudentStudyCourse, ICourseTicket
29    )
30from waeup.kofa.students.vocabularies import (
31    nats_vocab, contextual_reg_num_source)
32from kofacustom.nigeria.interfaces import (
33    high_qual, high_grade, exam_types, LGASource)
34from kofacustom.nigeria.interfaces import MessageFactory as _
[8863]35from kofacustom.nigeria.payments.interfaces import INigeriaOnlinePayment
[8862]36
37
[8863]38class INigeriaStudentBase(IStudentBase):
[8862]39    """Representation of student base data.
40
41    """
42
43    reg_number = TextLineChoice(
44        title = _(u'Registration Number'),
45        required = False,
46        readonly = False,
47        source = contextual_reg_num_source,
48        )
49
[8966]50    is_staff = schema.Bool(
51        title = _(u'Staff Member'),
52        required = False,
53        readonly = False,
54        default = False,
55        )
56
[13620]57    financially_cleared_by = schema.TextLine(
58        title = _(u'Financially Cleared by'),
59        default = None,
60        required = False,
61        )
62
63    financial_clearance_date = schema.Datetime(
64        title = _(u'Financial Clearance Date'),
65        required = False,
66        readonly = False,
67        )
68
[14274]69    provisionally_cleared = schema.Bool(
70        title = _(u'Provisionally Cleared'),
71        default = False,
72        required = False,
73        description = u'Student will be able to edit clearance data if set.',
74        )
75
[8949]76INigeriaStudentBase['reg_number'].order = IStudentBase[
77    'reg_number'].order
78
[8862]79
[8863]80class INigeriaUGStudentClearance(IUGStudentClearance):
[8862]81    """Representation of ug student clearance data.
82
83    """
[9535]84    officer_comment = schema.Text(
85        title = _(u"Officer's Comment"),
86        required = False,
87        )
88
[12392]89    physical_clearance_date = schema.TextLine(
[12120]90        title = _(u"Physical Clearance Date"),
[12107]91        required = False,
92        )
93
[9535]94    clr_code = schema.TextLine(
95        title = _(u'CLR Activation Code'),
96        required = False,
97        readonly = False,
98        )
99
[8862]100    date_of_birth = FormattedDate(
101        title = _(u'Date of Birth'),
102        required = False,
103        show_year = True,
104        )
105
106    nationality = schema.Choice(
107        source = nats_vocab,
108        title = _(u'Nationality'),
[9036]109        required = True,
[8862]110        )
111
112    lga = schema.Choice(
113        source = LGASource(),
[10690]114        title = _(u'State / LGA'),
[8862]115        required = False,
116        )
117
118    def_adm = schema.Bool(
[14101]119        title = _(u'Deferment of Admission'),
[8862]120        required = False,
121        readonly = False,
[12416]122        default = False,
[8862]123        )
124
125    fst_sit_fname = schema.TextLine(
126        title = _(u'Full Name'),
127        required = False,
128        readonly = False,
129        )
130    fst_sit_no = schema.TextLine(
131        title = _(u'Exam Number'),
132        required = False,
133        readonly = False,
134        )
135
136    fst_sit_date = FormattedDate(
137        title = _(u'Exam Date'),
138        required = False,
139        readonly = False,
140        show_year = True,
141        )
142
143    fst_sit_type = schema.Choice(
144        title = _(u'Exam Type'),
145        required = False,
146        readonly = False,
147        vocabulary = exam_types,
148        )
149
150    fst_sit_results = schema.List(
151        title = _(u'Exam Results'),
152        value_type = ResultEntryField(),
153        required = False,
154        readonly = False,
[14010]155        defaultFactory=list,
[8862]156        )
157
158    scd_sit_fname = schema.TextLine(
159        title = _(u'Full Name'),
160        required = False,
161        readonly = False,
162        )
163    scd_sit_no = schema.TextLine(
164        title = _(u'Exam Number'),
165        required = False,
166        readonly = False,
167        )
168
169    scd_sit_date = FormattedDate(
170        title = _(u'Exam Date'),
171        required = False,
172        readonly = False,
173        show_year = True,
174        )
175
176    scd_sit_type = schema.Choice(
177        title = _(u'Exam Type'),
178        required = False,
179        readonly = False,
180        vocabulary = exam_types,
181        )
182
183    scd_sit_results = schema.List(
184        title = _(u'Exam Results'),
185        value_type = ResultEntryField(),
186        required = False,
187        readonly = False,
[14010]188        defaultFactory=list,
[8862]189        )
190
191    alr_fname = schema.TextLine(
192        title = _(u'Full Name'),
193        required = False,
194        readonly = False,
195        )
196    alr_no = schema.TextLine(
197        title = _(u'Exam Number'),
198        required = False,
199        readonly = False,
200        )
201
202    alr_date = FormattedDate(
203        title = _(u'Exam Date'),
204        required = False,
205        readonly = False,
206        show_year = True,
207        )
208
209    alr_results = schema.List(
210        title = _(u'Exam Results'),
211        value_type = ResultEntryField(),
212        required = False,
213        readonly = False,
[14010]214        defaultFactory=list,
[8862]215        )
216
217    hq_type = schema.Choice(
218        title = _(u'Qualification Obtained'),
219        required = False,
220        readonly = False,
221        vocabulary = high_qual,
222        )
223
[9552]224    hq_fname = schema.TextLine(
225        title = _(u'Full Name'),
226        required = False,
227        readonly = False,
228        )
229
[8862]230    hq_matric_no = schema.TextLine(
231        title = _(u'Former Matric Number'),
232        required = False,
233        readonly = False,
234        )
235
236    hq_degree = schema.Choice(
237        title = _(u'Class of Degree'),
238        required = False,
239        readonly = False,
240        vocabulary = high_grade,
241        )
242
243    hq_school = schema.TextLine(
244        title = _(u'Institution Attended'),
245        required = False,
246        readonly = False,
247        )
248
249    hq_session = schema.TextLine(
250        title = _(u'Years Attended'),
251        required = False,
252        readonly = False,
253        )
254
255    hq_disc = schema.TextLine(
256        title = _(u'Discipline'),
257        required = False,
258        readonly = False,
259        )
260
[12503]261    @invariant
262    def check_lga_nationality(student):
263        if student.nationality != 'NG' and student.lga not in ('foreigner', None):
264            raise Invalid(_('Nationalty and LGA are contradictory.'))
265        if student.nationality == 'NG' and student.lga == 'foreigner':
266            raise Invalid(_('Nationalty and LGA are contradictory.'))
[8862]267
[12503]268
[8863]269class INigeriaPGStudentClearance(INigeriaUGStudentClearance):
[8862]270    """Representation of pg student clearance data.
271
272    """
273
274    hq2_type = schema.Choice(
275        title = _(u'Qualification Obtained'),
276        required = False,
277        readonly = False,
278        vocabulary = high_qual,
279        )
280
281    hq2_matric_no = schema.TextLine(
282        title = _(u'Former Matric Number'),
283        required = False,
284        readonly = False,
285        )
286
287    hq2_degree = schema.Choice(
288        title = _(u'Class of Degree'),
289        required = False,
290        readonly = False,
291        vocabulary = high_grade,
292        )
293
294    hq2_school = schema.TextLine(
295        title = _(u'Institution Attended'),
296        required = False,
297        readonly = False,
298        )
299
300    hq2_session = schema.TextLine(
301        title = _(u'Years Attended'),
302        required = False,
303        readonly = False,
304        )
305
306    hq2_disc = schema.TextLine(
307        title = _(u'Discipline'),
308        required = False,
309        readonly = False,
310        )
311
312    nysc_year = schema.Int(
313        title = _(u'Nysc Year'),
314        required = False,
315        readonly = False,
316        )
317
[8946]318    nysc_location = schema.TextLine(
319        title = _(u'Nysc Location'),
320        required = False,
321        )
322
[8862]323    nysc_lga = schema.Choice(
324        source = LGASource(),
[8946]325        title = _(u'Nysc LGA'),
[8862]326        required = False,
327        )
328
329    employer = schema.TextLine(
330        title = _(u'Employer'),
331        required = False,
332        readonly = False,
333        )
334
335    emp_position = schema.TextLine(
336        title = _(u'Employer Position'),
337        required = False,
338        readonly = False,
339        )
340
341    emp_start = FormattedDate(
342        title = _(u'Start Date'),
343        required = False,
344        readonly = False,
345        show_year = True,
346        )
347
348    emp_end = FormattedDate(
349        title = _(u'End Date'),
350        required = False,
351        readonly = False,
352        show_year = True,
353        )
354
355    emp_reason = schema.TextLine(
356        title = _(u'Reason for Leaving'),
357        required = False,
358        readonly = False,
359        )
360
361    employer2 = schema.TextLine(
362        title = _(u'2nd Employer'),
363        required = False,
364        readonly = False,
365        )
366
367    emp2_position = schema.TextLine(
368        title = _(u'2nd Employer Position'),
369        required = False,
370        readonly = False,
371        )
372
373    emp2_start = FormattedDate(
374        title = _(u'Start Date'),
375        required = False,
376        readonly = False,
377        show_year = True,
378        )
379    emp2_end = FormattedDate(
380        title = _(u'End Date'),
381        required = False,
382        readonly = False,
383        show_year = True,
384        )
385
386    emp2_reason = schema.TextLine(
387        title = _(u'Reason for Leaving'),
388        required = False,
389        readonly = False,
390        )
391
392    former_matric = schema.TextLine(
393        title = _(u'If yes, matric number'),
394        required = False,
395        readonly = False,
396        )
397
[9564]398class INigeriaStudentPersonal(IStudentPersonal):
399    """Student personal data.
[8862]400
[9564]401    """
402
403    is_foreigner = Attribute('True if student is non-Nigerian')
404
405    next_kin_name = schema.TextLine(
406        title = _(u'Next of Kin Name'),
407        required = False,
408        readonly = False,
409        )
410
411    next_kin_relation = schema.TextLine(
412        title = _(u'Next of Kin Relationship'),
413        required = False,
414        readonly = False,
415        )
416
417    next_kin_address = schema.Text(
418        title = _(u'Next of Kin Address'),
419        required = False,
420        readonly = False,
421        )
422
[9567]423    next_kin_phone = PhoneNumber(
424        title = _(u'Next of Kin Phone'),
425        description = u'',
426        required = False,
427        readonly = False,
428        )
429
[9564]430    marit_stat = schema.Choice(
[12972]431        title = u'Marital Status',
[9564]432        default = 'unmarried',
433        required = False,
434        vocabulary = SimpleKofaVocabulary(
435            (_('Unmarried'), 'unmarried'),
436            (_('Married'), 'married'),)
437        )
438
439    religion = schema.Choice(
440        title = u'Religion',
441        default = 'no_say',
442        required = False,
443        vocabulary = SimpleKofaVocabulary(
444            (_('Muslim'), 'muslim'),
445            (_('Christian'), 'christian'),
446            (_('Others'), 'others'),
447            (_('Prefer not to say'), 'no_say'),)
448        )
449
450    disabled = schema.Bool(
451        title = u'Disabled',
452        default = False,
453        required = False,
454        )
455
456
[8863]457class INigeriaStudent(INigeriaStudentBase,INigeriaUGStudentClearance,
458    INigeriaPGStudentClearance,INigeriaStudentPersonal):
[8862]459    """Representation of a student.
460
461    """
462
[9564]463class INigeriaStudentPersonalEdit(INigeriaStudentPersonal):
464    """Interface for editing personal data by students.
465
466    Here we can repeat the fields from IStudentPersonal and set the
467    `required` if necessary.
468    """
469
470    perm_address = schema.Text(
471        title = _(u'Permanent Address'),
472        required = True,
473        )
474
475    next_kin_name = schema.TextLine(
476        title = _(u'Next of Kin Name'),
477        required = True,
478        readonly = False,
479        )
480
481    next_kin_relation = schema.TextLine(
482        title = _(u'Next of Kin Relationship'),
483        required = True,
484        readonly = False,
485        )
486
487    next_kin_address = schema.Text(
488        title = _(u'Next of Kin Address'),
489        required = True,
490        readonly = False,
491        )
492
[9567]493    next_kin_phone = PhoneNumber(
494        title = _(u'Next of Kin Phone'),
495        description = u'',
496        required = True,
497        readonly = False,
498        )
499
500INigeriaStudentPersonalEdit['perm_address'].order = INigeriaStudentPersonal[
501    'perm_address'].order
[9564]502INigeriaStudentPersonalEdit['next_kin_name'].order = INigeriaStudentPersonal[
503    'next_kin_name'].order
504INigeriaStudentPersonalEdit['next_kin_relation'].order = INigeriaStudentPersonal[
505    'next_kin_relation'].order
506INigeriaStudentPersonalEdit['next_kin_address'].order = INigeriaStudentPersonal[
507    'next_kin_address'].order
[9567]508INigeriaStudentPersonalEdit['next_kin_phone'].order = INigeriaStudentPersonal[
509    'next_kin_phone'].order
[9564]510
[8863]511class INigeriaStudentStudyCourse(IStudentStudyCourse):
[8862]512    """A container for student study levels.
513
514    """
515
[8863]516class INigeriaStudentStudyLevel(IStudentStudyLevel):
[8862]517    """A container for course tickets.
518
519    """
520
[8863]521class INigeriaStudentOnlinePayment(INigeriaOnlinePayment):
[8862]522    """A student payment via payment gateways.
523
524    This Interface does not inherit from IStudentOnlinePayment.
525    Thus all fields from IStudentOnlinePayment have to be repeated here.
526    """
527
[13623]528    formatted_p_date = Attribute("Formatted pyment date")
529
[9471]530    p_current = schema.Bool(
531        title = _(u'Current Session Payment'),
532        default = True,
533        required = False,
534        )
535
[13734]536    p_level = schema.Choice(
[8862]537        title = _(u'Payment Level'),
[13734]538        source = StudyLevelSource(),
[8862]539        required = False,
540        )
541
[8863]542INigeriaStudentOnlinePayment['p_level'].order = INigeriaStudentOnlinePayment[
[8862]543    'p_session'].order
544
[8863]545class INigeriaCourseTicket(ICourseTicket):
[8862]546    """A course ticket.
547
548    """
549
[8863]550class INigeriaStudentUpdateByRegNo(INigeriaStudent):
[8862]551    """Representation of a student. Skip regular reg_number validation.
552
553    """
554    reg_number = schema.TextLine(
555        title = _(u'Registration Number'),
556        required = False,
557        )
558
[8863]559class INigeriaStudentUpdateByMatricNo(INigeriaStudent):
[8862]560    """Representation of a student. Skip regular matric_number validation.
561
562    """
563    matric_number = schema.TextLine(
564        title = _(u'Matriculation Number'),
565        required = False,
566        )
Note: See TracBrowser for help on using the repository browser.