source: main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicants.py @ 6476

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

Remove application_date from schema. This date should not be displayed on forms and slips since we have the same information in the object history. It's needed in export files for sorting and filtering.

File size: 4.0 KB
Line 
1##
2## applicants.py
3## Login : <uli@pu.smp.net>
4## Started on  Fri Jul 16 11:46:55 2010 Uli Fouquet
5## $Id$
6##
7## Copyright (C) 2010 Uli Fouquet
8## This program is free software; you can redistribute it and/or modify
9## it under the terms of the GNU General Public License as published by
10## the Free Software Foundation; either version 2 of the License, or
11## (at your option) any later version.
12##
13## This program is distributed in the hope that it will be useful,
14## but WITHOUT ANY WARRANTY; without even the implied warranty of
15## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16## GNU General Public License for more details.
17##
18## You should have received a copy of the GNU General Public License
19## along with this program; if not, write to the Free Software
20## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21##
22import grok
23from grok import index
24from zope.component.interfaces import IFactory
25from zope.interface import implementedBy
26from hurry.workflow.interfaces import IWorkflowInfo, IWorkflowState
27from waeup.sirp.interfaces import IObjectHistory
28from waeup.sirp.app import University
29from waeup.sirp.applicants.interfaces import (
30    IResultEntry, IApplicant, IApplicantEdit, default_passport_image,
31    )
32from waeup.sirp.utils.helpers import attrs_to_fields
33
34class ResultEntry(grok.Context):
35    grok.implements(IResultEntry)
36
37    def __init__(self, subject=None, score=None):
38        self.subject = subject
39        self.score = score
40
41class Applicant(grok.Model):
42    grok.implements(IApplicant,IApplicantEdit)
43    grok.provides(IApplicant)
44
45    def __init__(self):
46        super(Applicant, self).__init__()
47        IWorkflowInfo(self).fireTransition('init')
48        self.application_date = None
49        return
50
51    #def getApplicantsRootLogger(self):
52    #    return grok.getSite()['applicants'].logger
53
54    def loggerInfo(self, ob_class, comment=None):
55        target = self.__name__
56        return grok.getSite()['applicants'].logger_info(ob_class,target,comment)
57
58    @property
59    def state(self):
60        state = IWorkflowState(self).getState()
61        return state
62
63    @property
64    def history(self):
65        history = IObjectHistory(self)
66        return history
67
68# Set all attributes of Applicant required in IApplicant as field
69# properties. Doing this, we do not have to set initial attributes
70# ourselves and as a bonus we get free validation when an attribute is
71# set.
72Applicant = attrs_to_fields(Applicant)
73
74class ApplicantCatalog(grok.Indexes):
75    """A catalog indexing :class:`Applicant` instances in the ZODB.
76    """
77    grok.site(University)
78    grok.name('applicants_catalog')
79    grok.context(IApplicant)
80
81    access_code = index.Field(attribute='access_code')
82
83class ApplicantTraverser(grok.Traverser):
84    """Get image of the context applicant.
85
86    Each applicant can provide a passport photograph which will be
87    returned by this traverser if:
88
89    - we request the exact filename of the picture or
90
91    - ask for a picture named 'passport.jpg'.
92
93    If no picture was stored yet, we get a placeholder image when
94    asking for `passport.jpg`.
95
96    If none of the above applies, we return ``None``, most probably
97    resulting a :exc:`NotFound` exception.
98
99    """
100    grok.context(IApplicant)
101    def traverse(self, name):
102        passport_filename = getattr(self.context.passport, 'filename', None)
103        if name == passport_filename:
104            return self.context.passport
105        if name == 'passport.jpg':
106            if self.context.passport is not None:
107                return self.context.passport
108            return default_passport_image(self.context)
109        return
110
111class ApplicantFactory(grok.GlobalUtility):
112    """A factory for faculty containers.
113    """
114    grok.implements(IFactory)
115    grok.name(u'waeup.Applicant')
116    title = u"Create a new applicant.",
117    description = u"This factory instantiates new applicant instances."
118
119    def __call__(self, *args, **kw):
120        return Applicant()
121
122    def getInterfaces(self):
123        return implementedBy(Applicant)
Note: See TracBrowser for help on using the repository browser.