source: main/waeup.uniben/trunk/src/waeup/uniben/students/studycourse.py @ 9251

Last change on this file since 9251 was 9251, checked in by Henrik Bettermann, 12 years ago

In Uniben we have special pg students which follow the ug workflow.

See ticket 838:

Whereas the full time LLM students are to register all the four courses once, the part time LLM students are only permitted to register any two of the four courses in their first year and the remaining two courses including any carryover in the second or third year. Presently they do not have any problem with full time LLM online course registration but they certainly are not happy with the way LLM part time students are registering their cousres online as if they are full time students.

  • Property svn:keywords set to Id
File size: 3.1 KB
Line 
1## $Id: studycourse.py 9251 2012-09-28 06:22:59Z 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"""
19Container which holds the data of the student study courses
20and contains the (student) study level objects.
21"""
22import grok
23from zope.interface import implementedBy
24from waeup.kofa.students.studycourse import (
25    StudentStudyCourse, StudentStudyCourseFactory)
26from waeup.kofa.utils.helpers import attrs_to_fields
27from waeup.kofa.students.interfaces import IStudentNavigation
28from waeup.kofa.students.workflow import CLEARED, RETURNING, PAID
29from waeup.uniben.students.interfaces import ICustomStudentStudyCourse
30
31class CustomStudentStudyCourse(StudentStudyCourse):
32    """This is a container for study levels.
33    """
34
35    grok.implements(ICustomStudentStudyCourse, IStudentNavigation)
36    grok.provides(ICustomStudentStudyCourse)
37
38    @property
39    def is_postgrad(self):
40        if self.certificate is None:
41            return False
42        return self.certificate.study_mode.startswith('pg') or \
43            self.certificate.study_mode.startswith('special_pg')
44
45    @property
46    def is_special_postgrad(self):
47        if self.certificate is None:
48            return False
49        return self.certificate.study_mode.startswith('special_pg')
50
51    @property
52    def next_session_allowed(self):
53        state = self.student.state
54        certificate = getattr(self, 'certificate', None)
55        if certificate == None:
56            return False
57        if state == CLEARED:
58            return True
59        cond0 = state == RETURNING
60        cond1 = self.previous_verdict in (
61            'A','B','C','F','J','L','M','N','O','X','Z')
62        cond2 = self.current_level in (0, 100)
63        cond3 = certificate.study_mode.startswith('de') and \
64            self.current_level == 200
65        cond4 = certificate.study_mode.startswith('ph') and \
66            self.current_level == 300
67        if cond0 and (cond1 or cond2 or cond3 or cond4):
68            return True
69        cond5 = self.is_postgrad
70        cond6 = state == PAID
71        cond7 = self.is_special_postgrad
72        if  cond5 and cond6 and not cond7:
73            return True
74        return False
75
76CustomStudentStudyCourse = attrs_to_fields(CustomStudentStudyCourse)
77
78class CustomStudentStudyCourseFactory(StudentStudyCourseFactory):
79    """A factory for student study courses.
80    """
81
82    def __call__(self, *args, **kw):
83        return CustomStudentStudyCourse()
84
85    def getInterfaces(self):
86        return implementedBy(CustomStudentStudyCourse)
Note: See TracBrowser for help on using the repository browser.