source: main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/browser.py @ 16627

Last change on this file since 16627 was 16627, checked in by Henrik Bettermann, 3 years ago

Acceptance must not be added to school fee.

  • Property svn:keywords set to Id
File size: 35.2 KB
Line 
1## $Id: browser.py 16627 2021-09-20 07:02:50Z 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
19import os
20from zope.i18n import translate
21from zope.schema.interfaces import ConstraintNotSatisfied
22from zope.component import getUtility
23from zope.security import checkPermission
24from zope.formlib.textwidgets import BytesDisplayWidget
25from hurry.workflow.interfaces import IWorkflowInfo
26from waeup.kofa.interfaces import (
27    REQUESTED, ADMITTED, CLEARANCE, REQUESTED, CLEARED,
28    IExtFileStore, IKofaUtils, academic_sessions_vocab)
29from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
30from waeup.kofa.browser.layout import (
31    action, jsaction, UtilityView, KofaEditFormPage)
32from waeup.kofa.students.browser import (
33    StudyLevelEditFormPage, StudyLevelDisplayFormPage,
34    StudentBasePDFFormPage, ExportPDFCourseRegistrationSlip,
35    CourseTicketDisplayFormPage, StudentTriggerTransitionFormPage,
36    StartClearancePage, BalancePaymentAddFormPage,
37    ExportPDFAdmissionSlip, ExportPDFPersonalDataSlip,
38    PaymentsManageFormPage,
39    msave, emit_lock_message)
40from waeup.kofa.students.interfaces import (
41    IStudentsUtils, ICourseTicket, IStudent)
42from waeup.kofa.students.vocabularies import StudyLevelSource
43from waeup.kofa.students.workflow import FORBIDDEN_POSTGRAD_TRANS
44from kofacustom.nigeria.students.browser import (
45    NigeriaOnlinePaymentDisplayFormPage,
46    NigeriaStudentBaseDisplayFormPage,
47    NigeriaStudentBaseManageFormPage,
48    NigeriaStudentClearanceEditFormPage,
49    NigeriaOnlinePaymentAddFormPage,
50    NigeriaExportPDFPaymentSlip,
51    NigeriaExportPDFClearanceSlip,
52    NigeriaExportPDFCourseRegistrationSlip,
53    NigeriaStudentBaseEditFormPage,
54    NigeriaBedTicketAddPage,
55    NigeriaAccommodationManageFormPage,
56    NigeriaAccommodationDisplayFormPage,
57    NigeriaStudentPersonalManageFormPage,
58    NigeriaStudentPersonalEditFormPage,
59    NigeriaStudentPersonalDisplayFormPage
60    )
61from kofacustom.iuokada.students.interfaces import (
62    ICustomStudentOnlinePayment, ICustomStudentStudyCourse,
63    ICustomStudentStudyLevel, ICustomStudentBase, ICustomStudent,
64    ICustomStudentPersonal, ICustomStudentPersonalEdit)
65from kofacustom.iuokada.interfaces import MessageFactory as _
66
67class CustomStudentBaseDisplayFormPage(NigeriaStudentBaseDisplayFormPage):
68    """ Page to display student base data
69    """
70    form_fields = grok.AutoFields(ICustomStudentBase).omit(
71        'password', 'suspended', 'suspended_comment', 'flash_notice')
72
73class CustomStudentBaseManageFormPage(NigeriaStudentBaseManageFormPage):
74    """ View to manage student base data
75    """
76    form_fields = grok.AutoFields(ICustomStudentBase).omit(
77        'student_id', 'adm_code', 'suspended',
78        'financially_cleared_by', 'financial_clearance_date')
79
80class StudentBaseEditFormPage(NigeriaStudentBaseEditFormPage):
81    """ View to edit student base data
82    """
83    @property
84    def form_fields(self):
85        form_fields = grok.AutoFields(ICustomStudentBase).select(
86            'email', 'email2', 'parents_email', 'phone',)
87        if not self.context.state in (ADMITTED, CLEARANCE):
88            form_fields['parents_email'].for_display = True
89        return form_fields
90
91class CustomExportPDFCourseRegistrationSlip(
92    NigeriaExportPDFCourseRegistrationSlip):
93    """Deliver a PDF slip of the context.
94    """
95
96    def _signatures(self):
97        return (
98                ['Student Signature'],
99                ['HoD / Course Adviser Signature'],
100                ['College Officer Signature'],
101                ['Dean Signature']
102                )
103
104    #def _sigsInFooter(self):
105    #    return (_('Student'),
106    #            _('HoD / Course Adviser'),
107    #            _('College Officer'),
108    #            _('Dean'),
109    #            )
110    #    return ()
111
112class CustomStudentPersonalDisplayFormPage(NigeriaStudentPersonalDisplayFormPage):
113    """ Page to display student personal data
114    """
115    form_fields = grok.AutoFields(ICustomStudentPersonal)
116    form_fields['perm_address'].custom_widget = BytesDisplayWidget
117    form_fields['postal_address'].custom_widget = BytesDisplayWidget
118    form_fields['hostel_address'].custom_widget = BytesDisplayWidget
119    form_fields['father_address'].custom_widget = BytesDisplayWidget
120    form_fields['mother_address'].custom_widget = BytesDisplayWidget
121    form_fields['guardian_address'].custom_widget = BytesDisplayWidget
122    form_fields[
123        'personal_updated'].custom_widget = FriendlyDatetimeDisplayWidget('le')
124
125
126class CustomStudentPersonalEditFormPage(NigeriaStudentPersonalEditFormPage):
127    """ Page to edit personal data
128    """
129    form_fields = grok.AutoFields(ICustomStudentPersonalEdit).omit(
130        'personal_updated')
131
132    def update(self):
133        #if not self.context.is_fresh:
134        #    self.flash('Not allowed.', type="danger")
135        #    self.redirect(self.url(self.context))
136        #    return
137        if not self.context.minimumStudentPayments():
138            self.flash('Please make 40% of your tution fee payments first.',
139                       type="warning")
140            self.redirect(self.url(self.context, 'view_personal'))
141            return
142        super(CustomStudentPersonalEditFormPage, self).update()
143        return
144
145
146class CustomStudentPersonalManageFormPage(NigeriaStudentPersonalManageFormPage):
147    """ Page to manage personal data
148    """
149    form_fields = grok.AutoFields(ICustomStudentPersonal)
150    form_fields['personal_updated'].for_display = True
151    form_fields[
152        'personal_updated'].custom_widget = FriendlyDatetimeDisplayWidget('le')
153
154class CustomExportPDFPersonalDataSlip(ExportPDFPersonalDataSlip):
155    """Deliver a PDF base and personal data slip.
156    """
157    grok.name('course_registration_clearance.pdf')
158    omit_fields = (
159        'phone', 'email',
160        'suspended',
161        'adm_code', 'suspended_comment',
162        'current_level',
163        'flash_notice', 'entry_session',
164        'parents_email')
165
166    form_fields = grok.AutoFields(ICustomStudentPersonal)
167
168    def _signatures(self):
169        return ([('I certify that the above named student has satisfied the financial requirements for registration.', 'Name and Signature of Bursary Staff', '<br><br>')],
170                [('I certify that the credentials of the student have been screened by me and the student is hereby cleared.', 'Name and Signature of Registry Staff', '<br><br>')],
171                [('I certify that the above named student has registered with the Library.', 'Name and Signature of Library Staff', '<br><br>')],
172                [('I certify that the above named student has been registered with the college. ', 'Name and Signature of College Officer', '<br><br>')],
173                [('I certify that the above named student has completed his/her ICT registration. ', 'Name and Signature of ICT Staff', '<br><br>')],
174                [('Eligibility/Congratulation Station', 'Name and Signature of Registrar', '')],
175                )
176
177    @property
178    def tabletitle(self):
179        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
180        tabletitle = []
181        session = self.context.student.current_session
182        tabletitle.append('_PB_Successful %s/%s Session Payments' %(session, session+1))
183        return tabletitle
184
185    def render(self):
186        if not self.context.minimumStudentPayments():
187            self.redirect(self.url(self.context))
188            return
189        studentview = StudentBasePDFFormPage(self.context.student,
190            self.request, self.omit_fields)
191        students_utils = getUtility(IStudentsUtils)
192
193        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
194        P_ID = translate(_('Payment Id'), 'waeup.kofa', target_language=portal_language)
195        #CD = translate(_('Creation Date'), 'waeup.kofa', target_language=portal_language)
196        PD = translate(_('Payment Date'), 'waeup.kofa', target_language=portal_language)
197        CAT = translate(_('Payment Category'), 'waeup.kofa', target_language=portal_language)
198        ITEM = translate(_('Payment Item'), 'waeup.kofa', target_language=portal_language)
199        AMT = translate(_('Amount (Naira)'), 'waeup.kofa', target_language=portal_language)
200        SSS = translate(_('Payment Session'), 'waeup.kofa', target_language=portal_language)
201        tabledata = []
202        tableheader = []
203        tabledata.append(sorted(
204            [value for value in self.context['payments'].values()
205             if value.p_state in ('paid', 'waived', 'scholarship')
206             and value.p_session >= value.student.current_session],
207             key=lambda value: value.p_session))
208        tableheader.append([(P_ID,'p_id', 4.2),
209                         #(CD,'creation_date', 3),
210                         (PD,'formatted_p_date', 3),
211                         (CAT,'category', 3),
212                         (ITEM, 'p_item', 3),
213                         (AMT, 'amount_auth', 2),
214                         (SSS, 'p_session', 2),
215                         ])
216
217        #watermark_path = os.path.join(
218        #    os.path.dirname(__file__), 'static', 'watermark.pdf')
219        #watermark = open(watermark_path, 'rb')
220        #file_path = os.path.join(
221        #    os.path.dirname(__file__), 'static', 'biodataPage2.pdf')
222        #file = open(file_path, 'rb')
223        #mergefiles = [file,]
224
225        return students_utils.renderPDF(
226            self, 'course_registration_clearance.pdf',
227            self.context.student, studentview,
228            omit_fields=self.omit_fields,
229            signatures=self._signatures(),
230
231            tableheader=tableheader,
232            tabledata=tabledata,
233
234            pagebreak=True,
235        #    mergefiles=mergefiles,
236        #    watermark=watermark
237            )
238
239class CustomAccommodationDisplayFormPage(NigeriaAccommodationDisplayFormPage):
240    """ Page to view bed tickets.
241    """
242    with_hostel_selection = True
243
244class CustomAccommodationManageFormPage(NigeriaAccommodationManageFormPage):
245    """ Page to manage bed tickets.
246    This manage form page is for both students and students officers.
247    """
248    with_hostel_selection = True
249
250class CustomBedTicketAddPage(NigeriaBedTicketAddPage):
251    """ Page to add a bed ticket
252    """
253    with_ac = False
254    with_bedselection = True
255
256class CustomPaymentsManageFormPage(PaymentsManageFormPage):
257    """ Page to manage the student payments. This manage form page is for
258    both students and students officers. IUOkada does not allow students
259    to remove any payment ticket.
260    """
261    grok.template('paymentsmanagepage')
262
263    @property
264    def manage_payments_allowed(self):
265        return checkPermission('waeup.manageStudent', self.context)
266
267    @property
268    def schoolfee_payments_made(self):
269        cs = self.context.student.current_session
270        SF_PAYMENTS = ('schoolfee', 'schoolfee40', 'secondinstal', 'clearance')
271        if cs > self.context.student.entry_session:
272            sf_paid = {cs-1: 0, cs: 0, cs+1: 0}
273            sessions = (cs-1, cs, cs+1)
274        else:
275            sf_paid = {cs: 0, cs+1: 0}
276            sessions = (cs, cs+1)
277        try:
278            certificate = self.context.student['studycourse'].certificate
279        except (AttributeError, TypeError):
280            return sf_paid, 0
281        if self.context.student in (ADMITTED, CLEARANCE, REQUESTED, CLEARED):
282            total_sf = getattr(certificate, 'school_fee_1', 0.0)
283        else:
284            total_sf = getattr(certificate, 'school_fee_2', 0.0)
285        for ticket in self.context.student['payments'].values():
286            if ticket.p_category in SF_PAYMENTS and \
287                ticket.p_state == 'paid' and \
288                ticket.p_session in sessions:
289                sf_paid[ticket.p_session] += ticket.amount_auth
290        return sf_paid, total_sf
291
292class StudentGetMatricNumberPage(UtilityView, grok.View):
293    """ Construct and set the matriculation number.
294    """
295    grok.context(IStudent)
296    grok.name('get_matric_number')
297    grok.require('waeup.manageStudent')
298
299    def update(self):
300        students_utils = getUtility(IStudentsUtils)
301        msg, mnumber = students_utils.setMatricNumber(self.context)
302        if msg:
303            self.flash(msg, type="danger")
304        else:
305            self.flash(_('Matriculation number %s assigned.' % mnumber))
306            self.context.writeLogMessage(self, '%s assigned' % mnumber)
307        self.redirect(self.url(self.context))
308        return
309
310    def render(self):
311        return
312
313class SwitchLibraryAccessView(UtilityView, grok.View):
314    """ Switch the library attribute
315    """
316    grok.context(ICustomStudent)
317    grok.name('switch_library_access')
318    grok.require('waeup.switchLibraryAccess')
319
320    def update(self):
321        if self.context.library:
322            self.context.library = False
323            self.context.writeLogMessage(self, 'library access disabled')
324            self.flash(_('Library access disabled'))
325        else:
326            self.context.library = True
327            self.context.writeLogMessage(self, 'library access enabled')
328            self.flash(_('Library access enabled'))
329        self.redirect(self.url(self.context))
330        return
331
332    def render(self):
333        return
334
335class ExportLibIdCard(UtilityView, grok.View):
336    """Deliver an id card for the library.
337    """
338    grok.context(ICustomStudent)
339    grok.name('lib_idcard.pdf')
340    grok.require('waeup.viewStudent')
341    prefix = 'form'
342
343    label = u"Library Clearance"
344
345    omit_fields = (
346        'suspended', 'email', 'phone',
347        'adm_code', 'suspended_comment',
348        'date_of_birth',
349        'current_mode', 'certificate',
350        'entry_session',
351        'flash_notice')
352
353    form_fields = []
354
355    def _sigsInFooter(self):
356        isStudent = getattr(
357            self.request.principal, 'user_type', None) == 'student'
358        if isStudent:
359            return ''
360        return (_("Date, Reader's Signature"),
361                _("Date, Circulation Librarian's Signature"),
362                )
363
364    def update(self):
365        if not self.context.library:
366            self.flash(_('Forbidden!'), type="danger")
367            self.redirect(self.url(self.context))
368        return
369
370    @property
371    def note(self):
372        return """
373<br /><br /><br /><br /><font size='12'>
374This is to certify that the bearer whose photograph and other details appear
375 overleaf is a registered user of the <b>University Library</b>.
376 The card is not transferable. A replacement fee is charged for a loss,
377 mutilation or otherwise. If found, please, return to the University Library,
378 Igbinedion University, Okada.
379</font>
380
381"""
382        return
383
384    def render(self):
385        studentview = StudentBasePDFFormPage(self.context.student,
386            self.request, self.omit_fields)
387        students_utils = getUtility(IStudentsUtils)
388        return students_utils.renderPDF(
389            self, 'lib_idcard',
390            self.context.student, studentview,
391            omit_fields=self.omit_fields,
392            sigs_in_footer=self._sigsInFooter(),
393            note=self.note)
394
395class CustomStartClearancePage(StartClearancePage):
396    with_ac = False
397
398class CustomBalancePaymentAddFormPage(BalancePaymentAddFormPage):
399    grok.require('waeup.payStudent')
400
401class CustomExportPDFAdmissionSlip(ExportPDFAdmissionSlip):
402    """Deliver a PDF Admission slip.
403    """
404
405    omit_fields = ('date_of_birth',
406                   #'current_level',
407                   #'current_mode',
408                   #'entry_session'
409                   )
410
411    @property
412    def session(self):
413        return academic_sessions_vocab.getTerm(
414            self.context.entry_session).title
415
416    @property
417    def level(self):
418        studylevelsource = StudyLevelSource()
419        return studylevelsource.factory.getTitle(
420            self.context['studycourse'].certificate, self.context.current_level)
421
422    @property
423    def label(self):
424        return 'OFFER OF PROVISIONAL ADMISSION \nFOR %s SESSION' % self.session
425
426    @property
427    def pre_text_ug(self):
428        return (
429            'Following your performance in the screening exercise '
430            'for the %s academic session, I am pleased to inform '
431            'you that you have been offered provisional admission into the '
432            'Igbinedion University, Okada as follows:' % self.session)
433
434    @property
435    def pre_text_pg(self):
436        return (
437            'I am pleased to inform you that your application for admission'
438            ' into the Igbinedion University, Okada was successful. You have'
439            ' been admitted as follows:')
440
441    @property
442    def basic_medical_only_text(self):
443        return"""
444Progression to 200 Level MBBS programmes is highly competitive and strictly based on merit/approved quota. Students who are unable to make the cut off point will have the option of joining allied courses such as BSc Nursing, BSc Anatomy, BSc Biochemistry, BSc Physiology, Bachelor of Medical Laboratory Science, including Computer Science and engineering courses at 200 Level provided they have the relevant O/L credits.
445"""
446
447    @property
448    def basic_pharmacy_only_text(self):
449        return"""
450Progression to 200 Level Pharmacy programmes is highly competitive and strictly based on merit/approved quota. Students who are unable to make the cut off point will have the option of joining allied courses such as BSc Nursing, BSc Anatomy, BSc Biochemistry, BSc Physiology, Bachelor of Medical Laboratory Science, including Computer Science and engineering courses at 200 Level provided they have the relevant O/L credits.
451"""
452
453    @property
454    def post_text_ug(self):
455        return """
456Please note that at the point of registration for your programme of study (course), you will be required to present the following documents: Current UTME result slip, WAEC/NECO (0' Level) result, Birth certificate or sworn affidavit of age, and health certificate from a recognized Medical Centre.
457
458All credentials (original) will be checked during registration. This admission will be cancelled at any point in time it is found that your claims in the application form are false.
459
460You are required to show evidence of the result / credentials you presented on application for admission.
461
462Fees can be paid using any of the following options:
463
464Fees can be paid through your portal page. INSTRUCTIONS can be found below "FEES PAYMENT PROCEDURE" for the options you have to make your payment, as well as instructions on how to use your preferred payment option. If you choose to use the bank payment option, you can pay at any branch of the following banks through Etranzact platform only: Access Bank, First Bank, Zenith Bank
465
466Kindly note the following:
467
468Fees indicated on the Fee Structure page are valid for the current session only.
469Your Student Id (indicated above) Is your logln to the University portal.
470As an indication of your acceptance of this offer of admission, you should pay a non-refundable Acceptance deposit of N200,000. Further note that the 200,000 deposit is part of the tuition fee for the session. Failure to pay after the expiration of two weeks may lead to forfeiture of admission.
471All fees must be paid in full at the beginning of the session, as basis for accommodation, registration and attendance of lectures. This is the rule for all students at all levels. Install mental payments of not more than two installments, may be allowed under exceptional circumstances.
472Fees once paid are not refundable.
473It is advisable that you keep the original receipts of fees paid and present them on demand.
474
475Accommodation: Accommodation in University hostels is compulsory for every student. No student Is allowed to live outside the hostels. Any student who does so will be expelled from the University.
476
477Food: Food is available in cafeteria on "pay-as-you-eat" basis.
478
479Resumption Date: The University opens for fresh students on Saturday, 2nd October, 2021. All newly admitted students are expected to resume on that date.
480
481Registration/Orientation Programme: Orientation programme/registration for fresh students will start on Monday, 4th October, 2021 - Thursday, 7th October, 2021. A late registration fee of N50,000 will be charged after this date. All credentials, O'Level Results, Birth Certificate/Age Declaration, UTME Result Slip (Original) will be checked during registration. This admission will be cancelled at any point in time it is found that any of your claims in the application form is false.
482
483Transport Facility: The University provides a compulsory shuttle bus service to all students at a fee already included in the other charges.
484
485Kindly note that fresh students are not allowed the use of private vehicles.
486
487Conduct: All students are expected to conduct themselves properly and dress decently on campus, as well as obey all rules and regulations as failure to comply will attract appropriate sanctions.
488
489We wish you a successful academic career in Igbinedion University.
490
491Congratulations!
492
493
494
495<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
496
497Friday Benji Bakare Esq.
498Registrar
499registrar@iuokada.edu.ng
50008035902949
501"""
502
503    @property
504    def post_text_2020(self):    # no longer used
505        return """
506Please note that at the point of registration for your programme of study (course), you will be required to present the following documents: Current UTME result slip, WAEC/NECO (0' Level) result, Birth certificate or sworn affidavit of age, and health certificate from a recognized Medical Centre.
507
508All credentials (original) will be checked during registration. This admission will be cancelled at any point in time it is found that your claims in the application form are false.
509
510You are required to show evidence of the result / credentials you presented on application for admission.
511
512Fees can be paid using any of the following options:
513
514Fees can be paid through your portal page. INSTRUCTIONS can be found below "FEES PAYMENT PROCEDURE" for the options you have to make your payment, as well as instructions on how to use your preferred payment option. If you choose to use the bank payment option, you can pay at any branch of the following banks through Etranzact platform only: Access Bank, First Bank, Zenith Bank
515
516Kindly note the following:
517
518Fees indicated on the Fee Structure page are valid for the current session only.
519Your Student Id (indicated above) Is your logln to the University portal.
520As an indication of your acceptance of this offer of admission, you should pay a non-refundable Acceptance deposit of N200,000. Further note that the 200,000 deposit is part of the tuition fee for the session. Failure to pay after the expiration of two weeks may lead to forfeiture of admission.
521All fees must be paid in full at the beginning of the session, as basis for accommodation, registration and attendance of lectures. This is the rule for all students at all levels. Install mental payments of not more than two installments, may be allowed under exceptional circumstances.
522Fees once paid are not refundable.
523It is advisable that you keep the original receipts of fees paid and present them on demand.
524
525Accommodation: Accommodation in University hostels is compulsory for every student. No student Is allowed to live outside the hostels. Any student who does so will be expelled from the University.
526
527Food: Food is available in cafeteria on "pay-as-you-eat" basis.
528
529Resumption Date: The University opens for fresh students with online registration starting from Monday 28th September, 2020. The date for physical resumption is 14th November, 2020.
530
531Registration/Orientation Programme: Orientation programme/registration for fresh students will start on Monday, 16th November 2020. Registration ends on 2020-11-30.  A late registration fee of N50,000 will be charged after this date. All credentials, O'Level Results, Birth Certificate/Age Declaration, UTME Result Slip (Original) will be checked during registration. This admission will be cancelled at any point in time it is found that any of your claims in the application form is false.
532
533Transport Facility: The University provides a compulsory shuttle bus service to all students at a fee already included in the other charges.
534
535Kindly note that fresh students are not allowed the use of private vehicles.
536
537Conduct: All students are expected to conduct themselves properly and dress decently on campus, as well as obey all rules and regulations as failure to comply will attract appropriate sanctions.
538
539We wish you a successful academic career in Igbinedion University.
540
541Congratulations!
542
543
544
545<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
546
547Friday Benji Bakare Esq.
548Registrar
549registrar@iuokada.edu.ng
55008035902949
551"""
552
553    @property
554    def post_text_pg(self):
555        return """
5561. Details of your programme will be made available to you by the Head of your Department on your arrival at the Igbinedion University.
557
5582. This offer is conditional upon the confirmation of your qualifications as listed by you in your application form. You will be required to produce the ORIGINAL COPIES of all your certificates for verification during registration. If at any time after admission, it is discovered that you do not possess any of the qualifications upon which this offer of admission was made, you will be required to withdraw from the University.
559
5603. If you accept this offer of admission upon the conditions above, you should please:
561
562(a) Complete the enclosed Acceptance Form of Provisional Offer of Admission in duplicate and send  by registered mail or by hand to the
563
564Secretary
565School of Postgraduate Studies and Research
566Igbinedion University,
567P.M.B. 0006,
568Benin City, Edo State,
569Nigeria
570
571(b)     Forward the following along with the Acceptance Form of Provisional Offer of Admission.
572
573(i) A non-refundable deposit of N100,000.00 (One Hundred Thousand Naira Only) which is part of the School fees: Payable Online.
574
575(ii) Four recent passport-size photograph of yourself with your full-names (surname first in BLOCK LETTERS) written on the reverse side of the photograph and pinned to the Acceptance Form.
576
5774. The following will be required for Registration:
578
579(a) A medical examination to be conducted by an approved medical practitioner. On your arrival at the Igbinedion University, you should submit the enclosed Igbinedion University Medical Examination Form duly completed and signed by an approved medical practitioner together with your chest X-ray film to Director of Health Service at the Igbinedion University, Okada.
580
581(b) The original copies of all credentials listed in your application form (including NYSC discharge/exemption certificate) should be brought for sighting.
582
5835. You are required to pay the necessary fees and register for your degree programme not later than three weeks from the beginning of the Academic Session. Late registration may be allowed during an additional period of five weeks on payment of a late registration fees. Please note that you will be allowed to register after two months have elapsed from the beginning of the sessions.
584
5856. Please find attached:
586
587(a) A copy of School fees Regime
588(b) A copy of Acceptance Forms
589
5907. Note:
591
592(a) All Tuition fees are to be paid online
593(b) Post-graduate dues and other charges are to be paid into ABC Microfinance Bank Okada, Account No: 30125
594
5958.  CONGRATULATIONS!!!
596
597Yours faithfully,
598
599<img src="${signature_ezewele_img_path}" valign="-20" height="38" width="86" />
600
601Mrs. Angela Ezewele
602Secretary, School of Postgraduate Studies & Research
603"""
604
605    @property
606    def post_text_pt(self):
607        return """
608Please note that at the point of registration for your programme of study (course), you will be required to present the following documents: Current UTME result slip where available, WAEC/NECO (0' Level) result, Birth certificate or sworn affidavit of age, and health certificate from a recognized Medical Centre.
609
610All credentials (original) will be checked during registration. This admission will be cancelled at any point in time it is found that your claims in the application form are false.
611
612You are required to show evidence of the result / credentials you presented on application for admission.
613
614Fees are paid through bank draft only. Fees can be paid using any of the following options: Professional courses N180,000 (One Hundred and Eighty Thousand Naira only) and Non- Professional N150,000 (One Hundred and Fifty Thousand Naira only).
615
616Your Student Id (indicated above) is your login to the University portal. As an indication of your acceptance of this offer of admission, you should immediatelty raise a draft of fees above at the beginning of the session,. Install mental payments of not more than two installments, may be allowed under exceptional circumstances. Fees once paid are not refundable.
617
618It is advisable that you keep the original receipts of fees paid and present them on demand.
619
620Resumption Date: The University opens for fresh students with online registration starting from Monday 28th September, 2020. The date for physical resumption is 14th November, 2020.
621
622All credentials, O'Level Results, Birth Certificate/Age Declaration, UTME Result Slip where available (Original) will be checked during registration. This admission will be cancelled at any point in time it is found that any of your claims in the application form is false.
623
624Conduct: All students are expected to conduct themselves properly and dress decently on campus, as well as obey all rules and regulations as failure to comply will attract appropriate sanctions.
625
626We wish you a successful academic career in Igbinedion University.
627
628Congratulations!
629
630<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
631
632Friday Benji Bakare Esq.
633Registrar
634registrar@iuokada.edu.ng
63508035902949
636"""
637
638    @property
639    def post_text_jupeb(self):
640        return """
641Please note that at the point of registration for your programme of study (course), you will be required to present the following documents: WAEC/NECO (O' Level) result, Birth certificate or sworn affidavit of age, and certificate of medical fitness from a recognized Medical Centre.
642
643The fee schedule and the options for payment are indicated below. If you choose to use the bank payment option, you can pay at any branch of Access bank on 0787077169 with account name IUO JUPEB or on https://iuokada.waeup.org/e-tranzact or Interswitch platform.
644
645Kindly note the following:
646
6471. As an indication of your acceptance of this offer of admission, you should pay a non- refundable Acceptance deposit of N50,000:00.
6482. Tuition fee for the session is N250,000:00 for Arts and N300,000:00 for Sciences
6493. Accommodation fee for the session is N175,000:00
6504. Administrative fee is N110.000.00
6515. All fees must be paid in full at the beginning of the session, as basis for accommodation, registration and attendance of lectures. Instalmental payments of not more than two instalments, may be allowed
6526. Fees once paid are not refundable.
6537. It is advisable that you keep the original receipts of fees paid and present them on demand.
654
655Accommodation: Accommodation in University hostels is compulsory for every student. No student is allowed to live outside the hostels. Any student who does so will be expelled from the programme.
656
657Food: Food is available in cafeteria on "pay-as-you-eat" basis.
658
659Resumption Date: The University opens for dual mode of teaching (physical/online) for students on Monday, 27th September, 2021.
660
661Registration Programme: Online registration for fresh students will start on Monday, 27th September, 2021 and end on 4th October 2021. A late registration fee of N20,000 will be charged after this date.
662
663Transport Facility: The University provides a compulsory shuttle bus service to all students at a fee already included in the tuition.
664Kindly note that JUPEB students are not allowed the use of private vehicles on campus.
665
666Conduct: All students are expected to conduct themselves properly and dress decently on campus, as well as obey all rules and regulations as failure to comply will attract appropriate sanctions.
667
668We wish you a successful academic career in Igbinedion University. Enquiries: 08034331960, 08120611736
669
670Congratulations!
671
672
673
674<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
675
676Friday Benji Bakare Esq.
677Registrar
678"""
679
680    def render(self):
681        students_utils = getUtility(IStudentsUtils)
682        watermark_path = os.path.join(
683            os.path.dirname(__file__), 'static', 'watermark.pdf')
684        watermark = open(watermark_path, 'rb')
685        if self.context.is_jupeb:
686            return students_utils.renderPDFAdmissionLetter(self,
687                self.context.student, omit_fields=self.omit_fields,
688                pre_text=self.pre_text_ug, post_text=self.post_text_jupeb,
689                watermark=watermark)
690        if self.context.current_mode.endswith('_pt'):
691            return students_utils.renderPDFAdmissionLetter(self,
692                self.context.student, omit_fields=self.omit_fields,
693                pre_text=self.pre_text_ug, post_text=self.post_text_pt,
694                watermark=watermark)
695        if self.context.is_postgrad:
696            file_path = os.path.join(
697                os.path.dirname(__file__), 'static', 'admission_letter_pg.pdf')
698            file = open(file_path, 'rb')
699            mergefiles = [file,]
700            return students_utils.renderPDFAdmissionLetter(self,
701                self.context.student, omit_fields=self.omit_fields,
702                pre_text=self.pre_text_pg, post_text=self.post_text_pg,
703                mergefiles=mergefiles,
704                watermark=watermark)
705        file_path = os.path.join(
706            os.path.dirname(__file__), 'static', 'admission_letter_ug.pdf')
707        file = open(file_path, 'rb')
708        mergefiles = [file,]
709        if self.context.certcode in ('BBMS', 'MBBS') and self.context.current_level == 100:
710            post_text = self.basic_medical_only_text + self.post_text_ug
711        elif self.context.certcode in ('BPHARM',) and self.context.current_level == 100:
712            post_text = self.basic_pharmacy_only_text + self.post_text_ug
713        else:
714            post_text = self.post_text_ug
715        return students_utils.renderPDFAdmissionLetter(self,
716            self.context.student, omit_fields=self.omit_fields,
717            pre_text=self.pre_text_ug, post_text=post_text,
718            mergefiles=mergefiles,
719            watermark=watermark)
720
721class CustomOnlinePaymentDisplayFormPage(NigeriaOnlinePaymentDisplayFormPage):
722    """ Page to view an online payment ticket. We do not omit provider_amt.
723    """
724    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
725        'gateway_amt', 'thirdparty_amt', 'p_item','p_combi', 'provider_amt')
726    form_fields[
727        'creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
728    form_fields[
729        'payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
730
731class CustomExportPDFPaymentSlip(NigeriaExportPDFPaymentSlip):
732    """Deliver a PDF slip of the context. We do not omit provider_amt.
733    """
734    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
735        'gateway_amt', 'thirdparty_amt', 'p_item',
736        'p_split_data','p_combi', 'provider_amt')
737    form_fields['creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
738    form_fields['payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
Note: See TracBrowser for help on using the repository browser.