Source code for

## $Id: 15163 2018-09-23 05:05:04Z 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
## 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
"""Faculty components.

import grok
import zope.location.location
from zope.component.interfaces import IFactory
from zope.interface import implementedBy
from zope.component import getUtility
from zope.schema import getFields
from waeup.kofa.interfaces import IKofaUtils, IKofaPluggable
from waeup.kofa.utils.batching import VirtualExportJobContainer
from import (
    IFaculty, IDepartment)

[docs]def longtitle(inst): insttypes_dict = getUtility(IKofaUtils).INST_TYPES_DICT if inst.title_prefix == 'none': return "%s (%s)" % (inst.title, inst.code) return "%s %s (%s)" % ( insttypes_dict[inst.title_prefix], inst.title, inst.code)
[docs]class VirtualFacultyExportJobContainer(VirtualExportJobContainer): """A virtual export job container for facultiess. """
[docs]class Faculty(grok.Container): """A university faculty. """ grok.implements(IFaculty) local_roles = [ 'waeup.local.DepartmentOfficer', 'waeup.local.DepartmentManager', 'waeup.local.ClearanceOfficer', 'waeup.local.UGClearanceOfficer', 'waeup.local.PGClearanceOfficer', 'waeup.local.CourseAdviser100', 'waeup.local.CourseAdviser200', 'waeup.local.CourseAdviser300', 'waeup.local.CourseAdviser400', 'waeup.local.CourseAdviser500', 'waeup.local.CourseAdviser600', 'waeup.local.CourseAdviser700', 'waeup.local.CourseAdviser800', 'waeup.local.LocalStudentsManager', 'waeup.local.LocalWorkflowManager', 'waeup.local.TranscriptOfficer', 'waeup.local.TranscriptSignee', ]
[docs] def __init__(self, title=u'Unnamed Faculty', title_prefix=u'faculty', code=u'NA', officer_1=None, officer_2=None, **kw): super(Faculty, self).__init__(**kw) self.title = title self.title_prefix = title_prefix self.code = code self.officer_1 = officer_1 self.officer_2 = officer_2
[docs] def traverse(self, name): """Deliver appropriate containers. """ if name == 'exports': # create a virtual exports container and return it container = VirtualFacultyExportJobContainer() zope.location.location.located(container, self, 'exports') return container return None
[docs] def addDepartment(self, department): """Add a department to the faculty. """ if not IDepartment.providedBy(department): raise TypeError('Faculties contain only IDepartment instances') self[department.code] = department
@property def longtitle(self): return longtitle(self)
[docs]class FacultyFactory(grok.GlobalUtility): """A factory for faculty containers. """ grok.implements(IFactory)'waeup.Faculty') title = u"Create a new faculty.", description = u"This factory instantiates new faculty instances."
[docs] def __call__(self, *args, **kw): return Faculty()
[docs] def getInterfaces(self): return implementedBy(Faculty)
[docs]class FacultiesPlugin(grok.GlobalUtility): """A plugin that updates faculties. """ grok.implements(IKofaPluggable)'faculties') deprecated_attributes = []
[docs] def setup(self, site, name, logger): return
[docs] def update(self, site, name, logger): items = getFields(IFaculty).items() for faculty in site['faculties'].values(): # Add new attributes for i in items: if not hasattr(faculty,i[0]): setattr(faculty,i[0],i[1].missing_value) 'FacultiesPlugin: %s attribute %s added.' % ( faculty.code,i[0])) # Remove deprecated attributes for i in self.deprecated_attributes: try: delattr(faculty,i) 'FacultiesPlugin: %s attribute %s deleted.' % ( faculty.code,i)) except AttributeError: pass return