## Script (Python) "ti_306_resolve"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: ti_306_resolve.py 1983 2007-07-04 07:32:36Z henrik $
"""
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
import logging
logger = logging.getLogger('Skins.ti_306_resolve')
from Products.AdvancedQuery import Eq, Between, Le,In,MatchGlob
aq_pins = context.portal_pins.evalAdvancedQuery
pins = context.portal_pins()
scat = context.students_catalog

request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader
students = context.portal_url.getPortalObject().campus.students

#query = Eq('pin','APP')
#brains = aq_pins(query)
#total = len(brains)
#logger.info('found %d APP PINs' % total)

count = 0
commit_after = 100
todelete = []

total = len(pins)
logger.info('started, %d PINs found' % total)

for brain in pins:
    if not brain.pin.startswith('APP') or not brain.student:
        continue

    application = None
    sbrains = scat(jamb_reg_no = brain.student.upper())
    if len(sbrains)>0:
        sbrain = sbrains[0]
    else:
        logger.info('%s %s' % (brain.pin,brain.student))
        continue
    try:
        application = getattr(getattr(students,sbrain.id),'application')
    except:
        logger.info('%s, application does not exist' % (brain.student))
        continue
    prefix,batch_no,number = brain.pin[:3],brain.pin[3:-10],brain.pin[-10:]
    app_doc = application.getContent()
    if app_doc.app_ac_pin.startswith('APP'):
        logger.info('%s, %s, %s already shows correct PIN %s (reason: check_admission failed the first time)' % (count, brain.student,sbrain.id,app_doc.app_ac_pin))
        continue
    app_doc.edit(mapping={'app_ac_pin' : '%s-%s-%s' % (prefix,batch_no,number)})
    logger.info('%s, %s, %s, %s-%s-%s replaced' % (count, brain.student,sbrain.id,prefix,batch_no,number))
    count += 1
    if count and not count % commit_after:
        context.waeup_tool.doCommit()
        logger.info("committed %d transactions" % commit_after)
logger.info('finished for %d of %d' % (count,total))
return


