diff --git a/app/assets/javascripts/origami.js b/app/assets/javascripts/origami.js index 5bdbe861..712ce8f7 100755 --- a/app/assets/javascripts/origami.js +++ b/app/assets/javascripts/origami.js @@ -309,6 +309,9 @@ function resCBPay(resMsg,card_sale_trans_id,cmd_type,payment_type,bnk_bill_amoun } }); }else{ + if(payment_type!="master"){ + payment_type = payment_type.toUpperCase(); + } swal({ title: 'Oops', text: "Transaction is " + (jobj.STATUS).toLowerCase(), @@ -318,7 +321,7 @@ function resCBPay(resMsg,card_sale_trans_id,cmd_type,payment_type,bnk_bill_amoun closeOnCancel: false, allowOutsideClick: false }, function () { - window.location.href = '/origami/sale/'+ sale_id + "/payment/others_payment/MPU"; + window.location.href = '/origami/sale/'+ sale_id + "/payment/others_payment/"+payment_type; }); } } diff --git a/app/assets/javascripts/origami/unionpay.coffee b/app/assets/javascripts/origami/unionpay.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/origami/unionpay.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/unionpay.scss b/app/assets/stylesheets/origami/unionpay.scss new file mode 100644 index 00000000..6daa3524 --- /dev/null +++ b/app/assets/stylesheets/origami/unionpay.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the origami/unionpay 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/api/check_in_process_controller.rb b/app/controllers/api/check_in_process_controller.rb index cf34700e..ac43bfd9 100644 --- a/app/controllers/api/check_in_process_controller.rb +++ b/app/controllers/api/check_in_process_controller.rb @@ -35,31 +35,35 @@ class Api::CheckInProcessController < Api::ApiController dining_facility = DiningFacility.find(params[:dining_id]) if dining_facility.status == "available" lookup_checkout_time = Lookup.collection_of("checkout_time") - - checkout_at = Time.now.utc - - if !lookup_checkout_time.nil? - if lookup_checkout_time[0][0] == 'hr' - checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.hour - else - checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.minutes - end - end - - dining_facility.status = "occupied" - dining_facility.save! - - if dining_facility.type == "Table" - type = "TableBooking" - else - type = "RoomBooking" - end - booking = Booking.create({:dining_facility_id => params[:dining_id],:type => type, - :checkin_by=>current_login_employee.name,:checkin_at => Time.now.utc,:checkout_at =>checkout_at, :booking_status => "assign", :reserved_at => checkout_at, :reserved_by => current_login_employee.name }) - booking.save! + if !lookup_checkout_time.empty? + checkout_at = Time.now.utc - render :json => { :status => true, :checkout_at => booking.checkout_at.utc.getlocal.strftime("%Y-%m-%d %H:%M") } + if !lookup_checkout_time.nil? + if lookup_checkout_time[0][0] == 'hr' + checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.hour + else + checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.minutes + end + end + + dining_facility.status = "occupied" + dining_facility.save! + + if dining_facility.type == "Table" + type = "TableBooking" + else + type = "RoomBooking" + end + + booking = Booking.create({:dining_facility_id => params[:dining_id],:type => type, + :checkin_by=>current_login_employee.name,:checkin_at => Time.now.utc,:checkout_at =>checkout_at, :booking_status => "assign", :reserved_at => checkout_at, :reserved_by => current_login_employee.name }) + booking.save! + + render :json => { :status => true, :checkout_at => booking.checkout_at.utc.getlocal.strftime("%Y-%m-%d %H:%M") } + else + render :json => { :status => true } + end else error_message = "#{dining_facility.type} is not available!" render :json => { :status => false, :error_message => error_message } diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 88577ac4..8e10b0e1 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -123,14 +123,15 @@ class Origami::PaymentsController < BaseOrigamiController card_data = Array.new card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id) if !card_sale_trans_ref_no.nil? - card_res_date = card_sale_trans_ref_no.res_date.strftime("%Y-%m-%d").to_s - card_res_time = card_sale_trans_ref_no.res_time.strftime("%H:%M").to_s - card_no = card_sale_trans_ref_no.pan.last(4) + 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' => card_sale_trans_ref_no.batch_no, 'trace' => card_sale_trans_ref_no.trace, 'pan' => card_no, 'app' => card_sale_trans_ref_no.app, 'tid' => card_sale_trans_ref_no.terminal_id, 'app_code' => card_sale_trans_ref_no.app_code, 'ref_no' => card_sale_trans_ref_no.ref_no, 'mid' => card_sale_trans_ref_no.merchant_id}) + 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 - puts "card_data" - puts card_data.to_json + # get printer info print_settings=PrintSetting.find_by_unique_code(unique_code) # Calculate Food and Beverage Total @@ -154,6 +155,7 @@ class Origami::PaymentsController < BaseOrigamiController @visacount= 0.0 @jcbcount= 0.0 @mastercount = 0.0 + @unionpaycount = 0.0 @credit = 0.0 @sale_data = Sale.find_by_sale_id(sale_id) @balance = 0.00 @@ -215,6 +217,8 @@ class Origami::PaymentsController < BaseOrigamiController @jcbcount += spay.payment_amount elsif spay.payment_method == "master" @mastercount += spay.payment_amount + elsif spay.payment_method == "unionpay" + @unionpaycount += spay.payment_amount elsif spay.payment_method == "creditnote" @credit += spay.payment_amount end @@ -257,20 +261,21 @@ class Origami::PaymentsController < BaseOrigamiController card_data = Array.new card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id) if !card_sale_trans_ref_no.nil? - card_res_date = card_sale_trans_ref_no.res_date.strftime("%Y-%m-%d").to_s - card_res_time = card_sale_trans_ref_no.res_time.strftime("%H:%M").to_s - card_no = card_sale_trans_ref_no.pan.last(4) + 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' => card_sale_trans_ref_no.batch_no, 'trace' => card_sale_trans_ref_no.trace, 'pan' => card_no, 'app' => card_sale_trans_ref_no.app, 'tid' => card_sale_trans_ref_no.terminal_id, 'app_code' => card_sale_trans_ref_no.app_code, 'ref_no' => card_sale_trans_ref_no.ref_no, 'mid' => card_sale_trans_ref_no.merchant_id}) + 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 - # get printer info print_settings=PrintSetting.find_by_unique_code(unique_code) # Calculate price_by_accounts 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) - + printer = Printer::ReceiptPrinter.new(print_settings) printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Re-print",current_balance,card_data) end diff --git a/app/controllers/origami/unionpay_controller.rb b/app/controllers/origami/unionpay_controller.rb new file mode 100644 index 00000000..a3f7e6ed --- /dev/null +++ b/app/controllers/origami/unionpay_controller.rb @@ -0,0 +1,61 @@ +class Origami::UnionpayController < BaseOrigamiController + def index + @sale_id = params[:sale_id] + + # limit unionpay_amount + sale_data = Sale.find_by_sale_id(@sale_id) + total = sale_data.grand_total + @unionpaycount = 0 + others = 0 + + @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 + + sale_data.sale_payments.each do |sale_payment| + if sale_payment.payment_method == "unionpay" + @unionpaycount = @unionpaycount + sale_payment.payment_amount + else + others = others + sale_payment.payment_amount + end + end + puts "unionpaycount" + puts @unionpaycount + @can_unionpay = total - @unionpaycount - others + @member_discount = MembershipSetting.find_by_discount(1) + @sub_total = sale_data.total_amount + @membership_id = sale_data.customer.membership_id + #for bank integration + @receipt_no = sale_data.receipt_no + bank_integration = Lookup.collection_of('bank_integration') + @bank_integration = 0 + if !bank_integration[0].nil? + @bank_integration = bank_integration[0][1] + end + end + + def create + cash = params[: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) + #end rounding adjustment + sale_payment = SalePayment.new + @status, @sale = sale_payment.process_payment(saleObj, @user, cash, "unionpay") + end + end +end diff --git a/app/helpers/origami/unionpay_helper.rb b/app/helpers/origami/unionpay_helper.rb new file mode 100644 index 00000000..3911575e --- /dev/null +++ b/app/helpers/origami/unionpay_helper.rb @@ -0,0 +1,2 @@ +module Origami::UnionpayHelper +end diff --git a/app/models/ability.rb b/app/models/ability.rb index 02b2618f..846b278a 100755 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -96,6 +96,7 @@ class Ability can :read, Order can :update, Order can :menage, Booking + can :manage, OrderQueueStation can :read, Sale can :update, Sale can :get_customer, Customer @@ -104,11 +105,11 @@ class Ability can :index, :other_charge can :create, :other_charge - can :index, :discount - can :create, :discount - can :remove_discount_items, :discount - can :remove_all_discount, :discount - can :member_discount, :discount + # can :index, :discount + # can :create, :discount + # can :remove_discount_items, :discount + # can :remove_all_discount, :discount + can :member_discount, :discount can :first_bill, :payment can :show, :payment diff --git a/app/models/customer.rb b/app/models/customer.rb index c228e3e6..949093ea 100755 --- a/app/models/customer.rb +++ b/app/models/customer.rb @@ -146,9 +146,10 @@ class Customer < ApplicationRecord if sale.customer.membership_id response = self.rebat(Sale.find(sale.sale_id)) #record an payment in sale-audit + if !response.nil? remark = "UPdate Rebate Response - #{response} for Customer #{sale.customer_id} Sale Id [#{sale.sale_id}]| pay amount -> #{sale.amount_received} " sale_audit = SaleAudit.record_paymal(sale.sale_id, remark, 1) - + end if response["status"] == true status = sale.update_attributes(rebate_status: "true") end @@ -159,8 +160,9 @@ class Customer < ApplicationRecord def self.rebat(sObj) rebate_prices,campaign_method = SaleItem.calculate_rebate_by_account(sObj.sale_items) generic_customer_id = sObj.customer.membership_id - if generic_customer_id.present? + + if generic_customer_id.present? paypar = sObj.sale_payments payparcost = 0 credit = 0 @@ -171,6 +173,7 @@ class Customer < ApplicationRecord end if pp.payment_method == "creditnote" credit = 1 + sObj.update_attributes(rebate_status: nil) end end # overall_dis = SaleItem.get_overall_discount(sObj.id) @@ -287,6 +290,7 @@ class Customer < ApplicationRecord end end else + puts "no Response" response = { "status": "no_member", "message": "Not membership"} end end diff --git a/app/models/sale.rb b/app/models/sale.rb index ee55159c..e0918d5f 100755 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -1129,8 +1129,7 @@ end def self.getCardSaleTrans(sale_id) query = Sale.select("cst.res_date,cst.res_time,cst.trace,cst.pan,cst.batch_no,cst.exp_date,cst.app,cst.res_type,cst.ref_no,cst.terminal_id,cst.merchant_id,cst.app_code") .joins("JOIN card_sale_trans as cst on cst.sale_id = sales.sale_id") - .where("sales.sale_id=?",sale_id) - .first() + .where("sales.sale_id=? and status = 'Approved'",sale_id) return query end diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb index ab33d6e4..16b1fd58 100755 --- a/app/pdf/receipt_bill_pdf.rb +++ b/app/pdf/receipt_bill_pdf.rb @@ -512,22 +512,24 @@ class ReceiptBillPdf < Prawn::Document #start card sale trans data def card_sale_data(card_data) - move_down 5 - stroke_horizontal_rule - move_down 5 + if card_data != nil && !card_data.empty? + move_down 5 + stroke_horizontal_rule + move_down 5 - y_position = cursor - if !card_data[0].nil? - if card_data[0]['app'] == 'CUP' - card_data[0]['app'] = 'UNIONPAY' - elsif card_data[0]['app'] == 'MASTERCARD' - card_data[0]['app'] = 'MASTER' + y_position = cursor + card_data.each do |data| + if data['app'] == 'CUP' + data['app'] = 'UNIONPAY' + elsif data['app'] == 'MASTERCARD' + data['app'] = 'MASTER' + end + text "DATE/TIME: #{data['res_date']} #{data['res_time']} ", :size => @item_font_size, :align => :left + text "BATCH NUM: #{data['batch_no']} TRACE#: #{data['trace']}",:size => @item_font_size, :align => :left + text "RREF NUM: #{data['ref_no']} APPR CODE: #{data['app_code']} ",:size => @item_font_size, :align => :left + text "TID: #{data['tid']} ",:size => @item_font_size, :align => :left + text "#{data['app']} #{data['pan']} ",:size => @item_font_size, :align => :left end - text "DATE/TIME: #{card_data[0]['res_date']} #{card_data[0]['res_time']} ", :size => @item_font_size, :align => :left - text "BATCH NUM: #{card_data[0]['batch_no']} TRACE#: #{card_data[0]['trace']}",:size => @item_font_size, :align => :left - text "RREF NUM: #{card_data[0]['ref_no']} APPR CODE: #{card_data[0]['app_code']} ",:size => @item_font_size, :align => :left - text "TID: #{card_data[0]['tid']} ",:size => @item_font_size, :align => :left - text "#{card_data[0]['app']} #{card_data[0]['pan']} ",:size => @item_font_size, :align => :left end end end diff --git a/app/views/origami/home/show.html.erb b/app/views/origami/home/show.html.erb index 29903480..f162be5d 100755 --- a/app/views/origami/home/show.html.erb +++ b/app/views/origami/home/show.html.erb @@ -390,7 +390,7 @@ <% if @status_sale == 'sale' %> - + @@ -419,7 +419,7 @@