source: main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py @ 10757

Last change on this file since 10757 was 10481, checked in by Henrik Bettermann, 11 years ago

Further adjustments.

  • Property svn:keywords set to Id
File size: 12.0 KB
RevLine 
[8911]1## $Id: browser.py 10481 2013-08-12 09:24:10Z 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
[9210]20from zope.schema.interfaces import ConstraintNotSatisfied
[9380]21from zope.component import getUtility
[9281]22from hurry.workflow.interfaces import IWorkflowInfo
[9686]23from waeup.kofa.interfaces import REQUESTED, IExtFileStore, IKofaUtils
[8911]24from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
[9222]25from waeup.kofa.browser.layout import KofaEditFormPage
[9281]26from waeup.kofa.browser.layout import action, jsaction
[9205]27from waeup.kofa.students.browser import (
[9686]28    StudyLevelEditFormPage, StudyLevelDisplayFormPage,
29    StudentBasePDFFormPage, ExportPDFCourseRegistrationSlipPage,
[10025]30    CourseTicketDisplayFormPage, StudentTriggerTransitionFormPage,
[9281]31    msave, emit_lock_message)
[9686]32from waeup.kofa.students.interfaces import IStudentsUtils, ICourseTicket
[9251]33from waeup.kofa.students.workflow import FORBIDDEN_POSTGRAD_TRANS
[8911]34from kofacustom.nigeria.students.browser import (
35    NigeriaOnlinePaymentDisplayFormPage,
[9251]36    NigeriaStudentBaseManageFormPage,
[9380]37    NigeriaStudentClearanceEditFormPage,
[8911]38    NigeriaOnlinePaymentAddFormPage,
[9281]39    NigeriaExportPDFPaymentSlipPage,
[9551]40    NigeriaExportPDFClearanceSlipPage,
[9281]41    )
[8911]42
[9210]43from waeup.uniben.students.interfaces import (
[9921]44    ICustomStudentOnlinePayment, ICustomStudentStudyCourse,
45    ICustomStudentStudyLevel)
[9210]46from waeup.uniben.interfaces import MessageFactory as _
[8911]47
48class CustomOnlinePaymentDisplayFormPage(NigeriaOnlinePaymentDisplayFormPage):
49    """ Page to view an online payment ticket
50    """
51    grok.context(ICustomStudentOnlinePayment)
[9775]52    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
[9993]53        'provider_amt', 'gateway_amt', 'thirdparty_amt', 'p_item')
[8911]54    form_fields[
55        'creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
56    form_fields[
57        'payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
58
[9380]59class CustomStudentClearanceEditFormPage(NigeriaStudentClearanceEditFormPage):
60    """ View to edit student clearance data by student
61    """
62
63    def dataNotComplete(self):
64        store = getUtility(IExtFileStore)
65        if not store.getFileByContext(self.context, attr=u'birth_certificate.jpg'):
66            return _('No birth certificate uploaded.')
67        if not store.getFileByContext(self.context, attr=u'ref_let.jpg'):
68            return _('No guarantor/referee letter uploaded.')
69        if not store.getFileByContext(self.context, attr=u'acc_let.jpg'):
70            return _('No acceptance letter uploaded.')
71        if not store.getFileByContext(self.context, attr=u'fst_sit_scan.jpg'):
72            return _('No first sitting result uploaded.')
[9395]73        #if not store.getFileByContext(self.context, attr=u'scd_sit_scan.jpg'):
74        #    return _('No second sitting result uploaded.')
[9380]75        if not store.getFileByContext(self.context, attr=u'secr_cults.jpg'):
[9848]76            return _('No affidavit of non-membership of secret cults uploaded.')
[9380]77        return False
78
[8911]79class CustomOnlinePaymentAddFormPage(NigeriaOnlinePaymentAddFormPage):
80    """ Page to add an online payment ticket
81    """
82    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).select(
83        'p_category')
84
85class CustomExportPDFPaymentSlipPage(NigeriaExportPDFPaymentSlipPage):
86    """Deliver a PDF slip of the context.
87    """
88    grok.context(ICustomStudentOnlinePayment)
[9775]89    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
[9993]90        'provider_amt', 'gateway_amt', 'thirdparty_amt', 'p_item')
[8911]91    form_fields['creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
[9205]92    form_fields['payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
93
94
[9551]95class CustomExportPDFClearanceSlipPage(NigeriaExportPDFClearanceSlipPage):
96    """Deliver a PDF slip of the context.
97    """
98
99    def render(self):
100        studentview = StudentBasePDFFormPage(self.context.student,
101            self.request, self.omit_fields)
102        students_utils = getUtility(IStudentsUtils)
103        return students_utils.renderPDF(
104            self, 'clearance_slip.pdf',
105            self.context.student, studentview, signatures=self._signatures(),
[10271]106            sigs_in_footer=self._sigsInFooter(), show_scans=False,
107            omit_fields=self.omit_fields)
[9551]108
[9210]109class StudyCourseCOEditFormPage(KofaEditFormPage):
[9281]110    """ Page to edit the student study course data by clearance officers.
[9210]111
112    This form page is available only in Uniben.
113    """
114    grok.context(ICustomStudentStudyCourse)
115    grok.name('edit_level')
116    grok.require('waeup.clearStudent')
117    label = _('Edit current level')
118    pnav = 4
119    form_fields = grok.AutoFields(
120        ICustomStudentStudyCourse).select('current_level')
121
122    def update(self):
123        if not (self.context.is_current and
124            self.context.student.state == REQUESTED):
125            emit_lock_message(self)
126            return
127        super(StudyCourseCOEditFormPage, self).update()
128        return
129
130    @action(_('Save'), style='primary')
131    def save(self, **data):
132        try:
133            msave(self, **data)
134        except ConstraintNotSatisfied:
135            # The selected level might not exist in certificate
136            self.flash(_('Current level not available for certificate.'))
137            return
138        #notify(grok.ObjectModifiedEvent(self.context.__parent__))
[9281]139        return
140
141class CustomStudyLevelEditFormPage(StudyLevelEditFormPage):
142    """ Page to edit the student study level data by students.
143
144    """
[9686]145    grok.template('studyleveleditpage')
[9281]146
[9686]147class CustomStudyLevelDisplayFormPage(StudyLevelDisplayFormPage):
148    """ Page to display student study levels
149    """
150    grok.template('studylevelpage')
151
152class CustomExportPDFCourseRegistrationSlipPage(
153    ExportPDFCourseRegistrationSlipPage):
154    """Deliver a PDF slip of the context.
155    """
156
[9921]157    form_fields = grok.AutoFields(ICustomStudentStudyLevel).omit(
[10481]158        'level_verdict', 'gpa')
[9921]159
[10441]160    @property
161    def tabletitle(self):
162        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
163        tabletitle = []
164        tabletitle.append(translate(_('1st Semester Courses'), 'waeup.kofa',
165            target_language=portal_language))
166        tabletitle.append(translate(_('2nd Semester Courses'), 'waeup.kofa',
167            target_language=portal_language))
168        tabletitle.append(translate(_('Level Courses'), 'waeup.kofa',
169            target_language=portal_language))
170        tabletitle.append(translate(_('1st Trimester Courses'), 'waeup.kofa',
171            target_language=portal_language))
172        tabletitle.append(translate(_('2nd Trimester Courses'), 'waeup.kofa',
173            target_language=portal_language))
174        tabletitle.append(translate(_('3rd Trimester Courses'), 'waeup.kofa',
175            target_language=portal_language))
176        return tabletitle
177
[9686]178    def render(self):
179        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
[9909]180        Code = translate('Code', 'waeup.kofa', target_language=portal_language)
181        Title = translate('Title', 'waeup.kofa', target_language=portal_language)
182        Dept = translate('Dept.', 'waeup.kofa', target_language=portal_language)
183        Faculty = translate('Faculty', 'waeup.kofa', target_language=portal_language)
184        Cred = translate(_('Credits'), 'waeup.uniben', target_language=portal_language)
[9686]185        studentview = StudentBasePDFFormPage(self.context.student,
186            self.request, self.omit_fields)
187        students_utils = getUtility(IStudentsUtils)
[10441]188
189        tabledata = []
190        tableheader = []
191        contenttitle = []
192        for i in range(1,7):
193            tabledata.append(sorted(
194                [value for value in self.context.values() if value.semester == i],
195                key=lambda value: str(value.semester) + value.code))
196            tableheader.append([(Code,'code', 2.5),
197                             (Title,'title', 5),
198                             (Dept,'dcode', 1.5), (Faculty,'fcode', 1.5),
199                             (Cred, 'credits', 1.5),
200                             ])
[9686]201        return students_utils.renderPDF(
202            self, 'course_registration_slip.pdf',
203            self.context.student, studentview,
[10441]204            tableheader=tableheader,
205            tabledata=tabledata,
[10271]206            omit_fields=self.omit_fields
[9908]207            )
[9848]208
209class UnibenExportPDFCourseResultSlipPage(ExportPDFCourseRegistrationSlipPage):
210    """Deliver a PDF slip of the context.
211    """
212
213    grok.name('course_result_slip.pdf')
214
215    @property
[10441]216    def tabletitle(self):
217        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
218        tabletitle = []
219        tabletitle.append(translate(_('1st Semester Courses'), 'waeup.kofa',
220            target_language=portal_language))
221        tabletitle.append(translate(_('2nd Semester Courses'), 'waeup.kofa',
222            target_language=portal_language))
223        tabletitle.append(translate(_('Level Courses'), 'waeup.kofa',
224            target_language=portal_language))
225        tabletitle.append(translate(_('1st Trimester Courses'), 'waeup.kofa',
226            target_language=portal_language))
227        tabletitle.append(translate(_('2nd Trimester Courses'), 'waeup.kofa',
228            target_language=portal_language))
229        tabletitle.append(translate(_('3rd Trimester Courses'), 'waeup.kofa',
230            target_language=portal_language))
231        return tabletitle
232
233    @property
[9848]234    def label(self):
235        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
236        lang = self.request.cookies.get('kofa.language', portal_language)
237        level_title = translate(self.context.level_title, 'waeup.kofa',
238            target_language=lang)
239        return translate(_('Course Result Slip'),
240            'waeup.uniben', target_language=portal_language) \
241            + ' %s' % level_title
242
243    def render(self):
244        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
[9909]245        Code = translate('Code', 'waeup.kofa', target_language=portal_language)
246        Title = translate('Title', 'waeup.kofa', target_language=portal_language)
247        Dept = translate('Dept.', 'waeup.kofa', target_language=portal_language)
248        Faculty = translate('Faculty', 'waeup.kofa', target_language=portal_language)
249        Cred = translate(_('Credits'), 'waeup.uniben', target_language=portal_language)
250        Grade = translate('Grade', 'waeup.kofa', target_language=portal_language)
[9848]251        studentview = StudentBasePDFFormPage(self.context.student,
252            self.request, self.omit_fields)
253        students_utils = getUtility(IStudentsUtils)
[10441]254
255        tabledata = []
256        tableheader = []
257        contenttitle = []
258        for i in range(1,7):
259            tabledata.append(sorted(
260                [value for value in self.context.values() if value.semester == i],
261                key=lambda value: str(value.semester) + value.code))
262            tableheader.append([(Code,'code', 2.5),
263                             (Title,'title', 5),
264                             (Dept,'dcode', 1.5), (Faculty,'fcode', 1.5),
265                             (Cred, 'credits', 1.5),
266                             (Grade, 'grade', 1.5),
267                             ])
[9908]268        return students_utils.renderPDF(
269            self, 'course_registration_slip.pdf',
270            self.context.student, studentview,
[10441]271            tableheader=tableheader,
272            tabledata=tabledata,
[10271]273            omit_fields=self.omit_fields
[9908]274            )
[9686]275
276class CustomCourseTicketDisplayFormPage(CourseTicketDisplayFormPage):
277    """ Page to display course tickets
278    """
279    form_fields = grok.AutoFields(ICourseTicket).omit('score')
Note: See TracBrowser for help on using the repository browser.