##parameters=
# $Id: create_level_101.py 6863 2011-10-05 06:46:03Z henrik $
"""
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
aq_results = context.course_results.evalAdvancedQuery

current = DateTime.DateTime()
request = context.REQUEST
response = request.RESPONSE
redirect = response.redirect
logger = logging.getLogger('Skins.create_level_101')
info = context.waeup_tool.getAccessInfo(context)
student_id = info['student_id']
if student_id is None:
    return None

student = context.students_catalog.getRecordByKey(student_id)
cert_id = student.course
current_level = student.level

current_session = student.session
in_progress =  request.get('in_progress','not started')
if aq_results(Eq('student_id',student_id) & Eq('level_id','100')):
    logger.info('%s tried to create already existing level 100' % student.id)
    return 'Forbidden'

if context.hasObject('100') or context.hasObject('101'):
    logger.info('%s tried to create already existing level 100' % student.id)
    return 'Forbidden'

context.invokeFactory('StudentStudyLevel',"%s" % '101')
level = getattr(context,"101")
context.portal_workflow.doActionFor(level,'open')
level.getContent().edit(mapping={'session': current_session})
level_id = level.getId()
session_id = context.getLevelSession(level.getContent(),student_id,level_id)
results = []
records = []
l = []

res = context.portal_catalog(portal_type="Certificate", id = cert_id)
if res:
    cert = res[0]
    path = cert.getPath()
    academics_level = '100'
    query = Eq("path","%s/%s" % (path,academics_level)) &\
            Eq('portal_type','CertificateCourse')
    courses = aq_portal(query)
    for c in courses:
        course_id = "%s" % c.getId
        if course_id in l:
            # don't add twice
            continue
        l += course_id,
        d = context.getCourseInfo(c.getId)
        d['carry_over'] = False
        d['core_or_elective'] = getattr(c.getObject().getContent(),'core_or_elective')
        d['course_id'] = course_id
        d['student_id'] = student_id = context.getStudentId()
        d['level_id'] = level_id
        d['session_id'] = session_id
        records.append(d)

if records:
    existing_uids = context.course_results.addMultipleRecords(records)
    if existing_uids:
        logger.info('%s level 101 %s existing keys' % (student.id,
                                                     ",".join(existing_uids)))

logger.info('%s created level 101 (100 carryovers)' % student.id)

return response.redirect("%s/101" % context.absolute_url())