source: main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py @ 7521

Last change on this file since 7521 was 7520, checked in by Henrik Bettermann, 13 years ago

reg_number must be provided when adding students. Otherwise new students don't find their record.

  • Property svn:keywords set to Id
File size: 12.2 KB
Line 
1## $Id: interfaces.py 7520 2012-01-27 16:24: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##
18from datetime import datetime
19from zope.interface import Attribute, Interface
20from zope import schema
21from waeup.sirp.interfaces import (
22    ISIRPObject, academic_sessions_vocab, validate_email)
23from waeup.sirp.schema import TextLineChoice
24from waeup.sirp.university.vocabularies import CourseSource, study_modes
25from waeup.sirp.students.vocabularies import (
26  CertificateSource, verdicts, StudyLevelSource,
27  contextual_reg_num_source, contextual_mat_num_source, GenderSource,
28  )
29from waeup.sirp.payments.interfaces import IPaymentsContainer, IOnlinePayment
30
31class IStudentsUtils(Interface):
32    """A collection of methods which are subject to customization.
33
34    """
35    def getPaymentDetails(category, student):
36        """Get the payment dates of a student for the payment category
37        specified.
38
39        """
40
41    def getAccommodation_details(student):
42        """Determine the accommodation dates of a student.
43
44        """
45
46    def selectBed(available_beds):
47        """Select a bed from a list of available beds.
48
49        In the standard configuration we select the first bed found,
50        but can also randomize the selection if we like.
51        """
52
53    def renderPDF(view, subject='', filename='slip.pdf',):
54        """Render pdf slips for various pages.
55
56        """
57
58class IStudentsContainer(ISIRPObject):
59    """A students container contains university students.
60
61    """
62    def addStudent(student):
63        """Add an IStudent object and subcontainers.
64
65        """
66
67    def archive(id=None):
68        """Create on-dist archive of students.
69
70        If id is `None`, all students are archived.
71
72        If id contains a single id string, only the respective
73        students are archived.
74
75        If id contains a list of id strings all of the respective
76        students types are saved to disk.
77        """
78
79    def clear(id=None, archive=True):
80        """Remove students of type given by 'id'.
81
82        Optionally archive the students.
83
84        If id is `None`, all students are archived.
85
86        If id contains a single id string, only the respective
87        students are archived.
88
89        If id contains a list of id strings all of the respective
90        student types are saved to disk.
91
92        If `archive` is ``False`` none of the archive-handling is done
93        and respective students are simply removed from the
94        database.
95        """
96
97class IStudentNavigation(ISIRPObject):
98    """Interface needed for student navigation.
99
100    """
101    def getStudent():
102        """Return student object.
103
104        """
105
106class IStudentBase(ISIRPObject):
107    """Representation of student base data.
108
109    """
110    history = Attribute('Object history, a list of messages')
111    state = Attribute('Returns the registration state of a student')
112    password = Attribute('Encrypted password of a student')
113    certcode = Attribute('The certificate code of any chosen study course')
114    depcode = Attribute('The department code of any chosen study course')
115    faccode = Attribute('The faculty code of any chosen study course')
116    current_session = Attribute('The current session of the student')
117    fullname = Attribute('All name parts separated by hyphens')
118    display_fullname = Attribute('The fullname of an applicant')
119
120    def loggerInfo(ob_class, comment):
121        """Adds an INFO message to the log file.
122
123        """
124
125    student_id = schema.TextLine(
126        title = u'Student Id',
127        required = False,
128        )
129
130    firstname = schema.TextLine(
131        title = u'First Name',
132        required = True,
133        )
134
135    middlename = schema.TextLine(
136        title = u'Middle Name',
137        required = False,
138        )
139
140    lastname = schema.TextLine(
141        title = u'Last Name (Surname)',
142        required = True,
143        )
144
145    sex = schema.Choice(
146        title = u'Sex',
147        source = GenderSource(),
148        default = u'm',
149        required = True,
150        )
151
152    reg_number = TextLineChoice(
153        title = u'Registration Number',
154        required = True,
155        readonly = False,
156        source = contextual_reg_num_source,
157        )
158
159    matric_number = TextLineChoice(
160        title = u'Matriculation Number',
161        #default = u'',
162        required = False,
163        readonly = False,
164        source = contextual_mat_num_source,
165        )
166
167    adm_code = schema.TextLine(
168        title = u'PWD Activation Code',
169        default = u'',
170        required = False,
171        readonly = True,
172        )
173
174    email = schema.ASCIILine(
175        title = u'Email',
176        required = False,
177        constraint=validate_email,
178        )
179    phone = schema.TextLine(
180        title = u'Phone',
181        description = u'',
182        required = False,
183        )
184
185class IStudentClearance(ISIRPObject):
186    """Representation of student clearance data.
187
188    """
189    date_of_birth = schema.Date(
190        title = u'Date of Birth',
191        required = True,
192        )
193
194    clearance_locked = schema.Bool(
195        title = u'Clearance form locked',
196        default = False,
197        )
198
199    clr_code = schema.TextLine(
200        title = u'CLR Activation Code',
201        default = u'',
202        required = False,
203        readonly = True,
204        )
205
206class IStudentPersonal(ISIRPObject):
207    """Representation of student personal data.
208
209    """
210    perm_address = schema.Text(
211        title = u'Permanent Address',
212        required = False,
213        )
214
215class IStudent(IStudentBase,IStudentClearance,IStudentPersonal):
216    """Representation of a student.
217
218    """
219
220class IStudentUpdateByRegNo(IStudent):
221    """Representation of a student. Skip regular reg_number validation.
222
223    """
224    reg_number = schema.TextLine(
225        title = u'Registration Number',
226        default = None,
227        required = False,
228        )
229
230class IStudentUpdateByMatricNo(IStudent):
231    """Representation of a student. Skip regular matric_number validation.
232
233    """
234    matric_number = schema.TextLine(
235        title = u'Matriculation Number',
236        default = None,
237        required = False,
238        )
239
240class IStudentStudyCourse(ISIRPObject):
241    """A container for student study levels.
242
243    """
244    certificate = schema.Choice(
245        title = u'Certificate',
246        source = CertificateSource(),
247        default = None,
248        required = False,
249        )
250
251
252    entry_mode = schema.Choice(
253        title = u'Entry Mode',
254        vocabulary = study_modes,
255        default = u'ug_ft',
256        required = True,
257        readonly = False,
258        )
259
260    entry_session = schema.Choice(
261        title = u'Entry Session',
262        source = academic_sessions_vocab,
263        #default = datetime.now().year,
264        default = None,
265        required = True,
266        readonly = False,
267        )
268
269    current_session = schema.Choice(
270        title = u'Current Session',
271        source = academic_sessions_vocab,
272        default = None,
273        required = True,
274        readonly = False,
275        )
276
277    current_level = schema.Choice(
278        title = u'Current Level',
279        source = StudyLevelSource(),
280        default = None,
281        required = False,
282        readonly = False,
283        )
284
285    current_verdict = schema.Choice(
286        title = u'Current Verdict',
287        source = verdicts,
288        default = '0',
289        required = False,
290        )
291
292    previous_verdict = schema.Choice(
293        title = u'Previous Verdict',
294        source = verdicts,
295        default = '0',
296        required = False,
297        )
298
299class IStudentStudyCourseImport(IStudentStudyCourse):
300    """A container for student study levels.
301
302    """
303    current_level = schema.Int(
304        title = u'Current Level',
305        default = None,
306        )
307
308class IStudentStudyLevel(ISIRPObject):
309    """A container for course tickets.
310
311    """
312    level = Attribute('The level code')
313    validation_date = Attribute('The date of validation')
314    validated_by = Attribute('User Id of course adviser')
315
316    level_session = schema.Choice(
317        title = u'Session',
318        source = academic_sessions_vocab,
319        default = None,
320        required = True,
321        )
322
323    level_verdict = schema.Choice(
324        title = u'Verdict',
325        source = verdicts,
326        default = '0',
327        required = False,
328        )
329
330class ICourseTicket(ISIRPObject):
331    """A course ticket.
332
333    """
334    code = Attribute('code of the original course')
335    title = Attribute('title of the original course')
336    credits = Attribute('credits of the original course')
337    passmark = Attribute('passmark of the original course')
338    semester = Attribute('semester of the original course')
339    faculty = Attribute('faculty of the original course')
340    department = Attribute('department of the original course')
341    fcode = Attribute('faculty code of the original course')
342    dcode = Attribute('department code of the original course')
343
344    core_or_elective = schema.Bool(
345        title = u'Mandatory',
346        default = False,
347        required = False,
348        readonly = False,
349        )
350
351    score = schema.Int(
352        title = u'Score',
353        default = 0,
354        required = False,
355        readonly = False,
356        )
357
358    automatic = schema.Bool(
359        title = u'Automatical Creation',
360        default = False,
361        required = False,
362        readonly = True,
363        )
364
365class ICourseTicketAdd(ICourseTicket):
366    """An interface for adding course tickets.
367
368    """
369    course = schema.Choice(
370        title = u'Course',
371        source = CourseSource(),
372        readonly = False,
373        )
374
375class IStudentAccommodation(ISIRPObject):
376    """A container for student accommodation objects.
377
378    """
379
380class IBedTicket(ISIRPObject):
381    """A ticket for accommodation booking.
382
383    """
384    bed = Attribute('The bed object.')
385
386    bed_coordinates = schema.TextLine(
387        title = u'Bed Coordinates',
388        default = None,
389        required = False,
390        readonly = False,
391        )
392
393    bed_type = schema.TextLine(
394        title = u'Bed Type',
395        default = None,
396        required = False,
397        readonly = False,
398        )
399
400    booking_session = schema.Choice(
401        title = u'Session',
402        source = academic_sessions_vocab,
403        default = None,
404        required = True,
405        readonly = True,
406        )
407
408    booking_date = schema.Datetime(
409        title = u'Booking Date',
410        required = False,
411        readonly = True,
412        )
413
414    booking_code = schema.TextLine(
415        title = u'Booking Activation Code',
416        default = u'',
417        required = False,
418        readonly = True,
419        )
420
421    def getSessionString():
422        """Returns the the title of academic_sessions_vocab term.
423
424        """
425
426class IStudentPaymentsContainer(IPaymentsContainer):
427    """A container for student payment objects.
428
429    """
430
431class IStudentOnlinePayment(IOnlinePayment):
432    """A student payment via payment gateways.
433
434    """
435    p_session = schema.Choice(
436        title = u'Payment Session',
437        source = academic_sessions_vocab,
438        required = False,
439        )
440
441IStudentOnlinePayment['p_session'].order = IStudentOnlinePayment[
442    'p_item'].order
443
444# Interfaces for students only
445
446class IStudentClearanceEdit(IStudentClearance):
447    """Interface needed for restricted editing of student clearance data.
448
449    """
450
451class IStudentPersonalEdit(IStudentPersonal):
452    """Interface needed for restricted editing of student personal data.
453
454    """
455
456class IStudentChangePassword(ISIRPObject):
457    """Interface needed for change pasword page.
458
459    """
460
461    reg_number = schema.TextLine(
462        title = u'Registration Number',
463        default = None,
464        required = True,
465        readonly = False,
466        )
467
468    email = schema.ASCIILine(
469        title = u'Email',
470        required = True,
471        constraint=validate_email,
472        )
Note: See TracBrowser for help on using the repository browser.