## 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