diff --git a/Gemfile b/Gemfile index 94ed4ef3..3d4a3c5b 100755 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source 'https://rubygems.org' -ruby '2.4.1' +ruby '2.4.0' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" diff --git a/app/assets/javascripts/origami/paymal.coffee b/app/assets/javascripts/origami/paymal.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/origami/paymal.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/origami/paymal.scss b/app/assets/stylesheets/origami/paymal.scss new file mode 100644 index 00000000..93758d38 --- /dev/null +++ b/app/assets/stylesheets/origami/paymal.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the origami/Paymal controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/origami/paymal_controller.rb b/app/controllers/origami/paymal_controller.rb new file mode 100644 index 00000000..bdcee917 --- /dev/null +++ b/app/controllers/origami/paymal_controller.rb @@ -0,0 +1,101 @@ +class Origami::PaymalController < BaseOrigamiController + def index + @sale_id = params[:sale_id] + payment_method = params[:payment_method] + @cashier_type = params[:type] + @membership_rebate_balance=0 + sale_data = Sale.find_by_sale_id(@sale_id) + + @shop = Shop::ShopDetail + # if @shop.is_rounding_adj + # new_total = Sale.get_rounding_adjustment(sale_data.grand_total) + # else + # new_total = sale_data.grand_total + # end + # @rounding_adj = new_total-sale_data.grand_total + @rounding_adj = sale_data.rounding_adjustment + + @payparcount = 0 + others = 0 + sale_data.sale_payments.each do |sale_payment| + if sale_payment.payment_method == "paypar" + @payparcount = @payparcount + sale_payment.payment_amount + else + others = others + sale_payment.payment_amount + end + end + @payment_prices = sale_data.grand_total - @payparcount -others + + + if sale_data + if sale_data.customer_id + customer_data= Customer.find_by_customer_id(sale_data.customer_id) + if customer_data + @membership_id = customer_data.membership_id + if !@membership_id.nil? + membership_setting = MembershipSetting.find_by_membership_type("paypar_url") + if membership_setting.gateway_url + member_actions =MembershipAction.find_by_membership_type("get_account_balance") + if member_actions.gateway_url + @campaign_type_id = nil + url = membership_setting.gateway_url.to_s + member_actions.gateway_url.to_s + merchant_uid= member_actions.merchant_account_id + auth_token = member_actions.auth_token.to_s + membership_data = SalePayment.get_paypar_account(url,membership_setting.auth_token,@membership_id,@campaign_type_id,merchant_uid,auth_token) + if membership_data["status"]==true + @membership_rebate_balance=membership_data["balance"] + @out = true, @membership_rebate_balance,@membership_id + end + else + @out =false,0 + end + else + @out = false,0 + end + + + else + @out = false, 0 + end + else + @out = false, 0 + end + else + @out = false, 0 + end + else + @out = false, 0 + end + @out = false, 0 + end + def create + cash = params[:payment_amount] + sale_id = params[:sale_id] + if(Sale.exists?(sale_id)) + saleObj = Sale.find(sale_id) + shop_details = Shop::ShopDetail + + # rounding adjustment + # if shop_details.is_rounding_adj + # new_total = Sale.get_rounding_adjustment(saleObj.grand_total) + # rounding_adj = new_total-saleObj.grand_total + # saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:rounding_adj) + # end + + # saleObj = Sale.find(sale_id) + sale_payment = SalePayment.new + status, @sale = sale_payment.process_payment(saleObj, @user, cash, "paymal") + if status == true + @out = true, "Success!" + else + @out =false, "Please try again payment!" + end + end + end + + #Shop Name in Navbor + helper_method :shop_detail + def shop_detail + @shop = Shop.first + end +end diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 563decfe..78fee237 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -211,6 +211,7 @@ class Origami::PaymentsController < BaseOrigamiController @mastercount = 0.0 @unionpaycount = 0.0 @credit = 0.0 + @paymalcount = 0.0 @sale_data = Sale.find_by_sale_id(sale_id) @balance = 0.00 @accountable_type = '' @@ -324,6 +325,8 @@ class Origami::PaymentsController < BaseOrigamiController @unionpaycount += spay.payment_amount elsif spay.payment_method == "creditnote" @credit += spay.payment_amount + elsif spay.payment_method == "paymal" + @paymalcount += spay.payment_amount end end end diff --git a/app/helpers/origami/paymal_helper.rb b/app/helpers/origami/paymal_helper.rb new file mode 100644 index 00000000..8d1787c8 --- /dev/null +++ b/app/helpers/origami/paymal_helper.rb @@ -0,0 +1,2 @@ +module Origami::PaymalHelper +end diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index 1866a630..280101ad 100755 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -48,6 +48,8 @@ class SalePayment < ApplicationRecord payment_status = paypar_payment when "foc" payment_status = foc_payment + when "paymal" + payment_status = paymal_payment else puts "it was something else" end @@ -159,6 +161,60 @@ class SalePayment < ApplicationRecord return response; + end + + def self.create_payment(paypar_url,token,membership_id,received_amount,sale_id) + membership_actions_data = MembershipAction.find_by_membership_type("create_payment"); + + if !membership_actions_data.nil? + + url = paypar_url.to_s + membership_actions_data.gateway_url.to_s + merchant_uid = membership_actions_data.merchant_account_id + auth_token = membership_actions_data.auth_token + sale_data = Sale.find_by_sale_id(sale_id) + + if sale_data + others = 0 + sale_data.sale_payments.each do |sale_payment| + others = others + sale_payment.payment_amount + end + payment_prices = sale_data.grand_total - others + # Control for Paypar Cloud + begin + response = HTTParty.post(url, + :body => { membership_id:membership_id, + amount:received_amount, + receipt_no:sale_data.receipt_no, + merchant_uid:merchant_uid, + auth_token:auth_token}.to_json, + :headers => { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json; version=3' + }, + :timeout => 10 + ) + rescue Net::OpenTimeout + response = false + + rescue OpenURI::HTTPError + response = { status: false} + + rescue SocketError + response = { status: false} + end + else + response = false; + end + + else + response =false; + end + + Rails.logger.debug "Payment response" + Rails.logger.debug response.to_json + + return response; + end # Check for Card Payment @@ -297,6 +353,35 @@ class SalePayment < ApplicationRecord end + def paymal_payment + payment_status = false + + #Next time - validate if the vochure number is valid - within + customer_data = Customer.find_by_customer_id(self.sale.customer_id) + membership_setting = MembershipSetting.find_by_membership_type("paypar_url") + membership_data = SalePayment.create_payment(membership_setting.gateway_url,membership_setting.auth_token,customer_data.membership_id,self.received_amount,self.sale.sale_id) + + #record an payment in sale-audit + remark = "#{membership_data} PayMal Payment- for Customer #{self.sale.customer_id} Sale Id [#{self.sale.sale_id}]| pay amount -> #{self.received_amount} " + sale_audit = SaleAudit.record_paymal(self.sale.sale_id, remark, 1) + + if membership_data["status"]==true + self.payment_method = "paymal" + self.payment_amount = self.received_amount + self.payment_reference = self.voucher_no + self.outstanding_amount = self.sale.grand_total.to_f - self.received_amount.to_f + self.payment_status = "pending" + payment_method = self.save! + SalePayment.where(:sale_payment_id => self.sale_payment_id).update_all(:payment_status => 'paid') + sale_update_payment_status(self.received_amount.to_f) + + else + sale_update_payment_status(0) + end + return payment_status + + end + def sale_update_payment_status(paid_amount,check_foc = false) #update amount_outstanding self.sale.amount_received = self.sale.amount_received.to_f + paid_amount.to_f diff --git a/app/views/origami/home/show.html.erb b/app/views/origami/home/show.html.erb index 194ac82e..388ce4d7 100755 --- a/app/views/origami/home/show.html.erb +++ b/app/views/origami/home/show.html.erb @@ -697,11 +697,12 @@ $(".choose_payment").on('click', function () { $( "#loading_wrapper").show(); + alert(parseInt(jQuery.inArray("PAYMAL", type))); var sale_id = $('#sale_id').val(); type = $('.payment_method').val(); if(parseInt(jQuery.inArray("Credit", type)) == -1){ - if (parseInt(jQuery.inArray("MPU", type)) != -1 || parseInt(jQuery.inArray("VISA", type)) != -1 || parseInt(jQuery.inArray("JCB", type)) != -1 || parseInt(jQuery.inArray("Master", type)) != -1 || parseInt(jQuery.inArray("UNIONPAY", type)) != -1 || parseInt(jQuery.inArray("Redeem", type)) != -1) { + if (parseInt(jQuery.inArray("MPU", type)) != -1 || parseInt(jQuery.inArray("VISA", type)) != -1 || parseInt(jQuery.inArray("JCB", type)) != -1 || parseInt(jQuery.inArray("Master", type)) != -1 || parseInt(jQuery.inArray("UNIONPAY", type)) != -1 || parseInt(jQuery.inArray("Redeem", type)) != -1 || parseInt(jQuery.inArray("PAYMAL",type))!= -1) { calculate_member_discount(sale_id,"Card"); }else{ diff --git a/app/views/origami/paymal/create.json.jbuilder b/app/views/origami/paymal/create.json.jbuilder new file mode 100644 index 00000000..f352b148 --- /dev/null +++ b/app/views/origami/paymal/create.json.jbuilder @@ -0,0 +1,2 @@ +json.set! :status, @out[0] +json.set! :message, @out[1] \ No newline at end of file diff --git a/app/views/origami/paymal/index.html.erb b/app/views/origami/paymal/index.html.erb new file mode 100644 index 00000000..81684256 --- /dev/null +++ b/app/views/origami/paymal/index.html.erb @@ -0,0 +1,201 @@ +