diff --git a/Dockerfile b/Dockerfile index 69f0f58e..5c47ef29 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,5 +8,7 @@ COPY Gemfile /sxrestaurant/Gemfile COPY Gemfile.lock /sxrestaurant/Gemfile.lock RUN bundle install --without development test RUN bundle exec rails assets:precompile +RUN echo "Asia/Rangoon" > /etc/timezone +RUN dpkg-reconfigure -f noninteractive tzdata COPY . /sxrestaurant diff --git a/app/assets/javascripts/channels/check_new_order.js b/app/assets/javascripts/channels/check_new_order.js index a4890681..a6317af6 100644 --- a/app/assets/javascripts/channels/check_new_order.js +++ b/app/assets/javascripts/channels/check_new_order.js @@ -5,6 +5,7 @@ App.check_new_order = App.cable.subscriptions.create('CheckNewOrderChannel', { received: function(data) { var order = data.data; + var shop_code = data.shop_code; if(order.length > 0){ var order_lists = ""; $.each(order, function(key, value){ @@ -18,30 +19,33 @@ App.check_new_order = App.cable.subscriptions.create('CheckNewOrderChannel', { }); // alert(order_lists); - // swal({ - // title: 'Information', - // target: document.getElementById("notify_new_order"), - // text: "You have new orders
"+ - // "Are you accept or reject for these orders "+order_lists+"?", - // type: 'success', - // html: true, - // closeOnConfirm: false, - // closeOnCancel: false, - // allowOutsideClick: false - // }, function (isConfirm) { - // if(isConfirm){ - // swal.close(); - // } - // }); - $("#notify_new_order_lists").text(order_lists); - $("#notify_new_order").on('show.bs.modal', function(e){ - $("#notify_order_send_to_kitchen").modal('hide'); - $("#notify_order_ready_to_delivery").modal('hide'); - }).on('shown.bs.modal', function(e){ - $("#notify_new_order").focus(); - }).on('hide.bs.modal', function (e) { - $("#notify_new_order").modal("hide"); - }).modal({show: true, keyboard: false, backdrop: false}); + swal({ + title: 'Information', + target: document.getElementById(shop_code+"_notify_new_order"), + text: "You have new orders
"+ + "Are you accept or reject for these orders "+order_lists+"?", + type: 'success', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function (isConfirm) { + if(isConfirm){ + swal.close(); + } + }); + // $("#notify_new_order_lists").text(order_lists); + // if($("#notify_new_order").hasClass("hidden")){ + // $("#notify_new_order").removeClass("hidden"); + // } + // $("#notify_new_order").on('show.bs.modal', function(e){ + // $("#notify_order_send_to_kitchen").addClass("hidden"); + // $("#notify_order_ready_to_delivery").addClass("hidden"); + // }).on('shown.bs.modal', function(e){ + // $("#notify_new_order").focus(); + // }).on('hide.bs.modal', function (e) { + // $("#notify_new_order").addClass("hidden"); + // }).modal({show: true, keyboard: false, backdrop: false}); } } }); diff --git a/app/assets/javascripts/channels/check_order_ready_to_delivery.js b/app/assets/javascripts/channels/check_order_ready_to_delivery.js index 2e576266..319f7781 100644 --- a/app/assets/javascripts/channels/check_order_ready_to_delivery.js +++ b/app/assets/javascripts/channels/check_order_ready_to_delivery.js @@ -5,6 +5,7 @@ App.check_order_ready_to_delivery = App.cable.subscriptions.create('CheckOrderRe received: function(data) { var order = data.data; + var shop_code = data.shop_code; if(order.length > 0){ var order_lists = ""; $.each(order, function(key, value){ @@ -18,30 +19,33 @@ App.check_order_ready_to_delivery = App.cable.subscriptions.create('CheckOrderRe }); // alert(order_lists); - // swal({ - // title: 'Information', - // target: document.getElementById("notify_order_ready_to_delivery"), - // text: "You have orders that are ready to deliver
"+ - // "Could you ready these orders "+order_lists+" to deliver?", - // type: 'success', - // html: true, - // closeOnConfirm: false, - // closeOnCancel: false, - // allowOutsideClick: false - // }, function (isConfirm) { - // if(isConfirm){ - // swal.close(); - // } - // }); - $("#notify_order_ready_to_delivery_lists").text(order_lists); - $("#notify_order_ready_to_delivery").on('shown.bs.modal', function(e){ - $("#notify_new_order").modal('hide'); - $("#notify_order_send_to_kitchen").modal('hide'); - }).on('shown.bs.modal', function(e){ - $("#notify_order_ready_to_delivery").focus(); - }).on('hide.bs.modal', function (e) { - $("#notify_order_ready_to_delivery").modal("hide"); - }).modal({show: true, keyboard: false, backdrop: false}); + swal({ + title: 'Information', + target: document.getElementById(shop_code+"_notify_order_ready_to_delivery"), + text: "You have orders that are ready to deliver
"+ + "Could you ready these orders "+order_lists+" to deliver?", + type: 'success', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function (isConfirm) { + if(isConfirm){ + swal.close(); + } + }); + // $("#notify_order_ready_to_delivery_lists").text(order_lists); + // if($("#notify_order_ready_to_delivery").hasClass("hidden")){ + // $("#notify_order_ready_to_delivery").removeClass("hidden"); + // } + // $("#notify_order_ready_to_delivery").on('shown.bs.modal', function(e){ + // $("#notify_new_order").addClass("hidden"); + // $("#notify_order_send_to_kitchen").addClass("hidden"); + // }).on('shown.bs.modal', function(e){ + // $("#notify_order_ready_to_delivery").focus(); + // }).on('hide.bs.modal', function (e) { + // $("#notify_order_ready_to_delivery").addClass("hidden"); + // }).modal({show: true, keyboard: false, backdrop: false}); } } }); diff --git a/app/assets/javascripts/channels/check_order_send_to_kitchen.js b/app/assets/javascripts/channels/check_order_send_to_kitchen.js index fbb233f8..df9eb324 100644 --- a/app/assets/javascripts/channels/check_order_send_to_kitchen.js +++ b/app/assets/javascripts/channels/check_order_send_to_kitchen.js @@ -5,6 +5,7 @@ App.check_order_send_to_kitchen = App.cable.subscriptions.create('CheckOrderSend received: function(data) { var order = data.data; + var shop_code = data.shop_code; if(order.length > 0){ var order_lists = ""; $.each(order, function(key, value){ @@ -18,30 +19,33 @@ App.check_order_send_to_kitchen = App.cable.subscriptions.create('CheckOrderSend }); // alert(order_lists); - // swal({ - // title: 'Information', - // target: document.getElementById("notify_order_send_to_kitchen"), - // text: "You have to send order to kitchen
"+ - // "Could you send these orders "+order_lists+" to kitchen?", - // type: 'success', - // html: true, - // closeOnConfirm: false, - // closeOnCancel: false, - // allowOutsideClick: false - // }, function (isConfirm) { - // if(isConfirm){ - // swal.close(); - // } - // }); - $("#notify_order_send_to_kitchen_lists").text(order_lists); - $("#notify_order_send_to_kitchen").on('show.bs.modal', function(e){ - $("#notify_new_order").modal('hide'); - $("#notify_order_ready_to_delivery").modal('hide'); - }).on('shown.bs.modal', function(e){ - $("#notify_order_send_to_kitchen").focus(); - }).on('hide.bs.modal', function (e) { - $("#notify_order_send_to_kitchen").modal("hide"); - }).modal({show: true, keyboard: false, backdrop: false}); + swal({ + title: 'Information', + target: document.getElementById(shop_code+"_notify_order_send_to_kitchen"), + text: "You have to send order to kitchen
"+ + "Could you send these orders "+order_lists+" to kitchen?", + type: 'success', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function (isConfirm) { + if(isConfirm){ + swal.close(); + } + }); + // $("#notify_order_send_to_kitchen_lists").text(order_lists); + // if($("#notify_order_send_to_kitchen").hasClass("hidden")){ + // $("#notify_order_send_to_kitchen").removeClass("hidden"); + // } + // $("#notify_order_send_to_kitchen").on('show.bs.modal', function(e){ + // $("#notify_new_order").addClass("hidden"); + // $("#notify_order_ready_to_delivery").addClass("hidden"); + // }).on('shown.bs.modal', function(e){ + // $("#notify_order_send_to_kitchen").focus(); + // }).on('hide.bs.modal', function (e) { + // $("#notify_order_send_to_kitchen").addClass("hidden"); + // }).modal({show: true, keyboard: false, backdrop: false}); } } }); diff --git a/app/assets/javascripts/channels/order_reservation.js b/app/assets/javascripts/channels/order_reservation.js index 1c6c777d..468e4c31 100644 --- a/app/assets/javascripts/channels/order_reservation.js +++ b/app/assets/javascripts/channels/order_reservation.js @@ -21,9 +21,9 @@ App.order_reservation = App.cable.subscriptions.create('OrderReservationChannel' var created_at = date.getFullYear() +'-'+ (date.getMonth() >= 10? date.getMonth() : '0' + (date.getMonth() + 1)) +'-'+ (date.getDate() >=10?date.getDate() : '0'+date.getDate()); var delivery_type = ""; - if(value.delivery_type == "service"){ + if(value.provider == "food2u" || value.provider == "yangondoor2door"){ delivery_type = "DELIVERY"; - }else if(value.delivery_type == "pick_up"){ + }else if(value.provider == "pick_up"){ delivery_type = "PICK-UP"; }else{ delivery_type = "DIRECT DELIVERY"; diff --git a/app/assets/javascripts/custom.js b/app/assets/javascripts/custom.js index 94f05663..ae8b727c 100644 --- a/app/assets/javascripts/custom.js +++ b/app/assets/javascripts/custom.js @@ -54,7 +54,17 @@ $(document).ready(function() { }); $('#modal-set-slimscroll').slimScroll({ - height: height-$('#modal-slimscroll').attr('data-height'), + height: height-$('#modal-set-slimscroll').attr('data-height'), + size: '5px', + color: 'rgba(0,0,0,0.5)', + alwaysVisible: false, + borderRadius: '0', + railBorderRadius: '0', + touchScrollStep : 45 + }); + + $('#customer-info-slimscroll').slimScroll({ + height: height-$('#customer-info-slimscroll').attr('data-height'), size: '5px', color: 'rgba(0,0,0,0.5)', alwaysVisible: false, diff --git a/app/assets/javascripts/order_reservation.js b/app/assets/javascripts/order_reservation.js index 6931e68f..081aef7e 100644 --- a/app/assets/javascripts/order_reservation.js +++ b/app/assets/javascripts/order_reservation.js @@ -5,6 +5,7 @@ $(function() { $('#accepted').hide(); $('#cancel').hide(); $(".tbl_customer").hide(); + $(".order_close_cashier").hide(); $(function() { $('.first-1').click(); }); @@ -17,6 +18,7 @@ $(function() { $('#accepted').hide(); $('#cancel').hide(); $(".tbl_customer").hide(); + $(".order_close_cashier").hide(); if (type == "pending") { $(".first-1").click(); $('#accepted').text("ACCEPT"); @@ -36,6 +38,7 @@ $(function() { $('#accepted').attr("data-value","completed"); }else if(type == "processed"){ $(".fifth-1").click(); + $(".order_close_cashier").show(); // $('#accepted').hide(); // $('#cancel').hide(); } @@ -119,6 +122,12 @@ $(function() { callback_url(callback,ref_no,order_id,status,type,minutes); }); + $('#order_close_cashier').on('click',function(e){ + e.preventDefault(); // Prevent the href from redirecting directly + var linkURL = '/origami/shift/ordering/close'; + warnBeforeRedirect(linkURL); + }); + $(document).on('click','.access_number', function(event){ if(event.handled !== true) { var original_value = $('#access_code').val(); @@ -148,9 +157,39 @@ $(function() { } }); - $('button[data-dismiss="modal"]').on('click', function(){ $(this).parent().parent().parent().parent().modal('hide'); }); + // $('button[data-dismiss="modal"]').on('click', function(){ $(this).parent().parent().parent().parent().modal('hide'); }); + + // $(".new_order_close").on("click",function(){ + // var code = $(this).attr("data-value"); + // $("#"+code+"_doemal_new_order").modal("hide"); + // }); + + // $("[data-dismiss='modal']").on('click', function() { + // $('body').addClass('modal-open-fix'); + // if($('body').css("padding-right") == '15px') { + // $('body').addClass('modal-open-fix-pad'); + // } + // setTimeout(function() { + // if($('body').hasClass('modal-open-fix-pad')) { + // $('body').css('padding-right', '15px'); + // } + // $('body').addClass('modal-open').removeClass('modal-open-fix, modal-open-fix-pad'); + // }, 1000); + // }); }); +function warnBeforeRedirect(linkURL) { + swal({ + title: "Alert!", + text: "Are you sure you want to close cashier?", + type: "warning", + showCancelButton: true + }, function() { + // Redirect the user + window.location.href = linkURL; + }); +} + function check_emp_access_code(access_code,type) { var url = "/origami/check_emp_access_code/" + access_code ; $.ajax({ @@ -195,6 +234,8 @@ function refreshDetailData(){ $('#discount_amount').text("0.00"); $('#total_tax').text("0.00"); $('#grand_total').text("0.00"); + $(".tbl_customer").hide(); + $(".order_close_cashier").hide(); } //show order list @@ -282,19 +323,21 @@ function show_order_detail(url,sr_no){ $('#customer_name').text(data.customer_name); $('#phone').text(data.phone); $('#address').text(address); - $('#delivery_to').text(delivery.provider); $('#ref_no').text(data.transaction_ref); $('#callback_url').text(data.callback_url); $('#order_id').text(data.order_reservation_id); $("#trans_ref").text(data.transaction_ref); - if(delivery.delivery_type == "service"){ + if(delivery.provider == "food2u" || delivery.provider == "yangondoor2door"){ $("#delivery_info").text("(DELIVERY)"); - }else if(delivery.delivery_type == "pick_up"){ + $("#delivery_to").text("DELIVERY"); + }else if(delivery.provider == "pick_up"){ $("#delivery_info").text("(PICK-UP)"); + $("#delivery_to").text("PICK-UP"); }else{ $("#delivery_info").text("(DIRECT DELIVERY)"); + $("#delivery_to").text("DIRECT DELIVERY"); } if(data.order_remark!=null && data.order_remark!=""){ @@ -377,6 +420,18 @@ function callback_url(callback,ref_no,order_id,status,min_type,time,exptime,reas }, function () { window.location.href = '/origami/order_reservation'; }); + }else{ + swal({ + title: 'Oops', + text: data.message, + type: 'error', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function () { + window.location.href = '/origami/order_reservation'; + }); } } }); @@ -418,18 +473,36 @@ function showNewOrder(order_reservation,shop_code){ audio.play(); // },10000); - $("#new_order").text(order_reservation.order_reservation_id); - $("#new_order_date").text(requested_date); - $("#"+shop_code+"_doemal_new_order").on('show.bs.modal', function(e){ - $("#notify_new_order").modal('hide'); - $("#notify_order_send_to_kitchen").modal('hide'); - $("#notify_order_ready_to_delivery").modal('hide'); - }).on('shown.bs.modal', function(e){ - $("#"+shop_code+"_doemal_new_order").focus(); - }).on('hide.bs.modal', function (e) { - audio.pause(); - $("#"+shop_code+"_doemal_new_order").modal("hide"); - }).modal({show: true, keyboard: false, backdrop: false}); + // $("#new_order").text(order_reservation.order_reservation_id); + // $("#new_order_date").text(requested_date); + // if($("#"+shop_code+"_doemal_new_order").hasClass("hidden")){ + // $("#"+shop_code+"_doemal_new_order").removeClass("hidden"); + // } + // $("#"+shop_code+"_doemal_new_order").on('show.bs.modal', function(e){ + // $("#notify_new_order").addClass("hidden"); + // $("#notify_order_send_to_kitchen").addClass("hidden"); + // $("#notify_order_ready_to_delivery").addClass("hidden"); + // }).on('shown.bs.modal', function(e){ + // $("#"+shop_code+"_doemal_new_order").focus(); + // }).on('hide.bs.modal', function (e) { + // $("#"+shop_code+"_doemal_new_order").addClass("hidden"); + // }).modal({show: true, keyboard: false, backdrop: false}); + swal({ + title: 'Information', + target: document.getElementById(shop_code+"_notify_new_order"), + text: "You have new order "+ + ""+order_reservation.order_reservation_id+" requested for "+requested_date+"?", + type: 'success', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function (isConfirm) { + if(isConfirm){ + audio.pause(); + swal.close(); + } + }); } } diff --git a/app/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index d85a85b2..1bb257de 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -32,31 +32,31 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController def create status = false if !params[:cus_info] - render :json => { :status => false, :message => "cus_info is required!" } + result = { :status => false, :message => "cus_info is required!" } elsif !params[:requested_time] - render :json => { :status => false, :message => "requested_time is required!" } + result = { :status => false, :message => "requested_time is required!" } elsif !params[:callback_url] - render :json => { :status => false, :message => "callback_url is required!" } + result = { :status => false, :message => "callback_url is required!" } elsif !params[:reference] - render :json => { :status => false, :message => "reference is required!" } + result = { :status => false, :message => "reference is required!" } elsif !params[:order_type] - render :json => { :status => false, :message => "order_type is required!" } + result = { :status => false, :message => "order_type is required!" } elsif params[:order_type] == ORDER || params[:order_type] == ORDER_RESERVATION if !params[:order_info] - render :json => { :status => false, :message => "order_info is required!" } + result = { :status => false, :message => "order_info is required!" } else status = true end elsif params[:order_type] == RESERVATION || params[:order_type] == ORDER_RESERVATION if !params[:reservation_info] - render :json => { :status => false, :message => "reservation_info is required!" } + result = { :status => false, :message => "reservation_info is required!" } else status = true end elsif !params[:payment_info] - render :json => { :status => false, :message => "payment_info is required!" } + result = { :status => false, :message => "payment_info is required!" } elsif !params[:delivery_info] - render :json => { :status => false, :message => "delivery_info is required!" } + result = { :status => false, :message => "delivery_info is required!" } end if status == true @@ -70,16 +70,21 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController else shop_code = '' end + + result = { :status => true, :order_reservation_id => order_reservation_id, :message => "Order reservation is successfully created!" } order_reservation = OrderReservation.get_pending_orders #find(order_reservation_id) ActionCable.server.broadcast "order_reservation_channel",data: order_reservation,shop_code: shop_code - end - - if flag - render :json => { :status => true, :order_reservation_id => order_reservation_id, :message => "Order reservation is successfully created!" } else - render :json => { :status => true, :order_reservation_id => order_reservation_id, :message => "Order reservation is already existed!" } + result = { :status => true, :order_reservation_id => order_reservation_id, :message => "Order reservation is already existed!" } end end + + puts "!!! send doemal ::" + puts result + + Rails.logger.debug "send status to doemal" + Rails.logger.debug result + render :json => result end def update_status diff --git a/app/controllers/concerns/token_verification.rb b/app/controllers/concerns/token_verification.rb index 45bcd3e2..c1bce9b2 100755 --- a/app/controllers/concerns/token_verification.rb +++ b/app/controllers/concerns/token_verification.rb @@ -18,7 +18,7 @@ module TokenVerification # Rails.logger.debug "token - " + token.to_s if(options.length !=0 && options["from"] == "DOEMAL") if(ENV["SERVER_MODE"] === "cloud") - from = request.subdomain.downcase + "." + request.domain.downcase #"local" + from = request.subdomain.downcase + "." + request.domain.downcase #"local" aes = MyAesCrypt.new return aes.checkKeyForAuth(from, token) end diff --git a/app/models/my_aes_crypt.rb b/app/models/my_aes_crypt.rb index 8f3cde09..4116f2a2 100644 --- a/app/models/my_aes_crypt.rb +++ b/app/models/my_aes_crypt.rb @@ -64,7 +64,7 @@ class MyAesCrypt shop_json["data"].each do |j| if j["lookup"] == from # add [0...44] for production cloud for remove \n - if(j["value"]["key"] == token) + if(j["value"]["key"].gsub(/\s+/, "") == token) return true end end diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index cd0b7e68..84209845 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -93,9 +93,6 @@ class OrderReservation < ApplicationRecord count += 1 items_arr.push(items) } - - puts items_arr.to_json - puts "sssssssssssssssssssssss" customer_id = order.customer_id @order = Order.new @@ -125,8 +122,11 @@ class OrderReservation < ApplicationRecord update_order_reservation(order.id, @sale.sale_id, SEND_TO_KITCHEN) result = {:status=> @status, :data => @sale, :message => "send to kitchen" } - return result + else + result = {:status=> @status, :message => "No current shift open for this employee!" } end + + return result end def self.update_doemal_payment(order,current_user) @@ -178,10 +178,9 @@ class OrderReservation < ApplicationRecord end Rails.logger.debug "Doemal URL" + base_url post_url = base_url + url - - if !waiting_time.nil? + if waiting_time != "" send_params = {id: ref_no,type: min_type, waiting_time: waiting_time, status: status} - elsif !reason.nil? + elsif reason != "" send_params = {id: ref_no, status: status, reason: reason} else send_params = {id: ref_no, status: status} @@ -290,28 +289,46 @@ class OrderReservation < ApplicationRecord end def self.check_new_order + shop = Shop.find_by_id(1) + if !shop.shop_code.nil? + shop_code = shop.shop_code + else + shop_code = '' + end order_reservation = OrderReservation.where("status='new'") if order_reservation.length > 0 if ENV["SERVER_MODE"] == 'cloud' - ActionCable.server.broadcast "check_new_order_channel",data: order_reservation + ActionCable.server.broadcast "check_new_order_channel",data: order_reservation, shop_code: shop_code end end end def self.check_order_send_to_kitchen + shop = Shop.find_by_id(1) + if !shop.shop_code.nil? + shop_code = shop.shop_code + else + shop_code = '' + end order_reservation = OrderReservation.where("status='accepted' and requested_time <= '#{Time.now.utc}'") if order_reservation.length > 0 if ENV["SERVER_MODE"] == 'cloud' - ActionCable.server.broadcast "check_order_send_to_kitchen_channel",data: order_reservation + ActionCable.server.broadcast "check_order_send_to_kitchen_channel",data: order_reservation, shop_code: shop_code end end end def self.check_order_ready_to_delivery + shop = Shop.find_by_id(1) + if !shop.shop_code.nil? + shop_code = shop.shop_code + else + shop_code = '' + end order_reservation = OrderReservation.where("status='send_to_kitchen' and requested_time <= '#{Time.now.utc}'") if order_reservation.length > 0 if ENV["SERVER_MODE"] == 'cloud' - ActionCable.server.broadcast "check_order_ready_to_delivery_channel",data: order_reservation + ActionCable.server.broadcast "check_order_ready_to_delivery_channel",data: order_reservation, shop_code: shop_code end end end diff --git a/app/views/origami/order_reservation/index.html.erb b/app/views/origami/order_reservation/index.html.erb index 4fcbeffa..d2903041 100644 --- a/app/views/origami/order_reservation/index.html.erb +++ b/app/views/origami/order_reservation/index.html.erb @@ -30,7 +30,7 @@
-
-