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

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