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

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

Callback requests in the base package are only for demonstration purposes. These components must be neutralized in the customization package.

  • Property svn:keywords set to Id
File size: 6.2 KB
Line 
1## $Id: viewlets.py 7997 2012-03-28 16:49:18Z 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 hurry.workflow.interfaces import IWorkflowState
20from waeup.kofa.interfaces import IKofaObject
21from waeup.kofa.students.viewlets import PrimaryStudentNavTab
22from waeup.kofa.browser.viewlets import ManageActionButton, PrimaryNavTab
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    )
31
32from waeup.kofa.interfaces import MessageFactory as _
33
34grok.context(IKofaObject) # Make IKofaObject the default context
35grok.templatedir('browser_templates')
36
37class ApplicantsAuthTab(PrimaryNavTab):
38    """Applicants tab in primary navigation.
39    """
40    grok.context(IKofaObject)
41    grok.order(3)
42    grok.require('waeup.viewApplicantsTab')
43    pnav = 3
44    tab_title = _(u'Applicants')
45
46    @property
47    def link_target(self):
48        return self.view.application_url('applicants')
49
50class ApplicantsAnonTab(ApplicantsAuthTab):
51    """Applicants tab in primary navigation.
52
53    Display tab only for anonymous. Authenticated users can call the
54    form from the user navigation bar.
55    """
56    grok.require('waeup.Anonymous')
57    tab_title = _(u'Application')
58
59    # Also zope.manager has role Anonymous.
60    # To avoid displaying this tab, we have to check the principal id too.
61    @property
62    def link_target(self):
63        if self.request.principal.id == 'zope.anybody':
64            return self.view.application_url('applicants')
65        return
66
67class MyApplicationDataTab(PrimaryStudentNavTab):
68    """MyData-tab in primary navigation.
69    """
70    grok.order(3)
71    grok.require('waeup.viewMyApplicationDataTab')
72    pnav = 3
73    tab_title = _(u'My Data')
74
75    @property
76    def link_target(self):
77        try:
78            container, application_number = self.request.principal.id.split('_')
79        except ValueError:
80            return
81        rel_link = '/applicants/%s/%s' % (container, application_number)
82        return self.view.application_url() + rel_link
83
84class ManageApplicantsRootActionButton(ManageActionButton):
85    grok.context(IApplicantsRoot)
86    grok.view(ApplicantsRootPage)
87    grok.require('waeup.manageApplication')
88    text = _('Manage application section')
89
90class ApplicantsContainerManageActionButton(ManageActionButton):
91    grok.order(1)
92    grok.context(IApplicantsContainer)
93    grok.view(ApplicantsContainerPage)
94    grok.require('waeup.manageApplication')
95    text = _('Manage applicants container')
96
97class ApplicantRegisterActionButton(ManageActionButton):
98    grok.order(2)
99    grok.context(IApplicantsContainer)
100    grok.view(ApplicantsContainerPage)
101    grok.require('waeup.Anonymous')
102    icon = 'actionicon_login.png'
103    text = _('Register for application')
104    target = 'register'
105
106class ApplicantViewActionButton(ManageActionButton):
107    grok.context(IApplicant)
108    grok.view(ApplicantManageFormPage)
109    grok.require('waeup.viewApplication')
110    icon = 'actionicon_view.png'
111    text = _('View application record')
112    target = 'index'
113
114class ApplicantManageActionButton(ManageActionButton):
115    grok.order(1)
116    grok.context(IApplicant)
117    grok.view(ApplicantDisplayFormPage)
118    grok.require('waeup.manageApplication')
119    text = _('Manage application record')
120    target = 'manage'
121
122class ApplicantEditActionButton(ManageActionButton):
123    grok.order(2)
124    grok.context(IApplicant)
125    grok.view(ApplicantDisplayFormPage)
126    grok.require('waeup.handleApplication')
127    text = _('Edit application record')
128    target ='edit'
129
130    @property
131    def target_url(self):
132        """Get a URL to the target...
133        """
134        if self.context.locked:
135            return
136        return self.view.url(self.view.context, self.target)
137
138class PDFActionButton(ManageActionButton):
139    grok.order(3)
140    grok.context(IApplicant)
141    grok.require('waeup.viewApplication')
142    icon = 'actionicon_pdf.png'
143    text = _('Download application slip')
144    target = 'application_slip.pdf'
145
146class StudentCreateActionButton(ManageActionButton):
147    grok.order(4)
148    grok.context(IApplicant)
149    grok.require('waeup.manageApplication')
150    icon = 'actionicon_entrance.png'
151    text = _('Create student record')
152    target ='createstudent'
153
154    @property
155    def target_url(self):
156        """Get a URL to the target...
157        """
158        if IWorkflowState(self.context).getState() != 'admitted':
159            return
160        return self.view.url(self.view.context, self.target)
161
162class PaymentReceiptActionButton(ManageActionButton):
163    grok.order(1)
164    grok.context(IApplicantOnlinePayment)
165    grok.view(OnlinePaymentDisplayFormPage)
166    grok.require('waeup.viewApplication')
167    icon = 'actionicon_pdf.png'
168    text = _('Download payment receipt')
169    target = 'payment_receipt.pdf'
170
171    @property
172    def target_url(self):
173        if self.context.p_state != 'paid':
174            return ''
175        return self.view.url(self.view.context, self.target)
176
177class RequestCallbackActionButton(ManageActionButton):
178    grok.order(2)
179    grok.context(IApplicantOnlinePayment)
180    grok.view(OnlinePaymentDisplayFormPage)
181    grok.require('waeup.payApplicant')
182    icon = 'actionicon_call.png'
183    text = _('Request callback')
184    target = 'simulate_callback'
185
186    # This button must be neutralized
187    # in the customization package.
188    @property
189    def target_url(self):
190        if self.context.p_state != 'unpaid':
191            return ''
192        return self.view.url(self.view.context, self.target)
Note: See TracBrowser for help on using the repository browser.