## Script (Python) "fix_session"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: fix_session_in_course_results.py 5695 2011-02-01 07:12:14Z henrik $
"""
"""
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',):
    return


import logging
import DateTime
logger = logging.getLogger('fix_session_in_course_results')
from Products.AdvancedQuery import Eq, Between, Le,In

course_results = context.course_results
students = context.portal_url.getPortalObject().campus.students


brains = course_results()
total = len(brains)
edited = 0
for brain in brains:
    if not students.hasObject(brain.student_id):
        logger.info("no student %s" % student_id)
        continue
    student = getattr(students, brain.student_id)        
    if not student.hasObject("study_course"):
        logger.info("%s: no study_course" % brain.student_id)
        continue
    study_course = student.study_course
    if not study_course.hasObject(brain.level_id):
        logger.info("%s: no level %s" % (brain.student_id,brain.level_id))
        continue
    level_obj = getattr(study_course, brain.level_id)    
    level_doc = level_obj.getContent()   
    session_id = level_doc.session
    if len(session_id) == 9:
        session_id = session_id[2:4]
    elif len(session_id) != 2:
        #logger.info("invalid session %s in level %s for student %s" %
        #            (session_id,brain.level_id,brain.student_id))               
        continue        
    if brain.session_id != session_id:
        data = {}
        old_session_id = brain.session_id
        data['key'] = brain.key
        data['session_id'] = session_id
        course_results.modifyRecord(**data)
        logger.info("%s: %s overwritten with %s" % (brain.key,old_session_id,session_id))
        edited += 1
        
logger.info("edited %d course results of %s total" % (edited,total))
