source: main/waeup.sirp/trunk/src/waeup/sirp/university/certificatecontainer.py @ 6210

Last change on this file since 6210 was 6210, checked in by Henrik Bettermann, 13 years ago

Certificate codes must be unique. Check catalog when certificate are added. Flash the place if certificates exist.

To do: The certificate importer must also check for existing cerificate codes.

File size: 1.7 KB
Line 
1"""Containers for certificates.
2"""
3import grok
4from waeup.sirp.university.interfaces import (
5    ICertificateContainer, ICertificate)
6from zope.component.interfaces import IFactory
7from zope.catalog.interfaces import ICatalog
8from zope.component import getUtility
9from zope.interface import implementedBy
10
11class CertificateContainer(grok.Container):
12    """See interfaces for description.
13    """
14    grok.implements(ICertificateContainer)
15    grok.require('waeup.manageUniversity')
16
17    def addCertificate(self, certificate):
18        if not ICertificate.providedBy(certificate):
19            raise TypeError('CertificateContainers contain only '
20                            'ICertificate instances')
21        cat = getUtility(ICatalog, name='certificates_catalog')
22        results = list(cat.searchResults(code=(certificate.code,certificate.code)))
23        if results:
24            dep = results[0].__parent__.__parent__.longtitle()
25            fac = results[0].__parent__.__parent__.__parent__.longtitle()
26            return 'Certificate exists in %s / %s.' % (fac,dep)
27        self[certificate.code] = certificate
28        return 'Certificate added.'
29
30    def clear(self):
31        keys = self.keys()
32        for key in keys:
33            del self[key]
34
35class CertificateContainerFactory(grok.GlobalUtility):
36    """A factory for certificate containers.
37    """
38    grok.implements(IFactory)
39    grok.name(u'waeup.CertificateContainer')
40    title = u"Create a new certificate container.",
41    description = u"This factory instantiates new certificate containers."
42
43    def __call__(self, *args, **kw):
44        return CertificateContainer(*args, **kw)
45
46    def getInterfaces(self):
47        return implementedBy(CertificateContainer)
Note: See TracBrowser for help on using the repository browser.