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

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

getVerdictsDict should be part of the students package. The only way to reach this ist to move the VerdictSource? to interfaces in order to avoid circular imports.

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