source: main/kofacustom.edocons/trunk/src/kofacustom/edocons/applicants/browser.py @ 17106

Last change on this file since 17106 was 17106, checked in by Henrik Bettermann, 2 years ago

Customize transcript application.

  • Property svn:keywords set to Id
File size: 10.8 KB
Line 
1## $Id: browser.py 17106 2022-09-23 13:18:58Z 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##
18"""UI components for basic applicants and related components.
19"""
20import grok
21from zope.component import getUtility
22from zope.i18n import translate
23from waeup.kofa.interfaces import IExtFileStore, IKofaUtils
24from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
25from zope.formlib.textwidgets import BytesDisplayWidget
26from waeup.kofa.students.interfaces import IStudentsUtils
27from waeup.kofa.applicants.browser import (ApplicantDisplayFormPage,
28    ApplicantManageFormPage, ApplicantEditFormPage,
29    ApplicantRegistrationPage,
30    OnlinePaymentDisplayFormPage,
31    OnlinePaymentBreadcrumb, ExportPDFPaymentSlipPage,
32    AdditionalFile
33    )
34from waeup.kofa.applicants.viewlets import (
35    PDFActionButton, PaymentReceiptActionButton)
36from waeup.kofa.applicants.pdf import PDFApplicationSlip
37from kofacustom.nigeria.applicants.browser import (
38    NigeriaApplicantDisplayFormPage,
39    NigeriaApplicantManageFormPage,
40    NigeriaApplicantEditFormPage,
41    NigeriaPDFApplicationSlip)
42from kofacustom.nigeria.applicants.interfaces import (
43    INigeriaPGApplicant, INigeriaUGApplicant,
44    INigeriaPGApplicantEdit, INigeriaUGApplicantEdit,
45    INigeriaApplicantOnlinePayment,
46    #UG_OMIT_DISPLAY_FIELDS,
47    #UG_OMIT_PDF_FIELDS,
48    #UG_OMIT_MANAGE_FIELDS,
49    #UG_OMIT_EDIT_FIELDS,
50    PG_OMIT_DISPLAY_FIELDS,
51    PG_OMIT_PDF_FIELDS,
52    PG_OMIT_MANAGE_FIELDS,
53    PG_OMIT_EDIT_FIELDS,
54    )
55from kofacustom.edocons.applicants.interfaces import (
56    ICustomPGApplicant, ICustomUGApplicant, ICustomApplicant,
57    ICustomPGApplicantEdit, ICustomUGApplicantEdit,
58    ICustomApplicantOnlinePayment, ITranscriptApplicant,
59    )
60from kofacustom.nigeria.interfaces import MessageFactory as _
61
62# Fields to be omitted in all display forms. course_admitted is
63# rendered separately.
64
65OMIT_DISPLAY_FIELDS = ('locked', 'course_admitted',
66    'result_uploaded', 'suspended', 'special_application',
67    'bank_account_number',
68    'bank_account_name',
69    'bank_name',
70    #'course1', 'course2' # these 2 have been added and later removed again
71    )
72
73# UG students are all undergraduate students.
74UG_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS + (
75    'jamb_subjects_list', 'programme_type')
76UG_OMIT_PDF_FIELDS = UG_OMIT_DISPLAY_FIELDS + ('phone',)
77UG_OMIT_MANAGE_FIELDS = (
78    'special_application',
79    'jamb_subjects_list',
80    'programme_type',
81    #'course1', 'course2', # these 2 have been added and later removed again
82    )
83UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + OMIT_DISPLAY_FIELDS + (
84    'student_id',
85    'notice',
86    'screening_score',
87    'screening_venue',
88    'screening_date',
89    'cbt_score',
90    'cbt_venue',
91    'cbt_date',
92    'jamb_age',
93    'jamb_subjects',
94    'jamb_score',
95    'jamb_reg_number',
96    'aggregate')
97
98TSC_OMIT_FIELDS = ('locked', 'suspended',
99    )
100   
101
102TSC_OMIT_EDIT_FIELDS = TSC_OMIT_FIELDS + (
103    'applicant_id',
104    'proc_date',
105    'courier_tno',
106    )
107
108TSC_OMIT_MANAGE_FIELDS = TSC_OMIT_FIELDS + (
109    'applicant_id',)     
110
111class CustomApplicantDisplayFormPage(NigeriaApplicantDisplayFormPage):
112    """A display view for applicant data.
113    """
114
115    @property
116    def form_fields(self):
117        if self.target is not None and self.target.startswith('pg'):
118            form_fields = grok.AutoFields(ICustomPGApplicant)
119            for field in PG_OMIT_DISPLAY_FIELDS:
120                form_fields = form_fields.omit(field)
121        elif self.target is not None and self.target.startswith('tsc'):
122            form_fields = grok.AutoFields(ITranscriptApplicant)
123            for field in TSC_OMIT_FIELDS:
124                form_fields = form_fields.omit(field)           
125            return form_fields
126        else:
127            form_fields = grok.AutoFields(ICustomUGApplicant)
128            for field in UG_OMIT_DISPLAY_FIELDS:
129                form_fields = form_fields.omit(field)
130            form_fields['notice'].custom_widget = BytesDisplayWidget
131        #form_fields['perm_address'].custom_widget = BytesDisplayWidget
132        if not getattr(self.context, 'student_id'):
133            form_fields = form_fields.omit('student_id')
134        if not getattr(self.context, 'screening_score'):
135            form_fields = form_fields.omit('screening_score')
136        if not getattr(self.context, 'screening_venue') or self._not_paid():
137            form_fields = form_fields.omit('screening_venue')
138        if not getattr(self.context, 'screening_date') or self._not_paid():
139            form_fields = form_fields.omit('screening_date')
140        if not getattr(self.context, 'cbt_score'):
141            form_fields = form_fields.omit('cbt_score')
142        if not getattr(self.context, 'cbt_venue') or self._not_paid():
143            form_fields = form_fields.omit('cbt_venue')
144        if not getattr(self.context, 'cbt_date') or self._not_paid():
145            form_fields = form_fields.omit('cbt_date')
146        return form_fields
147
148class CustomPDFApplicationSlip(NigeriaPDFApplicationSlip):
149
150    @property
151    def form_fields(self):
152        if self.target is not None and self.target.startswith('pg'):
153            form_fields = grok.AutoFields(ICustomPGApplicant)
154            for field in PG_OMIT_PDF_FIELDS:
155                form_fields = form_fields.omit(field)
156        elif self.target is not None and self.target.startswith('tsc'):
157            form_fields = grok.AutoFields(ITranscriptApplicant)
158            for field in TSC_OMIT_FIELDS:
159                form_fields = form_fields.omit(field)             
160            return form_fields
161        else:
162            form_fields = grok.AutoFields(ICustomUGApplicant)
163            for field in UG_OMIT_PDF_FIELDS:
164                form_fields = form_fields.omit(field)
165        if not getattr(self.context, 'student_id'):
166            form_fields = form_fields.omit('student_id')
167        if not getattr(self.context, 'screening_score'):
168            form_fields = form_fields.omit('screening_score')
169        if not getattr(self.context, 'screening_venue'):
170            form_fields = form_fields.omit('screening_venue')
171        if not getattr(self.context, 'screening_date'):
172            form_fields = form_fields.omit('screening_date')
173        if not getattr(self.context, 'cbt_score'):
174            form_fields = form_fields.omit('cbt_score')
175        if not getattr(self.context, 'cbt_venue'):
176            form_fields = form_fields.omit('cbt_venue')
177        if not getattr(self.context, 'cbt_date'):
178            form_fields = form_fields.omit('cbt_date')
179        return form_fields
180
181class CustomApplicantManageFormPage(NigeriaApplicantManageFormPage):
182    """A full edit view for applicant data.
183    """
184
185    def display_fileupload(self, filename):
186        if self.target is not None and not self.target.startswith('tsc'):
187            return False
188
189    @property
190    def form_fields(self):
191        if self.target is not None and self.target.startswith('pg'):
192            form_fields = grok.AutoFields(ICustomPGApplicant)
193            for field in PG_OMIT_MANAGE_FIELDS:
194                form_fields = form_fields.omit(field)
195        elif self.target is not None and self.target.startswith('tsc'):
196            form_fields = grok.AutoFields(ITranscriptApplicant)
197            for field in TSC_OMIT_MANAGE_FIELDS:
198                form_fields = form_fields.omit(field)             
199            return form_fields
200        else:
201            form_fields = grok.AutoFields(ICustomUGApplicant)
202            for field in UG_OMIT_MANAGE_FIELDS:
203                form_fields = form_fields.omit(field)
204        form_fields['student_id'].for_display = True
205        form_fields['applicant_id'].for_display = True
206        return form_fields
207
208class CustomApplicantEditFormPage(NigeriaApplicantEditFormPage):
209    """An applicant-centered edit view for applicant data.
210    """
211
212    def unremovable(self, ticket):
213        return True
214
215    def display_fileupload(self, filename):
216        if self.target is not None and not self.target.startswith('tsc'):
217            return False
218
219    @property
220    def form_fields(self):
221        if self.target is not None and self.target.startswith('pg'):
222            form_fields = grok.AutoFields(ICustomPGApplicantEdit)
223            for field in PG_OMIT_EDIT_FIELDS:
224                form_fields = form_fields.omit(field)
225        elif self.target is not None and self.target.startswith('tsc'):
226            form_fields = grok.AutoFields(ITranscriptApplicant)
227            for field in TSC_OMIT_EDIT_FIELDS:
228                form_fields = form_fields.omit(field)           
229            return form_fields
230        else:
231            form_fields = grok.AutoFields(ICustomUGApplicantEdit)
232            for field in UG_OMIT_EDIT_FIELDS:
233                form_fields = form_fields.omit(field)
234        form_fields['applicant_id'].for_display = True
235        form_fields['reg_number'].for_display = True
236        return form_fields
237
238    def dataNotComplete(self, data):
239        store = getUtility(IExtFileStore)
240        if self.context.__parent__.with_picture \
241            and self.context.__parent__.picture_editable:
242            store = getUtility(IExtFileStore)
243            if not store.getFileByContext(self.context, attr=u'passport.jpg'):
244                return _('No passport picture uploaded.')
245        if self.target is not None \
246            and self.target.startswith('tscf') \
247            and not store.getFileByContext(self.context, attr=u'res_stat.pdf'):
248            return _('No statement of result pdf file uploaded.')
249        if self.target is not None \
250            and self.target.startswith('tscf') \
251            and not store.getFileByContext(self.context, attr=u'not_reg.pdf'):
252            return _('No notification of result pdf file uploaded.')
253        #if self.target is not None \
254        #    and self.target.startswith('tsc') \
255        #    and not store.getFileByContext(self.context, attr=u'testimonial.pdf'):
256        #    return _('No testimonial pdf file uploaded.')
257        return False
258
259class ResultStatement(AdditionalFile):
260    grok.name('res_stat')
261   
262class Testimonial(AdditionalFile):
263    grok.name('testimonial')
264
265class NotificationResult(AdditionalFile):
266    grok.name('not_res')     
267   
268class DocumentUploadForm(AdditionalFile):
269    grok.name('docupload')
270
271class OtherDocument1(AdditionalFile):
272    grok.name('doc_1')   
273
274class OtherDocument4(AdditionalFile):
275    grok.name('doc_2')           
Note: See TracBrowser for help on using the repository browser.