## Script (Python) "refresh_level"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=REQUEST=None, student=None, action_after_reject=None, action_after_validate=None
# $Id: refresh_level.py 1873 2007-06-08 19:53:48Z joachim $
"""
process the Application Form
return html renderer + psm
"""
request = context.REQUEST
import DateTime,logging
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
from Products.AdvancedQuery import Eq, Between, Le,In
try:
    aq_portal = context.portal_catalog.evalAdvancedQuery
except:
    aq_portal = context.portal_catalog_real.evalAdvancedQuery
aq_courses = context.courses_catalog.evalAdvancedQuery

import logging
logger = logging.getLogger('Skins.refresh_level')

from urllib import urlencode

current = DateTime.DateTime()
request = context.REQUEST
#session = request.SESSION
response = request.RESPONSE
redirect = response.redirect
logger = logging.getLogger('Skins.refresh_level')
mtool = context.portal_membership
member = mtool.getAuthenticatedMember()
member_id = str(member)
wt = context.waeup_tool
student = context.students_catalog(id=context.getStudentId())[0]
cert_id = student.course
current_level = student.level
##in_progress =  session.get('in_progress','finished')
##if in_progress == 'finished':
##    session.set('in_progress','started')
##    view = context.in_progress_view(refresh=3,page=action_after_validate)
##    response.setHeader('Content-type','text/html; charset=ISO-8859-15')
##    response.setHeader('Content-length','%d' % (len(view)))
##    response.setStatus('OK')
##    response.write(view)
##    response.write('')
##elif in_progress == 'started':
##    return
level = context
#results = context.results_import(matric_no = student.matric_no)
# results = False #skip carry overs
# if results:
#     #carry_overs = [brain for brain in results if brain.GRADE in ('D','E','F')]
#     l = []
#     carry_overs = results
#     for co in carry_overs:
#         carry_over = False
#         query = Eq('code',co.CosCode)
#         c_res = aq_courses(query)
#         if not c_res:
#             logger.info('%s, course %s not found in courses_catalog' % (student.id,co.CosCode))
#             continue
#         course_cat_entry = c_res[0]
#         if not course_cat_entry.passmark:
#             carry_over = co.GRADE in ('D','E','F')
#         else:
#             try:
#                 score = int(co.Score)
#             except:
#                 logger.info('%s, course %s has invalid score %s' % (student.id,
#                                                                     co.CosCode,
#                                                                     co.Score))
#                 continue
#             if int(c_res[0].passmark) <= score:
#                 continue
#             carry_over = True
#         if not carry_over:
#             continue
#         d = context.getCourseInfo(co.CosCode)
#         d['grade'] = co.GRADE
#         d['carry_level'] = co.CarryLevel
#         course_id = "%s_co" % co.CosCode
#         if not context.hasObject(course_id):
#             cr_id = level.invokeFactory('StudentCourseResult',course_id)
#             course_result = getattr(level,cr_id)
#             context.portal_workflow.doActionFor(course_result,'open')
#             course_result.getContent().edit(mapping=d)
res = context.portal_catalog(portal_type="Certificate", id = cert_id)
l = []
if res:
    cert = res[0]
    path = cert.getPath()
    query = Eq("path","%s/%s" % (path,student.level)) &\
            Eq('portal_type','CertificateCourse')
    courses = aq_portal(query)
    for c in courses:
        #set_trace()
        if not context.hasObject(c.getId):
            d = context.getCourseInfo(c.getId)
            cr_id = level.invokeFactory('StudentCourseResult',c.getId)
            course_result = getattr(level,cr_id)
            context.portal_workflow.doActionFor(course_result,'open')
            d['core_or_elective'] = getattr(c.getObject().getContent(),'core_or_elective')
            course_result.getContent().edit(mapping=d)
            context.waeup_tool.doCommit()
#session.set('in_progress','finished')
logger.info('%s updated course list' % member)

args = {}
psm = "Course list updated!"
args['portal_status_message'] = psm
if action_after_validate:
    url = context.absolute_url() + '/' + action_after_validate + '?' + urlencode(args)
else:
    url = context.absolute_url() + '?' + urlencode(args)
return REQUEST.RESPONSE.redirect(url)
