source: main/waeup.aaue/trunk/src/waeup/aaue/students/browser.py @ 12370

Last change on this file since 12370 was 11846, checked in by Henrik Bettermann, 10 years ago

Add interswitch module.

Disable clearance payments.

  • Property svn:keywords set to Id
File size: 10.9 KB
RevLine 
[8911]1## $Id: browser.py 11846 2014-10-17 06:13:19Z henrik $
2##
3## Copyright (C) 2012 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 zope.i18n import translate
[9914]20from zope.component import getUtility
[11597]21from waeup.kofa.browser.layout import UtilityView
[8911]22from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
[9914]23from waeup.kofa.interfaces import IKofaUtils
[11597]24from waeup.kofa.students.interfaces import IStudentsUtils, IStudent
[11607]25from waeup.kofa.students.workflow import PAID
[9914]26from waeup.kofa.students.browser import (
[11846]27    StartClearancePage,
[9914]28    StudentBasePDFFormPage,
29    CourseTicketAddFormPage,
30    StudyLevelDisplayFormPage,
[10566]31    ExportPDFTranscriptPage,
[10922]32    ExportPDFAdmissionSlipPage,
[10269]33    )
[8911]34from kofacustom.nigeria.students.browser import (
35    NigeriaOnlinePaymentDisplayFormPage,
36    NigeriaOnlinePaymentAddFormPage,
[10269]37    NigeriaExportPDFPaymentSlipPage,
[11606]38    NigeriaExportPDFCourseRegistrationSlipPage,
39    NigeriaExportPDFClearanceSlipPage,
[10269]40    )
[9496]41from waeup.aaue.students.interfaces import (
[9914]42    ICustomStudentOnlinePayment,
[11607]43    ICustomStudentStudyLevel,
44    ICustomStudent)
[9914]45from waeup.aaue.interfaces import MessageFactory as _
[8911]46
[11846]47class CustomStartClearancePage(StartClearancePage):
48    with_ac = False
49
[8911]50class CustomOnlinePaymentDisplayFormPage(NigeriaOnlinePaymentDisplayFormPage):
51    """ Page to view an online payment ticket
52    """
53    grok.context(ICustomStudentOnlinePayment)
[9853]54    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
[9990]55        'provider_amt', 'gateway_amt', 'thirdparty_amt', 'p_item')
[8911]56    form_fields[
57        'creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
58    form_fields[
59        'payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
60
61class CustomOnlinePaymentAddFormPage(NigeriaOnlinePaymentAddFormPage):
62    """ Page to add an online payment ticket
63    """
64    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).select(
65        'p_category')
66
67class CustomExportPDFPaymentSlipPage(NigeriaExportPDFPaymentSlipPage):
68    """Deliver a PDF slip of the context.
69    """
70    grok.context(ICustomStudentOnlinePayment)
[9853]71    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
[9990]72        'provider_amt', 'gateway_amt', 'thirdparty_amt', 'p_item')
[8911]73    form_fields['creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
[9496]74    form_fields['payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
[9914]75
[11625]76    @property
77    def note(self):
78        text = ''
79        if self.context.p_category == 'schoolfee' and self.context.p_level == 100:
80            text += '\n\n Amounts include Naira 250 eTranzact transaction '
81            text += 'charge and Naira 2000 cost of matriculation gown.'
82        elif self.context.p_category in ('clearance', 'schoolfee'):
83            text += '\n\n Amounts include Naira 250 eTranzact transaction charge.'
84        return text
85
[9914]86class CustomStudyLevelDisplayFormPage(StudyLevelDisplayFormPage):
87    """ Page to display student study levels
88    """
89    grok.context(ICustomStudentStudyLevel)
[10480]90    form_fields = grok.AutoFields(ICustomStudentStudyLevel).omit(
91        'total_credits', 'gpa')
[9914]92    form_fields[
93        'validation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
94
95class CustomExportPDFCourseRegistrationSlipPage(
[10269]96    NigeriaExportPDFCourseRegistrationSlipPage):
[9914]97    """Deliver a PDF slip of the context.
98    """
99    grok.context(ICustomStudentStudyLevel)
100    form_fields = grok.AutoFields(ICustomStudentStudyLevel).omit(
[10102]101        'level_session', 'level_verdict',
[10480]102        'validated_by', 'validation_date', 'gpa')
[9914]103
[10269]104    omit_fields = ('password', 'suspended', 'suspended_comment',
[10689]105        'phone', 'adm_code', 'sex', 'email', 'date_of_birth',
[11538]106        'department', 'current_mode', 'current_level')
[10269]107
[9914]108    @property
109    def label(self):
110        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
111        lang = self.request.cookies.get('kofa.language', portal_language)
112        level_title = translate(self.context.level_title, 'waeup.kofa',
113            target_language=lang)
114        line0 = ''
115        if self.context.student.current_mode.endswith('_pt'):
116            line0 = 'DIRECTORATE OF PART-TIME DEGREE PROGRAMMES\n'
117        line1 = translate(_('Course Registration Slip'),
118            'waeup.kofa', target_language=portal_language) \
119            + ' %s' % level_title
120        line2 = translate(_('Session'),
121            'waeup.kofa', target_language=portal_language) \
122            + ' %s' % self.context.getSessionString
123        return '%s%s\n%s' % (line0, line1, line2)
124
125    @property
126    def title(self):
127        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
128        return translate(_('Units Registered'), 'waeup.kofa',
129            target_language=portal_language)
130
131    def _signatures(self):
[9968]132        return (
133            [('I have selected the course on the advise of my Head of '
134             'Department. <br>', _('Student\'s Signature'), '<br>')],
135            [('This student has satisfied the department\'s requirements. '
136             'I recommend to approve the course registration. <br>',
137             _('Head of Department\'s Signature'), '<br>')],
138            [('' , _('Principal Assistant Registrar\'s Signature'), '<br>')],
139            [('', _('Director\'s Signature'))]
140            )
[9914]141
142    def render(self):
143        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
144        Sem = translate('Sem.', 'waeup.kofa', target_language=portal_language)
145        Code = translate('Code', 'waeup.kofa', target_language=portal_language)
146        Title = translate('Title', 'waeup.kofa', target_language=portal_language)
147        Cred = translate('Cred.', 'waeup.kofa', target_language=portal_language)
148        Score = translate('Score', 'waeup.kofa', target_language=portal_language)
149        Grade = translate('Grade', 'waeup.kofa', target_language=portal_language)
[10269]150        Signature = translate(_('Lecturer\'s Signature'), 'waeup.aaue',
[9914]151            target_language=portal_language)
152        studentview = StudentBasePDFFormPage(self.context.student,
153            self.request, self.omit_fields)
154        students_utils = getUtility(IStudentsUtils)
[10442]155
156        tabledata = []
157        tableheader = []
158        contenttitle = []
159        for i in range(1,7):
160            tabledata.append(sorted(
161                [value for value in self.context.values() if value.semester == i],
162                key=lambda value: str(value.semester) + value.code))
163            tableheader.append([(Code,'code', 2.0),
164                               (Title,'title', 7),
165                               (Cred, 'credits', 1.5),
166                               (Score, 'score', 1.4),
167                               (Grade, 'grade', 1.4),
168                               (Signature, 'dummy', 3),
169                               ])
[9914]170        if len(self.label.split('\n')) == 3:
171            topMargin = 1.9
172        elif len(self.label.split('\n')) == 2:
173            topMargin = 1.7
174        else:
175            topMargin = 1.5
176        return students_utils.renderPDF(
177            self, 'course_registration_slip.pdf',
178            self.context.student, studentview,
[10442]179            tableheader=tableheader,
180            tabledata=tabledata,
[9914]181            signatures=self._signatures(),
[10269]182            topMargin=topMargin,
183            omit_fields=self.omit_fields
[9914]184            )
[10566]185
186class CustomExportPDFTranscriptPage(ExportPDFTranscriptPage):
187    """Deliver a PDF slip of the context.
188    """
189
190    def _sigsInFooter(self):
191        return []
192
193    def _signatures(self):
194        return ([(
[11555]195            'Akhimien Felicia O. (MANUPA) <br /> Principal Assistant Registrar  <br /> '
196            'Exams, Records and Data Processing Division <br /> For: Registrar')],)
[10922]197
198class CustomExportPDFAdmissionSlipPage(ExportPDFAdmissionSlipPage):
199    """Deliver a PDF Admission slip.
200    """
201
202    @property
203    def label(self):
204        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
205        return translate(_('e-Admission Slip \n'),
206            'waeup.kofa', target_language=portal_language) \
207            + ' %s' % self.context.display_fullname
[11597]208
[11606]209class CustomExportPDFClearanceSlipPage(NigeriaExportPDFClearanceSlipPage):
210    """Deliver a PDF slip of the context.
211    """
212
213    @property
214    def label(self):
215        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
216        return translate(_('Clearance Slip\n'),
217            'waeup.kofa', target_language=portal_language) \
218            + ' %s' % self.context.display_fullname
219
[11597]220class StudentGetMatricNumberPage(UtilityView, grok.View):
221    """ Construct and set the matriculation number.
222    """
223    grok.context(IStudent)
224    grok.name('get_matric_number')
225    grok.require('waeup.viewStudent')
226
227    def update(self):
228        students_utils = getUtility(IStudentsUtils)
229        msg, mnumber = students_utils.setMatricNumber(self.context)
230        if msg:
231            self.flash(msg, type="danger")
232        else:
233            self.flash(_('Matriculation number %s assigned.' % mnumber))
[11602]234            self.context.writeLogMessage(self, '%s assigned' % mnumber)
[11597]235        self.redirect(self.url(self.context))
236        return
237
238    def render(self):
[11607]239        return
240
241class ExportPDFMatricNumberSlipPage(UtilityView, grok.View):
242    """Deliver a PDF notification slip.
243    """
244    grok.context(ICustomStudent)
245    grok.name('matric_number_slip.pdf')
246    grok.require('waeup.viewStudent')
247    prefix = 'form'
248
249    form_fields = grok.AutoFields(ICustomStudent).select(
250        'student_id', 'matric_number')
251    omit_fields = ('date_of_birth', 'current_level')
252
253    @property
254    def label(self):
255        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
256        return translate(_('Matriculation Number Slip\n'),
257            'waeup.kofa', target_language=portal_language) \
258            + ' %s' % self.context.display_fullname
259
260    def render(self):
261        if self.context.state not in (PAID,) or not self.context.is_fresh \
262            or not self.context.matric_number:
263            self.flash('Not allowed.', type="danger")
264            self.redirect(self.url(self.context))
265            return
266        students_utils = getUtility(IStudentsUtils)
[11609]267        pre_text = _('Congratulations! Your acceptance fee and school fees ' +
268                     'payments have been received and your matriculation ' +
269                     'number generated with details as follows.')
[11607]270        return students_utils.renderPDFAdmissionLetter(self,
271            self.context.student, omit_fields=self.omit_fields,
272            pre_text=pre_text, post_text='')
Note: See TracBrowser for help on using the repository browser.