source: main/waeup.kofa/trunk/src/waeup/kofa/applicants/viewlets.py @ 9819

Last change on this file since 9819 was 9759, checked in by Henrik Bettermann, 12 years ago

Add 'Create all students' button on statistics page. There we can immediately see if there are any admitted applicants.

  • Property svn:keywords set to Id
File size: 7.9 KB
Line 
1## $Id: viewlets.py 9759 2012-12-01 17:48:59Z henrik $
2##
3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18import grok
19from waeup.kofa.interfaces import IKofaObject
20from waeup.kofa.students.viewlets import PrimaryStudentNavTab
21from waeup.kofa.browser.viewlets import (
22    ManageActionButton, PrimaryNavTab, AddActionButton)
23from waeup.kofa.applicants.interfaces import (
24    IApplicant, IApplicantsRoot, IApplicantsContainer,
25    IApplicantOnlinePayment
26    )
27from waeup.kofa.applicants.browser import (
28    ApplicantsRootPage, ApplicantsContainerPage, ApplicantManageFormPage,
29    ApplicantDisplayFormPage, OnlinePaymentDisplayFormPage,
30    ApplicantsContainerManageFormPage, ApplicantsStatisticsPage
31    )
32
33from waeup.kofa.interfaces import MessageFactory as _
34
35grok.context(IKofaObject) # Make IKofaObject the default context
36grok.templatedir('browser_templates')
37
38class ApplicantsAuthTab(PrimaryNavTab):
39    """Applicants tab in primary navigation.
40    """
41    grok.context(IKofaObject)
42    grok.order(3)
43    grok.require('waeup.viewApplicantsTab')
44    pnav = 3
45    tab_title = _(u'Applicants')
46
47    @property
48    def link_target(self):
49        return self.view.application_url('applicants')
50
51class ApplicantsAnonTab(ApplicantsAuthTab):
52    """Applicants tab in primary navigation.
53
54    Display tab only for anonymous. Authenticated users can call the
55    form from the user navigation bar.
56    """
57    grok.require('waeup.Anonymous')
58    tab_title = _(u'Application')
59
60    # Also zope.manager has role Anonymous.
61    # To avoid displaying this tab, we have to check the principal id too.
62    @property
63    def link_target(self):
64        if self.request.principal.id == 'zope.anybody':
65            return self.view.application_url('applicants')
66        return
67
68class MyApplicationDataTab(PrimaryStudentNavTab):
69    """MyData-tab in primary navigation.
70    """
71    grok.order(3)
72    grok.require('waeup.viewMyApplicationDataTab')
73    pnav = 3
74    tab_title = _(u'My Data')
75
76    @property
77    def link_target(self):
78        try:
79            container, application_number = self.request.principal.id.split('_')
80        except ValueError:
81            return
82        rel_link = '/applicants/%s/%s' % (container, application_number)
83        return self.view.application_url() + rel_link
84
85class ApplicantsRootSearchActionButton(ManageActionButton):
86    grok.order(1)
87    grok.context(IApplicantsRoot)
88    grok.view(ApplicantsRootPage)
89    grok.require('waeup.viewApplication')
90    text = _('Search applicants')
91    icon = 'actionicon_search.png'
92    target = '@@search'
93
94class ApplicantsRootManageActionButton(ManageActionButton):
95    grok.order(2)
96    grok.context(IApplicantsRoot)
97    grok.view(ApplicantsRootPage)
98    grok.require('waeup.manageApplication')
99    text = _('Manage application section')
100
101class ApplicantRegisterActionButton(ManageActionButton):
102    grok.order(1)
103    grok.context(IApplicantsContainer)
104    grok.view(ApplicantsContainerPage)
105    grok.require('waeup.Anonymous')
106    icon = 'actionicon_login.png'
107    text = _('Register for application')
108    target = 'register'
109
110class ApplicantsContainerAddActionButton(AddActionButton):
111    grok.order(1)
112    grok.context(IApplicantsContainer)
113    grok.view(ApplicantsContainerManageFormPage)
114    grok.require('waeup.manageApplication')
115    text = _('Add applicant')
116    target = 'addapplicant'
117
118class ApplicantsContainerStatisticsActionButton(ManageActionButton):
119    grok.order(2)
120    grok.context(IApplicantsContainer)
121    grok.view(ApplicantsContainerManageFormPage)
122    grok.require('waeup.viewApplicationStatistics')
123    icon = 'actionicon_statistics.png'
124    text = _('Container statistics')
125    target = 'statistics'
126
127class ApplicantsContainerStatisticsActionButton2(
128        ApplicantsContainerStatisticsActionButton):
129    grok.order(3)
130    grok.view(ApplicantsContainerPage)
131
132class ApplicantsContainerManageActionButton(ManageActionButton):
133    grok.order(2)
134    grok.context(IApplicantsContainer)
135    grok.view(ApplicantsContainerPage)
136    grok.require('waeup.manageApplication')
137    text = _('Manage container')
138    target = 'manage'
139
140class AllStudentsCreateActionButton(ManageActionButton):
141    grok.order(1)
142    grok.context(IApplicantsContainer)
143    grok.view(ApplicantsStatisticsPage)
144    grok.require('waeup.managePortal')
145    icon = 'actionicon_entrance.png'
146    text = _('Create all student records')
147    target ='createallstudents'
148
149class ApplicantViewActionButton(ManageActionButton):
150    grok.context(IApplicant)
151    grok.view(ApplicantManageFormPage)
152    grok.require('waeup.viewApplication')
153    icon = 'actionicon_view.png'
154    text = _('View application record')
155    target = 'index'
156
157class ApplicantManageActionButton(ManageActionButton):
158    grok.order(1)
159    grok.context(IApplicant)
160    grok.view(ApplicantDisplayFormPage)
161    grok.require('waeup.manageApplication')
162    text = _('Manage application record')
163    target = 'manage'
164
165class ApplicantEditActionButton(ManageActionButton):
166    grok.order(2)
167    grok.context(IApplicant)
168    grok.view(ApplicantDisplayFormPage)
169    grok.require('waeup.handleApplication')
170    text = _('Edit application record')
171    target ='edit'
172
173    @property
174    def target_url(self):
175        """Get a URL to the target...
176        """
177        if self.context.locked or (
178            self.context.__parent__.expired and
179            self.context.__parent__.strict_deadline):
180            return
181        return self.view.url(self.view.context, self.target)
182
183class PDFActionButton(ManageActionButton):
184    grok.order(3)
185    grok.context(IApplicant)
186    grok.require('waeup.viewApplication')
187    icon = 'actionicon_pdf.png'
188    text = _('Download application slip')
189    target = 'application_slip.pdf'
190
191    @property
192    def target_url(self):
193        """Get a URL to the target...
194        """
195        if self.context.state in ('initialized', 'started', 'paid'):
196            return
197        return self.view.url(self.view.context, self.target)
198
199class StudentCreateActionButton(ManageActionButton):
200    grok.order(4)
201    grok.context(IApplicant)
202    grok.require('waeup.manageApplication')
203    icon = 'actionicon_entrance.png'
204    text = _('Create student record')
205    target ='createstudent'
206
207    @property
208    def target_url(self):
209        """Get a URL to the target...
210        """
211        if self.context.state != 'admitted':
212            return
213        return self.view.url(self.view.context, self.target)
214
215class PaymentReceiptActionButton(ManageActionButton):
216    grok.order(9) # This button should always be the last one.
217    grok.context(IApplicantOnlinePayment)
218    grok.view(OnlinePaymentDisplayFormPage)
219    grok.require('waeup.viewApplication')
220    icon = 'actionicon_pdf.png'
221    text = _('Download payment slip')
222    target = 'payment_slip.pdf'
223
224    @property
225    def target_url(self):
226        #if self.context.p_state != 'paid':
227        #    return ''
228        return self.view.url(self.view.context, self.target)
229
230class ApprovePaymentActionButton(ManageActionButton):
231    grok.order(8)
232    grok.context(IApplicantOnlinePayment)
233    grok.view(OnlinePaymentDisplayFormPage)
234    grok.require('waeup.managePortal')
235    icon = 'actionicon_accept.png'
236    text = _('Approve payment')
237    target = 'approve'
238
239    @property
240    def target_url(self):
241        if self.context.p_state == 'paid':
242            return ''
243        return self.view.url(self.view.context, self.target)
Note: See TracBrowser for help on using the repository browser.