class InstitutionsController < ApplicationController
load_and_authorize_resource :only => [:destroy,:edit,:new,:create,:update]
before_filter :authenticate_user!, :except =>
[:student_registration, :show, :validate_registration_pin, :result, :admission, :buy_registration_pin,:paygate_callback_failure, :paygate_cancel, :paygate_pending, :paygate_callback_success, :pin_transaction_info_print]
before_filter :find_institution, :except =>
[:show,:index, :new, :create, :semesters_for_institute_type, :start_end_date_for_assessment_period, :courses_for_batch, :paygate_callback_failure, :paygate_cancel, :paygate_pending, :paygate_callback_success, :pin_transaction_info_print]
before_filter :add_bread_crumb,:except => [:show]
def paygate_callback_success
@pay_gate_config = YAML::load(File.open("#{Rails.root}/config/pay_gate_config.yml"))[Rails.env]
@payment = TransactionRecord.find_by_order_number(params[:OrderID])
uri = URI("https://fidelitypaygate.fidelitybankplc.com/cipg/MerchantServices/UpayTransactionStatus.ashx")
parameters = {:MERCHANT_ID => "#{@pay_gate_config['merchant_id']}", :ORDER_ID => "#{@payment.order_number}"}
uri.query = URI.encode_www_form(parameters)
result =open(uri).read
result_hash = Hash.from_xml(result)
record_payment_details(result_hash)
if result_hash["CIPG"]["StatusCode"] == PaymentRecord::PAYMENT_SUCCESS_CODE
if @payment.transactionable_type.eql?("PaymentRecord")
redirect_to institution_fees_path(@payment.transactionable_type.fee.institution), :notice => "Payment transaction has been #{result_hash['CIPG']['Status']}"
elsif @payment.transactionable_type.eql?("PinBuyerInfo")
unless @payment.transactionable.pin_id.present?
@registration = @payment.transactionable.registration
@valid_registration_pin_groups = @registration.valid_registration_pin_groups
@online_valid_registration_pin_groups = @valid_registration_pin_groups.where(:pin_available_type => 'Online')
@offline_valid_registration_pin_groups = @valid_registration_pin_groups.where(:pin_available_type => 'Offline')
@available_pin = nil
@online_valid_registration_pin_groups.each do |vpg|
if vpg.available_pins.present?
@available_pin = vpg.available_pins.first
break
else
next
end
end
if !@available_pin.present?
@offline_valid_registration_pin_groups.each do |vpg|
if vpg.available_pins.present?
@available_pin = vpg.available_pins.first
break
else
next
end
end
end
if @available_pin.present?
@payment.transactionable.pin_id = @available_pin.id
@payment.transactionable.save
@available_pin.is_available = false
@available_pin.save
@available_pin.reload
if @available_pin.pin_group.pin_available_type == 'Offline'
@message = "Your Order Number is #{@payment.order_number}. Please Print Transaction report to claim you PIN from Institution."
else
@assigned_pin = @available_pin.number
@message = "Your PIN is #{@assigned_pin}. Please keep this PIN secret."
end
else
@message = "No pin available for #{@registration.name}. Your order number is #{@payment.order_number}.Please contact with institution to get your money back if you have paid."
end
else
pin = Pin.find @payment.transactionable.pin_id
if(pin.present? && pin.pin_group.pin_available_type == 'Offline')