## Script (Python) "search_pins" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: readOnlinePaymentsFromLog.py 1700 2007-04-23 21:16:34Z joachim $ """ read the successfull epayments from an extract of Z2.log this extract must be created with cat /zope/instances/uniben1/log/Z2.log.1 | grep epayment_cb | grep RespCode=00 > /zope/instances/uniben1/import/successfullepaymentsDDMMYY.log in /zope/instances/uniben1/import/ are already all files from 25.3.07 """ import logging logger = logging.getLogger('Skins.readOnlinePaymentsFromLog') request = context.REQUEST session = request.SESSION response = request.RESPONSE setheader = request.RESPONSE.setHeader import DateTime def rwrite(s): response.setHeader('Content-type','text/html; charset=ISO-8859-15') response.write('%s
\r\n' % s) wftool = context.portal_workflow mtool = context.portal_membership member = mtool.getAuthenticatedMember() roles = member.getRolesInContext(context) retcat = context.returning_import rcat = context.results_import scat = context.students_catalog from Products.AdvancedQuery import Eq, Between, Le,In aq_students = context.students_catalog.evalAdvancedQuery students_folder = context.portal_url.getPortalObject().campus.students resp_codes = (("x_RespDesc","resp_desc"), ("x_RespPayRef","resp_pay_reference"), ("x_RespCode","resp_code"), ("x_CardNum","resp_card_num"), ("x_ApprAmt","resp_approved_amount"), ) count = 0 correct = 0 approved = 0 tas = context.waeup_tool.getCallbacksFromLog('successfullepayments260307.log') for ta in tas: count += 1 student_id = ta['student_id'] payment_id = ta['payment_id'] qs_dict = ta['qs_dict'] if not students_folder.hasObject(student_id): rwrite("no student %s" % student_id) continue student_obj = getattr(students_folder,student_id) if not student_obj.hasObject('payments'): rwrite("no payments for student %s" % student_id) continue payments = getattr(student_obj,'payments') if not payments.hasObject(payment_id): rwrite("no payment %s for student %s" % (payment_id,student_id)) continue payment_obj = getattr(payments,payment_id) payment_doc = payment_obj.getContent() pdoc = {} for rc,key in resp_codes: pdoc[key] = getattr(payment_doc,key) readin = {} for rc,pdk in resp_codes: readin[pdk] = qs_dict.get(rc)[0] response_code = readin['resp_code'] 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": review_state = wftool.getInfoFor(payment_obj,'review_state',None) if review_state != "opened": logger.info('payment object of %s closed' % (student_id)) continue review_state = wftool.getInfoFor(student_obj,'review_state',None) if review_state != "cleared_and_validated": logger.info('%s review_state = %s' % (student_id,review_state)) continue readin['resp_code'] = 'IP ' + readin['resp_code'] readin['resp_desc'] = 'Payment approved by logfile import, %s. ' % (DateTime.DateTime()) \ + readin['resp_desc'] payment_doc.edit(mapping=readin) if payment_doc.type_description.startswith('School Fee'): wftool.doActionFor(student_obj,'pay_school_fee') logger.info('%s approves epayment for %s by logfile import' % (member,student_id)) wftool.doActionFor(payment_obj,'close') approved += 1 if approved > 50: context.waeup_tool.doCommit() logger.info('%s transactions commited' % (approved)) approved = 0