From 82736aa038a6ad27666978437de9f6184f1a947f Mon Sep 17 00:00:00 2001 From: Dev Team Date: Wed, 21 May 2025 16:42:36 +0630 Subject: [PATCH] minor fix for qrpay init --- app/controllers/foodcourt/qrpay_controller.rb | 215 +++ app/views/foodcourt/addorders/detail.html.erb | 41 +- app/views/foodcourt/qrpay/init.html.erb | 1308 +++++++++++++++++ config/routes.rb | 2 + 4 files changed, 1561 insertions(+), 5 deletions(-) create mode 100644 app/controllers/foodcourt/qrpay_controller.rb create mode 100644 app/views/foodcourt/qrpay/init.html.erb diff --git a/app/controllers/foodcourt/qrpay_controller.rb b/app/controllers/foodcourt/qrpay_controller.rb new file mode 100644 index 00000000..fcc3b385 --- /dev/null +++ b/app/controllers/foodcourt/qrpay_controller.rb @@ -0,0 +1,215 @@ +class Foodcourt::QrpayController < BaseFoodcourtController + def init + @cash_exist = PaymentMethodSetting.cash_exist + @credit_exist = PaymentMethodSetting.credit_exist + display_type = Lookup.find_by_lookup_type("display_type") + if !display_type.nil? && display_type.value.to_i == 2 + @display_type = display_type.value + else + @display_type = nil + end + path = request.fullpath + sale_id = params[:sale_id] + @trans_flag = true + if params[:type] == "transaction" + @trans_flag = false + @cashier_type = "cashier" + else + @cashier_type = params[:type] + end + + if path.include? ("credit_payment") + @sale_payment = SalePayment.get_credit_amount_due_left(sale_id) + end + + @member_discount = MembershipSetting.find_by_discount(1) + @membership_rebate_balance=0 + + if Sale.exists?(sale_id) + @cash = 0.0 + @kbz_pay_amount = 0.0 + @other = 0.0 + @ppamount = 0.0 + @visacount= 0.0 + @jcbcount= 0.0 + @mastercount = 0.0 + @unionpaycount = 0.0 + @alipaycount = 0.0 + @junctionpaycount = 0.0 + @credit = 0.0 + @paymalcount = 0.0 + @dingacount = 0.0 + @giftvouchercount = 0.0 + @sale_data = Sale.find_by_sale_id(sale_id) + @balance = 0 + @accountable_type = '' + @table_no = '' + @dining = '' + @other_payment = 0.0 + @pdf_view = nil + @lookup_pdf = Lookup.find_by_lookup_type("ReceiptPdfView") + if !@lookup_pdf.nil? + @pdf_view = @lookup_pdf.value + end + + amount = SalePayment.get_kbz_pay_amount(sale_id, current_user) + @kbz_pay_amount += amount.to_f + + #for changable on/off + @changable_tax = true + lookup_changable_tax = Lookup.collection_of('changable_tax') + if !lookup_changable_tax.empty? + lookup_changable_tax.each do |changable_tax| + if changable_tax[0].downcase == "change" + if changable_tax[1] == '0' + @changable_tax = false + end + end + end + end + + # @shop = shop_detail #show shop info + + @customer_lists = Customer.where(name: ["WALK-IN", "TAKEAWAY"]) + saleObj = Sale.find(sale_id) + + #total customer with individual total amount + @individual_total = Array.new + if !saleObj.equal_persons.nil? + per_person_amount = saleObj.grand_total.to_f / saleObj.equal_persons.to_i + @individual_total.push({'total_customer' => saleObj.equal_persons.to_i, 'per_person_amount' => per_person_amount.to_f }) + end + + # rounding adjustment + # if @shop.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 + # else + # @rounding_adj = @sale_data.rounding_adjustment + # end + # else + # @rounding_adj = @sale_data.rounding_adjustment + # end + #end rounding adjustment + + # rounding adjustment + if current_shop.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) + @sale_data.grand_total = new_total + @sale_data.old_grand_total = saleObj.grand_total + @sale_data.rounding_adjustment = @rounding_adj + else + @rounding_adj = @sale_data.rounding_adjustment + end + else + @rounding_adj = @sale_data.rounding_adjustment + end + #end rounding adjustment + + # get printer info + @print_settings = PrintSetting.get_precision_delimiter() + + #get customer amount + @customer = Customer.find(@sale_data.customer_id) + # accounts = @customer.tax_profiles + accounts = TaxProfile.where("group_type = ?",@cashier_type).order("order_by ASC") + @account_arr =[] + @tax_arr =[] + accounts.each do |acc| + account = TaxProfile.find(acc.id) + # @account_arr.push(account) + @tax_arr.push(account.name) + end + sale_taxes = SaleTax.where("sale_id = ?", saleObj.sale_id) + if !sale_taxes.empty? + sale_taxes.each do |sale_tax| + @account_arr.push(sale_tax) + end + end + rebate = MembershipSetting.find_by_rebate(1) + # get member information + if @customer.membership_id != nil && rebate + response = Customer.get_member_account(@customer) + if response["status"]==true + response["account_data"].each do |res| + if res["accountable_type"] == "RebateAccount" || res["accountable_type"] == "RebatebonusAccount" + @balance = @balance.to_f + res["balance"].to_f + # @accountable_type = res["accountable_type"] + @accountable_type = "Rebate Balance" + end + end + end + end + + #end customer amount + + #paymal payment + + @sale_data.bookings.each do |sbk| + if sbk.dining_facility_id.to_i >0 + df = DiningFacility.find(sbk.dining_facility_id) + @table_no = df.type + ' ' + df.name + @checkin_time = sbk.checkin_at + @dining = df + break + else + @table_no = nil + @checkin_time = nil + @dining = nil + end + end + + if path.include? ("credit_payment") + @sale_payment_data = SalePayment.get_sale_payment_for_credit(@sale_data) + else + @sale_payment_data = SalePayment.get_sale_payments(@sale_data) + end + @sale_payment_data.each do |spay| + if spay.payment_method == "cash" + @cash += spay.payment_amount + end + if spay.payment_method !="creditnote" + @other_payment += spay.payment_amount + end + + if spay.payment_method == "mpu" + @other += spay.payment_amount + elsif spay.payment_method == "paypar" + @ppamount += spay.payment_amount + elsif spay.payment_method == "visa" + @visacount += spay.payment_amount + elsif spay.payment_method == "jcb" + @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 == "JunctionPay" + @junctionpaycount += spay.payment_amount + elsif spay.payment_method == "creditnote" + @credit += spay.payment_amount + elsif spay.payment_method == "paymal" + @paymalcount += spay.payment_amount + elsif spay.payment_method == "alipay" + @alipaycount += spay.payment_amount + elsif spay.payment_method == "dinga" + @dingacount += spay.payment_amount + elsif spay.payment_method == "giftvoucher" + @giftvouchercount += spay.payment_amount + end + end + end + end +end diff --git a/app/views/foodcourt/addorders/detail.html.erb b/app/views/foodcourt/addorders/detail.html.erb index 58d45f76..59081c4a 100644 --- a/app/views/foodcourt/addorders/detail.html.erb +++ b/app/views/foodcourt/addorders/detail.html.erb @@ -795,10 +795,44 @@ showHideNavbar(webview); <% end %> }); -/* MMQR INTEGRATION **/ $(document).on('click','#mmqr_btn', function(event){ const paymentMethod = 'MMQR'; - create_order($(this),paymentMethod); + let table_id = $("#table_id").text(); + let booking_id = $("#booking_id").text(); + let customer_id = $("#customer_id").text(); + + + let params = { + order_source: "food_court", + order_type: "dine_in", + customer_id: customer_id, + guest_info: "", + table_id: table_id, + order_items: JSON.stringify(get_order_item_rows()), + create_type: "create_pay", + }; + + $.ajax({ + type: "POST", + url: '/foodcourt/addorders/create', + data: params, + dataType: "json", + success: function (result) { + booking_id = result.booking_id; + console.log(result); + 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"); + } + }, + error: function (XMLHttpRequest, textStatus, errorThrown) { + $("#oqs_loading_wrapper").hide(); + $("#create_order").prop("disabled", false); + $("#create_pay_order").prop("disabled", false); + swal("Error", "Status: " + textStatus, "error"); + }, + }); }) function create_order(data,paymentMethod = "") { @@ -861,9 +895,6 @@ function create_order(data,paymentMethod = "") { }else if (type == "food_court" && paymentMethod == "") { window.location.href = "/foodcourt/app_orders?pending_id=" + booking_id; - }else if (type == "food_court" && paymentMethod == "MMQR") { - window.location.href = - `/foodcourt/sale/${result.sale_id}/${cashier_type}/payment`; }else { if (table_type == "Table") { window.location.href = "/origami/table/" + table_id; diff --git a/app/views/foodcourt/qrpay/init.html.erb b/app/views/foodcourt/qrpay/init.html.erb new file mode 100644 index 00000000..db31bfcf --- /dev/null +++ b/app/views/foodcourt/qrpay/init.html.erb @@ -0,0 +1,1308 @@ +
+ + <% if !@print_settings.nil? %> + <% if @print_settings.precision.to_i > 0 + precision = @print_settings.precision + else + precision = 0 + end + #check delimiter + if @print_settings.delimiter + delimiter = "," + else + delimiter = "" + end + %> + <% end %> + +
+
+
+
+
+
+
Receipt No : <%=@sale_data.receipt_no rescue ' '%>
+
Receipt Date : <%=@sale_data.receipt_date.strftime("%d/%m/%Y-%I:%M %p") rescue '-' %>
+
+
+
Table No : <%=@table_no%>
+ +
Sale ID : <% if @sale_data %><%=@sale_data.sale_id %><% end %>
+
+ +
+
+ Customer : + <% if @cashier_type == 'quick_service' || @cashier_type == 'food_court' %> + + + <% else %> + + <%= @sale_data.customer.name%> + <% end %> + +
+
Checkin Time : <%if !@checkin_time.nil?%><%= @checkin_time.strftime("%I:%M %p") %> + <%end%>
+
+
+
+ +
+
+
+ + + + + + + + + +
#ItemsQTYPrice
+
+
+
+ +
+ + + <% sub_total = 0 + count = 0 + %> + <% @sale_data.sale_items.each do |sale_item| + count += 1 + %> + + <% sub_total += sale_item.price%> + + + + + + + <%end %> + +
<%= count %><%=sale_item.product_name%>@<%=number_with_precision( sale_item.unit_price, precision: precision.to_i )%><%=sale_item.qty%><%=(number_with_precision(sale_item.price, precision: precision.to_i ))%>
+
+
+
+ + + + +
+
+ +
+
+
+
+
Amount Due: <% if !@sale_payment.nil? %>( Credit )<% end %>
+
+ + + + <% if @sale_payment.nil? %> + <%= number_with_precision(@sale_data.grand_total, precision: precision.to_i ) rescue number_with_precision(0, precision: precision.to_i ) %> + <% else %> + <%= number_with_precision(@sale_payment[0].payment_amount, precision: precision.to_i ) rescue number_with_precision(0, precision: precision.to_i)%> + <% end %> + + +
+
+
+ +
+ " id="server_mode"> + +
+
+
+
+ <%= link_to '/foodcourt/app_orders', class: 'btn btn-block btn-default waves-effect', :id => 'foodcourt_back', style: "padding-top: 0;" do%> + reply + BACK + <% end %> + + <% if @sale_payment.nil? %> +
+ <% if current_login_employee.role == "cashier" %> + Void + Edit + <% else %> + +
+ <% end %> + <% end %> + <% end %> +
+
+
+ +
+ +
+ +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + + + + + + + +<%= render "layouts/read_modal" %> + + diff --git a/config/routes.rb b/config/routes.rb index ebb3d50e..84fe5288 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -745,6 +745,8 @@ scope "(:locale)", locale: /en|mm/ do get 'current_shift_order_count' => 'orders#current_shift_order_count', :as => 'food_court_order_count' get '/:sale_id/reprint' => 'payments#reprint', :defaults => {:format => 'json'} get '/food_court/:order_id/cancel_order' => 'orders#cancel_order', :as => 'cancel_order' + + get '/:sale_id/qrpay/init' => 'qrpay#init' end end end