## Script (Python) "fill_session"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: fill_session_in_course_results.py 5203 2010-05-23 04:29:20Z 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('fill_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:
    #set_trace()
    if not brain.session_id:
        data = {}
        data['key'] = brain.key
        
        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()   
        #set_trace() 
        session_id = level_doc.session
        if len(session_id) == 2:
            pass
        elif len(session_id) == 9:
            session_id = session_id[2:4]
        if len(session_id) != 2:
            logger.info("invalid session %s in level %s for student %s" %
                        (session_id,brain.level_id,brain.student_id))        
        data['session_id'] = session_id
        course_results.modifyRecord(**data)
        logger.info("%s: session %s filled" % (brain.key,session_id))
        edited += 1
    #else:
    #    logger.info("%s: %s" % (brain.student_id,brain.session_id))
        
logger.info("edited %d course results of %s total" % (edited,total))
