## Script (Python) "initialize_accommodation_catalog"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: initialize_accommodation_catalog.py 5614 2010-12-27 07:25:11Z 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'):
    return

import logging
import DateTime
logger = logging.getLogger('Skins.initializeAccommodationCatalog')
from Products.AdvancedQuery import Eq, Between, Le,In
aq_portal = context.portal_catalog_real.evalAdvancedQuery
wf = context.portal_workflow

logger.info('start')
count = 0
not_count = 0
found = 0
commit_after = 1000
accommodation_brains = context.portal_catalog.search({'meta_type': "StudentAccommodation"})
num_objects = len(accommodation_brains)
logger.info("found %d StudentAccommodation objects" % num_objects)
fields = ('acco_maint_date','acco_maint_code','acco_maint_fee','acco_maint_sc_pin','acco_maint_pay_id','acco_res_date','acco_res_sc_pin','bed','session','student_status')
students_folder = context.portal_url.getPortalObject().campus.students

for i in xrange(num_objects):
    #set_trace()
    data = {}
    a_brain = accommodation_brains[i]
    a_object = a_brain.getObject()    
    doc = a_object.getContent()
    pl = a_brain.getPath().split('/')
    student_id = pl[-2]    
    if not getattr(doc,'session',None):
        student_folder = getattr(students_folder,student_id)
        student_folder.manage_delObjects('accommodation_final')
        continue
    for field in fields:
        data[field] = getattr(doc,field,None)
    data['reservation_status'] = wf.getInfoFor(a_object,'review_state',None)
    data['student_id'] = student_id
    catkey = student_id + '|' + data['session']
    data['catkey'] = catkey
    context.accommodation_catalog.addRecord(**data)

logger.info("finished")
