## Script (Python) "setNewEntryMode"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: setNewEntryMode.py 1715 2007-04-26 19:23:33Z joachim $
"""
reindex students_catalog entry_mode index
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
from Products.AdvancedQuery import Eq, Between, Le,In
aq_students = context.students_catalog.evalAdvancedQuery

request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader
#students = context.portal_url.getPortalObject().campus.students
import logging
logger = logging.getLogger('Skins.setNewEntryMode')

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

brains = context.portal_catalog(portal_type = 'Student')
count = 0
commit_count = 0
logger.info('setNewEntryMode start')
#progress_log = context.waeup_tool.openLog('test')
#context.waeup_tool.writeLog(progress_log,"Start \n")
umede = aq_students(In('entry_mode',('DE','UME')))
umede_ids = [r.id for r in umede]
#set_trace()
for brain in brains:
    if brain.getId not in umede_ids:
        continue
    stud_obj = brain.getObject()
    try:
        app_doc = stud_obj.application.getContent()
    except:
        continue
    em = getattr(app_doc,'entry_mode',None)
    if em not in ('UME','DE'):
        continue
    try:
        sc_doc = stud_obj.study_course.getContent()
    except:
        sc_doc = None
    if em in ('ume_ft','de_ft'):
        new_em = em
    else:
        new_em = "%s_ft" % em.lower()
    if em in ('ume_ft','UME'):
        el = "100"
    elif em in ('de_ft','DE'):
        el = "200"
    app_doc.edit(mapping={'entry_mode': new_em,
                          'entry_level': el})
    sid = brain.getId
    if sc_doc:
        sc_doc.edit(mapping={'current_mode': new_em})
        context.students_catalog.modifyRecord(id = sid,
                                              mode=new_em,
                                              entry_mode=new_em,
                                              entry_level=el)
    else:
        context.students_catalog.modifyRecord(id = sid,
                                              entry_mode=new_em,
                                              entry_level=el)

    count += 1
    commit_count += 1
    if commit_count > 1000:
        context.waeup_tool.doCommit()
        logger.info('committing %d total %d' % (commit_count,count))
        commit_count = 0
    s = "%d: %s %s -> %s" % (count,brain.getPath(),em,new_em)
    rwrite(s)
rwrite('Done')
logger.info('setNewEntryMode finish')


