source: main/waeup.uniben/trunk/src/waeup/uniben/applicants/utils.py @ 17570

Last change on this file since 17570 was 17538, checked in by Henrik Bettermann, 17 months ago

PT students have different fields and must fill JAMB reg number.

  • Property svn:keywords set to Id
File size: 7.7 KB
Line 
1## $Id: utils.py 17538 2023-08-15 09:47:00Z henrik $
2##
3## Copyright (C) 2011 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"""General helper functions and utilities for the application section.
19"""
20
21import grok
22from time import time
23from datetime import datetime
24from kofacustom.nigeria.applicants.utils import NigeriaApplicantsUtils
25from waeup.kofa.applicants.workflow import (INITIALIZED,
26    STARTED, PAID, ADMITTED, NOT_ADMITTED, SUBMITTED, CREATED)
27from waeup.uniben.applicants.interfaces import REGISTRATION_CATS, DESTINATION_COST
28from waeup.uniben.interfaces import MessageFactory as _
29
30class CustomApplicantsUtils(NigeriaApplicantsUtils):
31    """A collection of parameters and methods subject to customization.
32    """
33
34    ADDITIONAL_FILES = (
35                 ('Eligibility Form','eligibility'),
36                 ('Statement of Result','res_stat'),
37                 )
38
39    APP_TYPES_DICT = {
40        'pude': ['Post-UDE Screening', 'PUDE'],
41        'sandwich': ['Part-Time Degree in Education', 'SAND'],
42        'pt': ['Part-Time Degree Programmes', 'PTP'],
43        'ptext': ['Part-Time Degree Programmes (extended application)', 'PTP'],
44        'putme': ['Post-UTME Screening Exercise', 'PUTME'],
45        'app': ['General Studies', 'APP'],
46        'cest': ['Common Entry Screening Test', 'CEST'],
47        'ct': ['Certificate Programmes', 'CTP'],
48        'dp': ['Diploma Programmes', 'DPP'],
49        'dpft': ['Diploma Full-Time Programmes', 'DPP'],
50        'pg': ['Postgraduate Programmes (main advert)', 'PG'],
51        'pgcoe': ['CoE Programmes', 'PG'],
52        'pgn': ['NILS Postgraduate Programmes', 'PG'],
53        'pre': ['JUPEB Pre-Degree (Foundation) Studies', 'PRE'],
54        'cbt': ['UNIBEN CBT Practice Test', 'CBT'],
55        'ab': ['Asaba Programmes', 'ASA'],
56        'ak': ['Akoka Programmes', 'AKO'],
57        'akj': ['Akoka JUPEB', 'AKO'],
58        'ictwk': ['ICT Week Registration', 'ICT'],
59        'ase': ['Uniben Admission Screening Exercise', 'ASE'],
60        'asea': ['Uniben Admission Screening Exercise '
61                 '(1st supplementary advert)', 'ASE'],
62        'aseb': ['Uniben Admission Screening Exercise '
63                 '(2nd supplementary advert)', 'ASE'],
64        'spft': ['Special Full-Time Programmes', 'SP'],
65        'tscf': ['Transcript (without student record)', 'TRF'],
66        'tscs': ['Transcript (with student record)', 'TRS'],
67        'flc': ['French Language Centre', 'FR'],
68        'cdl': ['Centre For Distance Learning Programmes', 'CDL'],
69        }
70
71
72    SEPARATORS_DICT = {
73        'form.applicant_id': _(u'Base Data'),
74        'form.course1': _(u'Programmes/Courses Desired'),
75        'form.hq_type': _(u'Higher Education Record'),
76        'form.presently': _(u'Course or Programme Presently Attending'),
77        'form.nysc_year': _(u'NYSC Information'),
78        'form.employer': _(u'Employment History'),
79        'form.jamb_reg_number': _(u'JAMB Data'),
80        'form.course_admitted': _(u'Application Process Information'),
81        'form.pp_school': _(u'Post Primary School Qualification'),
82        'form.presently_inst': _(u'Presently attending a course or programme'),
83        'form.fst_sit_fname': _(u'Ordinary Level First Sitting Record'),
84        'form.scd_sit_fname': _(u'Ordinary Level Second Sitting Record'),
85        'form.referees': _(u'Referees'),
86        }
87
88
89    # Temporarily disabled
90    def xxx_getApplicantsStatistics(self, container):
91        state_stats = {INITIALIZED:0, STARTED:0, PAID:0, SUBMITTED:0,
92            ADMITTED:0, NOT_ADMITTED:0, CREATED:0}
93        faculty_keys = grok.getSite()['faculties'].keys()
94        fac_stats = dict([(i,0) for i in faculty_keys])
95        for key in container.keys():
96            state = container[key].state
97            state_stats[state] += 1
98            cert = getattr(container[key],'course1',None)
99            if  cert is not None and state == SUBMITTED:
100                faculty = cert.__parent__.__parent__.__parent__
101                fac_stats[faculty.__name__] += 1
102        return state_stats, fac_stats
103
104
105    def setPaymentDetails(self, container, payment, applicant):
106        """Set the payment data of an applicant.
107        In contrast to its `StudentsUtils` counterpart, the payment ticket
108        must exist and is an argument of this method.
109        """
110        timestamp = ("%d" % int(time()*10000))[1:]
111        if container.year:
112            session = str(container.year)
113            try:
114                session_config = grok.getSite()['configuration'][session]
115            except KeyError:
116                return _(u'Session configuration object is not available.')
117        payment.p_id = "p%s" % timestamp
118        payment.p_item = container.title
119        if container.year:
120            payment.p_session = container.year
121        else:
122            payment.p_session = datetime.now().year
123        payment.amount_auth = 0.0
124        if applicant.special:
125            if applicant.special_application:
126                fee_name = applicant.special_application + '_fee'
127                payment.amount_auth = getattr(session_config, fee_name, None)
128                payment.p_category = applicant.special_application
129            return
130        elif applicant.__parent__.prefix == 'ictwk':
131            payment.p_category = 'registration'
132            for cat in applicant.registration_cats:
133                payment.amount_auth += REGISTRATION_CATS[cat][1]
134            return
135        elif applicant.container_code.startswith('tsc'):
136            if not applicant.charge:
137                return _(u'No transcript charge selected.')
138            cost = DESTINATION_COST[applicant.charge][1]
139            payment.amount_auth = applicant.no_copies * cost
140            payment.p_category = 'transcript'
141            return
142        else:
143            payment.p_category = 'application'
144            container_fee = container.application_fee
145            if not container_fee:
146                return _('Amount could not be determined.')
147            payment.amount_auth = container_fee
148        return
149
150    def isPictureEditable(self, container):
151        """False if applicants are not allowed to edit uploaded pictures.
152        """
153        if container.code.startswith('ase'):
154            return False
155        if container.code.startswith('pude'):
156            return False
157        return container.with_picture
158
159    def sortCertificates(self, context, resultset):
160        """Sort already filtered certificates in `AppCatCertificateSource`.
161        """
162        resultlist = sorted(resultset, key=lambda
163            value: value.__parent__.__parent__.__parent__.code +
164            value.__parent__.__parent__.code +
165            value.code)
166        curr_course = context.course1
167        if curr_course is not None and curr_course not in resultlist:
168            resultlist = [curr_course,] + resultlist
169        return resultlist
170
171    def getCertTitle(self, context, value):
172        """Compose the titles in `AppCatCertificateSource`.
173        """
174        try: title = "%s / %s / %s (%s)" % (
175            value.__parent__.__parent__.__parent__.title,
176            value.__parent__.__parent__.title,
177            value.title, value.code)
178        except AttributeError:
179            title = "NA / %s (%s)" % (value.title, value.code)
180        return title
Note: See TracBrowser for help on using the repository browser.