## $Id: utils.py 17651 2023-11-29 11:21:39Z 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 datetime import datetime 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 (WAEC/NECO)','fst_sit_scan'), ('Second Sitting Result (WAEC/NECO)','scd_sit_scan'), ('Higher Qualification Result','hq_scan'), ('Advanced Level Result','alr_scan'), ('JAMB Result','jamb'), ('Statement of Result','res_stat'), ('NYSC Certificate','nysc'), ('Receipts for Manual Payments','rmp'), ) 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'], 'pgphd': ['Postgraduate PhD/MPhil 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'], 'conv': ['HND to BSc Conversion', 'CNV'], 'cdl': ['Center For Distance Learning', 'CDL'], } 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_fname': _(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 (WAEC/NECO)'), 'form.scd_sit_fname': _(u'Second Sitting Record (WAEC/NECO)'), '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:] if container.year: 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 if container.year: payment.p_session = container.year else: payment.p_session = datetime.now().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