## $Id: studylevel.py 8736 2012-06-17 07:09:21Z henrik $ ## ## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## """ Container which holds the data of a student study level and contains the course tickets. """ import grok from zope.component.interfaces import IFactory from zope.interface import implementedBy from waeup.kofa.students.interfaces import ( IStudentStudyLevel, IStudentNavigation, ICourseTicket) from waeup.kofa.utils.helpers import attrs_to_fields from waeup.kofa.students.vocabularies import StudyLevelSource class StudentStudyLevel(grok.Container): """This is a container for course tickets. """ grok.implements(IStudentStudyLevel, IStudentNavigation) grok.provides(IStudentStudyLevel) def __init__(self): super(StudentStudyLevel, self).__init__() self.level = None self.validation_date = None self.validated_by = None return @property def student(self): try: return self.__parent__.__parent__ except AttributeError: return None def writeLogMessage(self, view, message): return self.__parent__.__parent__.writeLogMessage(view, message) @property def level_title(self): studylevelsource = StudyLevelSource() return studylevelsource.factory.getTitle(self.__parent__, self.level) def addCourseTicket(self, courseticket): """Add a course ticket object. """ if not ICourseTicket.providedBy(courseticket): raise TypeError( 'StudentStudyLeves contain only ICourseTicket instances') self[courseticket.code] = courseticket return StudentStudyLevel = attrs_to_fields(StudentStudyLevel) class StudentStudyLevelFactory(grok.GlobalUtility): """A factory for student study levels. """ grok.implements(IFactory) grok.name(u'waeup.StudentStudyLevel') title = u"Create a new student study level.", description = u"This factory instantiates new student study level instances." def __call__(self, *args, **kw): return StudentStudyLevel() def getInterfaces(self): return implementedBy(StudentStudyLevel) class CourseTicket(grok.Model): """This is a course ticket which allows the student to attend the course. Lecturers will enter scores and more at the end of the term. A course ticket contains a copy of the original course and course referrer data. If the courses and/or their referrers are removed, the corresponding tickets remain unchanged. So we do not need any event triggered actions on course tickets. """ grok.implements(ICourseTicket, IStudentNavigation) grok.provides(ICourseTicket) def __init__(self): super(CourseTicket, self).__init__() self.code = None self.title = None self.fcode = None self.dcode = None self.credits = None self.passmark = None self.semester = None return @property def student(self): """Get the associated student object. """ try: return self.__parent__.__parent__.__parent__ except AttributeError: return None def writeLogMessage(self, view, message): return self.__parent__.__parent__.__parent__.writeLogMessage(view, message) def getLevel(self): """Returns the id of the level the ticket has been added to. """ # XXX: shouldn't that be an attribute? try: return self.__parent__.level except AttributeError: return None def getLevelSession(self): """Returns the session of the level the ticket has been added to. """ # XXX: shouldn't that be an attribute? try: return self.__parent__.level_session except AttributeError: return None CourseTicket = attrs_to_fields(CourseTicket) class CourseTicketFactory(grok.GlobalUtility): """A factory for student study levels. """ grok.implements(IFactory) grok.name(u'waeup.CourseTicket') title = u"Create a new course ticket.", description = u"This factory instantiates new course ticket instances." def __call__(self, *args, **kw): return CourseTicket() def getInterfaces(self): return implementedBy(CourseTicket)