## Script (Python) "getAccoHallInfo"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=student=None
##title=
##
# $Id: getAccoHallInfo.py 3054 2008-01-28 13:13:11Z joachim $
"""
return Info about a Accommodation Hall
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
    
from Products.AdvancedQuery import Eq, Between, Le,In

def cmp_bed(a,b):
    if a['bed'] > b['bed']:
        return 1
    return -1

request = context.REQUEST
portal_accommodation = context.portal_accommodation
aq_accommodation = portal_accommodation.evalAdvancedQuery
aq_students = context.students_catalog.evalAdvancedQuery
info = {}
info['action'] = "%s" % context.absolute_url()
info['choosen_ids'] = request.get('ids',[])
info['doc'] = context.getContent()
bt_list = []
bt_names =  context.getBedTypeNames()
query = Eq('hall',context.getId()) 
beds = aq_accommodation(query)
bed_types = []
for bed in beds:
    if bed.bed_type not in bed_types:
        bed_types += bed.bed_type,
bed_type_info = []
booked_list = []
booked_mapping = {}
for bt in bed_types:
    total_beds = [b for b in beds if b.bed_type == bt]
    booked_beds = 0
    for b in total_beds:
        if b.student and b.student != context.portal_accommodation.not_occupied:
            booked_beds += 1
            booked_mapping[b.student] = b
    bed_type_info.append({'name': bt_names[bt],
                    'total': len(total_beds),
                    'reserved': booked_beds,
                   })
info['bed_types'] = bed_type_info
reserved_info = []
students_url = "%s/campus/students" % (context.portal_url())
student_records = aq_students(In('id',booked_mapping.keys()))
for student_record in student_records:
    d = {}
    student_id = student_record.id 
    d['student'] = student_id
    d['student_url'] ='%s/%s' % (students_url,student_id)
    bed = context.getFormattedBed(booked_mapping[student_id].bed).split('/')
    d['bed'] = " / ".join(bed[1:])
    d.update(context.getFormattedStudentEntry(student_record))
    reserved_info.append(d)
reserved_info.sort(cmp_bed)
info['reserved'] = reserved_info

return info
