sale payment
This commit is contained in:
@@ -1,164 +1,27 @@
|
|||||||
class Api::Payment::MobilepaymentController < Api::ApiController
|
class Api::Payment::MobilepaymentController < Api::ApiController
|
||||||
|
|
||||||
# skip_before_action :authenticate
|
# skip_before_action :authenticate
|
||||||
|
|
||||||
def cash
|
def cash
|
||||||
|
|
||||||
cash = params[:cash]
|
cash = params[:cash]
|
||||||
sale_id = params[:sale_id]
|
sale_id = params[:sale_id]
|
||||||
member_info = nil
|
|
||||||
type = params[:type]
|
|
||||||
tax_type = params[:tax_type]
|
|
||||||
path = request.fullpath
|
|
||||||
latest_order_no = nil
|
|
||||||
cashier_id = params[:cashier_id]
|
cashier_id = params[:cashier_id]
|
||||||
current_user = Employee.find(cashier_id)
|
current_user = Employee.find(cashier_id)
|
||||||
|
|
||||||
if(Sale.exists?(sale_id))
|
if(Sale.exists?(sale_id))
|
||||||
saleObj = Sale.find(sale_id)
|
saleObj = Sale.find(sale_id)
|
||||||
sale_items = SaleItem.get_all_sale_items(sale_id)
|
sale_items = SaleItem.get_all_sale_items(sale_id)
|
||||||
shop_detail = Shop.first
|
|
||||||
|
|
||||||
# # rounding adjustment
|
|
||||||
# if !path.include? ("credit_payment")
|
|
||||||
# if shop_detail.is_rounding_adj
|
|
||||||
# a = saleObj.grand_total % 25 # Modulus
|
|
||||||
# b = saleObj.grand_total / 25 # Division
|
|
||||||
# #not calculate rounding if modulus is 0 and division is even
|
|
||||||
# #calculate rounding if modulus is zero or not zero and division are not even
|
|
||||||
# if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
|
||||||
# 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
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# # end rounding adjustment
|
|
||||||
|
|
||||||
sale_payment = SalePayment.new
|
sale_payment = SalePayment.new
|
||||||
sale_payment = sale_payment.process_payment(saleObj, current_user, cash, "cash")
|
sale_payment = sale_payment.process_payment(saleObj, current_user, cash, "cash")
|
||||||
if sale_payment[0]
|
if sale_payment[0]
|
||||||
@cash = {"change_amount"=>sale_payment[3],"balance_amount"=>sale_payment[4] ,"receipt_url"=>''}
|
@cash = {"change_amount"=>sale_payment[3],"balance_amount"=>sale_payment[4] ,"receipt_url"=>''}
|
||||||
end
|
end
|
||||||
@out = true,@cash
|
|
||||||
# if !path.include? ("credit_payment")
|
|
||||||
# rebate_amount = nil
|
|
||||||
|
|
||||||
# # For Cashier by Zone
|
|
||||||
# # bookings = Booking.where("sale_id='#{sale_id}'")
|
|
||||||
# bookings = Booking.find_by_sale_id(sale_id)
|
|
||||||
|
|
||||||
# shift = ShiftSale.current_open_shift(current_user.id)
|
|
||||||
# if !shift.nil?
|
|
||||||
# cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
|
|
||||||
# else
|
|
||||||
# if bookings.dining_facility_id.to_i > 0
|
|
||||||
# table = DiningFacility.find(bookings.dining_facility_id)
|
|
||||||
# cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id)
|
|
||||||
# cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id)
|
|
||||||
|
|
||||||
# type = 'payment'
|
|
||||||
# from = getCloudDomain #get sub domain in cloud mode
|
|
||||||
# ActionCable.server.broadcast "order_channel",table: table,type:type,from:from
|
|
||||||
# else
|
|
||||||
# shift = ShiftSale.find(saleObj.shift_sale_id)
|
|
||||||
# cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# # For Print
|
|
||||||
# # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
|
|
||||||
# receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf
|
|
||||||
# unique_code = "ReceiptBillPdf"
|
|
||||||
# print_settings = PrintSetting.all
|
|
||||||
# if !print_settings.nil?
|
|
||||||
# print_settings.each do |setting|
|
|
||||||
# if setting.unique_code == 'ReceiptBillPdf'
|
|
||||||
# unique_code = "ReceiptBillPdf"
|
|
||||||
# elsif setting.unique_code == 'ReceiptBillStarPdf'
|
|
||||||
# unique_code = "ReceiptBillStarPdf"
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# if !receipt_bill_a5_pdf.empty?
|
|
||||||
# receipt_bill_a5_pdf.each do |receipt_bilA5|
|
|
||||||
# if receipt_bilA5[0] == 'ReceiptBillA5Pdf'
|
|
||||||
# if receipt_bilA5[1] == '1'
|
|
||||||
# unique_code = "ReceiptBillA5Pdf"
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# customer= Customer.find(saleObj.customer_id)
|
|
||||||
|
|
||||||
# # get member information
|
|
||||||
# rebate = MembershipSetting.find_by_rebate(1)
|
|
||||||
# credit_data = SalePayment.find_by_sale_id_and_payment_method(sale_id,'creditnote')
|
|
||||||
|
|
||||||
# if customer.membership_id != nil && rebate && credit_data.nil?
|
|
||||||
# member_info = Customer.get_member_account(customer)
|
|
||||||
|
|
||||||
# if member_info["status"] == true
|
|
||||||
# rebate_amount = Customer.get_membership_transactions(customer,saleObj.receipt_no)
|
|
||||||
# current_balance = SaleAudit.paymal_search(sale_id)
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# #orders print out
|
|
||||||
# if params[:type] == "quick_service"
|
|
||||||
# booking = Booking.find_by_sale_id(sale_id)
|
|
||||||
# if booking.dining_facility_id.to_i>0
|
|
||||||
# table_id = booking.dining_facility_id
|
|
||||||
# else
|
|
||||||
# table_id = 0
|
|
||||||
# end
|
|
||||||
|
|
||||||
# latest_order = booking.booking_orders.order("order_id DESC").limit(1).first()
|
|
||||||
# if !latest_order.nil?
|
|
||||||
# latest_order_no = latest_order.order_id
|
|
||||||
# end
|
|
||||||
|
|
||||||
# booking.booking_orders.each do |order|
|
|
||||||
# # Order.pay_process_order_queue(order.order_id, table_id)
|
|
||||||
# oqs = OrderQueueStation.new
|
|
||||||
# oqs.pay_process_order_queue(order.order_id, table_id)
|
|
||||||
|
|
||||||
# assign_order = AssignedOrderItem.assigned_order_item_by_job(order.order_id)
|
|
||||||
# from = getCloudDomain #get sub domain in cloud mode
|
|
||||||
# ActionCable.server.broadcast "order_queue_station_channel",order: assign_order,from:from
|
|
||||||
# end
|
|
||||||
|
|
||||||
# end
|
|
||||||
|
|
||||||
# #for card sale data
|
|
||||||
# card_data = Array.new
|
|
||||||
# card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id)
|
|
||||||
# if !card_sale_trans_ref_no.nil?
|
|
||||||
# card_sale_trans_ref_no.each do |cash_sale_trans|
|
|
||||||
# card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s
|
|
||||||
# card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s
|
|
||||||
# card_no = cash_sale_trans.pan.last(4)
|
|
||||||
# card_no = card_no.rjust(19,"**** **** **** ")
|
|
||||||
# card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id})
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# #card_balance amount for Paymal payment
|
|
||||||
# card_balance_amount = SaleAudit.getCardBalanceAmount(sale_id)
|
|
||||||
|
|
||||||
# # get printer info
|
|
||||||
# print_settings=PrintSetting.find_by_unique_code(unique_code)
|
|
||||||
# # Calculate Food and Beverage Total
|
|
||||||
# item_price_by_accounts = SaleItem.calculate_price_by_accounts(saleObj.sale_items)
|
|
||||||
# discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items)
|
|
||||||
# other_amount = SaleItem.calculate_other_charges(sale_items)
|
|
||||||
|
|
||||||
# printer = Printer::ReceiptPrinter.new(print_settings)
|
|
||||||
# filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings,cashier_terminal,sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_detail, "Paid",current_balance,card_data,other_amount,latest_order_no,card_balance_amount,nil)
|
|
||||||
|
|
||||||
# render json: JSON.generate({:status => saleObj.rebate_status, :message => "Can't Rebate coz of Sever Error ", :filename => filename, :receipt_no => sale_receipt_no, :printer_name => printer_name})
|
|
||||||
|
|
||||||
# #end
|
|
||||||
# end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def kbz_pay
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
54
app/models/kbz_pay.rb
Normal file
54
app/models/kbz_pay.rb
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
class KbzPay
|
||||||
|
|
||||||
|
def self.pay(amount, receipt_no)
|
||||||
|
|
||||||
|
datetime = DateTime.now.strftime("%d%m%Y%H%M")
|
||||||
|
kbz_app_id = "kp1e78f7efddca190042638341afb88d"
|
||||||
|
kbz_merch_code = "200004"
|
||||||
|
kbz_method = 'kbz.payment.precreate'
|
||||||
|
kbz_trade_type = "PAY_BY_QRCODE"
|
||||||
|
kbz_api_key = "code2lab123456"
|
||||||
|
kbz_version = "1.0"
|
||||||
|
kbz_provider_url = "http://api.kbzpay.com/payment/gateway/uat/precreate"
|
||||||
|
kbz_currency = "MMK"
|
||||||
|
kbz_callback_url = "https://staging-v2.doemal.com/api/v3/ordering/kbz_callback"
|
||||||
|
nounce_str = SecureRandom.base64(32).first(32).upcase
|
||||||
|
|
||||||
|
params = "appid="+kbz_app_id+"&merch_code="+kbz_merch_code+"&merch_order_id="+receipt_no.to_s+"&method="+kbz_method+"&nonce_str="+nounce_str.to_s+"¬ify_url="+ kbz_callback_url + "×tamp="+datetime+"&total_amount="+amount.to_s+"&trade_type="+kbz_trade_type+"&trans_currency="+ kbz_currency+"&version="+kbz_version+"&key="+kbz_api_key
|
||||||
|
|
||||||
|
Rails.logger.info params
|
||||||
|
sign = Digest::SHA256.hexdigest(params)
|
||||||
|
str = {"timestamp": datetime,
|
||||||
|
"method": kbz_method,
|
||||||
|
"notify_url": kbz_callback_url,
|
||||||
|
"nonce_str": nounce_str.to_s,
|
||||||
|
"sign_type": "SHA256",
|
||||||
|
"sign": sign,
|
||||||
|
"version": kbz_version,
|
||||||
|
"biz_content": {
|
||||||
|
"merch_order_id": receipt_no,
|
||||||
|
"merch_code": kbz_merch_code,
|
||||||
|
"appid": kbz_app_id,
|
||||||
|
"trade_type": kbz_trade_type,
|
||||||
|
"total_amount": amount.to_s,
|
||||||
|
"trans_currency": kbz_currency
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result = HTTParty.post(kbz_provider_url,
|
||||||
|
:body => { :Request => str}.to_json,
|
||||||
|
:headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }
|
||||||
|
)
|
||||||
|
Rails.logger.info result
|
||||||
|
if result['Response']['result'] == "SUCCESS"
|
||||||
|
#TODO QR return
|
||||||
|
qr = result['Response']['qrCode']
|
||||||
|
return true, qr
|
||||||
|
else
|
||||||
|
return false, result['Response']
|
||||||
|
puts result['Response']
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -69,6 +69,8 @@ class SalePayment < ApplicationRecord
|
|||||||
payment_status,membership_data = dinga_payment
|
payment_status,membership_data = dinga_payment
|
||||||
when "GiftVoucher"
|
when "GiftVoucher"
|
||||||
payment_status = giftvoucher_payment
|
payment_status = giftvoucher_payment
|
||||||
|
when "KbzPay"
|
||||||
|
payment_status = giftvoucher_payment
|
||||||
else
|
else
|
||||||
puts "it was something else"
|
puts "it was something else"
|
||||||
end
|
end
|
||||||
@@ -561,6 +563,15 @@ class SalePayment < ApplicationRecord
|
|||||||
return payment_status
|
return payment_status
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def kbz_payment
|
||||||
|
payment_status = false
|
||||||
|
status, response = KbzPay.pay(amount, receipt_no)
|
||||||
|
if status
|
||||||
|
payment_status = true
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def sale_update_payment_status(paid_amount,check_foc = false)
|
def sale_update_payment_status(paid_amount,check_foc = false)
|
||||||
#update amount_outstanding
|
#update amount_outstanding
|
||||||
self.sale.amount_received = self.sale.amount_received.to_f + paid_amount.to_f
|
self.sale.amount_received = self.sale.amount_received.to_f + paid_amount.to_f
|
||||||
|
|||||||
@@ -1,2 +1,10 @@
|
|||||||
json.set! :status, @out[0]
|
# json.set! :status, @out[0]
|
||||||
json.set! :data, @out[1]
|
# json.set! :data, @out[1]
|
||||||
|
#
|
||||||
|
|
||||||
|
if @cash
|
||||||
|
json.status true
|
||||||
|
else
|
||||||
|
json.status false
|
||||||
|
json.data @cash
|
||||||
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user