class NkuhtDonatesController < ApplicationController include ApplicationHelper include SimpleCaptcha::ControllerHelpers def index nkuht_donate = NkuhtDonateMain.new nkuht_donate_units = NkuhtDonateUnit.all nkuht_donate_departments = NkuhtDonateDepartment.all nkuht_donate_uses = NkuhtDonateUse.all { "nkuht_donate" => nkuht_donate, "nkuht_donate_units" => nkuht_donate_units, "nkuht_donate_departments" => nkuht_donate_departments, "nkuht_donate_uses" => nkuht_donate_uses } end def donate_list params = OrbitHelper.params if !params[:mq].blank? nkuht_donates = NkuhtDonateMain.where(:donate_public=>true).any_of({:name => /#{params[:mq]}/i}).order_by(:created_at=>"desc").page(params[:page_no]).per(20) else nkuht_donates = NkuhtDonateMain.where(:donate_public=>true).order_by(:created_at=>"desc").page(params[:page_no]).per(20) end { "nkuht_donates" => nkuht_donates, "total_pages" => nkuht_donates.total_pages } end def receipt_notice params = OrbitHelper.params nkuht_donate = NkuhtDonateMain.find(params[:no]) { "nkuht_donate" => nkuht_donate } end def create @nkuht_donate = NkuhtDonateMain.new(nkuht_donate_params) @nkuht_donate.donation_serial_number = NkuhtDonateMain.get_serial_number @nkuht_donate.donation_payment_number = NkuhtDonateMain.get_payment_number if @nkuht_donate.donation_amount.to_i < 1 @notice = [] @notice << t('nkuht_donate.donation_amount_err') redirect_to "#{params[:referer_url]}", :notice => @notice elsif @nkuht_donate.donation_way == '2' and @nkuht_donate.donation_amount.to_i > 30000 @notice = [] @notice << t('nkuht_donate.donation_amount_atm') redirect_to "#{params[:referer_url]}", :notice => @notice elsif @nkuht_donate.donation_way == '3' and @nkuht_donate.donation_amount.to_i > 20000 @notice = [] @notice << t('nkuht_donate.donation_amount_market') redirect_to "#{params[:referer_url]}", :notice => @notice elsif simple_captcha_valid? && @nkuht_donate.save # ways1: 信用卡 # ways2: atm轉帳 # ways3: 超商繳款 # ways4: 現金 # ways5: 支票 # ways6: 匯款 if @nkuht_donate.donation_way == '1' redirect_to "#{params[:referer_url]}/?method=print_card_payment&no=#{@nkuht_donate.id}" elsif @nkuht_donate.donation_way == '2' redirect_to "#{params[:referer_url]}/?method=print_atm_payment&no=#{@nkuht_donate.id}" elsif @nkuht_donate.donation_way == '3' redirect_to "#{params[:referer_url]}/?method=print_market_payment&no=#{@nkuht_donate.id}&layout=false" else redirect_to "#{params[:referer_url]}/?method=print_msg&no=#{@nkuht_donate.id}" end else if !simple_captcha_valid? @notice = [t('recaptcha.errors.verification_failed')] else @notice = [] @errors = @nkuht_donate.errors.messages.first @notice << t('recaptcha.errors.verification_failed') if !gotcha_valid? @notice << "#{t("nkuht_donate.donation_amount")}#{@errors[1][0]}" if !@errors.blank? end redirect_to "#{params[:referer_url]}", :notice => @notice # redirect_to "#{params[:referer_url]}", :notice => t('recaptcha.errors.verification_failed') end end def print_card_payment params = OrbitHelper.params nkuht_donate = NkuhtDonateMain.find(params[:no]) { "nkuht_donate" => nkuht_donate } end def print_atm_payment require 'digest/sha1' require 'openssl' require 'base64' # require 'mcrypt' params = OrbitHelper.params nkuht_donate = NkuhtDonateMain.find(params[:no]) sendseqno = nkuht_donate.donation_serial_time.to_datetime.strftime("%Y%m%d%H%M%S") + "%04d" % (nkuht_donate.donation_serial_number) { "nkuht_donate" => nkuht_donate, "xmldata" => Base64.encode64("#{sendseqno}T00774955421#{nkuht_donate.donation_payment_number}#{nkuht_donate.donation_payment_number}#{nkuht_donate.donation_amount}#{nkuht_donate.get_atm_mac_number}http://donations.nkuht.edu.tw/donate_atm") } end def print_market_payment require 'barby' require 'barby/barcode/code_39' require 'barby/outputter/png_outputter' params = OrbitHelper.params nkuht_donate = NkuhtDonateMain.find(params[:no]) barcodes = nkuht_donate.get_market_number barcodes.each_with_index do |code,i| barcode =Barby::Code39.new(code, true) File.open("public/code39_#{i + 1}.png", 'w'){|f| # f.write barcode.to_png(:margin => 3, :xdim => 2, :height => 50) f.write barcode.to_png(:height => 40) } end { "nkuht_donate" => nkuht_donate, "barcodes" => barcodes } end def print_msg params = OrbitHelper.params nkuht_donate = NkuhtDonateMain.find(params[:no]) { "nkuht_donate" => nkuht_donate } end def payment_ok end def payment_no params = OrbitHelper.params nkuht_donate = NkuhtDonateMain.where(:_id => params['no']).first msg = { 'V211' => '傳送序號重複,訊息丟棄', 'V212' => '此筆訂單之收款資料已存在且已成功付款', 'V213' => '此筆訂單之收款資料已存在,但交易仍在進行中', 'V214' => '此筆訂單之收款資料已存在,但主機交易中斷狀態不明', 'J001' => '主機交易逾時 Pending', '0' => '收款交易成功', '' => '收款交易失敗'} { "nkuht_donate" => nkuht_donate, "msg" => msg } end def nkuht_donate_params params.require(:nkuht_donate_main).permit! end end