## $Id: utils.py 16166 2020-07-15 06:25:56Z henrik $ ## ## Copyright (C) 2011 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 ## """General helper functions and utilities for the application section. """ import grok from time import time from kofacustom.nigeria.applicants.utils import NigeriaApplicantsUtils from waeup.kofa.applicants.workflow import (INITIALIZED, STARTED, PAID, ADMITTED, NOT_ADMITTED, SUBMITTED, CREATED) from kofacustom.iuokada.applicants.interfaces import DESTINATION_COST from kofacustom.iuokada.interfaces import MessageFactory as _ class ApplicantsUtils(NigeriaApplicantsUtils): """A collection of parameters and methods subject to customization. """ ADDITIONAL_FILES = ( ('First Sitting Result','fst_sit_scan.pdf'), ('Second Sitting Result','scd_sit_scan.pdf'), ('Higher Qualification Result','hq_scan.pdf'), ('Advanced Level Result','alr_scan.pdf'), ('JAMB Result','jamb.pdf'), ('Statement of Result','res_stat.pdf'), ('NYSC Certificate','nysc.pdf'), ) APP_TYPES_DICT = { 'pude': ['Post-UDE Screening', 'PUDE'], 'sandwich': ['Part-Time Degree in Education', 'SAND'], 'pt': ['Part-Time Degree Programmes', 'PTP'], 'putme': ['Post-UTME Screening Exercise', 'PUTME'], 'app': ['General Studies', 'APP'], 'ct': ['Certificate Programmes', 'CTP'], 'dp': ['Diploma Programmes', 'DPP'], 'pgft': ['Postgraduate Full-Time Programmes', 'PG'], 'pgpt': ['Postgraduate Part-Time Programmes', 'PG'], 'pre': ['Pre-Degree Studies', 'PRE'], 'cbt': ['CBT Practice Test', 'CBT'], 'ase': ['Admission Screening Exercise', 'ASE'], # successor of putme 'pg': ['Postgraduate Programmes', 'PG'], 'ug': ['Undergraduate Programmes', 'UG'], 'tscf': ['Transcript Application (without student record)', 'TRF'], 'tscs': ['Transcript Application (with student record)', 'TRS'], } SEPARATORS_DICT = { 'form.applicant_id': _(u'Base Data'), 'form.course1': _(u'Programmes/Courses Desired'), 'form.hq_type': _(u'Highest Educational Record (Degrees, Diplomas etc.)'), 'form.presently': _(u'Course or Programme Presently Attending'), 'form.nysc_year': _(u'NYSC Information/Exemption Certificate'), 'form.employer': _(u'Employment History'), 'form.jamb_subjects': _(u'JAMB Data (All Applicants)'), 'form.jamb_subjects_list': _(u'JAMB Data (All Applicants)'), 'form.notice': _(u'Application Process Information'), 'form.pp_school': _(u'Post Primary School Qualification'), 'form.presently_inst': _(u'Presently attending a course or programme'), 'form.fst_sit_fname': _(u'First Sitting Record'), 'form.scd_sit_fname': _(u'Second Sitting Record'), 'form.referees': _(u'Referees (will be automatically invited by email after final submission)'), 'form.parents_name': _(u'Parents / Guardian'), } def sortCertificates(self, context, resultset): """Sort already filtered certificates in `AppCatCertificateSource`. """ resultlist = sorted(resultset, key=lambda value: value.__parent__.__parent__.__parent__.code + value.__parent__.__parent__.code + value.code) curr_course = context.course1 if curr_course is not None and curr_course not in resultlist: resultlist = [curr_course,] + resultlist return resultlist def getCertTitle(self, context, value): """Compose the titles in `AppCatCertificateSource`. """ 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 setPaymentDetails(self, container, payment, applicant): """Set the payment data of an applicant. In contrast to its `StudentsUtils` counterpart, the payment ticket must exist and is an argument of this method. """ timestamp = ("%d" % int(time()*10000))[1:] session = str(container.year) try: session_config = grok.getSite()['configuration'][session] except KeyError: return _(u'Session configuration object is not available.') payment.p_id = "p%s" % timestamp payment.p_item = container.title payment.p_session = container.year payment.amount_auth = 0.0 if applicant.special: if applicant.special_application: fee_name = applicant.special_application + '_fee' payment.amount_auth = getattr(session_config, fee_name, None) if payment.amount_auth in (0.0, None): return _('Amount could not be determined.') payment.p_category = applicant.special_application return elif applicant.container_code.startswith('tsc'): cost = DESTINATION_COST[applicant.charge][1] payment.amount_auth = applicant.no_copies * cost payment.p_category = 'transcript' return else: payment.p_category = 'application' container_fee = container.application_fee if not container_fee: return _('Amount could not be determined.') payment.amount_auth = container_fee return