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