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

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

pde application added

  • Property svn:keywords set to Id
File size: 10.2 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 2340 2007-10-10 14:08:36Z 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']:
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 DE 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 DE 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'
98info = {}
99if traverse_subpath and traverse_subpath[0] in screening_types:
100    screening_type = info['screening_type'] = traverse_subpath[0]
101    info['heading'] = headings[screening_type]
102    info['heading_slip'] = headings_slip[screening_type]
103    layout = "application_%s" % screening_type
104    without_reg_no = screening_type in ('prence',)
105elif manage:
106    if object['screening_type']:
107        st = object['screening_type']
108    else:
109        st = 'pume'
110    screening_type = info['screening_type'] = st
111    info['heading'] = headings[screening_type]
112    info['heading_slip'] = headings_slip[screening_type]
113    layout = "application_%s" % screening_type
114    without_reg_no = screening_type in ('prence',)
115else:
116    return request.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
117
118
119if slip:
120    mode = "view_slip"
121    logger.info('%s/%s views application slip' % (member,reg_no))
122
123res,psm,ds = lt.renderLayout(layout_id= layout,
124                             schema_id= 'application',
125                             layout_mode = mode,
126                             context=context,
127                             mapping=validate and REQUEST,
128                             ob=object,
129                             commit = False,
130                            )
131if slip:
132    return context.apply_admission_slip(rendered = res,
133                                        psm = "",
134                                        mode = mode,
135                                        ds = ds,
136                                        info = info,
137                                       )
138if psm == 'invalid':
139    return context.apply_admission_form(rendered = res,
140                                        psm = "Please correct your input!",
141                                        mode = mode,
142                                        ds = ds,
143                                        info = info,
144                                       )
145elif psm == '' and not manage:
146    return context.apply_admission_form(rendered = res,
147                                        psm = psm,
148                                        ds = ds,
149                                        mode = mode,
150                                        info = info,
151                                       )
152# elif psm == 'valid' or (psm == '' and manage):
153#     pass
154if without_reg_no:
155    reg_no = ds.get('reg_no')
156data = {}
157dm = ds.getDataModel()
158for field in context.applicants_catalog.schema():
159    if dm.has_key("%s" % field):
160        data[field] = dm.get(field)
161data['reg_no'] = reg_no
162
163if apply_admission:
164    if submitted:
165        mode = "view"
166        psm = "The form has already been submitted and you are not allowed to resubmit the data!"
167        logger.info('%s/%s tried to resubmit application record' % (member,reg_no))
168        res,psm_dummy,ds_dummy = lt.renderLayout(layout_id= layout,
169                                schema_id= 'application',
170                                layout_mode = mode,
171                                context=context,
172                                mapping={},
173                                ob=object,
174                                commit = False,
175                                )
176    elif not request.has_key('confirm'):
177        mode = "edit"
178        psm = "Please confirm Passport Photograph!"
179        logger.info('%s/%s tried to submit without ticking confirmation check box' % (member,reg_no))
180    else:
181        mode = "view"
182        psm = "You successfully applied for admission!"
183        if object['status'] == 'edited':
184            data['status'] = "submitted"
185            data['application_date'] = current
186            logger.info('%s/%s modified and submitted application record' % (member,reg_no))
187        elif object['status'] == 'reset':
188            data['status'] = 'resubmitted on %s' % DateTime.DateTime().strftime('%A, %B %d, %Y')
189            logger.info('%s/%s modified and resubmitted application record' % (member,reg_no))
190        object['status'] = data['status']
191        context.applicants_catalog.modifyRecord(**data)
192
193        res,psm_dummy,ds = lt.renderLayout(layout_id= layout,
194                                schema_id= 'application',
195                                layout_mode = mode,
196                                context=context,
197                                mapping=validate and REQUEST,
198                                ob=object,
199                                commit = False,
200                                )
201elif create:
202    if submitted:
203        mode = "view"
204        logger.info('%s/%s views application record' % (member,reg_no))
205    else:
206        mode = "edit"
207        logger.info('%s/%s edits application record' % (member,reg_no))
208    psm = ""
209    if without_reg_no:
210        object['reg_no'] = reg_no
211    object['pin'] = str(ds.get('pin'))
212    res,psm,ds_dummy = lt.renderLayout(layout_id= layout,
213                                schema_id= 'application',
214                                layout_mode = mode,
215                                context=context,
216                                mapping={},
217                                ob=object,
218                                commit = False,
219                                )
220elif edit:
221    if submitted:
222        mode = "view"
223        psm = "The form has already been submitted and you are not allowed to modify the data!"
224        logger.info('%s/%s tried to edit submitted application record' % (member,reg_no))
225        res,psm_dummy,ds_dummy = lt.renderLayout(layout_id= layout,
226                                schema_id= 'application',
227                                layout_mode = mode,
228                                context=context,
229                                mapping={},
230                                ob=object,
231                                commit = False,
232                                )
233    else:
234        mode = "edit"
235        psm = "Content changed!"
236        data['status'] = "edited"
237        #set_trace()
238        context.applicants_catalog.modifyRecord(**data)
239        logger.info('%s/%s modified application record' % (member,reg_no))
240
241elif manage:
242    if submitted:
243        mode = "view"
244        psm = "You are now assuming the applicant's role!"
245        logger.info('%s/%s entered application record' % (member,reg_no))
246        res,psm_dummy,ds_dummy = lt.renderLayout(layout_id= layout,
247                                schema_id= 'application',
248                                layout_mode = mode,
249                                context=context,
250                                mapping={},
251                                ob=object,
252                                commit = False,
253                                )
254    else:
255        mode = "edit"
256        psm = "You are now assuming the applicant's role!"
257        logger.info('%s/%s entered application record' % (member,reg_no))
258
259
260try:
261    passport_uploaded = bool(data['passport'])
262except:
263    passport_uploaded = False
264
265return context.apply_admission_form(rendered = res,
266                                    psm = psm,
267                                    mode = mode,
268                                    show_submit = passport_uploaded,
269                                    ds = ds,
270                                    info = info,
271                              )
Note: See TracBrowser for help on using the repository browser.