## Script (Python) "ti_151_resolve"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: ti_151_resolve.py 1642 2007-03-26 20:10:15Z joachim $
"""
resolve ticket #151
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
import logging
#>>>>>>>>>>>>>>>><
logger = logging.getLogger('Skins.ti_151_resolve')
logger.info('already done on 26.3.07 by joachim')
return
#<<<<<<<<<<<<<<<<<
request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader
students = context.portal_url.getPortalObject().campus.students
#from string import Template
def rwrite(s):
    response.setHeader('Content-type','text/html; charset=ISO-8859-15')
    response.write(s)
def getObject(outer,object):
    if outer.hasObject(object):
        return getattr(outer,object)
    return None

try:
    from Products.AdvancedQuery import Eq, Between, Le,In
    aq_students = context.students_catalog.evalAdvancedQuery
except:
    evalAdvancedQuery = None

students_cat = context.students_catalog
query = Eq('faculty','PSC') & Eq('department','PHY') & In('level',('300','400'))
brains = aq_students(query)
#brains = students_cat(faculty = 'PSC',department='PHY', level='400')
total = 0
count_ok = 0
count_nosc = 0
count_nolevel = 0
count_level = 0
count_renamed = 0
#set_trace()
#template = Template('"$count","$id","$course"')
to_rename = []
for student in brains:
    student_dict = {}
    for field in students_cat.schema():
        student_dict[field] = getattr(student,field)
    #s = template.substitute(student_dict,count=count,)
    student_dict['total'] = total
    while True:
        if student.course == "BSCINP":
            student_dict['message'] = "OK"
            count_ok += 1
            student_dict['sp_count'] = count_ok
            s = '"%(total)d","%(sp_count)s","%(id)s","%(course)s","%(message)s",' % student_dict
            break
        student_dict['message'] = ""
        student_obj = getObject(students,student.id)
        if student_obj is None:
            student_dict['message'] = "No student object"
            break
        study_course_obj = getObject(student_obj,'study_course')
        if study_course_obj is None:
            student_dict['message'] = "No study_course object"
            count_nosc += 1
            student_dict['sp_count'] = count_nosc
            break
        level_obj = getObject(student_obj,student.level)
        if level_obj:
            count_level += 1
            study_course.manage_delObjects((student.level,))
            student_dict['message'] = "Level deleted"
            student_dict['sp_count'] = count_level
        count_renamed += 1
        to_rename.append(student.id)
        student_dict['sp_count'] = count_renamed
        student_dict['message'] = student_dict['message'] + "renamed to BSCINP"
        study_course_doc = study_course_obj.getContent()
        study_course_obj.edit(mapping = {'study_course': "BSCINP"})
        total += 1
        s = '"%(total)d","%(sp_count)s","%(id)s","%(course)s","%(message)s",' % student_dict
        rwrite("%s<br />\r\n" %s)
        break
    total += 1
    s = '"%(total)d","%(sp_count)s","%(id)s","%(course)s","%(message)s",' % student_dict
    rwrite("%s<br />\r\n" %s)
for sid in to_rename:
    students_cat.modifyRecord(id = sid,course="BSCINP")
sum = count_ok + count_nosc + count_nolevel + count_level    
rwrite("total=%d,sum of below=%d,<br>\r\n correct study_course=%d<br>\r\n no study_course=%d<br>\r\n no level=%d<br>\r\n with level =%d,<br />\n Done" %
        (total,
         sum,
         count_ok,
         count_nosc,
         count_nolevel,
         count_level)
         )

logger.info("total=%d,sum=%d,ok=%d,no study_course=%d,no level=%d,with level =%d,\n Done" %
             (total,sum,count_ok,count_nosc,count_nolevel,count_level))
