import grok from zope import schema from zope.interface import Attribute, invariant, Invalid from waeup.kofa.interfaces import (IKofaObject, IKofaContainer, validate_email) from waeup.kofa.university.interfaces import ICertificate from waeup.kofa.university.certificatescontainer import CertificatesContainer from waeup.kofa.university.faculty import ( Faculty, FacultyFactory) from waeup.kofa.university.department import ( Department, DepartmentFactory) from waeup.kofa.university.certificate import ( Certificate, CertificateFactory) from waeup.kofa.university.vocabularies import ( course_levels, CourseSource, StudyModeSource, AppCatSource, InstTypeSource, SemesterSource, ) from waeup.kofa.interfaces import MessageFactory as _ class IFaculty(IKofaContainer): """Representation of a university faculty. """ code = schema.TextLine( title = _(u'Code'), default = u'NA', required = True, ) title = schema.TextLine( title = _(u'Name of faculty'), default = u'Unnamed', required = True, ) title_prefix = schema.Choice( title = _(u'Name prefix'), default = u'faculty', source = InstTypeSource(), required = True, ) address = schema.Text( title = _(u'Permanent Address'), required = False, ) email = schema.ASCIILine( title = _(u'Email'), required = False, constraint=validate_email, ) class CustomFaculty(Faculty): """A university faculty. """ grok.implements(IFaculty) local_roles = [ 'waeup.local.DepartmentOfficer', 'waeup.local.DepartmentManager', ] def __init__(self, title=u'Unnamed Faculty', title_prefix=u'faculty', address=None, email=None, code=u'NA', **kw): super(Faculty, self).__init__(**kw) self.title = title self.title_prefix = title_prefix self.code = code self.address = address self.email = email class CustomFacultyFactory(FacultyFactory): """A factory for faculty containers. """ def __call__(self, *args, **kw): return CustomFaculty() def getInterfaces(self): return implementedBy(CustomFaculty) class IDepartment(IKofaObject): """Representation of a department. """ code = schema.TextLine( title = _(u'Code'), default = u'NA', required = True, ) title = schema.TextLine( title = _(u'Name of department'), default = u'Unnamed', required = True, ) title_prefix = schema.Choice( title = _(u'Name prefix'), source = InstTypeSource(), default = u'department', required = True, ) address = schema.Text( title = _(u'Permanent Address'), required = False, ) email = schema.ASCIILine( title = _(u'Email'), required = False, constraint=validate_email, ) certificates = Attribute("A container for certificates.") class CustomDepartment(Department): """A university department. """ grok.implements(IDepartment) local_roles = [ 'waeup.local.ApplicationsManager', 'waeup.local.DepartmentOfficer', 'waeup.local.DepartmentManager', ] def __init__(self, title=u'Unnamed Department', title_prefix=u'department', address=None, email=None, code=u"NA", **kw): super(Department, self).__init__(**kw) self.title = title self.title_prefix = title_prefix self.code = code self.certificates = CertificatesContainer() self.certificates.__parent__ = self self.certificates.__name__ = 'certificates' self.score_editing_disabled = False self.address = address self.email = email class CustomDepartmentFactory(DepartmentFactory): """A factory for department containers. """ def __call__(self, *args, **kw): return CustomDepartment(*args, **kw) def getInterfaces(self): """Get interfaces of objects provided by this factory. """ return implementedBy(CustomDepartment) class CustomCertificate(Certificate): """A certificate. """ grok.implements(ICertificate) local_roles = [ 'waeup.local.DepartmentOfficer', ] class CustomCertificateFactory(CertificateFactory): """A factory for certificates. """ def __call__(self, *args, **kw): return CustomCertificate(*args, **kw) def getInterfaces(self): return implementedBy(CustomCertificate)