## Script (Python) "copyLGA"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: ti_441_resolve.py 2979 2008-01-05 15:01:33Z henrik $
"""
"""
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_441_resolve_part1')
logger = logging.getLogger('Skins.copyLGA')
from Products.AdvancedQuery import Eq, Between, Le,In
aq_portal = context.portal_catalog_real.evalAdvancedQuery
aq_students = context.students_catalog.evalAdvancedQuery
students_folder = context.portal_url.getPortalObject().campus.students

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

re_split = context.waeup_tool.re_split
query = Eq('lga','')
student_records = aq_students(query)
total = len(student_records)
logger.info("found %d records with empty clearance lga" % total)
count = 0
commit_after = 100
logger.info('started to fix %d records' % total)
mapping = context.waeup_tool.getStatesLgas()
states = mapping['states']
lgas = mapping['lgas']
words_dict = mapping['word_dict']
d = {}
for student_record in student_records:
    count += 1
    jamb_state = getattr(getattr(students_folder,student_record.id),'application').getContent().jamb_state
    jamb_lga = getattr(getattr(students_folder,student_record.id),'application').getContent().jamb_lga
    words = ' '.join((jamb_state, jamb_lga))
    state_lga = context.waeup_tool.findLga(words,words_dict)
    if state_lga:
        msg = "found %s for %s " % (state_lga,student_record.id)
        logger.info(msg)
        d[student_record.id] = state_lga
        if len(d) and not len(d)  % commit_after:
            logger.info("found %d to correct state/lga combinations of %d so far" % (len(d),count))
    else:
        msg = "no '%s' for %s" % (words,student_record.id)
logger.info("found %d correct lga values" % len(d))
edited = 1
for student_id,lga in d.items():
    msg = "set clearance.lga to %s for %s" % (lga,student_id)
    getattr(getattr(students_folder,student_id),'clearance').getContent().edit(mapping={'lga':lga})
    logger.info(msg)
    edited += 1
    if edited and not edited  % commit_after:
        context.waeup_tool.doCommit()
        logger.info("Committing %d,  %d" % (commit_after,edited))
logger.info('finished, %d checked, %d edited' % (count,
                                               edited,))

