## Script (Python) "ti_112fc_resolve"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: ti_112fc_resolve.py 3370 2008-03-25 13:20:19Z joachim $
"""
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass

mtool = context.portal_membership
member = mtool.getAuthenticatedMember()
if str(member) not in ('admin','joachim'):
    return


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

request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader
def rwrite(s):
    response.setHeader('Content-type','text/html; charset=ISO-8859-15')
    response.write("%s<br>\n\r" % s)
results = course_results()
inconsistent = {}
student_ids = []    
count = 0
for result in results:
    d = {}
    d['student_id'],d['level_id'],d['code'] = result.key.split('|')
    not_equal = []
    for attr in ('student_id','level_id','code'):
        if d[attr] != getattr(result,attr,''):
            not_equal += attr,
    if not_equal:
        if d['student_id'] not in student_ids:
            student_ids += d['student_id'],     
            #logger.info('%s has inconsistent data for %s' % (result.key,",".join(not_equal)))
        inconsistent[result.key] = d
        count += 1
#set_trace()
logger.info("found %d students with %d inconsistent results" % (len(student_ids),len(inconsistent)))
student_id = ''
for key,d in inconsistent.items():
    if d['student_id'] != student_id:
        student_id = d['student_id']
        logger.info('fixing course_results for student %s' % student_id)
    d['key'] = key
    course_results.modifyRecord(**d)
logger.info("fixed %d students with %d inconsistent results" % (len(student_ids),len(inconsistent)))
logger.info('finished')
