## Script (Python) "getAccommodationRecords"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=student_id=None
##title=
##
# $Id: getAccommodationRecords.py 5793 2011-03-03 14:01:26Z henrik $
"""
"""
import logging
logger = logging.getLogger('Skins.getAccommodationRecords')
import DateTime

pprops = context.portal_properties
booking_disabled = not pprops.enable_acco_booking

request = context.REQUEST
mtool = context.portal_membership
wf = context.portal_workflow
member = mtool.getAuthenticatedMember()
member_id = str(member)
path_info = request.get('PATH_INFO').split('/')
portal_session = context.getSessionId()[0]

if mtool.isAnonymousUser():
    return None
info = {}
if student_id is None:
    requested_id = context.getStudentId()
    if requested_id and not context.isStaff() and member_id != requested_id:
        logger.info('%s tried to access %s' % (member_id,requested_id))
        return None
    elif context.isStaff():
        student_id = requested_id
    else:
        student_id = member_id
student_record = context.students_catalog.getRecordByKey(student_id)
if student_record is None:
    logger.info('%s not found in students_catalog' % student_id)
    return None

info['is_so'] = context.isSectionOfficer()
info['is_student'] = context.isStudent()
info['student_name'] = student_record.name    
student_path = "%s/campus/students/%s" % (context.portal_url(),student_id)
accommodation_records = context.accommodation_catalog(student_id = student_id)
accommodations = []
for ar in accommodation_records:
    row = {}
    row['sort_param'] = ar.session[-2:]  # in 2006 we used the session attribute was 2006 and not 06
    row['session'] = ar.session
    row['bed'] = ar.bed
    row['reservation_status'] = ar.reservation_status
    row['paid'] = ar.reservation_status == 'maintenance_fee_paid'
    # Okene special
    if not (info['is_so'] or row['paid']):
        row['bed'] = 'visible after payment'
    row['current_unpaid'] = not row['paid'] and ar.session == portal_session
    row['url'] = student_path
    row['cancellation_allowed'] = info['is_so'] and ar.session == portal_session
    row['relocation_allowed'] = info['is_so'] and ar.session == portal_session
    accommodations.append(row)

accommodations.sort(cmp=lambda x,y: cmp(x['sort_param'],y['sort_param']))

info['accommodations'] = accommodations

as = context.getAccommodationStatus()
info['booking_allowed'] = as['booking_allowed']
info['booking_disabled'] = as['booking_disabled']

return info
                 
    
    