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

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

Next try.

  • Property svn:keywords set to Id
File size: 35.5 KB
Line 
1## $Id: browser.py 16632 2021-09-21 07:44:14Z 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.0, cs: 0.0, cs+1: 0.0}
273            sessions = (cs-1, cs, cs+1)
274        else:
275            sf_paid = {cs: 0.0, cs+1: 0.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        brought_fwd = 0.0
286        for ticket in self.context.values():
287            amt = ticket.net_amt
288            if not amt:
289                amt = ticket.amount_auth
290            if ticket.p_category in SF_PAYMENTS and \
291                ticket.p_state == 'paid' and \
292                ticket.p_session in sessions:
293                sf_paid[ticket.p_session] += amt
294            if ticket.p_state != 'paid' and\
295               ticket.p_category == 'brought_fwd':
296                  brought_fwd += ticket.amount_auth
297        return sf_paid, total_sf, brought_fwd
298
299class StudentGetMatricNumberPage(UtilityView, grok.View):
300    """ Construct and set the matriculation number.
301    """
302    grok.context(IStudent)
303    grok.name('get_matric_number')
304    grok.require('waeup.manageStudent')
305
306    def update(self):
307        students_utils = getUtility(IStudentsUtils)
308        msg, mnumber = students_utils.setMatricNumber(self.context)
309        if msg:
310            self.flash(msg, type="danger")
311        else:
312            self.flash(_('Matriculation number %s assigned.' % mnumber))
313            self.context.writeLogMessage(self, '%s assigned' % mnumber)
314        self.redirect(self.url(self.context))
315        return
316
317    def render(self):
318        return
319
320class SwitchLibraryAccessView(UtilityView, grok.View):
321    """ Switch the library attribute
322    """
323    grok.context(ICustomStudent)
324    grok.name('switch_library_access')
325    grok.require('waeup.switchLibraryAccess')
326
327    def update(self):
328        if self.context.library:
329            self.context.library = False
330            self.context.writeLogMessage(self, 'library access disabled')
331            self.flash(_('Library access disabled'))
332        else:
333            self.context.library = True
334            self.context.writeLogMessage(self, 'library access enabled')
335            self.flash(_('Library access enabled'))
336        self.redirect(self.url(self.context))
337        return
338
339    def render(self):
340        return
341
342class ExportLibIdCard(UtilityView, grok.View):
343    """Deliver an id card for the library.
344    """
345    grok.context(ICustomStudent)
346    grok.name('lib_idcard.pdf')
347    grok.require('waeup.viewStudent')
348    prefix = 'form'
349
350    label = u"Library Clearance"
351
352    omit_fields = (
353        'suspended', 'email', 'phone',
354        'adm_code', 'suspended_comment',
355        'date_of_birth',
356        'current_mode', 'certificate',
357        'entry_session',
358        'flash_notice')
359
360    form_fields = []
361
362    def _sigsInFooter(self):
363        isStudent = getattr(
364            self.request.principal, 'user_type', None) == 'student'
365        if isStudent:
366            return ''
367        return (_("Date, Reader's Signature"),
368                _("Date, Circulation Librarian's Signature"),
369                )
370
371    def update(self):
372        if not self.context.library:
373            self.flash(_('Forbidden!'), type="danger")
374            self.redirect(self.url(self.context))
375        return
376
377    @property
378    def note(self):
379        return """
380<br /><br /><br /><br /><font size='12'>
381This is to certify that the bearer whose photograph and other details appear
382 overleaf is a registered user of the <b>University Library</b>.
383 The card is not transferable. A replacement fee is charged for a loss,
384 mutilation or otherwise. If found, please, return to the University Library,
385 Igbinedion University, Okada.
386</font>
387
388"""
389        return
390
391    def render(self):
392        studentview = StudentBasePDFFormPage(self.context.student,
393            self.request, self.omit_fields)
394        students_utils = getUtility(IStudentsUtils)
395        return students_utils.renderPDF(
396            self, 'lib_idcard',
397            self.context.student, studentview,
398            omit_fields=self.omit_fields,
399            sigs_in_footer=self._sigsInFooter(),
400            note=self.note)
401
402class CustomStartClearancePage(StartClearancePage):
403    with_ac = False
404
405class CustomBalancePaymentAddFormPage(BalancePaymentAddFormPage):
406    grok.require('waeup.payStudent')
407
408class CustomExportPDFAdmissionSlip(ExportPDFAdmissionSlip):
409    """Deliver a PDF Admission slip.
410    """
411
412    omit_fields = ('date_of_birth',
413                   #'current_level',
414                   #'current_mode',
415                   #'entry_session'
416                   )
417
418    @property
419    def session(self):
420        return academic_sessions_vocab.getTerm(
421            self.context.entry_session).title
422
423    @property
424    def level(self):
425        studylevelsource = StudyLevelSource()
426        return studylevelsource.factory.getTitle(
427            self.context['studycourse'].certificate, self.context.current_level)
428
429    @property
430    def label(self):
431        return 'OFFER OF PROVISIONAL ADMISSION \nFOR %s SESSION' % self.session
432
433    @property
434    def pre_text_ug(self):
435        return (
436            'Following your performance in the screening exercise '
437            'for the %s academic session, I am pleased to inform '
438            'you that you have been offered provisional admission into the '
439            'Igbinedion University, Okada as follows:' % self.session)
440
441    @property
442    def pre_text_pg(self):
443        return (
444            'I am pleased to inform you that your application for admission'
445            ' into the Igbinedion University, Okada was successful. You have'
446            ' been admitted as follows:')
447
448    @property
449    def basic_medical_only_text(self):
450        return"""
451Progression 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.
452"""
453
454    @property
455    def basic_pharmacy_only_text(self):
456        return"""
457Progression 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.
458"""
459
460    @property
461    def post_text_ug(self):
462        return """
463Please 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.
464
465All 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.
466
467You are required to show evidence of the result / credentials you presented on application for admission.
468
469Fees can be paid using any of the following options:
470
471Fees 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
472
473Kindly note the following:
474
475Fees indicated on the Fee Structure page are valid for the current session only.
476Your Student Id (indicated above) Is your logln to the University portal.
477As 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.
478All 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.
479Fees once paid are not refundable.
480It is advisable that you keep the original receipts of fees paid and present them on demand.
481
482Accommodation: 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.
483
484Food: Food is available in cafeteria on "pay-as-you-eat" basis.
485
486Resumption Date: The University opens for fresh students on Saturday, 2nd October, 2021. All newly admitted students are expected to resume on that date.
487
488Registration/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.
489
490Transport Facility: The University provides a compulsory shuttle bus service to all students at a fee already included in the other charges.
491
492Kindly note that fresh students are not allowed the use of private vehicles.
493
494Conduct: 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.
495
496We wish you a successful academic career in Igbinedion University.
497
498Congratulations!
499
500
501
502<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
503
504Friday Benji Bakare Esq.
505Registrar
506registrar@iuokada.edu.ng
50708035902949
508"""
509
510    @property
511    def post_text_2020(self):    # no longer used
512        return """
513Please 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.
514
515All 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.
516
517You are required to show evidence of the result / credentials you presented on application for admission.
518
519Fees can be paid using any of the following options:
520
521Fees 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
522
523Kindly note the following:
524
525Fees indicated on the Fee Structure page are valid for the current session only.
526Your Student Id (indicated above) Is your logln to the University portal.
527As 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.
528All 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.
529Fees once paid are not refundable.
530It is advisable that you keep the original receipts of fees paid and present them on demand.
531
532Accommodation: 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.
533
534Food: Food is available in cafeteria on "pay-as-you-eat" basis.
535
536Resumption 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.
537
538Registration/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.
539
540Transport Facility: The University provides a compulsory shuttle bus service to all students at a fee already included in the other charges.
541
542Kindly note that fresh students are not allowed the use of private vehicles.
543
544Conduct: 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.
545
546We wish you a successful academic career in Igbinedion University.
547
548Congratulations!
549
550
551
552<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
553
554Friday Benji Bakare Esq.
555Registrar
556registrar@iuokada.edu.ng
55708035902949
558"""
559
560    @property
561    def post_text_pg(self):
562        return """
5631. Details of your programme will be made available to you by the Head of your Department on your arrival at the Igbinedion University.
564
5652. 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.
566
5673. If you accept this offer of admission upon the conditions above, you should please:
568
569(a) Complete the enclosed Acceptance Form of Provisional Offer of Admission in duplicate and send  by registered mail or by hand to the
570
571Secretary
572School of Postgraduate Studies and Research
573Igbinedion University,
574P.M.B. 0006,
575Benin City, Edo State,
576Nigeria
577
578(b)     Forward the following along with the Acceptance Form of Provisional Offer of Admission.
579
580(i) A non-refundable deposit of N100,000.00 (One Hundred Thousand Naira Only) which is part of the School fees: Payable Online.
581
582(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.
583
5844. The following will be required for Registration:
585
586(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.
587
588(b) The original copies of all credentials listed in your application form (including NYSC discharge/exemption certificate) should be brought for sighting.
589
5905. 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.
591
5926. Please find attached:
593
594(a) A copy of School fees Regime
595(b) A copy of Acceptance Forms
596
5977. Note:
598
599(a) All Tuition fees are to be paid online
600(b) Post-graduate dues and other charges are to be paid into ABC Microfinance Bank Okada, Account No: 30125
601
6028.  CONGRATULATIONS!!!
603
604Yours faithfully,
605
606<img src="${signature_ezewele_img_path}" valign="-20" height="38" width="86" />
607
608Mrs. Angela Ezewele
609Secretary, School of Postgraduate Studies & Research
610"""
611
612    @property
613    def post_text_pt(self):
614        return """
615Please 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.
616
617All 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.
618
619You are required to show evidence of the result / credentials you presented on application for admission.
620
621Fees 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).
622
623Your 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.
624
625It is advisable that you keep the original receipts of fees paid and present them on demand.
626
627Resumption 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.
628
629All 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.
630
631Conduct: 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.
632
633We wish you a successful academic career in Igbinedion University.
634
635Congratulations!
636
637<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
638
639Friday Benji Bakare Esq.
640Registrar
641registrar@iuokada.edu.ng
64208035902949
643"""
644
645    @property
646    def post_text_jupeb(self):
647        return """
648Please 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.
649
650The 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.
651
652Kindly note the following:
653
6541. As an indication of your acceptance of this offer of admission, you should pay a non- refundable Acceptance deposit of N50,000:00.
6552. Tuition fee for the session is N250,000:00 for Arts and N300,000:00 for Sciences
6563. Accommodation fee for the session is N175,000:00
6574. Administrative fee is N110.000.00
6585. 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
6596. Fees once paid are not refundable.
6607. It is advisable that you keep the original receipts of fees paid and present them on demand.
661
662Accommodation: 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.
663
664Food: Food is available in cafeteria on "pay-as-you-eat" basis.
665
666Resumption Date: The University opens for dual mode of teaching (physical/online) for students on Monday, 27th September, 2021.
667
668Registration 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.
669
670Transport Facility: The University provides a compulsory shuttle bus service to all students at a fee already included in the tuition.
671Kindly note that JUPEB students are not allowed the use of private vehicles on campus.
672
673Conduct: 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.
674
675We wish you a successful academic career in Igbinedion University. Enquiries: 08034331960, 08120611736
676
677Congratulations!
678
679
680
681<img src="${signature_benji_img_path}" valign="-20" height="38" width="86" />
682
683Friday Benji Bakare Esq.
684Registrar
685"""
686
687    def render(self):
688        students_utils = getUtility(IStudentsUtils)
689        watermark_path = os.path.join(
690            os.path.dirname(__file__), 'static', 'watermark.pdf')
691        watermark = open(watermark_path, 'rb')
692        if self.context.is_jupeb:
693            return students_utils.renderPDFAdmissionLetter(self,
694                self.context.student, omit_fields=self.omit_fields,
695                pre_text=self.pre_text_ug, post_text=self.post_text_jupeb,
696                watermark=watermark)
697        if self.context.current_mode.endswith('_pt'):
698            return students_utils.renderPDFAdmissionLetter(self,
699                self.context.student, omit_fields=self.omit_fields,
700                pre_text=self.pre_text_ug, post_text=self.post_text_pt,
701                watermark=watermark)
702        if self.context.is_postgrad:
703            file_path = os.path.join(
704                os.path.dirname(__file__), 'static', 'admission_letter_pg.pdf')
705            file = open(file_path, 'rb')
706            mergefiles = [file,]
707            return students_utils.renderPDFAdmissionLetter(self,
708                self.context.student, omit_fields=self.omit_fields,
709                pre_text=self.pre_text_pg, post_text=self.post_text_pg,
710                mergefiles=mergefiles,
711                watermark=watermark)
712        file_path = os.path.join(
713            os.path.dirname(__file__), 'static', 'admission_letter_ug.pdf')
714        file = open(file_path, 'rb')
715        mergefiles = [file,]
716        if self.context.certcode in ('BBMS', 'MBBS') and self.context.current_level == 100:
717            post_text = self.basic_medical_only_text + self.post_text_ug
718        elif self.context.certcode in ('BPHARM',) and self.context.current_level == 100:
719            post_text = self.basic_pharmacy_only_text + self.post_text_ug
720        else:
721            post_text = self.post_text_ug
722        return students_utils.renderPDFAdmissionLetter(self,
723            self.context.student, omit_fields=self.omit_fields,
724            pre_text=self.pre_text_ug, post_text=post_text,
725            mergefiles=mergefiles,
726            watermark=watermark)
727
728class CustomOnlinePaymentDisplayFormPage(NigeriaOnlinePaymentDisplayFormPage):
729    """ Page to view an online payment ticket. We do not omit provider_amt.
730    """
731    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
732        'gateway_amt', 'thirdparty_amt', 'p_item','p_combi', 'provider_amt')
733    form_fields[
734        'creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
735    form_fields[
736        'payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
737
738class CustomExportPDFPaymentSlip(NigeriaExportPDFPaymentSlip):
739    """Deliver a PDF slip of the context. We do not omit provider_amt.
740    """
741    form_fields = grok.AutoFields(ICustomStudentOnlinePayment).omit(
742        'gateway_amt', 'thirdparty_amt', 'p_item',
743        'p_split_data','p_combi', 'provider_amt')
744    form_fields['creation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
745    form_fields['payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
Note: See TracBrowser for help on using the repository browser.