## Script (Python) "reindexEndLevel"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: reindexEndLevel.py 3058 2008-01-28 18:04:29Z joachim $
"""
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass


mtool = context.portal_membership
member = mtool.getAuthenticatedMember()

import logging
import DateTime
logger = logging.getLogger('Skins.reindexEndLevel')
from Products.AdvancedQuery import Eq, Between, Le,In
#aq_portal = context.portal_catalog_real.evalAdvancedQuery
aq_students = context.students_catalog.evalAdvancedQuery
#students_folder = context.portal_url.getPortalObject().campus.students

request = context.REQUEST
session = request.SESSION
student_records = context.students_catalog()
total = len(student_records)
logger.info("found %d students" % total)
count = 1
no_end_level = no_course = 1
commit_after = 1000
logger.info('started to reindex end_level for %d records in students_catalog' % total)
certificate_dict = context.students_catalog.fill_certificates_dict()
logger.info('filled certificate_dict')
records_to_change = []
for student_record in student_records:
    # skip record without lga value
    if not count % commit_after:
        logger.info("found %d of %d sofar" % (len(records_to_change),count))
        count += 1
    if not student_record.course:
        #logger.info("%d: %s course is empty" % (no_course,student_record.id))
        no_course += 1
        continue
    if student_record.end_level and student_record.end_level == certificate_dict[student_record.course]['end_level']:
        continue
    elif not certificate_dict[student_record.course]['end_level']:
        logger.info("%s: no end_level for course %s faculty %s department %s" % (student_record.id,
                                                                                student_record.course,
                                                                                student_record.faculty,
                                                                                student_record.department))
        no_end_level +=1
        continue
    records_to_change += (student_record,certificate_dict[student_record.course]['end_level']),
for record,end_level in records_to_change:
    logger.info("modified %s end_level from %s to %s" % (record.id,record.end_level,end_level))
    context.students_catalog.modifyRecord(id = record.id,
                                          record=record,end_level=end_level)
logger.info('found %d certificates with empty end_level' % (no_end_level - 1))
logger.info('found %d students with no course' % (no_course - 1))
logger.info('corrected %d students with wrong end_level' % len(records_to_change))
