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

Last change on this file since 18016 was 18014, checked in by Henrik Bettermann, 4 days ago

Revise DESTINATION_COST. Keep old items.

  • Property svn:keywords set to Id
File size: 8.0 KB
Line 
1## $Id: utils.py 18014 2025-02-12 01:22:42Z 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        'pgsp': ['SPESSE Postgraduate Programmes', 'PG'],
54        'pre': ['JUPEB Pre-Degree (Foundation) Studies', 'PRE'],
55        'cbt': ['UNIBEN CBT Practice Test', 'CBT'],
56        'ab': ['Asaba Programmes', 'ASA'],
57        'ak': ['Akoka Programmes', 'AKO'],
58        'akj': ['Akoka JUPEB', 'AKO'],
59        'ictwk': ['ICT Week Registration', 'ICT'],
60        'ase': ['Uniben Admission Screening Exercise', 'ASE'],
61        'asea': ['Uniben Admission Screening Exercise '
62                 '(1st supplementary advert)', 'ASE'],
63        'aseb': ['Uniben Admission Screening Exercise '
64                 '(2nd supplementary advert)', 'ASE'],
65        'spft': ['Special Full-Time Programmes', 'SP'],
66        'tscf': ['Transcript (without student record)', 'TRF'],
67        'tscs': ['Transcript (with student record)', 'TRS'],
68        'flc': ['French Language Centre', 'FR'],
69        'cdl': ['Centre For Distance Learning Programmes', 'CDL'],
70        'afrimal': ['African Institute of Management and Leadership Programmes', 'AFR'],
71        }
72
73
74    SEPARATORS_DICT = {
75        'form.applicant_id': _(u'Base Data'),
76        'form.course1': _(u'Programmes/Courses Desired'),
77        'form.hq_type': _(u'Higher Education Record'),
78        'form.presently': _(u'Course or Programme Presently Attending'),
79        'form.nysc_year': _(u'NYSC Information'),
80        'form.employer': _(u'Employment History'),
81        'form.jamb_reg_number': _(u'JAMB Data'),
82        'form.course_admitted': _(u'Application Process Information'),
83        'form.pp_school': _(u'Post Primary School Qualification'),
84        'form.presently_inst': _(u'Presently attending a course or programme'),
85        'form.fst_sit_fname': _(u'Ordinary Level First Sitting Record'),
86        'form.scd_sit_fname': _(u'Ordinary Level Second Sitting Record'),
87        'form.referees': _(u'Referees'),
88        }
89
90
91    # Temporarily disabled
92    def xxx_getApplicantsStatistics(self, container):
93        state_stats = {INITIALIZED:0, STARTED:0, PAID:0, SUBMITTED:0,
94            ADMITTED:0, NOT_ADMITTED:0, CREATED:0}
95        faculty_keys = grok.getSite()['faculties'].keys()
96        fac_stats = dict([(i,0) for i in faculty_keys])
97        for key in container.keys():
98            state = container[key].state
99            state_stats[state] += 1
100            cert = getattr(container[key],'course1',None)
101            if  cert is not None and state == SUBMITTED:
102                faculty = cert.__parent__.__parent__.__parent__
103                fac_stats[faculty.__name__] += 1
104        return state_stats, fac_stats
105
106
107    def setPaymentDetails(self, container, payment, applicant):
108        """Set the payment data of an applicant.
109        In contrast to its `StudentsUtils` counterpart, the payment ticket
110        must exist and is an argument of this method.
111        """
112        timestamp = ("%d" % int(time()*10000))[1:]
113        if container.year:
114            session = str(container.year)
115            try:
116                session_config = grok.getSite()['configuration'][session]
117            except KeyError:
118                return _(u'Session configuration object is not available.')
119        payment.p_id = "p%s" % timestamp
120        payment.p_item = container.title
121        if container.year:
122            payment.p_session = container.year
123        else:
124            payment.p_session = datetime.now().year
125        payment.amount_auth = 0.0
126        if applicant.special:
127            if applicant.special_application:
128                fee_name = applicant.special_application + '_fee'
129                payment.amount_auth = getattr(session_config, fee_name, None)
130                payment.p_category = applicant.special_application
131            return
132        elif applicant.__parent__.prefix == 'ictwk':
133            payment.p_category = 'registration'
134            for cat in applicant.registration_cats:
135                payment.amount_auth += REGISTRATION_CATS[cat][1]
136            return
137        elif applicant.container_code.startswith('tsc'):
138            if not applicant.charge:
139                return _(u'No transcript charge selected.')
140            if 'deprecated' in DESTINATION_COST[applicant.charge][0]:
141                return _(u'This fee is outdated. Please select the current ranscript charge.')
142            cost = DESTINATION_COST[applicant.charge][1]
143            payment.amount_auth = applicant.no_copies * cost
144            payment.p_category = 'transcript'
145            return
146        else:
147            payment.p_category = 'application'
148            container_fee = container.application_fee
149            if not container_fee:
150                return _('Amount could not be determined.')
151            payment.amount_auth = container_fee
152        return
153
154    def isPictureEditable(self, container):
155        """False if applicants are not allowed to edit uploaded pictures.
156        """
157        if container.code.startswith('ase'):
158            return False
159        if container.code.startswith('pude'):
160            return False
161        return container.with_picture
162
163    def sortCertificates(self, context, resultset):
164        """Sort already filtered certificates in `AppCatCertificateSource`.
165        """
166        resultlist = sorted(resultset, key=lambda
167            value: value.__parent__.__parent__.__parent__.code +
168            value.__parent__.__parent__.code +
169            value.code)
170        curr_course = context.course1
171        if curr_course is not None and curr_course not in resultlist:
172            resultlist = [curr_course,] + resultlist
173        return resultlist
174
175    def getCertTitle(self, context, value):
176        """Compose the titles in `AppCatCertificateSource`.
177        """
178        try: title = "%s / %s / %s (%s)" % (
179            value.__parent__.__parent__.__parent__.title,
180            value.__parent__.__parent__.title,
181            value.title, value.code)
182        except AttributeError:
183            title = "NA / %s (%s)" % (value.title, value.code)
184        return title
Note: See TracBrowser for help on using the repository browser.