## Script (Python) "ti_513_resolve"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: ti_513_resolve.py 3371 2008-03-25 17:50:05Z joachim $
"""
"""
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.ti_513_resolve')
from Products.AdvancedQuery import Eq, Between, Le,In
aq_students = context.students_catalog.evalAdvancedQuery
aq_portal = context.portal_catalog_real.evalAdvancedQuery
students_folder = context.portal_url.getPortalObject().campus.students

request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader
count = 0
found = 0
commit_after = 100
logger.info('start')
students = context.students_catalog()
wrong = {}
missing_courses = []
wrong_starts = []
for student in students:
    count += 1
    if student.jamb_reg_no.endswith('/07'):
        pos = 0
        if student.jamb_reg_no[:5].isalpha():
            pos = 5
        elif student.jamb_reg_no[:4].isalpha():
            if student.jamb_reg_no[:4] != 'UBNO': 
                pos = 4
        if pos:
            d = {}
            d['student_id'] = student.id
            d['jamb_reg_no_old'] = student.jamb_reg_no
            d['jamb_reg_no'] = student.jamb_reg_no[:3]+student.jamb_reg_no[pos:]
            #set_trace()
            if student.jamb_reg_no[:pos] not in wrong_starts:
                wrong_starts += student.jamb_reg_no[:pos],
            wrong[student.id] = d
logger.info('found %d wrong of %d' % (len(wrong),count))
count = 0
for student_id,d in wrong.items():
    try:
        getattr(getattr(students_folder,student_id),'application').getContent().edit(mapping=d)
        logger.info("%(student_id)s changed jamb_reg_no from %(jamb_reg_no_old)s to %(jamb_reg_no)s" % d)
    except:
        logger.info("%(student_id)s change failed")
    if count and not count % commit_after:
        context.waeup_tool.doCommit()
        logger.info("committing %d of total %d" % (commit_after,count))
    count += 1
logger.info('finished')                    
