## Script (Python) "ti_188_resolve"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: ti_188_resolve.py 1771 2007-05-11 11:37:16Z henrik $
"""
resolve ticket #188
"""

request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader

def getObject(outer,object):
    if outer and outer.hasObject(object):
        return getattr(outer,object)
    return None

def rwrite(s):
    response.setHeader('Content-type','text/html; charset=ISO-8859-15')
    response.write("%s<br>\n\r" % s)

wftool = context.portal_workflow
mtool = context.portal_membership
member = mtool.getAuthenticatedMember()
roles = member.getRolesInContext(context)
retcat = context.returning_import
rcat = context.results_import
scat = context.students_catalog
from Products.AdvancedQuery import Eq, Between, Le,In
aq_students = context.students_catalog.evalAdvancedQuery
students = context.portal_url.getPortalObject().campus.students


if str(member) not in ('admin','joachim'):
    return
count = 0
ok_count = 0
reg_count = 0
nyl_count = 0
wrong_count = 0
cr_count = 0
res = scat()
for sbrain in res:
    if not sbrain.matric_no:
        continue
    if str(sbrain.level) == '100':
        ec = "new"
    else:
        ec = "nor"
    erg = context.results_import(matric_no=sbrain.matric_no)
    if erg and erg[0].Level:
        level_res = erg[0].Level
        #everdict = erg[0].Verdict
        level_cc = context.getLevelFromResultsCosCode(erg)
        #if level_cc == 0:
            #lc = "-"
        lc = "%s00" % level_cc

        #verdict,elegible = context.getVerdict(everdict)
        #if elegible:
        #    continue

        verdict =  sbrain.verdict
        if verdict in ('A','B','',):
            continue

        dict = context.getFormattedStudentEntry(sbrain)
        dict['level_res'] = lc
        count += 1
        dict['count'] = count
        code = 'xxx'
        comment = ""
        dict['review_state'] = ''
        sres = context.portal_catalog(id = sbrain.id)
        if sres:
            dict['review_state'] = sres[0].review_state

        #if sbrain.level == '':
        #    code = 'nyl'
        #    nyl_count += 1

        if sbrain.level != lc:
            code = 'nok'
            wrong_count += 1
            student = getObject(students,sbrain.id)
            study_course = getObject(student,'study_course')
            level = getObject(study_course,sbrain.level)
            if level is not None:
                cr_count += 1
                if dict['review_state'] in ('courses_registered', 'courses_validated'):
                    code = 'nok_cr'
                    reg_count += 1
                else:
                    comment = "level %(level)s deleted" % dict
                    comment = comment + ", level in students_catalog modified to %s" % lc
                    ##study_course.manage_delObjects((sbrain.level,))
                    ##context.students_catalog.modifyRecord(id = sbrain.id,level=lc,)
        else:
            ok_count += 1
            code = 'ok'
        dict['nyl_count'] = nyl_count
        dict['ok_count'] = ok_count
        dict['cr_count'] = cr_count
        dict['reg_count'] = reg_count
        dict['wrong_count'] = wrong_count
        dict['code'] = code
        dict['comment'] = comment
        rwrite('"%(count)d:%(ok_count)d:%(nyl_count)d:%(wrong_count)d:%(cr_count)d:%(reg_count)d","%(code)s","%(id)s","%(matric_no)s","%(name)s","%(level)s","%(level_res)s","%(review_state)s","%(comment)s"' % dict)

rwrite("total: %(count)d<br> correct: %(ok_count)d<br> wrong: %(wrong_count)d<br> level created: %(cr_count)d<br> courses registered: %(reg_count)d" % dict )


