## Script (Python) "purgePayments.py" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: purgePayments.py 2963 2007-12-20 08:23:46Z henrik $ """ """ try: from Products.zdb import set_trace except: def set_trace(): pass # purgePayments is obsolete. We need a new function which uses the payments_catalog # and which also purges accommodation payments correctly. return mtool = context.portal_membership member = mtool.getAuthenticatedMember() if str(member) not in ('admin','joachim'): return import logging import DateTime logger = logging.getLogger('Skins.purgePayments') from Products.AdvancedQuery import Eq, Between, Le,In aq_portal = context.portal_catalog_real.evalAdvancedQuery aq_student = 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 #def rwrite(s): # response.setHeader('Content-type','text/html; charset=ISO-8859-15') # response.write("%s
\n\r" % s) count = 1 d = {} l = [] sum_total = 0.0 log_after = 100 logger.info("start") query = Eq('portal_type','Payment') & Eq('review_state','opened') payments = aq_portal(query,sortSpecs=('container_path',)) total = len(payments) logger.info("found %d payments" % total) #return sid = "xxx" to_del = [] delete_count = 0 delete_count_student = 1 keep_count = 0 payments_folder = None count = 0 commit_after = 50 for payment in payments: p_sid = payment.getPath().split('/')[-3] if sid != p_sid: if count and to_del: if not delete_count_student % commit_after: context.waeup_tool.doCommit() logger.info("committing %d total %d" % (commit_after,delete_count_student)) msg = "(%d/%d) found %d payments to remove, %d to keep for %s" % (count, delete_count_student % commit_after, len(to_del), student_keep_count, sid) #rwrite( msg) delete_count_student += 1 logger.info(msg) payments_folder = getattr(getattr(students_folder,sid),'payments',None) msg = "deleted %s of %s" % (' '.join(to_del),sid) payments_folder.manage_delObjects(to_del) logger.info(msg) elif count and not to_del: msg = "%d: found %d payments to keep for %s in review_state %s" % (count, student_keep_count, sid, review_state,) #rwrite( msg) sid = p_sid count += 1 to_del = [] not_del_count = 0 student_keep_count = 0 res = aq_student(Eq('id',sid)) if not res:# or payments_folder is None: logger.info("student_id %s not found" % pin.student) continue student = res[0] review_state = student.review_state if review_state in ("school_fee_paid", "courses_registered", "courses_validated", ): delete_count += 1 to_del += payment.getId, # if payment.review_state == "opened": # #rwrite("%s : %s" % (sid,payment.Title)) # delete_count += 1 # to_del += payment.getId, # else: # keep_count += 1 # student_keep_count += 1 else: keep_count += 1 student_keep_count += 1 logger.info("%d of %d to purge %d to keep" % (delete_count,total,keep_count))