source: WAeUP_SRP/base/skins/waeup_student/apply_admission.py @ 2579

Last change on this file since 2579 was 2521, checked in by Henrik Bettermann, 17 years ago

fixed

  • Property svn:keywords set to Id
File size: 10.6 KB
Line 
1## Script (Python) "apply_admission"
2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=REQUEST
8##title=
9##
10# $Id: apply_admission.py 2521 2007-11-04 00:28:33Z henrik $
11"""
12process the Application Form
13"""
14try:
15    from Products.zdb import set_trace
16except:
17    def set_trace():
18        pass
19
20import DateTime
21import logging
22logger = logging.getLogger('Skins.apply_admission')
23
24mtool = context.portal_membership
25member = mtool.getAuthenticatedMember()
26
27current = DateTime.DateTime()
28pr = context.portal_registration
29request = REQUEST
30
31#type_name = 'StudentApplication'
32#ti = context.portal_types[type_name]
33#REQUEST.set('type_name',type_name)
34create = "create" in request.keys()
35apply_admission = "apply" in request.keys()
36edit = "edit" in request.keys()
37slip = "slip" in request.keys()
38manage = "manage" in request.keys()
39submitted = False
40mode = request.get('mode','')
41if not mode:
42    if apply_admission or edit or manage:
43        mode = "edit"
44    else:
45        mode = "create"
46validate = create or edit or apply_admission
47
48if manage:
49    validate = False
50without_reg_no = False
51
52
53lt = context.portal_layouts
54
55pin = request.form.get('pin','')
56reg_no = request.get('widget__reg_no','').upper()
57if not reg_no:
58    reg_no = request.form.get('reg_no','').upper()
59if not reg_no:
60    reg_no = request.get('widget__pin_n','').upper()
61
62object = {}
63if reg_no:
64    brains = context.applicants_catalog(reg_no = reg_no)
65    if len(brains) == 1:
66        for field in context.applicants_catalog.schema():
67            object[field] = getattr(brains[0],field,None)
68        if not object['passport']:
69                object['passport'] = ''
70        if object['status'] and ('submitted' in object['status'] or 'admitted' in object['status']):
71            submitted = True
72
73        if not (create or slip) and (pin != object['pin'] and not context.isSectionOfficer()):
74            logger.info('%s/%s entered wrong pin %s' % (member,reg_no,pin))
75            return request.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
76
77        # For the next application session it should be reverted to
78        # (see comment 09/06/07 16:40:52 in ticket #328):
79
80        #if not create and (pin != object['pin'] and not context.isSectionOfficer()):
81            #logger.info('%s/%s entered wrong pin %s' % (member,reg_no,pin))
82            #return request.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
83
84
85screening_types = ('prence','pume','pce','pde','cest')
86headings = {}
87headings['pume'] = 'Apply for Post UME Screening Test (2007/2008)! '
88headings['pde'] = 'Apply for Post UDE Screening Test (2007/2008)! '
89headings['prence'] = 'Apply for Pre-NCE Programme (2007/2008)! '
90headings['pce'] = 'Apply for PCE Screening (2007/2008)! '
91headings['cest'] = 'Apply for Common Entrance Screening Test (2007/2008)! '
92headings_slip = {}
93headings_slip['pume'] = 'Post UME Screening (2007/2008) Aknowledgement Slip!'
94headings_slip['pde'] = 'Post UDE Screening (2007/2008) Aknowledgement Slip'
95headings_slip['prence'] = 'Pre-NCE Application (2007/2008) Aknowledgement Slip'
96headings_slip['pce'] = 'PCE Screening (2007/2008) Aknowledgement Slip'
97headings_slip['cest'] = 'Common Entrance Screening (2007/2008) Aknowledgement Slip'
98
99deadline = {}
100deadline['pume'] = '[Date of PUME Deadline]'
101deadline['pde'] = 'Sunday, 4th November 2007'
102deadline['prence'] = '[Date of PRENCE Deadline]'
103deadline['pce'] = '[Date of PCE Deadline]'
104deadline['cest'] = '[Date of CEST Deadline]'
105
106info = {}
107
108if traverse_subpath and traverse_subpath[0] in screening_types:
109    screening_type = info['screening_type'] = traverse_subpath[0]
110    info['heading'] = headings[screening_type]
111    info['heading_slip'] = headings_slip[screening_type]
112    info['deadline'] = deadline[screening_type]
113    layout = "application_%s" % screening_type
114    without_reg_no = screening_type in ('prence',)
115elif manage:
116    if object['screening_type']:
117        st = object['screening_type']
118    else:
119        st = 'pume'
120    screening_type = info['screening_type'] = st
121    info['heading'] = headings[screening_type]
122    info['heading_slip'] = headings_slip[screening_type]
123    info['deadline'] = deadline[screening_type]
124    layout = "application_%s" % screening_type
125    without_reg_no = screening_type in ('prence',)
126else:
127    return request.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
128
129
130if slip:
131    mode = "view_slip"
132    logger.info('%s/%s views application slip' % (member,reg_no))
133
134res,psm,ds = lt.renderLayout(layout_id= layout,
135                             schema_id= 'import_application',
136                             layout_mode = mode,
137                             context=context,
138                             mapping=validate and REQUEST,
139                             ob=object,
140                             commit = False,
141                            )
142if slip:
143    return context.apply_admission_slip(rendered = res,
144                                        psm = "",
145                                        mode = mode,
146                                        ds = ds,
147                                        info = info,
148                                       )
149if psm == 'invalid':
150    return context.apply_admission_form(rendered = res,
151                                        psm = "Please correct your input!",
152                                        mode = mode,
153                                        ds = ds,
154                                        info = info,
155                                       )
156elif psm == '' and not manage:
157    return context.apply_admission_form(rendered = res,
158                                        psm = psm,
159                                        ds = ds,
160                                        mode = mode,
161                                        info = info,
162                                       )
163# elif psm == 'valid' or (psm == '' and manage):
164#     pass
165if without_reg_no:
166    reg_no = ds.get('reg_no')
167data = {}
168dm = ds.getDataModel()
169for field in context.applicants_catalog.schema():
170    if dm.has_key("%s" % field):
171        data[field] = dm.get(field)
172data['reg_no'] = reg_no
173
174if apply_admission:
175    if submitted:
176        mode = "view"
177        psm = "The form has already been submitted and you are not allowed to resubmit the data!"
178        logger.info('%s/%s tried to resubmit application record' % (member,reg_no))
179        res,psm_dummy,ds_dummy = lt.renderLayout(layout_id= layout,
180                                schema_id= 'import_application',
181                                layout_mode = mode,
182                                context=context,
183                                mapping={},
184                                ob=object,
185                                commit = False,
186                                )
187    elif not request.has_key('confirm'):
188        mode = "edit"
189        psm = "Please confirm Passport Photograph!"
190        logger.info('%s/%s tried to submit without ticking confirmation check box' % (member,reg_no))
191    else:
192        mode = "view"
193        psm = "You successfully applied for admission!"
194        if object['status'] == 'edited':
195            data['status'] = "submitted"
196            data['application_date'] = current
197            logger.info('%s/%s modified and submitted application record' % (member,reg_no))
198        elif object['status'] == 'reset':
199            data['status'] = 'resubmitted on %s' % DateTime.DateTime().strftime('%A, %B %d, %Y')
200            logger.info('%s/%s modified and resubmitted application record' % (member,reg_no))
201        object['status'] = data['status']
202        context.applicants_catalog.modifyRecord(**data)
203
204        res,psm_dummy,ds = lt.renderLayout(layout_id= layout,
205                                schema_id= 'import_application',
206                                layout_mode = mode,
207                                context=context,
208                                mapping=validate and REQUEST,
209                                ob=object,
210                                commit = False,
211                                )
212elif create:
213    if submitted:
214        mode = "view"
215        logger.info('%s/%s views application record' % (member,reg_no))
216    else:
217        mode = "edit"
218        logger.info('%s/%s edits application record' % (member,reg_no))
219    psm = ""
220    if without_reg_no:
221        object['reg_no'] = reg_no
222    object['pin'] = str(ds.get('pin'))
223    res,psm,ds_dummy = lt.renderLayout(layout_id= layout,
224                                schema_id= 'import_application',
225                                layout_mode = mode,
226                                context=context,
227                                mapping={},
228                                ob=object,
229                                commit = False,
230                                )
231elif edit:
232    if submitted:
233        mode = "view"
234        psm = "The form has already been submitted and you are not allowed to modify the data!"
235        logger.info('%s/%s tried to edit submitted application record' % (member,reg_no))
236        res,psm_dummy,ds_dummy = lt.renderLayout(layout_id= layout,
237                                schema_id= 'import_application',
238                                layout_mode = mode,
239                                context=context,
240                                mapping={},
241                                ob=object,
242                                commit = False,
243                                )
244    else:
245        mode = "edit"
246        psm = "Content changed!"
247        data['status'] = "edited"
248        #set_trace()
249        context.applicants_catalog.modifyRecord(**data)
250        logger.info('%s/%s modified application record' % (member,reg_no))
251
252elif manage:
253    if submitted:
254        mode = "view"
255        psm = "You are now assuming the applicant's role!"
256        logger.info('%s/%s entered application record' % (member,reg_no))
257        res,psm_dummy,ds_dummy = lt.renderLayout(layout_id= layout,
258                                schema_id= 'import_application',
259                                layout_mode = mode,
260                                context=context,
261                                mapping={},
262                                ob=object,
263                                commit = False,
264                                )
265    else:
266        mode = "edit"
267        psm = "You are now assuming the applicant's role!"
268        logger.info('%s/%s entered application record' % (member,reg_no))
269
270
271try:
272    passport_uploaded = bool(data['passport'])
273except:
274    passport_uploaded = False
275
276return context.apply_admission_form(rendered = res,
277                                    psm = psm,
278                                    mode = mode,
279                                    show_submit = passport_uploaded,
280                                    ds = ds,
281                                    info = info,
282                              )
Note: See TracBrowser for help on using the repository browser.