source: WAeUP_SRP/base/skins/waeup_accommodation/reserve_accommodation.py @ 2632

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

rebuild getNextInfo.py completely
fetch session from portal properties.xml
change all scripts using getSessionId
remove StudentCourseResult? relevant code from event services
make pay_by_sc.py and interswitch_cb.py work (rebuild both)

  • Property svn:keywords set to Id
File size: 4.9 KB
RevLine 
[629]1##parameters=REQUEST
[805]2# $Id: reserve_accommodation.py 2454 2007-10-27 21:53:04Z henrik $
[629]3"""
[1100]4process the the accommodation reservation
[629]5"""
6import DateTime
7current = DateTime.DateTime()
8pr = context.portal_registration
[659]9wftool = context.portal_workflow
[629]10lt = context.portal_layouts
[1100]11info = context.getAccommodationInfo()
[1133]12
[1140]13import logging
[1566]14logger = logging.getLogger('Skins.reserve_accommodation')
[1140]15
16#if info is None:
17#    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
18
[1133]19if info is None:
[1140]20    member_id = str(context.portal_membership.getAuthenticatedMember())
[1566]21    logger.info('%s tried to reserve accommodation' % (member_id))
[1140]22    return context.REQUEST.RESPONSE.redirect("%s/srp_invalid_access" % context.portal_url())
[1133]23
[1183]24mode = 'create'
25if not info['booking_allowed']:
26    return context.REQUEST.RESPONSE.redirect("%s/no_booking_allowed" % info['student'].absolute_url())
[639]27student = info['student']
[1100]28acco_id = info['acco_id']
[2454]29session = info['session'][1]
30#session = acco_id[-4:]
[1100]31validate = REQUEST.has_key("cpsdocument_create_button")
[742]32if info.has_key('acco') and info['acco']:
[821]33    validate = REQUEST.has_key("cpsdocument_edit_button")
[835]34    if info['acco_review_state'] == "maintenance_fee_paid":
[742]35        return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % info['acco'].absolute_url())
36    else:
37        mode = 'edit'
38d = {}
[833]39button = "Book"
[742]40if mode == 'edit':
41    d['acco_res_date'] = info['acco_doc'].acco_res_date
42    d['acco_res_sc_pin'] = info['acco_doc'].acco_res_sc_pin
[821]43    d['student_status'] = info['acco_doc'].student_status
[742]44    d['bed'] = info['acco_doc'].bed
45    d['session'] = info['acco_doc'].session
[821]46    button = "Pay Maintainance Fee"
[742]47res,psm,ds = lt.renderLayout(layout_id= 'student_accommodation_fe',
[686]48                      schema_id= 'student_accommodation',
[629]49                      context=context,
50                      mapping=validate and REQUEST,
[742]51                      ob=d,
52                      layout_mode=mode,
[652]53                      formaction = "reserve_accommodation",
[821]54                      button = button
[629]55                      )
[1255]56if psm == 'invalid' or info['error'] is not None:
57    member_id = str(context.portal_membership.getAuthenticatedMember())
[1566]58    logger.info('%s, %s' % (member_id,info['error'] ))
[1255]59    if psm == 'invalid':
[1293]60        psm = "Please correct your input."
[1255]61    else:
[1293]62        psm = "Error in data, unable to reserve bed."
[849]63    return context.accommodation_pin_edit_form(rendered = res,
[1292]64                                 psm = psm,
[701]65                                 #psm = "%s, %s" % (psm,ds),
[821]66                                 mode = mode,
[629]67                                 ds = ds,
68                                 )
69elif psm == '':
[849]70    return context.accommodation_pin_edit_form(rendered = res,
[629]71                                 psm = None,
[821]72                                 mode = mode,
[629]73                                 ds = ds,
74                                 )
75elif psm == 'valid':
76    s_id = ds.get('s_id')
[742]77    if mode == 'create':
78        pin = str(ds.get('acco_res_sc_pin'))
79        pa = context.portal_accommodation
[1412]80        already = pa(student=s_id)
81        if not already:
82            code,bed = pa.searchAndReserveBed(s_id,"%s" % (info['student_status']))
83            #code,bed = pa.searchAndReserveBed(s_id,"%s_%s" % (info['sex'],ds.get('student_status')))
84            if code == -1:
85                return context.accommodation_pin_edit_form(rendered = res,
86                                     psm = "%s" % bed,
87                                     mode = mode,
88                                     ds = ds,
89                                     )
90            elif code == -2:
91                return context.accommodation_pin_edit_form(rendered = res,
92                                     psm = "No bed available. Your category is already fully booked.",
93                                     mode = mode,
94                                     ds = ds,
95                                     )
96        else:
[1566]97            bed = already[0].bed
[742]98        student.invokeFactory('StudentAccommodation',acco_id)
99        acco = getattr(student,acco_id)
[2000]100        acco_info = context.waeup_tool.getHallInfo(bed)
[828]101        ds.set('acco_maint_code', acco_info.get('maintenance_code'))
102        ds.set('acco_maint_fee', acco_info.get('maintenance_fee'))
[742]103        ds.set('acco_res_date', current)
104        ds.set('bed', bed)
105        ds.set('session', session)
[1100]106        ds.set('student_status',info['student_status'])
[742]107        acco.getContent().edit(mapping=ds)
[744]108        #wftool.doActionFor(acco,'pay_maintenance_fee',dest_container=acco)
[856]109        return context.REQUEST.RESPONSE.redirect("%s/reserve_accommodation" % student.absolute_url())
[742]110pin = str(ds.get('acco_main_sc_pin'))
111pp = context.portal_pins
[639]112acco = getattr(student,acco_id)
[742]113ds.set('acco_maint_date', current)
[639]114acco.getContent().edit(mapping=ds)
[744]115wftool.doActionFor(acco,'pay_maintenance_fee',dest_container=acco)
[660]116return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % student.absolute_url())
[1292]117
Note: See TracBrowser for help on using the repository browser.