## Script (Python) "purgeDefinedPayments"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=resp_desc=None
##title=
##
# $Id: purgeDefinedPayments.py 5610 2010-12-10 09:28:18Z 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
students_folder = context.portal_url.getPortalObject().campus.students   

import logging
import DateTime
logger = logging.getLogger('Skins.purgeDefinedPayments')
from Products.AdvancedQuery import Eq, Between, Le,In,MatchGlob,MatchRegexp
aq_payments = context.payments_catalog.evalAdvancedQuery 

commit_after = 100
counter = 0
counter_all = 0

payments = context.payments_catalog(status = 'failed') 
#query = In('resp_desc','Invalid*',) 
#payments = aq_payments(query)

logger.info("started, %d failed payments found" % len(payments))

for payment in payments:
    counter_all += 1
    if not 'Cumulative total of payment' in payment.resp_desc:
        continue
    payments_folder = getattr(getattr(students_folder,payment.student_id),'payments',None)       
    counter += 1
    pid = 'p' + payment.order_id[6:]   
    if getattr(payments_folder,pid,False):
        logger.info('object deleted: %s , %s, %s, %d of %d' % (payment.student_id, pid, payment.resp_desc, counter, counter_all))
    else:
        logger.info('no object: %s, %s' % (payment.student_id, pid))
    payments_folder.manage_delObjects(pid)

    if not counter % commit_after:
        context.waeup_tool.doCommit()
        logger.info("committing %d of total %d" % (commit_after,counter))
    
context.waeup_tool.doCommit()
logger.info("%d committed" % (counter))    

logger.info("finished, %d payment objects removed" % (counter))
return 'finished!'


