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 %>
+
+
+
+
+
+
+
+
+
+
+
+
+ | # |
+ Items |
+ QTY |
+ Price |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ " 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 %>
+
+
">
+
+
+
+
+
+
+
+
+
+
+
+
+ <% if !@customer_lists.nil? %>
+ <% @customer_lists.each do |cus| %>
+ <% if cus.customer_id != @customer.id %>
+
+
+
+ <% end %>
+ <% end %>
+ <% end %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <% if !@tax_arr.empty? %>
+ <% if @tax_arr.count > 1 %>
+
+
+
+
+
+ <% @tax_arr.each_with_index do |tax, tax_index| %>
+ <% if (tax_index+1)%2 == 0 %>
+
+ <% end %>
+
+
+
+ <% end %>
+ <% else %>
+
+
+ <% @tax_arr.each do |tax| %>
+
+
+
+ <% 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