source: main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/university/interfaces.py @ 10687

Last change on this file since 10687 was 9211, checked in by uli, 12 years ago

Rollback r9209. Looks like multiple merges from trunk confuse svn when merging back into trunk.

  • Property svn:keywords set to Id
File size: 8.5 KB
Line 
1## $Id: interfaces.py 9211 2012-09-21 08:19:35Z uli $
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##
18"""Interfaces of academics specific objects.
19"""
20
21from zope import schema
22from zope.interface import Attribute, invariant, Invalid
23from waeup.kofa.interfaces import (IKofaObject, IKofaContainer)
24from waeup.kofa.interfaces import MessageFactory as _
25from waeup.kofa.university.vocabularies import (
26    course_levels,
27    CourseSource,
28    StudyModeSource,
29    AppCatSource,
30    InstTypeSource,
31    SemesterSource,
32    )
33
34class IFaculty(IKofaContainer):
35    """Representation of a university faculty.
36    """
37    code = schema.TextLine(
38        title = _(u'Code'),
39        default = u'NA',
40        required = True,
41        readonly = True,
42        )
43
44    title = schema.TextLine(
45        title = _(u'Name of faculty'),
46        default = _(u'Unnamed'),
47        required = True,
48        )
49
50    title_prefix = schema.Choice(
51        title = _(u'Name prefix'),
52        default = u'faculty',
53        source = InstTypeSource(),
54        required = True,
55        )
56
57    def longtitle():
58        """
59        Returns the long title of a faculty.
60        """
61
62class IFacultyAdd(IFaculty):
63    """Representation of a university faculty.
64    """
65    code = schema.TextLine(
66        title = _(u'Code'),
67        description = _(u'This code will become part of the URL.'),
68        default = u'NA',
69        required = True,
70        readonly = False,
71        )
72
73IFacultyAdd['code'].order =  IFaculty['code'].order
74
75class IFacultiesContainer(IKofaContainer):
76    """A container for faculties.
77    """
78    def addFaculty(faculty):
79        """Add an IFactulty object.
80
81        """
82class IDepartment(IKofaObject):
83    """Representation of a department.
84    """
85    code = schema.TextLine(
86        title = _(u'Code'),
87        default = u'NA',
88        required = True,
89        readonly = True,
90        )
91
92    title = schema.TextLine(
93        title = _(u'Name of department'),
94        default = _(u'Unnamed'),
95        required = True,
96        )
97
98    title_prefix = schema.Choice(
99        title = _(u'Name prefix'),
100        source = InstTypeSource(),
101        default = u'department',
102        required = True,
103        )
104
105    courses = Attribute("A container for courses.")
106    certificates = Attribute("A container for certificates.")
107
108    def longtitle():
109        """
110        Returns the long title of a department.
111        """
112
113class IDepartmentAdd(IDepartment):
114    """Representation of a university department.
115    """
116    code = schema.TextLine(
117        title = _(u'Code'),
118        description = _(u'This code will become part of the URL.'),
119        default = u'NA',
120        required = True,
121        readonly = False,
122        )
123
124IDepartmentAdd['code'].order =  IDepartment['code'].order
125
126class ICoursesContainer(IKofaContainer):
127    """A container for faculties.
128    """
129    def addCourse(course):
130        """Add an ICourse object.
131
132        Returns the key, under which the object was stored.
133        """
134
135class ICourse(IKofaObject):
136    """Representation of a course.
137    """
138    code = schema.TextLine(
139        title = _(u'Code'),
140        default = u'NA',
141        required = True,
142        readonly = True,
143        )
144
145    title = schema.TextLine(
146        title = _(u'Title of course'),
147        default = _(u'Unnamed'),
148        required = True,
149        )
150
151    credits = schema.Int(
152        title = _(u'Credits'),
153        default = 0,
154        required = False,
155        )
156
157    passmark = schema.Int(
158        title = _(u'Passmark'),
159        default = 40,
160        required = False,
161        )
162
163    semester = schema.Choice(
164        title = _(u'Semester/Term'),
165        default = 9,
166        source = SemesterSource(),
167        required = True,
168        )
169
170    def longtitle():
171        """
172        Returns the long title of a course.
173        """
174
175class ICourseAdd(ICourse):
176    """Representation of a course.
177    """
178    code = schema.TextLine(
179        title = _(u'Code'),
180        description = _(u'Enter unique course code which will become part of the URL.'),
181        default = u'NA',
182        required = True,
183        readonly = False,
184        )
185
186ICourseAdd['code'].order =  ICourse['code'].order
187
188class ICertificate(IKofaObject):
189    """Representation of a certificate.
190    """
191    code = schema.TextLine(
192        title = _(u'Code'),
193        default = u'NA',
194        required = True,
195        readonly = True,
196        )
197
198    title = schema.TextLine(
199        title = _(u'Title'),
200        default = _(u'Unnamed Certificate'),
201        required = True,
202        )
203
204    study_mode = schema.Choice(
205        title = _(u'Study Mode'),
206        source = StudyModeSource(),
207        default = u'ug_ft',
208        required = True,
209        )
210
211    start_level = schema.Choice(
212        title = _(u'Start Level'),
213        vocabulary = course_levels,
214        default = 100,
215        required = True,
216        )
217
218    end_level = schema.Choice(
219        title = _(u'End Level'),
220        vocabulary = course_levels,
221        default = 500,
222        required = True,
223        )
224
225    application_category = schema.Choice(
226        title = _(u'Application Category'),
227        source = AppCatSource(),
228        default = u'basic',
229        required = True,
230        )
231
232    school_fee_1 = schema.Float(
233        title = _(u'Initial School Fee'),
234        required = False,
235        )
236
237    school_fee_2 = schema.Float(
238        title = _(u'Returning School Fee'),
239        required = False,
240        )
241
242    def longtitle():
243        """
244        Returns the long title of a certificate.
245        """
246
247    @invariant
248    def check_pg_conditions(cert):
249        if cert.start_level == 999 and not cert.end_level == 999:
250            raise Invalid(_("Start level and end level must correspond."))
251        if cert.end_level == 999 and not cert.start_level == 999:
252            raise Invalid(_("Start level and end level must correspond."))
253        if cert.study_mode.startswith('pg') and not cert.start_level == 999:
254            raise Invalid(_(
255                "Study mode, start level and end level must correspond."))
256        if cert.start_level == 999  and not cert.study_mode.startswith('pg'):
257            raise Invalid(_(
258                "Study mode, start level and end level must correspond."))
259
260
261class ICertificateAdd(ICertificate):
262    """Representation of a certificate.
263    """
264    code = schema.TextLine(
265        title = _(u'Code'),
266        default = u'NA',
267        description = _(u'Enter unique certificate code which will become part of the URL.'),
268        required = True,
269        readonly = False,
270        )
271
272ICertificateAdd['code'].order =  ICertificate['code'].order
273
274class ICertificatesContainer(IKofaContainer):
275    """A container for certificates.
276    """
277    def addCertificate(certificate):
278        """Add an ICertificate object.
279
280        Returns the key, under which the object was stored.
281        """
282
283class ICertificateCourse(IKofaObject):
284    """A certificatecourse is referring a course and provides some own
285       attributes.
286    """
287    course = schema.Choice(
288        title = _(u'Course Referrer'),
289        source = CourseSource(),
290        readonly = True,
291        )
292
293    level = schema.Choice(
294        title = _(u'Level'),
295        required = True,
296        vocabulary = course_levels,
297        readonly = False,
298        )
299
300    mandatory = schema.Bool(
301        title = _(u'Is mandatory course (not elective)'),
302        required = True,
303        default = True,
304        )
305
306    def getCourseCode():
307        """Return the code of the course referred to.
308
309        This is needed for cataloging.
310        """
311
312    def longtitle():
313        """
314        Returns the long title of a certificatecourse.
315        """
316
317
318class ICertificateCourseAdd(ICertificateCourse):
319    """A certificatecourse is referring a course and
320       provides some own attributes.
321    """
322    course = schema.Choice(
323        title = _(u'Course'),
324        source = CourseSource(),
325        readonly = False,
326        )
327
328ICertificateCourseAdd['course'].order =  ICertificateCourse['course'].order
Note: See TracBrowser for help on using the repository browser.