diff --git a/Gemfile b/Gemfile index 2e4b231e..9cd72eed 100644 --- a/Gemfile +++ b/Gemfile @@ -144,3 +144,4 @@ gem 'select2-rails' # for multi-select and auto-complete select box gem "chartkick" #chart lib gem 'myanmar-tools' gem 'rabbit-mm' +gem 'rqrcode', '2.1.2' diff --git a/app/assets/javascripts/channels/second_display_view.js b/app/assets/javascripts/channels/second_display_view.js index a1420e8f..cef20419 100644 --- a/app/assets/javascripts/channels/second_display_view.js +++ b/app/assets/javascripts/channels/second_display_view.js @@ -192,5 +192,9 @@ App.checkin = App.cable.subscriptions.create('SecondDisplayViewChannel', { $('#s_grand_total').empty(); $('#s_grand_total').append(fixed_grand_total); } + + if (data.qr_svg) { + document.querySelector("#qrpay_svg").innerHTML = data.qr_svg; + } } }); diff --git a/app/controllers/foodcourt/qrpay_controller.rb b/app/controllers/foodcourt/qrpay_controller.rb index fcc3b385..6f8d47cc 100644 --- a/app/controllers/foodcourt/qrpay_controller.rb +++ b/app/controllers/foodcourt/qrpay_controller.rb @@ -1,4 +1,6 @@ class Foodcourt::QrpayController < BaseFoodcourtController + require 'rqrcode' + def init @cash_exist = PaymentMethodSetting.cash_exist @credit_exist = PaymentMethodSetting.credit_exist @@ -210,6 +212,34 @@ class Foodcourt::QrpayController < BaseFoodcourtController @giftvouchercount += spay.payment_amount end end + + qr_str = "00020101021226480015com.mmqrpay.www0115223743000377032020600000052045814530310454075000.005802MM5908Code2LAB6006Yangon61051101062730125ORDER_1747826957_5ae9cb900523MMQR1075L175919500000010813PAY_BY_QRCODE64300002MY0109ကုဒ်တူလက်0207ရန်ကုန်6304AD40"; + @string_to_encode = qr_str + + qrcode = RQRCode::QRCode.new(@string_to_encode) + + @qr_svg = qrcode.as_svg( + color: "000", # Hex color for the QR code modules (black) + shape_rendering: "crispEdges", # Renders sharp edges + module_size: 2, # Size of each module (dot/square) + standalone: true, # Outputs a complete SVG document + use_path: true # Modern SVG path rendering + ) + + png_data = qrcode.as_png( + bit_depth: 1, + border_modules: 4, + color_mode: ChunkyPNG::COLOR_GRAYSCALE, + color: 'black', + file: nil, + fill: 'white', + module_px_size: 8, # Pixel size of each module + resize_exactly_to: false, + resize_gte_to: false, + size: 240 # Approximate size of the image in pixels (e.g., 240x240) + ).to_s + + ActionCable.server.broadcast('second_display_view_channel', { data: qr_str, qr_svg: @qr_svg }) end end end diff --git a/app/services/kbz_merchant.rb b/app/services/kbz_merchant.rb index 805759fe..a7c3d9ae 100644 --- a/app/services/kbz_merchant.rb +++ b/app/services/kbz_merchant.rb @@ -23,7 +23,7 @@ class KbzMerchant method: 'kbz.payment.precreate', timestamp: Time.now.utc.to_i.to_s, nonce_str: SecureRandom.hex(16), - notify_url: @payment_method.notify_url, + notify_url: "http://localhost:3000/notify", sign_type: 'SHA256', version: '1.0', biz_content: { diff --git a/app/views/foodcourt/addorders/detail.html.erb b/app/views/foodcourt/addorders/detail.html.erb index 59081c4a..1de63920 100644 --- a/app/views/foodcourt/addorders/detail.html.erb +++ b/app/views/foodcourt/addorders/detail.html.erb @@ -800,6 +800,7 @@ $(document).on('click','#mmqr_btn', function(event){ let table_id = $("#table_id").text(); let booking_id = $("#booking_id").text(); let customer_id = $("#customer_id").text(); + let second_display_lookup = $("#display_type").val(); let params = { @@ -823,7 +824,7 @@ $(document).on('click','#mmqr_btn', function(event){ window.location.href = `/foodcourt/${result.sale_id}/qrpay/init#` // `/foodcourt/sale/${result.sale_id}/${cashier_type}/payment`; if ($("#server_mode").val() != "cloud" && second_display_lookup == 2) { - customer_display_view(null, "reload"); + // customer_display_view(null, "reload"); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { @@ -902,6 +903,7 @@ function create_order(data,paymentMethod = "") { window.location.href = "/origami/room/" + table_id; } } + if ($("#server_mode").val() != "cloud" && second_display_lookup == 2) { customer_display_view(null, "reload"); } diff --git a/app/views/foodcourt/second_display/_second_display.html.erb b/app/views/foodcourt/second_display/_second_display.html.erb index 3ba175b0..5986da6b 100644 --- a/app/views/foodcourt/second_display/_second_display.html.erb +++ b/app/views/foodcourt/second_display/_second_display.html.erb @@ -50,4 +50,8 @@ +