## Script (Python) "purgeCourseResultsObjects"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: purgeCourseResultsObjects.py 3206 2008-02-23 22:59:10Z 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','joachim'):
    return


import logging
import DateTime
logger = logging.getLogger('Skins.purgeCourseResultsObjects')
from Products.AdvancedQuery import Eq, Between, Le,In
aq_results = context.course_results.evalAdvancedQuery
aq_portal = context.portal_catalog_real.evalAdvancedQuery
#aq_students = context.students_catalog.evalAdvancedQuery
students = context.portal_url.getPortalObject().campus.students
request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader

results = aq_portal(Eq('portal_type','StudentCourseResult'))
total = len(results)
logger.info("found %d course result objects" % (total))
count = 0
moved = 0
cocount = 0
commit_after = 20
current_student_id = ''
current_level_id = ''
to_move = []
for result in results:
    count += 1
    pl = result.getPath().split('/')
    student_id = pl[-4]
    level_id = pl[-2]
    if student_id != current_student_id:
        if current_student_id:
            to_move += (current_student_id,current_level_id),
        current_student_id = student_id
        current_level_id = level_id
    elif level_id != current_level_id:
        to_move += (current_student_id,current_level_id),
        current_level_id = level_id
for student_id,level_id in to_move:
    try:
        study_level = getattr(getattr(getattr(students,student_id),
                                      "study_course")
                              ,level_id)
    except:
        logger.info('%s level %s not found' % (student_id,level_id))
        continue
    context.course_results.moveResultsHere(study_level,student_id)
    moved += 1
    logger.info("moved results of student %s" % (student_id))
    if moved and not moved % commit_after:
        context.waeup_tool.doCommit()
        logger.info("Committing %s transactions, total %s" % (commit_after,len(to_move)))
        # cocount += 1
        # if cocount > 2:
        #     break
msg = "finished moving results of %d students" % (moved)
logger.info(msg)
#rwrite(msg)


