## Script (Python) "epayment_cb"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: epayment_cb.py 1653 2007-03-28 02:35:25Z uli $
"""
payment callback
"""
import logging
logger = logging.getLogger('Skins.epayment_cb')
from AccessControl import Unauthorized
import DateTime
if context.portal_membership.isAnonymousUser():
    return None

request = context.REQUEST
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()
if student_id is None or student_id != member_id:
    logger.info('%s tried to access payment object of %s' % (member_id,student_id))
    referer = request.get('HTTP_REFERER','none')
    logger.info('%s:%s illegal access, referer = %s' % (member_id,student_id,referer))
    real_ip = request.get('HTTP_X_REAL_IP',"none")
    logger.info('%s:%s illegal access, real_x_ip = %s' % (member_id,student_id,real_ip))
    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())

student = getattr(students,student_id)

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"),
              )
pd = {}
#from Products.zdb import set_trace;set_trace()
for rc,pdk in resp_codes:
    pd[pdk] = request.get(rc)
try:
    context.getContent().edit(mapping=pd)
except UnAuthorized,E:
    logger.info('%s ' % student_id)

#resp = pd['resp_desc']
#if  resp.startswith('Appro') and resp.endswith('essful'):
resp = pd['resp_code']
if  resp == '00':
    wftool.doActionFor(student,'pay_school_fee')
    logger.info('%s received valid callback' % student_id)
    referer = request.get('HTTP_REFERER','none')
    logger.info('%s valid callback referer = %s' % (student_id,referer))
    real_ip = request.get('HTTP_X_REAL_IP',"none")
    logger.info('%s valid callback real_ip = %s' % (student_id,real_ip))

elif len(resp) < 3:
    logger.info('%s received no callback' % student_id)
else:
    logger.info('%s received unsuccessfull callback' % student_id)
wftool.doActionFor(context,'close')

return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
