From 1716d14df3fc9262ad05e90ea3b51bf510bd88de Mon Sep 17 00:00:00 2001 From: phyusin Date: Tue, 8 May 2018 17:28:09 +0630 Subject: [PATCH] change order reservation --- .../javascripts/channels/check_new_order.js | 21 +- .../channels/check_order_ready_to_delivery.js | 22 +- .../channels/check_order_send_to_kitchen.js | 21 +- app/assets/javascripts/order_reservation.js | 158 ++++++--- .../order_reservation_controller.rb | 20 +- .../origami/order_reservation_controller.rb | 16 +- app/controllers/settings/menus_controller.rb | 4 +- app/models/order_reservation.rb | 53 ++- .../origami/order_reservation/index.html.erb | 306 +++++++++++++----- config/locales/en.yml | 1 + config/locales/mm.yml | 1 + 11 files changed, 430 insertions(+), 193 deletions(-) diff --git a/app/assets/javascripts/channels/check_new_order.js b/app/assets/javascripts/channels/check_new_order.js index 08872705..d0061443 100644 --- a/app/assets/javascripts/channels/check_new_order.js +++ b/app/assets/javascripts/channels/check_new_order.js @@ -18,25 +18,8 @@ App.check_new_order = App.cable.subscriptions.create('CheckNewOrderChannel', { }); // alert(order_lists); - swal({ - html: true, - 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', - timer: 1000, - closeOnConfirm: false, - closeOnCancel: false, - allowOutsideClick: false - },function(isConfirm){ - if(isConfirm){ - swal.close(); - } - }); - // $("#notify_new_orderLabel").text("You have new orders."); - // $("#notify_new_orderBody").text("Are you accept or reject for these orders "+order_lists+"?"); - // $("#notify_new_order").modal({show: true, keyboard: false, backdrop: false}); + $("#notify_new_order_lists").text(order_lists); + $("#notify_new_order").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 53fa23af..d2bebadb 100644 --- a/app/assets/javascripts/channels/check_order_ready_to_delivery.js +++ b/app/assets/javascripts/channels/check_order_ready_to_delivery.js @@ -18,26 +18,8 @@ App.check_order_ready_to_delivery = App.cable.subscriptions.create('CheckOrderRe }); // alert(order_lists); - swal({ - html: true, - 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', - timer: 1000, - closeOnConfirm: false, - closeOnCancel: false, - allowOutsideClick: false - },function(isConfirm){ - if(isConfirm){ - swal.close(); - } - }); - - // $("#notify_order_ready_to_deliveryLabel").text("You have orders that are ready to deliver."); - // $("#notify_order_ready_to_deliveryBody").text("Could you ready these orders "+order_lists+" to deliver?"); - // $("#notify_order_ready_to_delivery").modal({show: true, keyboard: false, backdrop: false}); + $("#notify_order_ready_to_delivery_lists").text(order_lists); + $("#notify_order_ready_to_delivery").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 82e107ee..9b83b3c6 100644 --- a/app/assets/javascripts/channels/check_order_send_to_kitchen.js +++ b/app/assets/javascripts/channels/check_order_send_to_kitchen.js @@ -18,25 +18,8 @@ App.check_order_send_to_kitchen = App.cable.subscriptions.create('CheckOrderSend }); // alert(order_lists); - swal({ - html: true, - 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', - timer: 1000, - closeOnConfirm: false, - closeOnCancel: false, - allowOutsideClick: false - },function(isConfirm){ - if(isConfirm){ - swal.close(); - } - }); - // $("#notify_order_send_to_kitchenLabel").text("You have to send order to kitchen."); - // $("#notify_order_send_to_kitchenBody").text("Could you send these orders "+order_lists+" to kitchen?"); - // $("#notify_order_send_to_kitchen").modal({show: true, keyboard: false, backdrop: false}); + $("#notify_order_send_to_kitchen_lists").text(order_lists); + $("#notify_order_send_to_kitchen").modal({show: true, keyboard: false, backdrop: false}); } } }); diff --git a/app/assets/javascripts/order_reservation.js b/app/assets/javascripts/order_reservation.js index 942ef3cf..5ff2d0ad 100644 --- a/app/assets/javascripts/order_reservation.js +++ b/app/assets/javascripts/order_reservation.js @@ -11,6 +11,8 @@ $(function() { $(".nav-item").on("click", function(){ type = $(this).attr("data-type"); refreshDetailData(); + $('#accepted').show(); + $('#cancel').show(); if (type == "pending") { $(".first-1").click(); $('#accepted').text("ACCEPT"); @@ -27,7 +29,11 @@ $(function() { $(".fourth-1").click(); $('#accepted').text("PICK-UP"); $('#accepted').attr("data-value","completed"); - } + }else if(type == "processed"){ + $(".fifth-1").click(); + $('#accepted').hide(); + $('#cancel').hide(); + } // console.log(type); }); @@ -36,7 +42,6 @@ $(function() { $("#status").text($(this).attr("data-value")); var requested_time = $("#requested_date_time").text(); $("#requested_order_time").text(requested_time); - showTimePicker(requested_time); $("#waiting_timeModal").modal({show : true, backdrop: false, keyboard : false}); }else{ var status = $(this).attr("data-value"); @@ -48,38 +53,106 @@ $(function() { }); $("#cancel").on("click", function(){ - var status = $(this).attr("data-value"); + var order_status = $("#order_status").text(); + $("#status").text($(this).attr("data-value")); + if(order_status!="new" && order_status!= "accepted"){ + $("#AccessCodeModal").modal({show: true, backdrop: false, keyboard: false}); + }else{ + $("#rejected_reasonModal").modal({show: true, backdrop: false, keyboard: false}); + } + }); + + $(".send_status").on("click",function(){ + var status = $("#status").text(); var order_id = $('#order_id').text(); var callback = $('#callback_url').text(); var ref_no = $('#ref_no').text(); - callback_url(callback,ref_no,order_id,status); + var reason = $('#reject_reason').val(); + var approved_code = $("#approved_code").text(); + callback_url(callback,ref_no,order_id,status,"","","",reason,approved_code); }); - $("#save").on("click",function(){ - $("#waiting_timeErr").text(""); + $(".timer_type").on("click",function(){ + if($(this).hasClass("selected-item")){ + $(this).removeClass("selected-item"); + }else{ + $(this).addClass("selected-item"); + } + }); + + $(".time_interval").on("click",function(){ + var type = ''; + if($(".timer_type").hasClass("selected-item")){ + type = '+'; + } + var minutes = $(this).attr("data-value"); + // console.log(type); + // console.log($(this).attr("data-value")); + var status = $("#status").text(); var order_id = $('#order_id').text(); var ref_no = $('#ref_no').text(); var callback = $('#callback_url').text(); var requested_time = new Date($("#requested_date_time").text()); - var date_time = requested_time.getFullYear()+'-'+(requested_time.getMonth() > 10? requested_time.getMonth() : '0'+ (requested_time.getMonth() + 1))+'-'+(requested_time.getDate()> 10? requested_time.getDate() : '0' + requested_time.getDate()); - var waiting_time = new Date(date_time+' '+$("#waiting_time").val()); - // requested_time.setHours(requested_time.getHours() - 1); - // console.log(requested_time); - // console.log(date_time); - if(waiting_time.getTime() < requested_time.getTime()){ - var time_diff = (requested_time.getTime() - waiting_time.getTime()); - var expected_time = (Math.floor(time_diff) / 1000) / 60; + if(type == '+'){ + requested_time.setMinutes(requested_time.getMinutes() + minutes); }else{ - var time_diff = (waiting_time.getTime() - requested_time.getTime()); - var expected_time = (Math.floor(time_diff) / 1000) / 60; - // $("#waiting_time").val(""); - // $("#waiting_timeErr").text("Expected waiting time is greater than requested time!"); + requested_time.setMinutes(requested_time.getMinutes() - minutes); + } + console.log(requested_time); + callback_url(callback,ref_no,order_id,status,type,minutes,requested_time); + }); + + $(document).on('click','.access_number', function(event){ + if(event.handled !== true) { + var original_value = $('#access_code').val(); + var input_type = $(this).attr("data-type"); + + switch (input_type) { + case 'num': + var input_value = $(this).attr("data-value"); + if (original_value){ + $('#access_code').val(original_value + input_value); + }else{ + $('#access_code').val(original_value + input_value); + } + break; + case 'ok': + var type = $(this).attr("data-action"); + code = $('#access_code').val(); + check_emp_access_code(code,type) + break; + case 'clr': + $('#access_code').val(""); + break; + } + event.handled = true; + } else { + return false; } - callback_url(callback,ref_no,order_id,status,expected_time,waiting_time); }); }); +function check_emp_access_code(access_code,type) { + var url = "/origami/check_emp_access_code/" + access_code ; + $.ajax({ + type: 'POST', + url: url, + data: {}, + success: function (result) { + console.log(result) + if (result.status == true) { + // createAccessCode(code); + $("#approved_code").text(code); + $('#AccessCodeModal').modal('hide'); + $("#rejected_reasonModal").modal({show: true, backdrop: false, keyboard: false}); + }else{ + swal("Opps",result.message,"warning") + } + } + }); +} + function customTableClick(){ $(".custom-table .custom-tr").on("click", function(){ $(".custom-tr").removeClass("tr-active"); @@ -96,6 +169,7 @@ function refreshDetailData(){ $("#sr_number").text(""); $("#delivery_info").text(""); $("#contact_info").text(""); + $("#invoice_no").text(""); $('.summary-items').html(""); $('#sub_total').text("0.00"); $('#delivery_fee').text("0.00"); @@ -184,6 +258,7 @@ function show_order_detail(url,sr_no){ $('#callback_url').text(data.callback_url); $('#order_id').text(data.order_reservation_id); + $("#trans_ref").text(data.transaction_ref); if(delivery.delivery_type == "service"){ $("#delivery_info").text("(DELIVERY)"); }else if(delivery.delivery_type == "pick_up"){ @@ -197,11 +272,13 @@ function show_order_detail(url,sr_no){ }else if(data.reservation_remark!=null && data.reservation_remark!=""){ $("#order_remark").text(data.reservation_remark); } + $("#sr_number").text("NO."+sr_no); + $("#order_status").text(data.status); if (data["receipt_no"]) { - $("#contact_info").text(data["receipt_no"]); + $("#invoice_no").text(data["receipt_no"]); }else{ - $("#contact_info").text(data["order_reservation_id"]); + $("#invoice_no").text(data["order_reservation_id"]); } } @@ -211,40 +288,42 @@ function show_order_detail(url,sr_no){ //end Ajax } -function showTimePicker(requested_time){ - // var date = new Date(requested_time); - // var time = timeFormat(date); - // console.log(time); - $('.timepicker').bootstrapMaterialDatePicker({ - format: 'HH:mm', - useSeconds: false, - clearButton: true, - date: false - }); -} -function callback_url(callback,ref_no,order_id,status,time,exptime){ +function callback_url(callback,ref_no,order_id,status,min_type,time,exptime,reason,approved_code){ var url = 'order_reservation/update'; var post_url = "order_reservation/send_status"; var waiting_time = ""; + var expected_time = ""; + var type = ""; + var reject_reason = ""; + var access_code = ""; if(time!=undefined && time!=""){ waiting_time = time; } - var expected_time = ""; if(exptime!=undefined && exptime!=""){ expected_time = exptime; } + if(min_type!=undefined && min_type!=""){ + type = min_type; + } + if(reason!=undefined && reason!=""){ + reject_reason = reason; + } + if(approved_code!=undefined && approved_code!=""){ + access_code = approved_code; + } + $.ajax({ type: "POST", url: post_url, - data: {url: callback, ref_no: ref_no, status: status, waiting_time: waiting_time}, + data: {url: callback, ref_no: ref_no, status: status, waiting_time: waiting_time, min_type: type, reason: reject_reason}, dataType: "json", success: function(data) { if(data.status){ $.ajax({ type: "POST", url: url, - data: {'order_id': order_id, 'status': status, 'expected_time' : expected_time}, + data: {order_id: order_id, status: status, expected_time: expected_time, remark: reason, access_code: access_code}, dataType: "json", success: function(data) { if (data.status) { @@ -294,8 +373,13 @@ function showNewOrder(order_reservation){ var date = new Date(order_reservation.requested_time); var time = timeFormat(date); var requested_date = date.getFullYear() + '-' + (date.getMonth() > 10? date.getMonth() : '0' + (date.getMonth() + 1)) +'-'+ (date.getDate() > 10? date.getDate() : '0' + date.getDate()) +' '+time; + //audio play var audio = new Audio('/beep-07.wav'); // define your audio - audio.play(); + // setTimeout(function(){ + // audio.loop = true; + audio.play(); + // },10000); + swal({ html: true, title: 'Information', diff --git a/app/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index f34c0f6f..84ee8676 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -6,23 +6,27 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController def check_customer customer_id = 0 + status = false if !params[:name] render :json => { :status => false, :message => "name is required!" } elsif !params[:email] render :json => { :status => false, :message => "email is required!" } elsif !params[:membership_id] render :json => { :status => false, :message => "membership_id is required!" } - end - - check_customer = Customer.find_by_email_and_membership_id(params[:email],params[:membership_id]) - if !check_customer.nil? - customer_id = check_customer.customer_id else - customer = Customer.addCustomer(params) - customer_id = customer.id + status = true end - render :json => { :status => true, :data => { :customer_id => customer_id} } + if status + check_customer = Customer.find_by_email_and_membership_id(params[:email],params[:membership_id]) + if !check_customer.nil? + customer_id = check_customer.customer_id + else + customer = Customer.addCustomer(params) + customer_id = customer.id + end + render :json => { :status => true, :data => { :customer_id => customer_id} } + end end def create diff --git a/app/controllers/origami/order_reservation_controller.rb b/app/controllers/origami/order_reservation_controller.rb index 32f0e63d..42140f90 100644 --- a/app/controllers/origami/order_reservation_controller.rb +++ b/app/controllers/origami/order_reservation_controller.rb @@ -8,7 +8,9 @@ class Origami::OrderReservationController < BaseOrigamiController def update @id = params[:order_id] @status = params[:status] - expected_waiting_time = params[:expected_time] + expected_waiting_time = params[:expected_time] + remark = params[:remark] + access_code = params[:access_code] @order_reservation = OrderReservation.find(@id) status = true @@ -23,8 +25,8 @@ class Origami::OrderReservationController < BaseOrigamiController elsif @status == "completed" result = OrderReservation.update_doemal_payment(@order_reservation,current_user) else - if @status == "cancel" - OrderReservation.update_order_reservation(@id, nil, "cancelled") + if @status == "rejected" + OrderReservation.update_order_reservation(@id, nil, "rejected",nil,remark,access_code,current_user) result = {:status=> true, :message => "rejected" } else OrderReservation.update_order_reservation(@id, nil, "accepted", expected_waiting_time) @@ -46,13 +48,7 @@ class Origami::OrderReservationController < BaseOrigamiController end def send_status - if params[:status] == "cancel" - status = "rejected" - else - status = params[:status] - end - - response = OrderReservation.send_status_to_ordering(params[:url],params[:ref_no],status,params[:waiting_time]) + response = OrderReservation.send_status_to_ordering(params[:url],params[:ref_no],params[:status],params[:waiting_time],params[:min_type],params[:reason]) render :json => response end diff --git a/app/controllers/settings/menus_controller.rb b/app/controllers/settings/menus_controller.rb index f73226f4..39b9b021 100755 --- a/app/controllers/settings/menus_controller.rb +++ b/app/controllers/settings/menus_controller.rb @@ -195,7 +195,9 @@ class Settings::MenusController < ApplicationController # end end - file_path = "public/menus/" + menu.name + ".xlsx" + directory_name = "public/menus" + Dir.mkdir(directory_name) unless File.exists?(directory_name) + file_path = directory_name +"/" + menu.name + ".xlsx" p.serialize(file_path) render :json => { status: true, path: file_path } end diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index 8ea716c2..e1f7c209 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -138,7 +138,7 @@ class OrderReservation < ApplicationRecord end end - def self.send_status_to_ordering(url,ref_no,status,waiting_time=nil) + def self.send_status_to_ordering(url,ref_no,status,waiting_time=nil,min_type=nil,reason=nil) base_url = 'https://api.doemal.com' token = '3T-tnlYtFJ-5Z1vY6XQqxQ' order_reservation = Lookup.collection_of("order_reservation") @@ -158,7 +158,9 @@ class OrderReservation < ApplicationRecord post_url = base_url + url if !waiting_time.nil? - send_params = {id: ref_no, waiting_time: waiting_time, status: status} + send_params = {id: ref_no,type: min_type, waiting_time: waiting_time, status: status} + elsif !reason.nil? + send_params = {id: ref_no, status: status, reason: reason} else send_params = {id: ref_no, status: status} end @@ -185,7 +187,7 @@ class OrderReservation < ApplicationRecord return response end - def self.update_order_reservation(id, sale_id, status, expected_waiting_time=nil) + def self.update_order_reservation(id, sale_id, status, expected_waiting_time=nil, remark=nil, access_code=nil, current_user=nil) order_reservation = OrderReservation.find(id) if sale_id.present? order_reservation.sale_id = sale_id @@ -194,7 +196,52 @@ class OrderReservation < ApplicationRecord order_reservation.expected_waiting_time = DateTime.parse(expected_waiting_time).utc end order_reservation.status = status + if !remark.nil? + order_reservation.order_remark = remark + end order_reservation.save + + if !order_reservation.sale_id.nil? && status == "rejected" + void_doemal_payment(order_reservation.sale_id, remark, access_code, current_user) + end + end + + def self.void_doemal_payment(sale_id, remark, access_code, current_user) + if Sale.exists?(sale_id) + sale = Sale.find_by_sale_id(sale_id) + # update count for shift sale + if(sale.sale_status == "completed") + if sale.shift_sale_id != nil + shift = ShiftSale.find(sale.shift_sale_id) + shift.calculate(sale_id, "void") + end + else + # void before sale payment complete + if sale.shift_sale_id != nil + shift = ShiftSale.find(sale.shift_sale_id) + shift.total_void = shift.total_void + sale.grand_total + shift.save + end + end + + sale.payment_status = 'void' + sale.sale_status = 'void' + sale.save + + # FOr Sale Audit + action_by = current_user.name + approved_by = Employee.find_by_emp_id(access_code) + # remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}" + sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, approved_by.name,remark,"SALEVOID" ) + + # update complete order items in oqs + SaleOrder.where("sale_id = '#{ sale_id }'").find_each do |sodr| + AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi| + aoi.delivery_status = 1 + aoi.save + end + end + end end def self.get_count_on_order diff --git a/app/views/origami/order_reservation/index.html.erb b/app/views/origami/order_reservation/index.html.erb index 150c4ee9..5322206e 100644 --- a/app/views/origami/order_reservation/index.html.erb +++ b/app/views/origami/order_reservation/index.html.erb @@ -1,48 +1,62 @@ <%= stylesheet_link_tag 'order_reservation', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'order_reservation', 'data-turbolinks-track': 'reload' %>
+ + <% + pending_count = 0 + accepted_count = 0 + delivered_count = 0 + completed_count = 0 + processed_count = 0 + %> + <% if !@count_on_order.nil? + @count_on_order.each do |count_order| + if count_order.status == "new" + pending_count = count_order.count + elsif count_order.status == "accepted" + accepted_count = count_order.count + elsif count_order.status == "send_to_kitchen" + delivered_count = count_order.count + elsif count_order.status == "ready_to_delivery" + completed_count = count_order.count + elsif count_order.status == "delivered" + processed_count = count_order.count + end + end + end %> + + +
+
+ +
+
@@ -230,7 +286,11 @@ - + + + + + @@ -296,7 +356,7 @@ - @@ -321,7 +381,7 @@ -
+
@@ -336,8 +396,8 @@ + + +
- NAME
- + REF.
+
REQUESTED TIME
@@ -346,14 +406,20 @@
- PHONE
- + NAME
+
EXPECTED TIME
+ PHONE
+ +
ADDRESS
@@ -391,37 +457,41 @@ - - - + -
+ + + + + diff --git a/config/locales/en.yml b/config/locales/en.yml index 45e3d3fb..63e45b92 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -79,6 +79,7 @@ en: processing: "Processing" delivering: "Delivering" completed: "Completed" + processed: "Processed" views: btn: diff --git a/config/locales/mm.yml b/config/locales/mm.yml index 6c0d36a1..f6f353e2 100644 --- a/config/locales/mm.yml +++ b/config/locales/mm.yml @@ -74,6 +74,7 @@ mm: processing: "Processing" delivering: "Delivering" completed: "Completed" + processed: "Processed" views: btn: