## Script (Python) "reserve_accommodation.py" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters=REQUEST # $Id: reserve_accommodation.py 3406 2008-04-02 07:16:08Z henrik $ """ process the the accommodation reservation """ try: from Products.zdb import set_trace except: def set_trace(): pass import DateTime current = DateTime.DateTime() pr = context.portal_registration wftool = context.portal_workflow lt = context.portal_layouts info = context.getAccommodationInfo() import logging logger = logging.getLogger('Skins.reserve_accommodation') #if info is None: # return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url()) if info is None: member_id = str(context.portal_membership.getAuthenticatedMember()) logger.info('%s tried to reserve accommodation' % (member_id)) return context.REQUEST.RESPONSE.redirect("%s/srp_invalid_access" % context.portal_url()) mode = 'create' if not info['booking_allowed']: return context.REQUEST.RESPONSE.redirect("%s/no_booking_allowed" % info['student'].absolute_url()) student = info['student'] student_id = info['student_id'] acco_id = info['acco_id'] #session = info['session'][1] session = info['session'][0] validate = REQUEST.has_key("cpsdocument_create_button") if info.has_key('acco') and info['acco']: validate = REQUEST.has_key("cpsdocument_edit_button") if info['maintenance_paid']: if not info['acco_doc'].acco_maint_fee: d_update = {} hall_info = context.waeup_tool.getHallInfo(info['acco_doc'].bed) d_update['acco_maint_fee'] = hall_info.get('maintenance_fee') wftool.doActionFor(info['acco'],'reserve_bed') info['acco_doc'].edit(mapping=d_update) wftool.doActionFor(info['acco'],'pay_maintenance_fee') return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % info['acco'].absolute_url()) # elif info['online_payment']: # return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % info['acco'].absolute_url()) # # return context.REQUEST.RESPONSE.redirect("%s/pay_interswitch_acco?paytype=HOM" % info['student'].absolute_url()) else: mode = 'edit' d = {} button = "Book" if mode == 'edit': d['acco_res_date'] = info['acco_doc'].acco_res_date d['acco_res_sc_pin'] = info['acco_doc'].acco_res_sc_pin d['acco_maint_fee'] = info['acco_doc'].acco_maint_fee d['student_status'] = info['acco_doc'].student_status d['bed'] = info['acco_doc'].bed d['session'] = info['acco_doc'].session button = "Pay Maintainance Fee" res,psm,ds = lt.renderLayout(layout_id= 'student_accommodation_fe', schema_id= 'student_accommodation', context=context, mapping=validate and REQUEST, ob=d, layout_mode=mode, formaction = "reserve_accommodation", button = button ) if psm == 'invalid': # or info['error'] is not None: member_id = str(context.portal_membership.getAuthenticatedMember()) #logger.info('%s, %s' % (member_id,info['error'] )) logger.info('%s entered invalid data' % (member_id)) if psm == 'invalid': psm = "Please correct your input." else: psm = "Error in data, unable to reserve bed." return context.accommodation_edit_form(rendered = res, psm = psm, #psm = "%s, %s" % (psm,ds), mode = mode, ds = ds, ) elif psm == '': return context.accommodation_edit_form(rendered = res, psm = None, mode = mode, ds = ds, ) elif psm == 'valid': if mode == 'create': #set_trace() pin = str(ds.get('acco_res_sc_pin')) code,bed = context.portal_accommodation.searchAndReserveBed(student_id, "%s" % (info['student_status']), random_order=True) while True: if code == 1: break if code == -1: break #return context.accommodation_edit_form(rendered = res, # psm = "%s" % bed, # mode = mode, # ds = ds, # ) elif code == -2: return context.accommodation_edit_form(rendered = res, psm = "No bed available. Your category is already fully booked.", mode = mode, ds = ds, ) else: # unknown error return context.accommodation_edit_form(rendered = res, psm = "Unexpected Error!", mode = mode, ds = ds, ) student.invokeFactory('StudentAccommodation',acco_id) hall_info = context.waeup_tool.getHallInfo(bed) ds.set('acco_maint_code', hall_info.get('maintenance_code')) ds.set('acco_maint_fee', hall_info.get('maintenance_fee')) ds.set('acco_res_date', current) ds.set('bed', bed) ds.set('session', session) ds.set('student_status',info['student_status']) acco = getattr(student,acco_id) acco.getContent().edit(mapping=ds) #wftool.doActionFor(acco,'pay_maintenance_fee',dest_container=acco) return context.REQUEST.RESPONSE.redirect("%s/reserve_accommodation" % student.absolute_url()) #pin = str(ds.get('acco_main_sc_pin')) #pp = context.portal_pins #acco = getattr(student,acco_id) d = {} d['acco_maint_sc_pin'] = ds.get('acco_maint_sc_pin') d['acco_maint_date'] = current info['acco_doc'].edit(mapping=d) wftool.doActionFor(info['acco'],'pay_maintenance_fee') return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % student.absolute_url())