## Script (Python) "getStudentStatistics"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: getStudentStatistics.py 1128 2006-12-22 00:28:30Z joachim $
"""
return Student Statistic
"""
try:
    from Products.AdvancedQuery import Eq, Between, Le,In
    aq_portal = context.portal_catalog.evalAdvancedQuery
    aq_students = context.students_catalog.evalAdvancedQuery
except:
    evalAdvancedQuery = None
l = []
if not context.isStaff():
    return l
dep = {}
dep['id'] = "All"
total = len(context.students_catalog())
dep['students'] = total
cpe_res = context.portal_catalog(review_state ='clearance_pin_entered')
cpe_ids = [r.getId for r in cpe_res]
cpe = len(cpe_res)
dep['clearance_pin_entered'] = cpe
dep['clearance_pin_entered_percent'] = (cpe*100/total)
cr_res = context.portal_catalog(review_state='clearance_requested')
cr_ids = [r.getId for r in cr_res]
cr = len(cr_res)
dep['clearance_requested'] = cr
dep['clearance_requested_percent'] = (cr*100/total)
cav_res = context.portal_catalog(review_state ='cleared_and_validated')
cav_ids = [r.getId for r in cav_res]
cav = len(cav_res)
dep['cleared_and_validated'] = cav
dep['cleared_and_validated_percent'] = (cav*100/total)
or_res = context.portal_catalog(review_state='objection_raised')
or_ids = [r.getId for r in or_res]
ora = len(or_res)
dep['objection_raised'] = ora
dep['objection_raised_percent'] = (ora*100/total)
l.append(dep)
fs = context.portal_catalog(portal_type="Faculty")
#from Products.zdb import set_trace;set_trace()
for fid in [f.getId for f in fs]:
    dep = {}
    dep['id'] = fid
    fquery = Eq('portal_type','Faculty')
    fac_res = context.students_catalog(faculty=fid)
    fac_ids = [r.id for r in fac_res]
    total = len(fac_res)
    if total == 0:
        continue
    dep['students'] = total
    cpe = len([s for s in fac_ids if s in cpe_ids])
    dep['clearance_pin_entered'] = cpe
    dep['clearance_pin_entered_percent'] = 0
    if total:
        dep['clearance_pin_entered_percent'] = (cpe*100/total)
    cr = len([s for s in fac_ids if s in cr_ids])
    dep['clearance_requested'] = cr
    dep['clearance_requested_percent'] = 0
    if total:
        dep['clearance_requested_percent'] = (cr*100/total)
    cav = len([s for s in fac_ids if s in cav_ids])
    dep['cleared_and_validated'] = cav 
    dep['cleared_and_validated_percent'] = 0
    if total:
        dep['cleared_and_validated_percent'] = (cav*100/total)
    ora = len([s for s in fac_ids if s in or_ids])
    dep['objection_raised'] = ora
    dep['objection_raised_percent'] = 0
    if total:
        dep['objection_raised_percent'] = (ora*100/total)
    l.append(dep)
return l
