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

Last change on this file since 17048 was 17048, checked in by Henrik Bettermann, 2 years ago

Modify application types and categories.

  • Property svn:keywords set to Id
File size: 6.8 KB
Line 
1## $Id: utils.py 17048 2022-08-01 08:12:27Z 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        }
69
70
71    SEPARATORS_DICT = {
72        'form.applicant_id': _(u'Base Data'),
73        'form.course1': _(u'Programmes/Courses Desired'),
74        'form.hq_type': _(u'Higher Education Record'),
75        'form.presently': _(u'Course or Programme Presently Attending'),
76        'form.nysc_year': _(u'NYSC Information'),
77        'form.employer': _(u'Employment History'),
78        'form.jamb_subjects': _(u'JAMB Data'),
79        'form.jamb_subjects_list': _(u'JAMB Data'),
80        'form.notice': _(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
Note: See TracBrowser for help on using the repository browser.