## Script (Python) "pay_by_sc" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: pay_by_sc.py 5223 2010-06-14 17:45:58Z henrik $ """ pay online """ import logging from urllib import urlencode logger = logging.getLogger('Skins.pay_by_sc') import DateTime try: from Products.zdb import set_trace except: def set_trace(): pass if context.portal_membership.isAnonymousUser(): return None wftool = context.portal_workflow lt = context.portal_layouts request = context.REQUEST students = context.portal_url.getPortalObject().campus.students student_id = context.getStudentId() if student_id is None: return request.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url()) student = getattr(students,student_id) student_record = context.students_catalog.getRecordByKey(student_id) # session = student_record.session # next_session, next_session_str = context.getNextSessionId(session) next_info = context.getNextInfo(student_record) next_session_id = next_info['next_session_id'] next_session_str = next_info['next_session_str'] next_level_id = next_info['next_level_id'] next_transition = next_info['next_transition'] next_verdict = next_info['next_verdict'] next_previous_verdict = next_info['next_previous_verdict'] if not next_info['payment_allowed']: logger.info('%s called pay_by_sc manually' % student_id) return 'Do not call this form manually!' validate = request.has_key("cpsdocument_create_button") res,psm,ds = lt.renderLayout(layout_id= 'student_schoolfee', schema_id= 'payment', context=context, mapping=validate and request, ob={}, layout_mode="create", formaction = "pay_by_sc", button = 'Pay', commit = False, ) if psm == 'invalid': psm = 'Please correct your errors!' return context.pay_by_sc_form(rendered = res, psm = psm, mode = 'edit', next_session_str = next_session_str, ds = ds, ) elif psm == '': return context.pay_by_sc_form(rendered = res, psm = None, mode = 'edit', next_session_str = next_session_str, ds = ds, ) elif psm == 'valid': pass if "payments" not in student.objectIds(): student.invokeFactory('PaymentsFolder','payments') payments = getattr(student,'payments') d = {} d['Title'] = 'Payments' payments.getContent().edit(mapping=d) context.waeup_tool.changeWorkflowState(payments, 'opened') else: payments = getattr(student,'payments') #from Products.zdb import set_trace; set_trace() info = {} p_id = "p%s" % ds.get('pin_n') pin = str(ds.get('pin')) try: cost = context.portal_pins(pin="".join(pin.split('-')))[0].cost except: cost = "n/a" try: x = float(cost) except: cost = "n/a" if not hasattr(payments,p_id): now = DateTime.DateTime() info['date'] = now info['amount'] = cost pin = info['order_id'] = "%s" % pin #info['type_code'] = "%s" % pin #type_code is redundant and will be removed soon info['type_description'] = 'School Fee for Session %s' % next_session_str info['type'] = 'sc' info['status'] = 'paid' info['session_id'] = next_session_id info['item'] = student_record.course info['category'] = 'schoolfee' info['resp_code'] = "SC" info['resp_desc'] = "SC Payment Successful" payments.invokeFactory('Payment', p_id) payment = getattr(payments,p_id) wftool = context.portal_workflow context.waeup_tool.changeWorkflowState(payment, 'opened') payment.getContent().edit(mapping=info) context.waeup_tool.changeWorkflowState(payment, 'closed') study_course = getattr(student,'study_course') try: context.waeup_tool.changeWorkflowState(study_course, 'opened') except: pass study_course.getContent().edit(mapping= {'current_level': next_level_id, 'current_session': next_session_id, 'current_verdict': next_verdict, 'previous_verdict': next_previous_verdict, }) if next_transition: wftool.doActionFor(student,next_transition) logger.info('%s paid school fee by scratch card' % student_id) else: logger.info('%s repeatedly paid school fee by scratch card' % student_id) url = "%s/payments" % (student.absolute_url()) request.RESPONSE.redirect(url)