## $Id: utils.py 17964 2024-11-27 00:30:20Z henrik $ ## ## Copyright (C) 2012 Uli Fouquet & Henrik Bettermann ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## """Customize general helper utilities for Kofa. """ from copy import deepcopy from zope.security import checkPermission from kofacustom.nigeria.utils.utils import NigeriaKofaUtils class CustomKofaUtils(NigeriaKofaUtils): """A collection of methods subject to customization. """ SYSTEM_MAX_LOAD = { 'swap-mem': None, 'virt-mem': 80.0, 'cpu-load': 100.0, } PREFERRED_LANGUAGES_DICT = { } APP_CATS_DICT = { 'basic': 'ASE, PUDE, PCE, PRENCE', 'no': 'No Application', 'sandwich': 'Sandwich', 'cest': 'Part-Time, Diploma, Certificate', 'dp_ft': 'Diploma Full-Time Programmes', 'dp': 'Diploma Programmes', 'pt_ext': 'Part-Time (extended application)', 'pg': 'Postgraduate (main advert)', 'coe': 'CoE Programmes', 'pgnils': 'Postgraduate NILS', 'spesse': 'SPESSE Programmes', 'pg_ft': 'Postgraduate Full-Time (deprecated)', 'pg_pt': 'Postgraduate Part-Time (deprecated)', 'pg_ext': 'Postgraduate (extended application, deprecated)', 'pg_new': 'Postgraduate (supplementary application #1, deprecated)', 'pg_new2': 'Postgraduate (supplementary application #2, deprecated)', 'pre': 'Pre-Degree Studies', 'asaba': 'FCE Asaba', 'akoka': 'FCE Akoka', 'akokaj': 'FCE Akoka JUPEB', 'special_ft': 'Special Full-Time', 'cdl': 'Center For Distance Learning', 'french': 'French Language Center', 'afrimal': 'African Institute of Management and Leadership', } # de modes are only used for entry_mode MODE_GROUPS = { 'All':('all',), 'Undergraduate Full-Time':('ug_ft', 'special_ft'), 'Undergraduate Part-Time':('ug_pt'), 'Diploma/Certificate Full-Time':('dp_ft', 'ct_ft'), 'Diploma/Certificate Part-Time':('dp_pt', 'ct_pt'), 'Postgraduate Full-Time':('pg_ft', 'pgd_ft'), 'Postgraduate Part-Time':('pg_pt', 'special_pg_pt', 'pgd_pt'), } PAYMENT_CATEGORIES = { 'schoolfee': 'School Fee', 'schoolfee_1': 'School Fee (1st instalment)', 'secondinstall':'School Fee (2nd instalment)', 'clearance': 'Acceptance Fee', 'bed_allocation': 'Bed Allocation Fee', #'hostel_application': 'Hostel Application Fee', 'hostel_maintenance': 'Hostel Maintenance Fee', #'tempmaint_1': 'Hall 1-4 M/F Ekehuan', #'tempmaint_2': 'Hall 5 M/F', #'tempmaint_3': 'Clinical Hostel', 'transfer': 'Transfer Fee', 'gown': 'Gown Hire Fee', 'application': 'Application Fee', 'transcript': 'Transcript Fee', 'admission_checking': 'Admission Checking Fee', 'jupeb': 'JUPEB Examination Fee', 'registration': 'Total Registration Fee', 'clinexam':'Clinical Examination Fee', #'pharmd_1':'Clerkship Fee', 'pharmd_2':'Module 1 Fee', 'develop':'Development Fee', 'carryover':'School Fee (carry over from previous sessions)', 'foreign':'School Fee (paid in foreign currency)', 'medical_quest':'Medical Questionnaire Fee', 'plag_test':'Final Year Plagiarism Test', 'flc_modules': 'FLC Modules Fee', 'medical_clearance': 'Medical Clearance Fee', } SELECTABLE_PAYMENT_CATEGORIES = { 'schoolfee': 'School Fee', 'clearance': 'Acceptance Fee', 'bed_allocation': 'Bed Allocation Fee', #'hostel_application': 'Hostel Application Fee', 'hostel_maintenance': 'Hostel Maintenance Fee', #'tempmaint_1': 'Hall 1-4 M/F Ekehuan Maintenance Fee', #'tempmaint_2': 'Hall 5 M/F Maintenance Fee', #'tempmaint_3': 'Clinical Hostel Maintenance Fee', 'gown': 'Gown Hire Fee', 'application': 'Application Fee', 'transcript': 'Transcript Fee', 'transfer': 'Transfer Fee', 'jupeb': 'JUPEB Examination Fee', 'clinexam':'Clinical Examination Fee', #'pharmd_1':'PharmD Clerkship Fee (1st school fee prepayment)', 'pharmd_2':'PharmD Module 1 Fee (school fee prepayment)', #'develop':'Development Fee', 'medical_quest':'Medical Questionnaire Fee', 'plag_test':'Final Year Plagiarism Test (for final year project or PG thesis)', 'flc_modules': 'FLC Modules Fee', 'medical_clearance': 'Medical Clearance Fee', } REPORTABLE_PAYMENT_CATEGORIES = { 'schoolfee': 'School Fee', 'schoolfee_1': 'School Fee (1st instalment)', 'secondinstall':'School Fee (2nd instalment)', 'clearance': 'Acceptance Fee', 'bed_allocation': 'Bed Allocation Fee', 'hostel_maintenance': 'Hostel Maintenance Fee', 'medical_quest':'Medical Questionnaire Fee', } def selectable_payment_categories(self, student): spc = deepcopy(self.SELECTABLE_PAYMENT_CATEGORIES) if student.is_jupeb: spc[schoolfee_1] = 'School Fee (1st instalment)' spc[secondinstal] = 'School Fee (2nd instalment)' return spc PREVIOUS_PAYMENT_CATEGORIES = deepcopy(SELECTABLE_PAYMENT_CATEGORIES) DISABLE_PAYMENT_GROUP_DICT = { 'sf_all': 'School Fee - All', 'sf_found': 'School Fee - Foundation', 'sf_pg': 'School Fee - PG', 'sf_pt': 'School Fee - UG PT', 'sf_ft': 'School Fee - UG FT', 'sf_sw': 'School Fee - Sandwich', 'sf_dp': 'School Fee - Diploma', 'sf_return': 'School Fee - Returning', 'maint_all': 'Accomm. Fee - All', 'cl_all': 'Accept. Fee - All', 'cl_jupeb': 'Accept. Fee - JUPEB', 'cl_allexj': 'Accept. Fee - All except JUPEB', } SEMESTER_DICT = { 1: '1st Semester', 2: '2nd Semester', 3: 'Combined', 4: '1st Term', 5: '2nd Term', 6: '3rd Term', 9: 'N/A', 11: 'Module I', 12: 'Module II', 13: 'Module III', } BALANCE_PAYMENT_CATEGORIES = { 'schoolfee': 'School Fee', 'clearance': 'Clearance Fee', 'hostel_maintenance': 'Hostel Maintenance Fee', 'bed_allocation': 'Bed Allocation Fee', 'carryover':'School Fee (carry over from previous sessions)', 'foreign':'School Fee (paid in foreign currency)', 'flc_modules': 'FLC Modules Fee', } EXAM_GRADES = NigeriaKofaUtils.EXAM_GRADES + (('B1', 'B1'), ('P', 'P'),) SPECIAL_HANDLING_DICT = { 'regular': 'Regular Hostel', 'blocked': 'Blocked Hostel', 'clinical': 'Clinical Hostel', 'ekenwan': 'Ekenwan Campus', 'pg': 'Postgraduate Hostel', } STUDY_MODES_DICT = { 'ume_ft': 'UME Full-Time', 'ug_ft': 'Undergraduate Full-Time', 'ug_pt': 'Undergraduate Part-Time', 'dp_pt': 'Diploma Part-Time', 'ct_ft': 'Certificate Full-Time', 'dp_ft': 'Diploma Full-Time', 'de_ft': 'Direct Entry Full-Time', 'de_pt': 'Direct Entry Part-Time', 'pg_ft': 'Postgraduate Full-Time', 'pg_pt': 'Postgraduate Part-Time', 'pgd_ft': 'Postgraduate Diploma Full-Time', 'pgd_pt': 'Postgraduate Diploma Part-Time', 'special_pg_pt': 'Special Postgraduate Part-Time', 'ug_sw': 'Undergraduate Sandwich', 'transfer_pt': 'Transfer Part-Time', 'transfer_ft': 'Transfer Full-Time', 'ct_pt': 'Certificate Part-Time', 'transfer': 'Transfer', 'transferred': 'Transferred', 'found': 'Foundation', 'no': 'no application', 'special_ft': 'Special Full-Time', 'cdl': 'Open & Distance Learning', } def sortCertificates(self, context, resultset): """Sort already filtered certificates in `CertificateSource`. """ resultlist = sorted(resultset, key=lambda value: value.__parent__.__parent__.__parent__.code + value.__parent__.__parent__.code + value.code) return resultlist def getCertTitle(self, context, value): """Compose the titles in `CertificateSource`. """ try: title = "%s / %s / %s (%s)" % ( value.__parent__.__parent__.__parent__.title, value.__parent__.__parent__.title, value.title, value.code) except AttributeError: title = "NA / %s (%s)" % (value.title, value.code) return title def collect_exporters(self, context): # Used for `ExportJobContainerJobConfig`. # We provide all student exporters, nothing else, yet. # Bursary, Department or Accommodation Officers don't # have the general exportData # permission and are only allowed to export bursary, payments # overview or accommodation data respectively. # This is the only place where waeup.exportAccommodationData, # waeup.exportBursaryData and waeup.exportPaymentsOverview # are used. # Uniben: Add NYSC Officers. exporters = [] if not checkPermission('waeup.exportData', context): if checkPermission('waeup.exportBursaryData', context): exporters += [('Bursary Data', 'bursary'), ('School Fee Payments Overview', 'sfpaymentsoverview'), ('Session Payments Overview', 'sessionpaymentsoverview')] if checkPermission('waeup.exportPaymentsOverview', context): exporters += [('School Fee Payments Overview', 'sfpaymentsoverview'), ('Session Payments Overview', 'sessionpaymentsoverview')] if checkPermission('waeup.exportAccommodationData', context): exporters += [('Bed Tickets', 'bedtickets'), ('Accommodation Payments', 'accommodationpayments')] if checkPermission('waeup.exportNYSCData', context): exporters += [('NYSC Indication', 'nysc'),] return exporters