## Script (Python) "cancel_allocation"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=session=None
##title=
##
# $Id: cancel_allocation.py 5616 2010-12-27 10:18:18Z henrik $
"""
cancel bed allocation (former release_bed)
"""
import logging
logger = logging.getLogger('Skins.cancel_allocation')

import DateTime
current = DateTime.DateTime()
request = context.REQUEST
redirect = request.RESPONSE.redirect
mtool = context.portal_membership
wf = context.portal_workflow
member = mtool.getAuthenticatedMember()
member_id = str(member)
path_info = request.get('PATH_INFO').split('/')
students = context.portal_url.getPortalObject().campus.students
student_id = context.getStudentId()

if not context.isSectionOfficer():
    logger.info('%s tried to access %s' % (member_id,student_id))
    return None

if student_id is not None:
    logger.info('%s requests bed_release for %s' % (member_id,student_id))
    res = context.portal_accommodation(student=student_id)
    if len(res) == 0:
        logger.info('no bed of %s found' % (student_id))
        return redirect("%s/%s/accommodations" % (students.absolute_url(),student_id))
    allocated_bed = res[0]
    context.portal_accommodation.modifyRecord(bed=allocated_bed.bed,student=context.portal_accommodation.not_occupied)
    data = {}
    data['catkey'] = student_id + '|' + session
    data['bed'] = "-- cancelled on %s by section officer --" % context.getDateStr(fmt='%d/%m/%Y', dt=current)
    data['acco_maint_fee'] = ""
    #set_trace()
    context.accommodation_catalog.modifyRecord(**data)
    logger.info('%s released bed of %s' % (member_id,student_id))
    return redirect("%s/%s/accommodations" % (students.absolute_url(),student_id))

return None

