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

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

Provide application state as a (property) method of Applicant. This allows displaying the state of Applicant objects on ApplicantsContainer? form pages.

File size: 3.8 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 datetime import datetime
25from zope.component.interfaces import IFactory
26from zope.interface import implementedBy
27from zope.schema.fieldproperty import FieldProperty
28from hurry.workflow.interfaces import IWorkflowInfo, IWorkflowState
29from waeup.sirp.interfaces import IWAeUPSIRPPluggable
30from waeup.sirp.app import University
31from waeup.sirp.applicants.interfaces import (
32    IResultEntry, IApplicant, IApplicantEdit, default_passport_image,
33    )
34from waeup.sirp.utils.helpers import attrs_to_fields
35
36class ResultEntry(grok.Context):
37    grok.implements(IResultEntry)
38
39    def __init__(self, subject=None, score=None):
40        self.subject = subject
41        self.score = score
42
43class Applicant(grok.Model):
44    grok.implements(IApplicant,IApplicantEdit)
45    grok.provides(IApplicant)
46
47    def __init__(self):
48        super(Applicant, self).__init__()
49        timestamp = datetime.now().strftime("%d/%m/%Y %H:%M")
50        #Initialize workflow state...
51        IWorkflowInfo(self).fireTransition('init')
52
53    @property
54    def getApplicationState(self):
55        state = IWorkflowState(self).getState()
56        return state
57
58# Set all attributes of Applicant required in IApplicant as field
59# properties. Doing this, we do not have to set initial attributes
60# ourselves and as a bonus we get free validation when an attribute is
61# set.
62Applicant = attrs_to_fields(Applicant)
63
64class ApplicantCatalog(grok.Indexes):
65    """A catalog indexing :class:`Applicant` instances in the ZODB.
66    """
67    grok.site(University)
68    grok.name('applicants_catalog')
69    grok.context(IApplicant)
70
71    access_code = index.Field(attribute='access_code')
72
73class ApplicantTraverser(grok.Traverser):
74    """Get image of the context applicant.
75
76    Each applicant can provide a passport photograph which will be
77    returned by this traverser if:
78
79    - we request the exact filename of the picture or
80
81    - ask for a picture named 'passport.jpg'.
82
83    If no picture was stored yet, we get a placeholder image when
84    asking for `passport.jpg`.
85
86    If none of the above applies, we return ``None``, most probably
87    resulting a :exc:`NotFound` exception.
88
89    """
90    grok.context(IApplicant)
91    def traverse(self, name):
92        passport_filename = getattr(self.context.passport, 'filename', None)
93        if name == passport_filename:
94            return self.context.passport
95        if name == 'passport.jpg':
96            if self.context.passport is not None:
97                return self.context.passport
98            return default_passport_image(self.context)
99        return
100
101class ApplicantFactory(grok.GlobalUtility):
102    """A factory for faculty containers.
103    """
104    grok.implements(IFactory)
105    grok.name(u'waeup.Applicant')
106    title = u"Create a new applicant.",
107    description = u"This factory instantiates new applicant instances."
108
109    def __call__(self, *args, **kw):
110        return Applicant()
111
112    def getInterfaces(self):
113        return implementedBy(Applicant)
Note: See TracBrowser for help on using the repository browser.