## Script (Python) "search_pins"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=REQUEST
##title=
##
# $Id: fixLevel.py 1250 2007-01-09 17:19:20Z joachim $
"""
list Students for ClearanceOfficers
"""

request = REQUEST
wftool = context.portal_workflow
mtool = context.portal_membership
member = mtool.getAuthenticatedMember()
roles = member.getRolesInContext(context)
retcat = context.returning_import
rcat = context.results_import
scat = context.students_catalog
from Products.AdvancedQuery import Eq, Between, Le,In
aq_students = context.students_catalog.evalAdvancedQuery

if str(member) not in ('admin','joachim'):
    return 
count = 0
#from Products.zdb import set_trace;set_trace()
values = scat.uniqueValuesFor('level')
#query = ~ In("level",('100', '200', '300', '400', '500', '600'))
#query = In("level",('',))
#res = aq_students(query)
#from Products.zdb import set_trace;set_trace()
modified = []
modified.append("%d to change" % len(res))
list = []
dbrains = {}
for sbrain in res:
    list.append((sbrain.id,sbrain.matric_no,sbrain.course))
for id,m,c in list:
    erg = context.results_import(matric_no=m)
    if erg and erg[0].Level:
        context.students_catalog.modifyRecord(id = id, level=erg[0].Level)
        modified.append("%s, %s" % (id,m))
    else:
        pres = context.portal_catalog(id=sbrain.id)
        if not pres:
            modified.append("no results for %s, %s" % (id,m))
            continue
        review_state = pres[0].review_state
        if review_state not in ('admitted',
                                'clearance_pin_entered',
                                'clearance_requested',
                                'cleared_and_validated',
                                ):
            modified.append("no new student %s" % (id))
            continue
        cres = context.portal_catalog(id = c)
        if not cres:
            modified.append("no certificate %s for %s" % (id,c))
        cert_doc = cres[0].getObject().getContent()
        level = getattr(cert_doc,'start_level',None)
        if level is None:
            modified.append("no start_level in certificate %s for %s" % (id,c))
        context.students_catalog.modifyRecord(id=id, level=level)
        modified.append("%s, %s" % (id,c))
return '\n'.join(modified)
