## 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!'