source: main/waeup.uniben/trunk/src/waeup/uniben/students/interfaces.py @ 16681

Last change on this file since 16681 was 16509, checked in by Henrik Bettermann, 4 years ago

Allow different course gradings according to new course ticket attribute 'grading_sys'.

  • Property svn:keywords set to Id
File size: 8.7 KB
Line 
1## $Id: interfaces.py 16509 2021-06-16 12:52:36Z 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##
18
19from zope import schema
20from waeup.kofa.interfaces import (
21    validate_email, IKofaObject,
22    academic_sessions_vocab)
23from waeup.kofa.students.vocabularies import StudyLevelSource
24from kofacustom.nigeria.interfaces import GradingSystemSource
25from kofacustom.nigeria.students.interfaces import (
26    INigeriaStudentBase, INigeriaUGStudentClearance, INigeriaPGStudentClearance,
27    INigeriaStudentPersonal, INigeriaStudentPersonalEdit,
28    INigeriaStudentStudyLevel,
29    INigeriaStudentStudyCourse, INigeriaCourseTicket,
30    INigeriaStudentUpdateByRegNo, INigeriaStudentUpdateByMatricNo,
31    )
32from waeup.uniben.payments.interfaces import ICustomOnlinePayment
33from waeup.uniben.interfaces import MessageFactory as _
34
35
36class ICustomStudentBase(INigeriaStudentBase):
37    """Representation of student base data.
38    """
39
40    library = schema.Bool(
41        title = _(u'Library Id Card'),
42        default = False,
43        required = False,
44        )
45
46    email2 = schema.ASCIILine(
47        title = _(u'Institution Email'),
48        required = False,
49        constraint=validate_email,
50        )
51
52ICustomStudentBase['email2'].order = ICustomStudentBase[
53    'phone'].order
54ICustomStudentBase['phone'].order = ICustomStudentBase[
55    'email'].order
56
57class IMedicalHistory(IKofaObject):
58    """Students Medical History Questionnaire.
59    """
60
61    medical_updated = schema.Datetime(
62        title = _(u'Last updated'),
63        required = False,
64        readonly = False,
65        )
66
67    # History of Symptoms
68
69    fever = schema.Bool(
70        title = _(u'Fever'),
71        default = False,
72        required = True,
73        )
74
75    headaches = schema.Bool(
76        title = _(u'Headaches'),
77        default = False,
78        required = True,
79        )
80
81    catarrh = schema.Bool(
82        title = _(u'Catarrh'),
83        default = False,
84        required = True,
85        )
86
87    cough = schema.Bool(
88        title = _(u'Cough'),
89        default = False,
90        required = True,
91        )
92
93    sore_throat = schema.Bool(
94        title = _(u'Sore throat'),
95        default = False,
96        required = True,
97        )
98
99    breathing = schema.Bool(
100        title = _(u'Difficulty with breathing'),
101        default = False,
102        required = True,
103        )
104
105    sneezing = schema.Bool(
106        title = _(u'Sneezing'),
107        default = False,
108        required = True,
109        )
110
111    weakness = schema.Bool(
112        title = _(u'Weakness/tiredness'),
113        default = False,
114        required = True,
115        )
116
117    body_pains = schema.Bool(
118        title = _(u'Body pains'),
119        default = False,
120        required = True,
121        )
122
123    smell = schema.Bool(
124        title = _(u'Loss of smell (inability to smell)'),
125        default = False,
126        required = True,
127        )
128
129    taste = schema.Bool(
130        title = _(u'Loss of taste'),
131        default = False,
132        required = True,
133        )
134
135    # Medical History
136
137    asthma = schema.Bool(
138        title = _(u'Asthma'),
139        default = False,
140        required = True,
141        )
142
143    hypertension = schema.Bool(
144        title = _(u'Hypertension'),
145        default = False,
146        required = True,
147        )
148
149    diabetes = schema.Bool(
150        title = _(u'Diabetes'),
151        default = False,
152        required = True,
153        )
154
155    obesity = schema.Bool(
156        title = _(u'Obesity'),
157        default = False,
158        required = True,
159        )
160
161    others = schema.TextLine(
162        title = _(u'Others'),
163        required = False,
164        )
165
166    medicines = schema.TextLine(
167        title = _(u'Are you on a regular medication? If yes, list the medicines'),
168        required = False,
169        )
170
171    # Travel History
172
173    lagos_abuja = schema.Bool(
174        title = _(u'Have you travelled to Lagos or Abuja in the last two weeks?'),
175        default = False,
176        required = True,
177        )
178
179    outside = schema.Bool(
180        title = _(u'Have you travelled outside the country in the last 4 weeks?'),
181        default = False,
182        required = True,
183        )
184
185    # History of contact/infection
186
187    company_suspected = schema.Bool(
188        title = _(u'Were you in the company of a suspected case of COVID 19 in the last two weeks?'),
189        default = False,
190        required = True,
191        )
192
193    company_confirmed = schema.Bool(
194        title = _(u'Were you in the company of a confirmed case of COVID 19 in the last two weeks?'),
195        default = False,
196        required = True,
197        )
198
199    positive = schema.Bool(
200        title = _(u'Have you had a positive COVID 19 test done?'),
201        default = False,
202        required = True,
203        )
204
205    negative = schema.Bool(
206        title = _(u'Have you had a negative COVID 19 test done?'),
207        default = False,
208        required = True,
209        )
210
211    vaccination = schema.Bool(
212        title = _(u'Have you had COVID 19 vaccination?'),
213        default = False,
214        required = True,
215        )
216
217class ICustomStudentPersonal(INigeriaStudentPersonal):
218    """Student personal data.
219    """
220
221    parent_email = schema.ASCIILine(
222        title = _(u'Parent Email'),
223        required = False,
224        constraint=validate_email,
225        )
226
227class ICustomStudentPersonalEdit(INigeriaStudentPersonalEdit):
228    """Interface for editing personal data by students.
229    """
230
231    parent_email = schema.ASCIILine(
232        title = _(u'Parent Email'),
233        required = False,
234        constraint=validate_email,
235        )
236
237class ICustomUGStudentClearance(INigeriaUGStudentClearance):
238    """Representation of ug student clearance data.
239    """
240
241class ICustomPGStudentClearance(INigeriaPGStudentClearance):
242    """Representation of pg student clearance data.
243    """
244
245class ICustomStudent(ICustomStudentBase, ICustomUGStudentClearance,
246    ICustomPGStudentClearance, ICustomStudentPersonal, IMedicalHistory):
247    """Representation of a student.
248    """
249
250class ICustomStudentStudyCourse(INigeriaStudentStudyCourse):
251    """A container for student study levels.
252    """
253
254class ICustomStudentStudyLevel(INigeriaStudentStudyLevel):
255    """A container for course tickets.
256    """
257
258class ICustomStudentOnlinePayment(ICustomOnlinePayment):
259    """A student payment via payment gateways.
260
261    This Interface does not inherit from IStudentOnlinePayment.
262    Thus all fields from IStudentOnlinePayment have to be repeated here.
263    """
264
265    p_current = schema.Bool(
266        title = _(u'Current Session Payment'),
267        default = True,
268        required = False,
269        )
270
271    p_level = schema.Choice(
272        title = _(u'Payment Level'),
273        source = StudyLevelSource(),
274        required = False,
275        )
276
277    staff_rebate = schema.Bool(
278        title = _(u'Staff Rebate Payment'),
279        default = False,
280        required = False,
281        )
282
283    rebate_amount = schema.Float(
284        title = _(u'Rebate'),
285        default = 0.0,
286        required = False,
287        readonly = False,
288        )
289
290ICustomStudentOnlinePayment['p_level'].order = ICustomStudentOnlinePayment[
291    'p_session'].order
292
293class ICustomCourseTicket(INigeriaCourseTicket):
294    """A course ticket.
295    """
296
297    grading_sys = schema.Choice(
298        title = _(u'Grading System'),
299        source = GradingSystemSource(),
300        required = True,
301        default = 'A',
302        )
303
304class ICustomCourseTicketImport(ICustomCourseTicket):
305    """An interface for importing course results and nothing more.
306    """
307
308    score = schema.Int(
309        title = _(u'Score'),
310        required = False,
311        readonly = False,
312        )
313
314    level_session = schema.Choice(
315        title = _(u'Level Session'),
316        source = academic_sessions_vocab,
317        required = False,
318        readonly = False,
319        )
320
321    grading_sys = schema.Choice(
322        title = _(u'Grading System'),
323        source = GradingSystemSource(),
324        required = False,
325        default = 'A',
326        )
327
328class ICustomStudentUpdateByRegNo(INigeriaStudentUpdateByRegNo):
329    """Representation of a student. Skip regular reg_number validation.
330    """
331
332class ICustomStudentUpdateByMatricNo(INigeriaStudentUpdateByMatricNo):
333    """Representation of a student. Skip regular matric_number validation.
334    """
Note: See TracBrowser for help on using the repository browser.