"""Interfaces of academics specific objects. """ from zc.sourcefactory.basic import BasicSourceFactory from zope import schema from zope.app.catalog.interfaces import ICatalog from zope.component import getUtility from zope.interface import Attribute from waeup.sirp.interfaces import (IWAeUPObject, IWAeUPContainer, SimpleWAeUPVocabulary) class CourseSource(BasicSourceFactory): """A course source delivers all courses inside the portal by looking up a catalog. """ def getValues(self): catalog = getUtility(ICatalog, name='courses_catalog') return list(catalog.searchResults(code=('', 'z*'))) def getToken(self, value): return value.code def getTitle(self, value): return "%s %s" % (value.code, value.title[:32]) class IFaculty(IWAeUPContainer): """Representation of a university faculty. """ title = schema.TextLine( title = u'Name of Faculty', default = u'Unnamed', required = True, ) title_prefix = schema.TextLine( title = u'Title prefix', default = u'faculty', required = True, ) code = schema.TextLine( title = u'Code', description = u'Abbreviated code of the faculty', default = u'NA', required = True, ) class IFacultyContainer(IWAeUPContainer): """A container for faculties. """ def addFaculty(faculty): """Add an IFactulty object. Returns the key, under which the object was stored. """ class IDepartment(IWAeUPObject): """Representation of a department. """ title = schema.TextLine( title = u'Name of Department', default = u'Unnamed', required = True, ) title_prefix = schema.TextLine( title = u'Title prefix', default = u'department', required = True, ) code = schema.TextLine( title = u'Code', default = u'NA', description = u'Abbreviated code of the department', required = True, ) courses = Attribute("A container for courses.") certificates = Attribute("A container for certificates.") class ICourseContainer(IWAeUPContainer): """A container for faculties. """ def addCourse(faculty): """Add an ICourse object. Returns the key, under which the object was stored. """ class ICourse(IWAeUPObject): """Representation of a course. """ code = schema.TextLine( title = u'Code', default = u'NA', description = u'Abbreviated code of the course', required = True, readonly = True, ) title = schema.TextLine( title = u'Title of course', default = u'Unnamed', required = True, ) level = schema.TextLine( title = u'Level', default = u'100', required = False, ) credits = schema.Int( title = u'Credits', default = 0, required = False, ) passmark = schema.Int( title = u'Passmark', default = 40, required = False, ) semester = schema.Choice( title = u'Semester/Term', default = 0, vocabulary = SimpleWAeUPVocabulary( ('N/A', 0), ('First Semester', 1), ('Second Semester', 2), ('Combined', 3)), required = True, ) class ICertificate(IWAeUPObject): """Representation of a certificate. """ code = schema.TextLine( title = u'Code', default = u'NA', description = u'Abbreviated code of the certificate.', required = True, ) review_state = schema.Choice( title = u'review state', default = 'unchecked', values = ['unchecked', 'checked'] ) title = schema.TextLine( title = u'title', required = True, ) study_mode = schema.TextLine( title = u'study mode', required = True, ) start_level = schema.TextLine( title = u'start level', required = True, ) end_level = schema.TextLine( title = u'end level', required = True, ) application_category = schema.TextLine( title = u'application category', required = False, ) max_pass = schema.TextLine( title = u'maximum pass', required = False, ) class ICertificateContainer(IWAeUPContainer): """A container for certificates. """ def addCertificate(faculty): """Add an ICertificate object. Returns the key, under which the object was stored. """ class ICertificateCourse(IWAeUPObject): """A certificatecourse is a course referenced by a certificate, which provides some own attributes. """ course = schema.Choice( title = u'Course', source = CourseSource(), ) level = schema.Int( title = u'Level of this course', required = True, default = 100 ) core_or_elective = schema.Bool( title = u'Is mandatory course (not elective)', required = True, default = True ) def getCourseCode(): """Return the code of the referenced course. This is needed for cataloging. """