From 39264db517759f9afc7430d45c646fe5837dad04 Mon Sep 17 00:00:00 2001 From: San Wai Lwin Date: Fri, 4 May 2018 09:52:52 +0630 Subject: [PATCH 1/3] Edit Waste and Spoil report showing by menu category,sorting by menu category, product name Qty and UI change --- app/models/sale.rb | 14 +- .../reports/waste_and_spoilage/index.html.erb | 126 +++++++++++------- 2 files changed, 87 insertions(+), 53 deletions(-) diff --git a/app/models/sale.rb b/app/models/sale.rb index 522fcd62..1cd15aec 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -1139,8 +1139,18 @@ def self.get_wastes_and_spoilages(from,to,status) else type = "and sales.sale_status = 'waste'" end - query = Sale.all.where("sales.receipt_date between ? and ? #{type}",from,to) - .group("sales.receipt_no") + # query = Sale.all.where("sales.receipt_date between ? and ? #{type}",from,to) + # .group("sales.receipt_no") + # sales.receipt_no,menu_categories.id,sale_items.item_instance_code + + query = Sale.select("sales.sale_id,sales.receipt_no,sales.created_at,sales.total_amount,sales.grand_total,sales.rounding_adjustment,sales.shift_sale_id,sale_items.product_name,sale_items.product_code,sale_items.item_instance_code,sale_items.qty,sale_items.price,sale_items.unit_price,menu_categories.name") + .joins("JOIN sale_items ON sales.sale_id = sale_items.sale_id" + + " JOIN menu_item_instances ON sale_items.item_instance_code = menu_item_instances.item_instance_code" + + " JOIN menu_items ON menu_item_instances.menu_item_id = menu_items.id" + + " JOIN menu_categories ON menu_items.menu_category_id = menu_categories.id") + .where("sales.receipt_date between ? and ? #{type}",from,to) + .group("sales.receipt_no,menu_categories.id,sale_items.item_instance_code") + .order("sales.sale_id,menu_categories.name,sale_items.product_name") end # def self.get_separate_tax(from,to,payment_method=nil) diff --git a/app/views/reports/waste_and_spoilage/index.html.erb b/app/views/reports/waste_and_spoilage/index.html.erb index f74f99e0..27831a90 100755 --- a/app/views/reports/waste_and_spoilage/index.html.erb +++ b/app/views/reports/waste_and_spoilage/index.html.erb @@ -1,12 +1,12 @@
@@ -20,52 +20,76 @@
-
Report For <%= @sale_type? @sale_type : 'Waste' %>
+
Report For <%= @sale_type? @sale_type : 'Waste' %>
+ <% receipt_arr = Array.new %> + <% menu_cat_arr = Array.new %> + <% footer_arr = Array.new %> + <% count = 0 %> + <% waste_and_spoil_item_count = 0%> + <% @sale_data.each do |sale| %> - <% waste_and_spoil_item_count = 0%> - - - - - - - - - - - - - - - - - <% sale.sale_items.each do |item| %> - <% if !item.item_instance_code.nil?%> - <% waste_and_spoil_item_count += item.qty.to_i%> - - - - - - - - <% end %> + <% if !receipt_arr.include?(sale.receipt_no) %> + + + + + + + + + + + + + + + + + <% receipt_arr.push(sale.receipt_no) %> + <% menu_cat_arr.clear %> + <% count = 0 %> + <% end %> + + + <% if !sale.item_instance_code.nil?%> + <% waste_and_spoil_item_count += sale.qty.to_i %> + + <% if !menu_cat_arr.include?(sale.name) %> + + <% menu_cat_arr.push(sale.name) %> + <% else %> + + <% end %> + + + + + + <% end %> - - - - - - - + + <% count = count + 1 %> + <% if sale.sale_items.count == count %> + + + + + + + + <% footer_arr.push(sale.sale_id) %> + <% end %> + <% end %>
- Receipt No :<%= sale.receipt_no %> - Date : <%= sale.created_at.utc.getlocal.strftime("%e,%b %Y %I:%M %p") %>
Item NameItem CodeQtyPriceTotal Price
<%= item.product_name %><%= item.product_code %><%= item.qty %><%= item.price %><%= item.price %>
 
+ Receipt No :<%= sale.receipt_no %> + Date : <%= sale.created_at.utc.getlocal.strftime("%e,%b %Y %I:%M %p") %>
Menu CategoryItem NameItem CodeQtyPriceTotal Price
<%= sale.name %> <%= sale.product_name %><%= sale.product_code %><%= sale.qty.to_i %><%= sale.unit_price %><%= sale.price %>
Total Qty: - <%= waste_and_spoil_item_count %> - Grand Total: - - <%= sale.grand_total %> - -
Total Qty: + + <%= waste_and_spoil_item_count %> + <% waste_and_spoil_item_count = 0%> + Grand Total: + + <%= sale.grand_total %> + +
From 084bf7eb1b68c284660d7984717aaf467cab4735 Mon Sep 17 00:00:00 2001 From: San Wai Lwin Date: Fri, 4 May 2018 10:12:28 +0630 Subject: [PATCH 2/3] remove comment data --- app/assets/javascripts/addorder.js | 3 +- .../javascripts/channels/check_new_order.js | 40 + .../channels/check_order_ready_to_delivery.js | 40 + .../channels/check_order_send_to_kitchen.js | 40 + .../javascripts/channels/order_reservation.js | 31 +- app/assets/javascripts/order_reservation.js | 466 +++++---- app/assets/javascripts/origami.js | 40 + app/assets/stylesheets/origami.scss | 13 + app/channels/check_new_order_channel.rb | 10 + .../check_order_ready_to_delivery_channel.rb | 10 + .../check_order_send_to_kitchen_channel.rb | 10 + .../order_reservation_controller.rb | 3 +- app/controllers/base_origami_controller.rb | 5 +- app/controllers/origami/home_controller.rb | 12 + .../origami/moveroom_controller.rb | 2 + .../origami/movetable_controller.rb | 2 + .../origami/payments_controller.rb | 3 +- .../origami/pending_order_controller.rb | 26 +- .../origami/sale_edit_controller.rb | 16 +- app/controllers/origami/void_controller.rb | 4 +- .../origami/waste_spoile_controller.rb | 6 +- app/models/ability.rb | 12 + app/models/menu_category.rb | 13 +- app/models/order_reservation.rb | 31 +- app/models/sale.rb | 11 +- app/pdf/receipt_bill_pdf.rb | 2 +- app/views/origami/addorders/detail.html.erb | 977 ++++++++++-------- app/views/origami/home/show.html.erb | 88 +- .../origami/moveroom/move_dining.html.erb | 4 + .../origami/movetable/move_dining.html.erb | 4 + .../origami/order_reservation/index.html.erb | 16 +- app/views/origami/payments/show.html.erb | 316 +++--- .../pending_order/completed_sale.html.erb | 207 ++++ .../origami/pending_order/index.html.erb | 67 +- app/views/origami/pending_order/show.html.erb | 299 +++--- app/views/origami/sale_edit/edit.html.erb | 8 +- config/routes.rb | 6 + config/schedule.rb | 12 + 38 files changed, 1824 insertions(+), 1031 deletions(-) create mode 100644 app/assets/javascripts/channels/check_new_order.js create mode 100644 app/assets/javascripts/channels/check_order_ready_to_delivery.js create mode 100644 app/assets/javascripts/channels/check_order_send_to_kitchen.js create mode 100644 app/channels/check_new_order_channel.rb create mode 100644 app/channels/check_order_ready_to_delivery_channel.rb create mode 100644 app/channels/check_order_send_to_kitchen_channel.rb mode change 100755 => 100644 app/views/origami/addorders/detail.html.erb create mode 100644 app/views/origami/pending_order/completed_sale.html.erb diff --git a/app/assets/javascripts/addorder.js b/app/assets/javascripts/addorder.js index 6203d513..0c4363db 100755 --- a/app/assets/javascripts/addorder.js +++ b/app/assets/javascripts/addorder.js @@ -834,7 +834,6 @@ $(function() { option_name = ' '; data_option = '[]'; } -console.log(d_option) var rowCount = $('.summary-items tbody tr').length+1; var item_row = $('.summary-items tbody tr'); @@ -842,7 +841,7 @@ console.log(d_option) item_code = $(item_row[i]).attr('data-code'); instance_code = $(item_row[i]).attr('data-instance-code'); r_option = $(item_row[i]).attr('data-opt'); - console.log(r_option) + if (item_code == data.attr('data-item-code') && instance_code == data.attr('data-instance-code')&&r_option == d_option) { if (qty > 1) { qty = parseInt($(item_row[i]).children('#item_qty').text()) + qty; diff --git a/app/assets/javascripts/channels/check_new_order.js b/app/assets/javascripts/channels/check_new_order.js new file mode 100644 index 00000000..5bd64013 --- /dev/null +++ b/app/assets/javascripts/channels/check_new_order.js @@ -0,0 +1,40 @@ +App.check_new_order = App.cable.subscriptions.create('CheckNewOrderChannel', { + connected: function() {}, + + disconnected: function() {}, + + received: function(data) { + var order = data.data; + if(order.length > 0){ + var order_lists = ""; + $.each(order, function(key, value){ + if(key==0){ + order_lists = value.order_reservation_id; + }else if(key == (order.length - 1)){ + order_lists += ' and ' + value.order_reservation_id; + }else{ + order_lists += ', ' + value.order_reservation_id; + } + }); + + // 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(); + } + }); + } + } +}); + diff --git a/app/assets/javascripts/channels/check_order_ready_to_delivery.js b/app/assets/javascripts/channels/check_order_ready_to_delivery.js new file mode 100644 index 00000000..84dd1982 --- /dev/null +++ b/app/assets/javascripts/channels/check_order_ready_to_delivery.js @@ -0,0 +1,40 @@ +App.check_order_ready_to_delivery = App.cable.subscriptions.create('CheckOrderReadyToDeliveryChannel', { + connected: function() {}, + + disconnected: function() {}, + + received: function(data) { + var order = data.data; + if(order.length > 0){ + var order_lists = ""; + $.each(order, function(key, value){ + if(key==0){ + order_lists = value.order_reservation_id; + }else if(key == (order.length - 1)){ + order_lists += ' and ' + value.order_reservation_id; + }else{ + order_lists += ', ' + value.order_reservation_id; + } + }); + + // 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(); + } + }); + } + } +}); + diff --git a/app/assets/javascripts/channels/check_order_send_to_kitchen.js b/app/assets/javascripts/channels/check_order_send_to_kitchen.js new file mode 100644 index 00000000..6727dbdb --- /dev/null +++ b/app/assets/javascripts/channels/check_order_send_to_kitchen.js @@ -0,0 +1,40 @@ +App.check_order_send_to_kitchen = App.cable.subscriptions.create('CheckOrderSendToKitchenChannel', { + connected: function() {}, + + disconnected: function() {}, + + received: function(data) { + var order = data.data; + if(order.length > 0){ + var order_lists = ""; + $.each(order, function(key, value){ + if(key==0){ + order_lists = value.order_reservation_id; + }else if(key == (order.length - 1)){ + order_lists += ' and ' + value.order_reservation_id; + }else{ + order_lists += ', ' + value.order_reservation_id; + } + }); + + // 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(); + } + }); + } + } +}); + diff --git a/app/assets/javascripts/channels/order_reservation.js b/app/assets/javascripts/channels/order_reservation.js index 0a3ef37c..68da8d87 100644 --- a/app/assets/javascripts/channels/order_reservation.js +++ b/app/assets/javascripts/channels/order_reservation.js @@ -1,6 +1,4 @@ -App.checkin = App.cable.subscriptions.create('OrderReservationChannel', { -// App.messages = App.cable.subscriptions.create('MessagesChannel', { - +App.order_reservation = App.cable.subscriptions.create('OrderReservationChannel', { connected: function() {}, disconnected: function() {}, @@ -9,27 +7,28 @@ App.checkin = App.cable.subscriptions.create('OrderReservationChannel', { var order = data.data; if(order.length > 0){ $('.order_reserve_cable tbody').html(""); + $(".nav-item.red > a > p.num").text(order.length); $.each(order, function(key,value){ + var active_class = ""; + if(key==0){ + active_class = "tr-active"; + showNewOrder(order[key]); + } var rowCount = key+1; var date = new Date(value.created_at); - var deliveries = value["delivery"]; - var isPM = date.getHours() >= 12; - var isMidday = date.getHours() == 12; - var time = [date.getHours() - (isPM && !isMidday ? 12 : 0), - date.getMinutes() || '00'].join(':') + - (isPM ? ' PM' : 'AM'); - var created_at = date.getFullYear() +'-'+ (date.getMonth() > 10? date.getMonth() : '0' + (date.getMonth() + 1)) +'-'+ date.getDate(); + var time = timeFormat(date); + 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(deliveries.delivery_type == "service"){ + if(value.delivery_type == "service"){ delivery_type = "DELIVERY"; - }else if(deliveries.delivery_type == "pick_up"){ + }else if(value.delivery_type == "pick_up"){ delivery_type = "PICK-UP"; }else{ delivery_type = "DIRECT DELIVERY"; } - row = '' + row = '' +''+rowCount +'' +''+created_at @@ -41,13 +40,13 @@ App.checkin = App.cable.subscriptions.create('OrderReservationChannel', { +'' +''+ delivery_type +'' +'' - +' ' + +' '; - $('.order_reserve_cable tbody').append(row); + $('.custom-table.order_reserve_cable tbody').append(row); }); } - + customTableClick(); } }); diff --git a/app/assets/javascripts/order_reservation.js b/app/assets/javascripts/order_reservation.js index b99dad8d..c60accdf 100644 --- a/app/assets/javascripts/order_reservation.js +++ b/app/assets/javascripts/order_reservation.js @@ -1,12 +1,19 @@ $(function() { - + $("#discount").hide(); + $(".expected_time").hide(); + $(function() { + $('.first-1').click(); + }); + + customTableClick(); + $(".nav-item").on("click", function(){ type = $(this).attr("data-type"); refreshDetailData(); if (type == "pending") { $(".first-1").click(); - $('#accepted').text("Accepted"); + $('#accepted').text("ACCEPT"); $('#accepted').attr("data-value","accepted"); }else if(type == "processing"){ $(".second-1").click(); @@ -24,152 +31,19 @@ $(function() { // console.log(type); }); - $(function(){ - $('.first-1').click(); - }); - - $(".custom-tr").on("click", function(){ - $(".custom-tr").removeClass("tr-active"); - $(this).addClass("tr-active"); - var order_id = $(this).attr("data-id"); - var sr_no = $(this).attr("data-sr-no"); - var url = "order_reservation/get_order/"+order_id; - show_order_detail(url,sr_no); - }); - - function refreshDetailData(){ - $('#requested_date_time').text(""); - $("#sr_number").text(""); - $("#delivery_info").text(""); - $("#contact_info").text(""); - $('.summary-items').html(""); - $('#sub_total').text("0.00"); - $('#delivery_fee').text("0.00"); - $('#total_charges').text("0.00"); - $('#discount_amount').text("0.00"); - $('#total_tax').text("0.00"); - $('#grand_total').text("0.00"); - } - - //show order list - function show_order_detail(url,sr_no){ - $('.summary-items').html(""); - //Start Ajax - $.ajax({ - type: "GET", - url: url, - data: {}, - dataType: "json", - success: function(data) { - // console.log(data); - var delivery = data["delivery"]; - var items = data["order_items"]; - var item_list = $('.summary-items'); - - var newDate = new Date(data.requested_time); - var isPM = newDate.getHours() >= 12; - var isMidday = newDate.getHours() == 12; - var time = [newDate.getHours() - (isPM && !isMidday ? 12 : 0), - newDate.getMinutes() || '00'].join(':') + - (isPM ? ' PM' : 'AM'); - var requested_date = newDate.getFullYear() + '-' + (newDate.getMonth() > 10? newDate.getMonth() : '0' + (newDate.getMonth() + 1)) +'-'+ (newDate.getDate() > 10? newDate.getDate() : '0' + newDate.getDate()) +' '+time; - - if((data.expected_waiting_time!=undefined) && (data.expected_waiting_time!=null)){ - var expDate = new Date(data.expected_waiting_time); - var isPM = expDate.getHours() >= 12; - var isMidday = expDate.getHours() == 12; - var exptime = [expDate.getHours() - (isPM && !isMidday ? 12 : 0), - expDate.getMinutes() || '00'].join(':') + - (isPM ? ' PM' : 'AM'); - var expected_time = expDate.getFullYear() + '-' + (expDate.getMonth() > 10? expDate.getMonth() : '0' + (expDate.getMonth() + 1)) +'-'+ (expDate.getDate() > 10? expDate.getDate() : '0' + expDate.getDate()) +' '+exptime; - $('.expected_time').show(); - $('#expected_time').text(expected_time? expected_time : ''); - }else{ - $('.expected_time').hide(); - $('#expected_time').text(''); - } - - item_list.empty(); - - if(items!=undefined && items!=""){ - if(items.length > 0){ - for(var i in items) { - var item_price = 0; - if(items[i].price > 0){ - item_price = items[i].price; - }else{ - item_price = items[i].unit_price; - } - var total = items[i].qty * item_price; - row = '' - +''+items[i].item_name - +'
'+items[i].qty+ ' X'+items[i].unit_price+'' - +'' - +''+ total +'' - +''; - $('.summary-items').append(row); - } - - if(data.discount_amount > 0){ - $("#discount").show(); - } - - $('#requested_date_time').text(requested_date); - $('#sub_total').text(data.total_amount); - $('#delivery_fee').text((parseFloat(delivery.delivery_fee) > 0)? delivery.delivery_fee : '0.0'); - $('#total_charges').text((parseFloat(data.convenience_charge) > 0)? data.convenience_charge : '0.0'); - $('#discount_amount').text((parseFloat(data.discount_amount) > 0)? data.discount_amount : '0.0'); - $('#total_tax').text(data.total_tax); - $('#grand_total').text(data.grand_total); - - var address = delivery.address; - if(delivery.township != null && delivery.township!=""){ - address += ', ' +delivery.township; - }else if(delivery.direction_address!=null && delivery.direction_address!=""){ - address += ", (" +delivery.direction_address+")"; - } - $('#requested_time').text(requested_date); - $('#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); - - if(delivery.delivery_type == "service"){ - $("#delivery_info").text("(DELIVERY)"); - }else if(delivery.delivery_type == "pick_up"){ - $("#delivery_info").text("(PICK-UP)"); - }else{ - $("#delivery_info").text("(DIRECT DELIVERY)"); - } - - if(data.order_remark!=null && data.order_remark!=""){ - $("#order_remark").text(data.order_remark); - }else if(data.reservation_remark!=null && data.reservation_remark!=""){ - $("#order_remark").text(data.reservation_remark); - } - $("#sr_number").text("NO."+sr_no); - if (data["receipt_no"]) { - $("#contact_info").text(data["receipt_no"]); - }else{ - $("#contact_info").text(data["order_reservation_id"]); - } - - } - } - } - }); - //end Ajax - } - $("#accepted").on("click", function(){ - 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}); + if($(this).text().trim() == "ACCEPT"){ + 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"); + 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); + } }); $("#cancel").on("click", function(){ @@ -180,78 +54,6 @@ $(function() { callback_url(callback,ref_no,order_id,status); }); - function showTimePicker(requested_time){ - // var date = new Date(requested_time); - // var isPM = date.getHours() >= 12; - // var isMidday = date.getHours() == 12; - // var time = [date.getHours() - (isPM && !isMidday ? 12 : 0), - // date.getMinutes() || '00'].join(':') + - // (isPM ? 'pm' : 'am'); - // 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){ - var url = 'order_reservation/update'; - var post_url = "order_reservation/send_status"; - var waiting_time = ""; - if(time!=undefined && time!=""){ - waiting_time = time; - } - var expected_time = ""; - if(exptime!=undefined && exptime!=""){ - expected_time = exptime; - } - $.ajax({ - type: "POST", - url: post_url, - data: {url: callback, ref_no: ref_no, status: status, waiting_time: waiting_time}, - dataType: "json", - success: function(data) { - if(data.status){ - $.ajax({ - type: "POST", - url: url, - data: {'order_id': order_id, 'status': status, 'expected_time' : expected_time}, - dataType: "json", - success: function(data) { - if (data.status) { - swal({ - title: 'Information', - text: "Order has been "+data.message, - type: 'success', - html: true, - closeOnConfirm: false, - closeOnCancel: false, - allowOutsideClick: false - }, 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'; - }); - } - } - }); - } - $("#save").on("click",function(){ $("#waiting_timeErr").text(""); var status = $("#status").text(); @@ -271,7 +73,231 @@ $(function() { $("#waiting_time").val(""); $("#waiting_timeErr").text("Expected waiting time is greater than requested time!"); } - }); }); +function customTableClick(){ + $(".custom-table .custom-tr").on("click", function(){ + $(".custom-tr").removeClass("tr-active"); + $(this).addClass("tr-active"); + var order_id = $(this).attr("data-id"); + var sr_no = $(this).attr("data-sr-no"); + var url = "order_reservation/get_order/"+order_id; + show_order_detail(url,sr_no); + }); +} + +function refreshDetailData(){ + $('#requested_date_time').text(""); + $("#sr_number").text(""); + $("#delivery_info").text(""); + $("#contact_info").text(""); + $('.summary-items').html(""); + $('#sub_total').text("0.00"); + $('#delivery_fee').text("0.00"); + $('#total_charges').text("0.00"); + $('#discount_amount').text("0.00"); + $('#total_tax').text("0.00"); + $('#grand_total').text("0.00"); +} + +//show order list +function show_order_detail(url,sr_no){ + $('.summary-items').html(""); + //Start Ajax + $.ajax({ + type: "GET", + url: url, + data: {}, + dataType: "json", + success: function(data) { + // console.log(data); + var delivery = data["delivery"]; + var items = data["order_items"]; + var item_list = $('.summary-items'); + + var newDate = new Date(data.requested_time); + var time = timeFormat(newDate); + var requested_date = newDate.getFullYear() + '-' + (newDate.getMonth() > 10? newDate.getMonth() : '0' + (newDate.getMonth() + 1)) +'-'+ (newDate.getDate() > 10? newDate.getDate() : '0' + newDate.getDate()) +' '+time; + + if((data.expected_waiting_time!=undefined) && (data.expected_waiting_time!=null)){ + var expDate = new Date(data.expected_waiting_time); + var exptime = timeFormat(expDate); + var expected_time = expDate.getFullYear() + '-' + (expDate.getMonth() > 10? expDate.getMonth() : '0' + (expDate.getMonth() + 1)) +'-'+ (expDate.getDate() > 10? expDate.getDate() : '0' + expDate.getDate()) +' '+exptime; + $('.expected_time').show(); + $('#expected_time').text(expected_time? expected_time : ''); + }else{ + $('.expected_time').hide(); + $('#expected_time').text(''); + } + + item_list.empty(); + + if(items!=undefined && items!=""){ + if(items.length > 0){ + for(var i in items) { + var item_price = 0; + if(items[i].price > 0){ + item_price = items[i].price; + }else{ + item_price = items[i].unit_price; + } + var total = items[i].qty * item_price; + row = '' + +''+items[i].item_name + +'
'+items[i].qty+ ' X'+items[i].unit_price+'' + +'' + +''+ total +'' + +''; + $('.summary-items').append(row); + } + + if(data.discount_amount > 0){ + $("#discount").show(); + } + + $('#requested_date_time').text(requested_date); + $('#sub_total').text(data.total_amount); + $('#delivery_fee').text((parseFloat(delivery.delivery_fee) > 0)? delivery.delivery_fee : '0.0'); + $('#total_charges').text((parseFloat(data.convenience_charge) > 0)? data.convenience_charge : '0.0'); + $('#discount_amount').text((parseFloat(data.discount_amount) > 0)? data.discount_amount : '0.0'); + $('#total_tax').text(data.total_tax); + $('#grand_total').text(data.grand_total); + + var address = delivery.address; + if(delivery.township != null && delivery.township!=""){ + address += ', ' +delivery.township; + }else if(delivery.direction_address!=null && delivery.direction_address!=""){ + address += ", (" +delivery.direction_address+")"; + } + $('#requested_time').text(requested_date); + $('#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); + + if(delivery.delivery_type == "service"){ + $("#delivery_info").text("(DELIVERY)"); + }else if(delivery.delivery_type == "pick_up"){ + $("#delivery_info").text("(PICK-UP)"); + }else{ + $("#delivery_info").text("(DIRECT DELIVERY)"); + } + + if(data.order_remark!=null && data.order_remark!=""){ + $("#order_remark").text(data.order_remark); + }else if(data.reservation_remark!=null && data.reservation_remark!=""){ + $("#order_remark").text(data.reservation_remark); + } + $("#sr_number").text("NO."+sr_no); + if (data["receipt_no"]) { + $("#contact_info").text(data["receipt_no"]); + }else{ + $("#contact_info").text(data["order_reservation_id"]); + } + + } + } + } + }); + //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){ + var url = 'order_reservation/update'; + var post_url = "order_reservation/send_status"; + var waiting_time = ""; + if(time!=undefined && time!=""){ + waiting_time = time; + } + var expected_time = ""; + if(exptime!=undefined && exptime!=""){ + expected_time = exptime; + } + $.ajax({ + type: "POST", + url: post_url, + data: {url: callback, ref_no: ref_no, status: status, waiting_time: waiting_time}, + dataType: "json", + success: function(data) { + if(data.status){ + $.ajax({ + type: "POST", + url: url, + data: {'order_id': order_id, 'status': status, 'expected_time' : expected_time}, + dataType: "json", + success: function(data) { + if (data.status) { + swal({ + title: 'Information', + text: "Order has been "+data.message, + type: 'success', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, 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'; + }); + } + } + }); +} + +function timeFormat(date){ + var isPM = date.getHours() >= 12; + var isMidday = date.getHours() == 12; + var time = [date.getHours() - (isPM && !isMidday ? 12 : 0), + date.getMinutes() || '00'].join(':') + + (isPM ? ' PM' : 'AM'); + return time; +} + +function showNewOrder(order_reservation){ + // console.log(order_reservation); + if((order_reservation!=undefined) && (order_reservation!=null) && (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; + swal({ + html: true, + title: 'Information', + text: "You have new order " + order_reservation.order_reservation_id + " at "+requested_date+"", + type: 'success', + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }); + } +} \ No newline at end of file diff --git a/app/assets/javascripts/origami.js b/app/assets/javascripts/origami.js index 715a9fe1..27b85958 100755 --- a/app/assets/javascripts/origami.js +++ b/app/assets/javascripts/origami.js @@ -192,6 +192,41 @@ $(document).on('turbolinks:load', function() { return false; }); + + $(document).on('click', '.access_modal', function(event){ + type = $(this).data("type"); + $(".ok").attr("data-action",type) + $('#AccessCodeModal').modal('show'); + }); + + $(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; + } + }); }); /* start check first bill or not funs: */ @@ -424,3 +459,8 @@ function showHideNavbar(webview,page){ } } } + +function createAccessCode(code) { + localStorage.setItem("access_code",code); +} + diff --git a/app/assets/stylesheets/origami.scss b/app/assets/stylesheets/origami.scss index 1de250a3..212c5288 100755 --- a/app/assets/stylesheets/origami.scss +++ b/app/assets/stylesheets/origami.scss @@ -93,6 +93,19 @@ select.form-control { // cursor:pointer; } +.access_number{ + width: 33%; + height:58px; + line-height:58px; + text-align:center; + background:#54A5AF; + // float:left; + // margin:2px; + font-size:20px; + color:white; + // cursor:pointer; +} + .del_cashier_number{ opacity:0.6, } diff --git a/app/channels/check_new_order_channel.rb b/app/channels/check_new_order_channel.rb new file mode 100644 index 00000000..8a7dfcfb --- /dev/null +++ b/app/channels/check_new_order_channel.rb @@ -0,0 +1,10 @@ +class CheckNewOrderChannel < ApplicationCable::Channel + def subscribed + stream_from "check_new_order_channel" + end + + def unsubscribed + stop_all_streams + # Any cleanup needed when channel is unsubscribed + end +end diff --git a/app/channels/check_order_ready_to_delivery_channel.rb b/app/channels/check_order_ready_to_delivery_channel.rb new file mode 100644 index 00000000..6f5e1a06 --- /dev/null +++ b/app/channels/check_order_ready_to_delivery_channel.rb @@ -0,0 +1,10 @@ +class CheckOrderReadyToDeliveryChannel < ApplicationCable::Channel + def subscribed + stream_from "check_order_ready_to_delivery_channel" + end + + def unsubscribed + stop_all_streams + # Any cleanup needed when channel is unsubscribed + end +end diff --git a/app/channels/check_order_send_to_kitchen_channel.rb b/app/channels/check_order_send_to_kitchen_channel.rb new file mode 100644 index 00000000..c0821483 --- /dev/null +++ b/app/channels/check_order_send_to_kitchen_channel.rb @@ -0,0 +1,10 @@ +class CheckOrderSendToKitchenChannel < ApplicationCable::Channel + def subscribed + stream_from "check_order_send_to_kitchen_channel" + end + + def unsubscribed + stop_all_streams + # Any cleanup needed when channel is unsubscribed + end +end diff --git a/app/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index 57337b5e..f34c0f6f 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -59,9 +59,8 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController order_reservation = params order_reservation_id, flag = OrderReservation.addOrderReservationInfo(order_reservation) - order_reservation = OrderReservation.get_pending_orders #find(order_reservation_id) - if flag #&& ENV["SERVER_MODE"] != 'cloud' + order_reservation = OrderReservation.get_pending_orders #find(order_reservation_id) ActionCable.server.broadcast "order_reservation_channel",data: order_reservation end diff --git a/app/controllers/base_origami_controller.rb b/app/controllers/base_origami_controller.rb index 66cc2880..3cb1eacc 100755 --- a/app/controllers/base_origami_controller.rb +++ b/app/controllers/base_origami_controller.rb @@ -5,7 +5,6 @@ class BaseOrigamiController < ActionController::Base before_action :check_user #before_action :check_installation - protect_from_forgery with: :exception helper_method :shop_detail, :current_token @@ -23,6 +22,10 @@ class BaseOrigamiController < ActionController::Base }.to_json end else + if ENV["SERVER_MODE"] != 'cloud' + protect_from_forgery with: :exception + end + if current_user.nil? redirect_to root_path end diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index 745d6f33..ed857104 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -129,6 +129,18 @@ class Origami::HomeController < BaseOrigamiController end end +def check_emp_access_code + pin_code = params[:code] + employee = Employee.find_by_emp_id(pin_code) + if employee && employee.role == "manager" + result = {:status=> true, :message=>"Success" } + else + result = {:status=> false, :message=>"Invalid Access Code" } + end + render :json => result.to_json + +end + private def set_dining diff --git a/app/controllers/origami/moveroom_controller.rb b/app/controllers/origami/moveroom_controller.rb index 316ab894..b7260863 100755 --- a/app/controllers/origami/moveroom_controller.rb +++ b/app/controllers/origami/moveroom_controller.rb @@ -3,6 +3,8 @@ class Origami::MoveroomController < BaseOrigamiController authorize_resource :class => false def move_dining + @webview = check_mobile + @tables = Table.all.active.order('status desc') @rooms = Room.all.active.order('status desc') @complete = Sale.all diff --git a/app/controllers/origami/movetable_controller.rb b/app/controllers/origami/movetable_controller.rb index bbc02bdc..eaf7fca1 100755 --- a/app/controllers/origami/movetable_controller.rb +++ b/app/controllers/origami/movetable_controller.rb @@ -3,6 +3,8 @@ class Origami::MovetableController < BaseOrigamiController authorize_resource :class => false def move_dining + @webview = check_mobile + @tables = Table.all.active.order('status desc') @rooms = Room.all.active.order('status desc') @complete = Sale.all diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 3baed9f3..3c5219af 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -446,8 +446,7 @@ class Origami::PaymentsController < BaseOrigamiController end saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0) - puts "FOC" - puts saleObj.to_json + sale_payment = SalePayment.new sale_payment.process_payment(saleObj, current_user.name, cash, "foc" ,remark) # For Cashier by Zone diff --git a/app/controllers/origami/pending_order_controller.rb b/app/controllers/origami/pending_order_controller.rb index 9a413316..4fa6002b 100644 --- a/app/controllers/origami/pending_order_controller.rb +++ b/app/controllers/origami/pending_order_controller.rb @@ -4,11 +4,12 @@ class Origami::PendingOrderController < BaseOrigamiController # @order = Order.where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status = 'billed' and source = 'quick_service'",DateTime.now.strftime('%Y-%m-%d')) @sale = Sale.pending_sale @order = Sale.pending_order - + @completed = Sale.completed_sale end def show @sales = Sale.pending_sale @orders = Sale.pending_order + @completed = Sale.completed_sale @id = params[:sale_id] if(@id[0,3] == "SAL") @sale = Sale.find(@id) @@ -41,4 +42,27 @@ class Origami::PendingOrderController < BaseOrigamiController end end + + def completed_sale + @sales = Sale.pending_sale + @orders = Sale.pending_order + @completed = Sale.completed_sale + @id = params[:sale_id] + + @sale = Sale.find(@id) + @order = SaleOrder.find_by_sale_id(@sale.sale_id).order_id + @booking = BookingOrder.find_by_order_id(@order).booking_id + @bookings = Booking.find(@booking) + @status = "sale" + + if @bookings.dining_facility_id.to_i > 0 + @table_id = Booking.find(@bookings.booking_id).dining_facility_id + @dining = DiningFacility.find(@table_id) + else + @table_id = nil + @dining = nil + end + + end + end diff --git a/app/controllers/origami/sale_edit_controller.rb b/app/controllers/origami/sale_edit_controller.rb index 1743f881..1c5b5430 100755 --- a/app/controllers/origami/sale_edit_controller.rb +++ b/app/controllers/origami/sale_edit_controller.rb @@ -17,6 +17,7 @@ class Origami::SaleEditController < BaseOrigamiController def item_void saleitemId = params[:sale_item_id] remark = params[:remark] + access_code = params[:access_code] saleitemObj = SaleItem.find(saleitemId) saleitemObj.status = 'void' saleitemObj.remark = remark @@ -48,8 +49,9 @@ class Origami::SaleEditController < BaseOrigamiController end end action_by = current_user.id + approved_by = Employee.find_by_emp_id(access_code) remark = "Void Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}" - sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, action_by,remark,"SALEITEMVOID" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, approved_by.name,remark,"SALEITEMVOID" ) saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount) ProductCommission.create_product_commission(@newsaleitem, saleitemObj) @@ -58,6 +60,7 @@ class Origami::SaleEditController < BaseOrigamiController def item_foc saleitemId = params[:sale_item_id] remark = params[:remark] + access_code = params[:access_code] saleitemObj = SaleItem.find(saleitemId) saleitemObj.status = 'foc' saleitemObj.remark = remark @@ -80,8 +83,9 @@ class Origami::SaleEditController < BaseOrigamiController order = Order.find(order_id) action_by = current_user.id + approved_by = Employee.find_by_emp_id(access_code) remark = "FOC Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}Receipt No #{saleObj.receipt_no}" - sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, action_by,remark,"SALEITEMFOC" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, approved_by.name,remark,"SALEITEMFOC" ) saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order.source) ProductCommission.create_product_commission(@newsaleitem, saleitemObj) @@ -111,6 +115,7 @@ class Origami::SaleEditController < BaseOrigamiController saleitemId = params[:sale_item_id] update_qty = params[:update_qty] update_price = params[:update_price] + access_code = params[:access_code] saleitemObj = SaleItem.find(saleitemId) sale = Sale.find(saleitemObj.sale_id) @@ -120,8 +125,9 @@ class Origami::SaleEditController < BaseOrigamiController saleitemObj.taxable_price = update_qty.to_f * update_price.to_f action_by = current_user.id + approved_by = Employee.find_by_emp_id(access_code) remark = "Update Qty #{update_qty} Price [#{saleitemObj.price}]| Receipt No #{sale.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}" - sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,sale.cashier_id, action_by,remark,"SALEITEMEDIT" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,sale.cashier_id, approved_by.name,remark,"SALEITEMEDIT" ) # saleitemObj.remark = 'edit' unless saleitemObj.product_name.include? 'updated' @@ -152,6 +158,7 @@ class Origami::SaleEditController < BaseOrigamiController # make cancel void item def item_void_cancel saleitemId = params[:sale_item_id] + access_code = params[:access_code] saleitemObj = SaleItem.find(saleitemId) both = SaleItem.where('product_code=?', saleitemObj.product_code) both.each do |item| @@ -169,8 +176,9 @@ class Origami::SaleEditController < BaseOrigamiController order = Order.find(order_id) action_by = current_user.id + approved_by = Employee.find_by_emp_id(access_code) remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}" - sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, action_by,remark,"ITEMCANCELVOID" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, approved_by.name,remark,"ITEMCANCELVOID" ) saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount, order.source) ProductCommission.remove_product_commission(saleitemObj) diff --git a/app/controllers/origami/void_controller.rb b/app/controllers/origami/void_controller.rb index 83dce707..d601b0c0 100755 --- a/app/controllers/origami/void_controller.rb +++ b/app/controllers/origami/void_controller.rb @@ -5,6 +5,7 @@ class Origami::VoidController < BaseOrigamiController sale_id = params[:sale_id] remark = params[:remark] order_source = params[:type] #tax profile source + access_code = params[:access_code] if Sale.exists?(sale_id) sale = Sale.find_by_sale_id(sale_id) @@ -71,8 +72,9 @@ class Origami::VoidController < BaseOrigamiController # 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, action_by,remark,"SALEVOID" ) + sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, approved_by.name,remark,"SALEVOID" ) # For Print diff --git a/app/controllers/origami/waste_spoile_controller.rb b/app/controllers/origami/waste_spoile_controller.rb index 2b2d9c33..de7df434 100755 --- a/app/controllers/origami/waste_spoile_controller.rb +++ b/app/controllers/origami/waste_spoile_controller.rb @@ -3,7 +3,8 @@ class Origami::WasteSpoileController < BaseOrigamiController sale_id = params[:sale_id] remark = params[:remark] - order_source = params[:type] #tax profile source + order_source = params[:type] + access_code = params[:access_code] #tax profile source if Sale.exists?(sale_id) sale = Sale.find_by_sale_id(sale_id) SaleTax.where("sale_id='#{sale_id}'").find_each do |existing_tax| @@ -54,8 +55,9 @@ class Origami::WasteSpoileController < BaseOrigamiController # 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, action_by,remark,remark ) + sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, approved_by.name,remark,remark ) # For Print diff --git a/app/models/ability.rb b/app/models/ability.rb index 5eab518f..497e9322 100755 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -126,6 +126,7 @@ class Ability # can :overall_void, :void can :index, :home can :show, :home + can :check_emp_access_code, :home can :read, Order can :update, Order can :manage, Booking @@ -151,6 +152,7 @@ class Ability can :create, :payment can :reprint, :payment can :rounding_adj, :payment + can :foc, :payment can :print, :payment can :move_dining, :movetable @@ -183,6 +185,16 @@ class Ability can :print, :print can :print_order_summary, :print + + can :edit, :sale_edit + can :item_void, :sale_edit + can :item_void_cancel, :sale_edit + can :cancel_all_void, :sale_edit + can :apply_void, :sale_edit + can :item_foc, :sale_edit + can :item_edit, :sale_edit + + can :overall_void, :void elsif user.role == "account" diff --git a/app/models/menu_category.rb b/app/models/menu_category.rb index 6440444a..948ffe69 100755 --- a/app/models/menu_category.rb +++ b/app/models/menu_category.rb @@ -45,16 +45,21 @@ class MenuCategory < ApplicationRecord from_t = Time.parse(menu.valid_time_from.strftime("%H:%M:%S")) to_t = Time.parse(menu.valid_time_to.strftime("%H:%M:%S")) current_t = Time.parse(Time.now.utc.getlocal.strftime("%H:%M:%S")) - + from = from_t.hour * 3600 + from_t.min*60 + from_t.sec to = to_t.hour * 3600 + to_t.min* 60 + to_t.sec current = current_t.hour * 3600 + current_t.min*60+current_t.sec + if from > to h = to_t.hour if h < 12 # before noon if h == 0 to = 24 to = to * 3600 + to_t.min* 60 + to_t.sec + else + + h += 24 + to = h*3600 + to_t.min* 60 + to_t.sec end else # (after) noon if h > 12 @@ -64,13 +69,9 @@ class MenuCategory < ApplicationRecord end end - # from = from.split(':').map { |a| a.to_i }.inject(0) { |a, b| a * 60 + b} - # to = to.split(':').map { |a| a.to_i }.inject(0) { |a, b| a * 60 + b} - # current = current.split(':').map { |a| a.to_i }.inject(0) { |a, b| a * 60 + b} - day = Date.today.wday dayresult = menu.valid_days.include?(day.to_s) - + if current.between?(from, to) && menu.valid_days.include?(day.to_s) return true else diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index d60d908e..e5b95f8c 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -201,12 +201,41 @@ class OrderReservation < ApplicationRecord end def self.get_pending_orders - order_reservation = OrderReservation.select("order_reservations.*,deliveries.provider,deliveries.delivery_type") + order_reservation = OrderReservation.select("order_reservations.*,del.provider,del.delivery_type") .joins(" JOIN deliveries as del on del.order_reservation_id=order_reservations.order_reservation_id") .where("order_reservations.status='new'") .order("order_reservations.order_reservation_id desc, order_reservations.created_at desc") end + def self.check_new_order + 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 + end + end + end + + def self.check_order_send_to_kitchen + today = Time.now.utc + order_reservation = OrderReservation.where("status='accepted' and requested_time > '#{today}'") + if order_reservation.length > 0 + if ENV["SERVER_MODE"] == 'cloud' + ActionCable.server.broadcast "check_order_send_to_kitchen_channel",data: order_reservation + end + end + end + + def self.check_order_ready_to_delivery + today = Time.now.utc + order_reservation = OrderReservation.where("status='send_to_kitchen' and requested_time > '#{today}'") + if order_reservation.length > 0 + if ENV["SERVER_MODE"] == 'cloud' + ActionCable.server.broadcast "check_order_ready_to_delivery_channel",data: order_reservation + end + end + end + private def generate_custom_id self.order_reservation_id = SeedGenerator.generate_id(self.class.name, "ODRS") diff --git a/app/models/sale.rb b/app/models/sale.rb index 1cd15aec..e8a203fa 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -1139,10 +1139,6 @@ def self.get_wastes_and_spoilages(from,to,status) else type = "and sales.sale_status = 'waste'" end - # query = Sale.all.where("sales.receipt_date between ? and ? #{type}",from,to) - # .group("sales.receipt_no") - # sales.receipt_no,menu_categories.id,sale_items.item_instance_code - query = Sale.select("sales.sale_id,sales.receipt_no,sales.created_at,sales.total_amount,sales.grand_total,sales.rounding_adjustment,sales.shift_sale_id,sale_items.product_name,sale_items.product_code,sale_items.item_instance_code,sale_items.qty,sale_items.price,sale_items.unit_price,menu_categories.name") .joins("JOIN sale_items ON sales.sale_id = sale_items.sale_id" + " JOIN menu_item_instances ON sale_items.item_instance_code = menu_item_instances.item_instance_code" + @@ -2614,6 +2610,13 @@ end query = query.where("bookings.booking_status = 'assign' AND orders.status = 'new' AND orders.source =? ","quick_service") .group("bookings.booking_id") end + def self.completed_sale + query = Sale.all + query = query.joins("join sale_orders as sale_orders on sale_orders.sale_id = sales.sale_id") + .joins("join orders as orders on orders.order_id = sale_orders.order_id") + query = query.where("sales.sale_status != 'new' AND orders.status = 'billed' AND orders.source =? ","quick_service") + .group("sales.sale_id") + end def self.all_receipts query = Sale.select("sale_payments.created_at as receipt_close_time, diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb index fe42bbf3..95a6a277 100755 --- a/app/pdf/receipt_bill_pdf.rb +++ b/app/pdf/receipt_bill_pdf.rb @@ -206,7 +206,7 @@ class ReceiptBillPdf < Prawn::Document total_price = item.price #item.qty*item.unit_price - comment for room charges price = item.unit_price product_name = item.product_name - + total_qty += item.qty y_position = cursor diff --git a/app/views/origami/addorders/detail.html.erb b/app/views/origami/addorders/detail.html.erb old mode 100755 new mode 100644 index fd823182..7e8cbb2c --- a/app/views/origami/addorders/detail.html.erb +++ b/app/views/origami/addorders/detail.html.erb @@ -1,14 +1,16 @@ <%= stylesheet_link_tag 'addorder', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'addorder', 'data-turbolinks-track': 'reload' %> - + <% type = request.path_info.include?('quick_service')%> <% modify_order = request.path_info.include?('modify_order')%> - -
+
+ + +
-
  • - - - <%= @menus[0].name %> - - - --> +
  • + + + <%= @menus[0].name %> + + + -
  • + + +
    + + + +
    +
    +
    +
    + -
    - - - -
    -
    -
    -
    - +
    +
    -
    -
    -
    -
    - - <% if type && modify_order%> - - - - - <%elsif !modify_order && type%> - - - + Back + + + + + <%elsif !modify_order && type%> + + + - Select - + Select + - <%else%> - - <%end%> + <%else%> + + <%end%>
    -
    - <% if type %> +
    + <% if type %>
    -
    - ORDER DETAILS -
    +
    + ORDER DETAILS +
    + + <% if modify_order %> + <% if @table.nil? %> +
    Table :
    + + + <% else%> +
    Table : <%=@table.name%>
    + + + <% end%> + + + + + +
    + +
    + <% else%> + +
    - <% if modify_order %> - <% if @table.nil? %> -
    Table :
    - - - <% else%> -
    Table : <%=@table.name%>
    - - - <% end%> - - - - - <% else%> - - <% end%>
    +
    + +
    + <% end%> + + +
    <% else %> -
    - ORDER DETAILS | Table-<%=@table.name%> +
    +
    + ORDER DETAILS | Table-<%=@table.name%> + + -
    - <% end%> - -
    -
    -
    - - - - - - - - - - - - -
    #ItemsQTYPrice
    -
    - +
    + +
    + <% end%> - -
    -
    -
    +
    +
    +
    + + + + + + + + + + - - +
    #ItemsQTYPrice
    +
    + +
    +
    + + + \ No newline at end of file +
    +
    +
    \ No newline at end of file diff --git a/app/views/origami/payments/show.html.erb b/app/views/origami/payments/show.html.erb index d1a9eef4..41f02b5d 100755 --- a/app/views/origami/payments/show.html.erb +++ b/app/views/origami/payments/show.html.erb @@ -350,16 +350,20 @@ reply Back - - - <% if @cashier_type=="quick_service" %> + --> + FOC + Void + Waste + Spoile +<% if @cashier_type=="quick_service" %>
    - + + <% if current_user.role != "waiter" %> + + <% end %> +
    +
    +
    + diff --git a/app/views/origami/pending_order/index.html.erb b/app/views/origami/pending_order/index.html.erb index 447612d1..02b4d07c 100644 --- a/app/views/origami/pending_order/index.html.erb +++ b/app/views/origami/pending_order/index.html.erb @@ -2,31 +2,50 @@
    -
    -
    - PENDING ORDER -
    -
    + + +
    -
    - <% @sale.each do |sale| %> -
    -
    - <%= sale.receipt_no %>Billed -
    -
    - <% end %> - <% @order.each do |order| %> -
    -
    - <%= order.booking_id %>new -
    +
    +
    +
    + <% @completed.each do |sale| %> +
    +
    + <%= sale.receipt_no %>Billed +
    +
    + <% end %> +
    +
    + +
    +
    + <% @sale.each do |sale| %> +
    +
    + <%= sale.receipt_no %>Billed
    - <% end %> -
    +
    + <% end %> + <% @order.each do |order| %> +
    +
    + <%= order.booking_id %>new +
    +
    + <% end %> +
    +
    +
    -
    -
    @@ -46,6 +65,10 @@ var sale_id = $(this).attr("data-id"); window.location.href = '/origami/quick_service/pending_order/' + sale_id; }) + $(".completed").on('click',function(){ + var sale_id = $(this).attr("data-id"); + window.location.href = '/origami/quick_service/completed_sale/' + sale_id; + }) $('#pay').on('click', function () { var sale_id = $('#sale_id').val(); window.location.href = '/origami/sale/' + sale_id + "/quick_service/payment"; diff --git a/app/views/origami/pending_order/show.html.erb b/app/views/origami/pending_order/show.html.erb index 0cc6f949..48cad44e 100644 --- a/app/views/origami/pending_order/show.html.erb +++ b/app/views/origami/pending_order/show.html.erb @@ -1,154 +1,171 @@
    -
    - -
    -
    -
    - PENDING ORDER -
    -
    -
    -
    - <% @sales.each do |sale| %> -
    -
    - <%= sale.receipt_no %>Billed -
    +
    + +
    + +
    +
    +
    +
    + <% @completed.each do |sale| %> +
    +
    + <%= sale.receipt_no %>Billed +
    +
    + <% end %>
    - <% end %> - <% @orders.each do |order| %> -
    -
    - <%= order.booking_id %>new -
    +
    + +
    +
    + <% @sales.each do |sale| %> +
    +
    + <%= sale.receipt_no %>Billed +
    +
    + <% end %> + <% @orders.each do |order| %> +
    +
    + <%= order.booking_id %>new +
    +
    + <% end %>
    - <% end %> -
    +
    +
    -
    -
    - + - -
    -
    -
    -
    INVOICE DETAILS | Table <%= @dining.name rescue "" %>
    -
    -
    -
    - - <% if @status == 'sale' %> -
    -   Receipt No: - <%= @sale.receipt_no rescue '' %> -
    - <% else%> - -
    -   Order No: - <%= @bookings.booking_orders[0].order_id rescue '' %> -
    - <% end%> - - - <% if @status == 'sale' %> -
    - Date: <%= @sale.created_at.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%>   -
    - <% else%> -
    - Date: <%= @order.created_at.strftime("%I:%M %p") rescue '-'%>   -
    - <% end%> + +
    +
    +
    +
    INVOICE DETAILS | Table <%= @dining.name rescue "" %>
    -
    -
    - <% if @status == 'sale' %> -   Customer : <%= @sale.customer.name rescue "-" %> - <% else%> -   Customer : <%= @order.customer.name rescue "-" %> - <% end%> -
    - -
    -
    -
    - - - - - - - - - - <% if @status == 'sale' %> - <% sub_total = 0 - @sale.sale_items.each do |sale_item| - sub_total = sub_total + sale_item.price %> - - - - - - - <% end%> - <% else%> - <% sub_total = 0 - total = 0 - @order_items.each do |order_item| - total = order_item.qty * order_item.price - sub_total = sub_total + total %> - - - - - - - <% end%> - <% end%> - - -
    ItemsQTYPrice
    <%= sale_item.product_name %><%= sale_item.qty %><%= sale_item.price %>
    <%= order_item.item_name %><%= order_item.qty %><%= total %>
    -
    -
    - +
    +
    + <% if @status == 'sale' %> +   Customer : <%= @sale.customer.name rescue "-" %> + <% else%> +   Customer : <%= @order.customer.name rescue "-" %> + <% end%> +
    + +
    +
    +
    + + + + + + + + + + <% if @status == 'sale' %> + <% sub_total = 0 + @sale.sale_items.each do |sale_item| + sub_total = sub_total + sale_item.price %> + + + + + + + <% end%> + <% else%> + <% sub_total = 0 + total = 0 + @order_items.each do |order_item| + total = order_item.qty * order_item.price + sub_total = sub_total + total %> + + + + + + + <% end%> + <% end%> + + +
    ItemsQTYPrice
    <%= sale_item.product_name %><%= sale_item.qty %><%= sale_item.price %>
    <%= order_item.item_name %><%= order_item.qty %><%= total %>
    +
    +
    +
    -
    -
    +
    @@ -182,6 +199,10 @@ $(document).ready(function(){ var sale_id = $(this).attr("data-id"); window.location.href = '/origami/quick_service/pending_order/' + sale_id; }) + $(".completed").on('click',function(){ + var sale_id = $(this).attr("data-id"); + window.location.href = '/origami/quick_service/completed_sale/' + sale_id; + }) $('#pay').on('click', function () { var sale_id = $('#sale_id').val(); window.location.href = '/origami/sale/' + sale_id + "/quick_service/payment"; diff --git a/app/views/origami/sale_edit/edit.html.erb b/app/views/origami/sale_edit/edit.html.erb index 3079d76c..6b38ad3c 100755 --- a/app/views/origami/sale_edit/edit.html.erb +++ b/app/views/origami/sale_edit/edit.html.erb @@ -187,6 +187,7 @@