## Script (Python) "check_transactions" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: check_transactions.py 1950 2007-06-23 06:23:51Z henrik $ """ payment callback """ import logging logger = logging.getLogger('Skins.check_transactions') from AccessControl import Unauthorized import DateTime if context.portal_membership.isAnonymousUser(): return None request = context.REQUEST response = request.RESPONSE students = context.portal_url.getPortalObject().campus.students wftool = context.portal_workflow mtool = context.portal_membership member = mtool.getAuthenticatedMember() member_id = str(member) #student_id = context.getStudentId() online_transactions = context.online_payments_import def rwrite(s): response.setHeader('Content-type','text/html; charset=ISO-8859-15') response.write("%s
\n" % s) correct = 0 count = 0 approved = 0 for ot_brain in online_transactions(): student_id = ot_brain.student_id if not students.hasObject(student_id): rwrite("%s not found" % student_id) continue student_obj = getattr(students,student_id) if not student_obj.hasObject('payments'): rwrite("%s payments-folder not found" % student_id) continue payments_folder = getattr(student_obj,'payments') payment_id = "p%s" % ot_brain.order_id[6:] if not payments_folder.hasObject(payment_id): rwrite("%s payment %s not found" % (student_id,payment_id)) continue payment_obj = getattr(payments_folder,payment_id) payment_doc = payment_obj.getContent() response_code = ot_brain.response_code count +=1 if payment_doc.resp_code != response_code: rwrite('"%d","%d","%s","%s","%s","%s"' % ( count,correct, student_id, payment_id, response_code, payment_doc.resp_code )) elif payment_doc.resp_code == response_code: correct +=1 rwrite('"%d","%d","%s","%s","%s","%s"' % ( count,correct, student_id, payment_id, response_code, payment_doc.resp_code )) #if payment_doc.resp_code == "" and response_code == "00": if response_code == "00": pd = {} review_state = context.getStudentReviewState(student_id) if review_state != "cleared_and_validated": #logger.info('%s review_state = %s' % (student_id,review_state)) continue review_state = wftool.getInfoFor(payment_obj,'review_state',None) if payment_doc.resp_code == "": if review_state != "opened": logger.info("Payment object of %s is closed and won't be reopend" % (student_id)) continue logger.info('%s approves epayment for %s by import' % (member,student_id)) else: if review_state == "closed": logger.info('%s approves epayment for %s by import, old resp_code: %s' % (member,student_id,payment_doc.resp_code)) wftool.doActionFor(payment_obj,'open') # cannot happen but anyway ... else: logger.info('%s approves epayment for %s by import. Payment object was opened, old resp_code: %s' % (member,student_id,payment_doc.resp_code)) pd['resp_code'] = 'IP' pd['resp_desc'] = 'Payment approved by import, %s' % (DateTime.DateTime()) payment_doc.edit(mapping=pd) if payment_doc.type_description.startswith('School Fee'): wftool.doActionFor(student_obj,'pay_school_fee') wftool.doActionFor(payment_obj,'close') approved += 1 if approved > 50: context.waeup_tool.doCommit() logger.info('%s transactions commited' % (approved)) approved = 0