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/README.md b/README.md index 0605a14a..dfebed49 100755 --- a/README.md +++ b/README.md @@ -188,6 +188,10 @@ Add Base URL for DOEMAL 1) settings/lookups => { type:order_reservation, name: BaseURL, value:'{doemal url}' } 2) settings/lookups => { type:order_reservation, name: Token, value:'{doemal token}' } +Add Feature for Dine-in Cashier + ** '0' means can not use dine-in cashier and '1' means can use dine-in cashier ** + => settings/lookups => { type:dinein_cashier, name: DineInCashier, value:'{0 or 1}' } + Add Feature for Quick Service ** '0' means can not use quick service and '1' means can use quick service ** => settings/lookups => { type:quick_service, name: QuickService, value:'{0 or 1}' } diff --git a/app/assets/javascripts/addorder.js b/app/assets/javascripts/addorder.js index 0c4363db..344e663b 100755 --- a/app/assets/javascripts/addorder.js +++ b/app/assets/javascripts/addorder.js @@ -1,7 +1,9 @@ $(function() { var role = $('#role').val(); + type = window.location.href.indexOf("quick_service"); modify_order = window.location.href.indexOf("modify_order"); + //click menu sidebar menu category $(".product").on("click", function(){ var url = $(this).attr('data-ref'); @@ -62,8 +64,8 @@ $(function() { +JSON.stringify(item_attributes)+"' data-id = '" +JSON.stringify(item_attributes)+"' data-item = '" +JSON.stringify(item_attributes)+"' data-option = '" - +JSON.stringify(menu_items[field].options)+"'data-opt = '" - +JSON.stringify(menu_items[field].options)+"' data-item-sets = '" + +JSON.stringify(product[field].options)+"'data-opt = '" + +JSON.stringify(product[field].options)+"' data-item-sets = '" +JSON.stringify(item_attributes)+"' data-image='"+image_path+"' data-toggle='modal' data-target='.sx_item_detailModal'>" +"" +'view_list' @@ -76,8 +78,8 @@ $(function() { + product[field].unit_price +"' data-instance-code = '"+ product[field].item_code +"' data-instance = '" + product[field].name +"' data-promotion-price = '"+ 1 +"' data-attributes = '" + JSON.stringify(item_attributes) +"' data-options = '" - + JSON.stringify(menu_items[field].options) +"' data-opt = '" - + JSON.stringify(menu_items[field].options) +"' data-image='"+image_path+"'>" + + JSON.stringify(product[field].options) +"' data-opt = '" + + JSON.stringify(product[field].options) +"' data-image='"+image_path+"'>" // +"
" // +"" @@ -96,162 +98,78 @@ $(function() { } //end show list function //click menu sidebar menu category - $(document).on('click', '.menu_category', function(event){ - event.preventDefault(); + $(document).on('click', '.menu_category', function(e){ + e.preventDefault(); + $('.sub_category_list').addClass("hidden"); var menu_id = $(this).attr("data-id"); - var url = "get_menu_category/"+menu_id; - show_menu_item_list(url); - + var url = "get_menu_category/"+menu_id; + show_menu_item_list(url,menu_id); var sub_id = $(this).attr("data-sub-id"); if (sub_id == "true") { var sub_url = "get_menu_sub_category/"+menu_id; - sub_category = $(this).find('.sub_category_list'); - show_sub_category_list(sub_url,sub_category); + sub_category = $(this).siblings('.sub_category_list'); + show_sub_category_list(sub_url,sub_category,menu_id); } - }); + }); + //End menu category Click + + //click menu sidebar menu category + $(document).on('click', '.menu_sub_category', function(event){ + // event.preventDefault(); + // $(".menu_sub_category").on("click", function(){ + $('.sub_category_list').addClass("hidden"); + var menu_id = $(this).attr("data-id"); + console.log(menu_id); + var url = "get_menu_category/"+menu_id; + show_menu_item_list(url,menu_id); + }); //End menu category Click //show menu item list when click menu category - function show_menu_item_list(url_item){ + function show_menu_item_list(url_item,menu_id){ var menu_list = $('.menu_items_list'); menu_list.empty(); - type = window.location.href.indexOf("quick_service"); - modify_order = window.location.href.indexOf("modify_order"); - if (type != -1 && modify_order != -1) { - url_item = '../../../addorders/'+url_item; - }if(modify_order == -1 && type != -1){ - url_item = 'addorders/'+url_item; - } - if (type ==-1 && modify_order == -1){ - url_item = url_item - } - - //Start Ajax - $.ajax({ - type: "GET", - url: url_item, - data: {}, - dataType: "json", - success: function(data) { - var menu_items_list = $('.menu_items_list'); - menu_items_list.empty(); - menu_items = data.menu_items; - - for(var field in menu_items) { - if (menu_items[field].is_sub_item == false) { - instances = menu_items[field].instances ; - - if (!instances.length > 0) { - swal("Hello Please Check!","Does not have instance item in this menu items ("+ menu_items[field].name+")","warning"); - } - if (instances.length > 0) { - qty = 1; - options = []; - price = 0; - - if (JSON.stringify(menu_items[field].item_sets)!='[]') { - fa_plus = ''; - add = ''; - menu_item_box = 'add_icon'; - data_target = 'sx_item_set_detailModal'; - data_modal = 'modal' - add_icon = "set_item_box" - code = menu_items[field].code; - name = menu_items[field].name; - instances = menu_items[field].instances; - $(instances).each(function(i){ - if (instances[i].is_default == true) { - price = parseFloat(instances[i].price).toFixed(2); - }else{ - price = 0; - } - }); - is_available = menu_items[field].is_available ; - is_on_promotion = 0; - item_attributes = menu_items[field].attributes; - promotion_price = menu_items[field].promotion_price; - }else{ - fa_plus = 'material-icons'; - add = 'view_list' - menu_item_box = 'menu_item_box'; - data_target = 'sx_item_detailModal'; - data_modal = '' - add_icon = "add_icon" - - $(instances).each(function(i){ - if (instances[i].is_default === true) { - code = instances[i].code; - name = instances[i].name; - price = parseFloat(instances[i].price).toFixed(2); - is_available = instances[i].is_available ; - is_on_promotion = instances[i].is_on_promotion; - item_attributes = instances[i].values; - promotion_price = instances[i].promotion_price; - code = instances[i].code; - } - }); - } - - if (menu_items[field].image) { - if (modify_order) { - image_path = "../../"+menu_items[field].image; - }else{ - image_path = menu_items[field].image; - } - - }else{ - if (modify_order) { - image_path = "../../image/logo.png"; - }else{ - image_path = "image/logo.png"; - } - } - - row = '
' - +'
' - +'
'+ menu_items[field].name +'
' - +"
" - +"" - +add+ '' - +'
' - +'
' - +"
" - - // +"
" - // +"" - // +"
" - - +'' - +'
'; - $('.menu_items_list').append(row); - } - //end instances in menu-items alest 1 instance + menus = JSON.parse(localStorage.getItem("menus")); + if (menus != null) { + for(var i in menus) { + var categories = menus[i]["categories"]; + for(var ii in categories) { + if (categories[ii]["id"] == menu_id) { + var menu_items = categories[ii]["items"]; + show_menu_list(menu_items); } - //end is_sub_item false } } - }); - //end Ajax + }else{ + + type = window.location.href.indexOf("quick_service"); + modify_order = window.location.href.indexOf("modify_order"); + + if (type != -1 && modify_order != -1) { + url_item = '../../../addorders/'+url_item; + }if(modify_order == -1 && type != -1){ + url_item = 'addorders/'+url_item; + } + if (type ==-1 && modify_order == -1){ + url_item = url_item + } + + //Start Ajax + $.ajax({ + type: "GET", + url: url_item, + data: {}, + dataType: "json", + success: function(data) { + var menu_items_list = $('.menu_items_list'); + menu_items_list.empty(); + menu_items = data.menu_items; + show_menu_list(menu_items); + } + }); + //end Ajax + } } //end show list function //click item row for item set @@ -269,60 +187,106 @@ $(function() { item_options = $(this).data('options'); for(var field in item_sets) { - + $('.set_order').attr('data-min-qty',item_sets[field]["min_selectable_qty"]); value = item_sets[field]["instances"]; + $(value).each(function(i){ - if (type != -1 && modify_order != -1) { + menus = JSON.parse(localStorage.getItem("menus")); + if (menus != null) { + for(var j in menus) { + var categories = menus[j]["categories"]; + for(var ii in categories) { + var items = categories[ii]["items"]; + for(var iii in items) { + var result = items[iii]["instances"]; + for(var v in result) { - url = '../../../addorders/get_item_instance/'+value[i]["id"]; - console.log("ssssssss") - } - if(modify_order == -1 && type != -1){ + if (value[i]["id"] == result[v]["id"]) { + + console.log("ssssssss") - url = 'addorders/get_item_instance/'+value[i]["id"] ; - console.log("aaaaaa") - } - if (type ==-1 && modify_order == -1){ - - url = '../addorders/get_item_instance/'+value[i]["id"]; - console.log("cccccccccc") - } - $.ajax({ - type: "GET", - url: url, - // data: {id:value[i]}, - success:function(result){ - - row = '
' - +"
" - +'
' - +''+result["name"]+'' + row = '
' + +"
" + +'
' + +''+result[v]["name"]+'' + +'
' + +'
' + +'' + +' ' + +'
' + +'' +'
' - +'
' - +'' - +' ' - +'
' - +'' - +'
' - +'
' - - $(".instance-list").append(row); + +'
' + $(".instance-list").append(row); + } + } + } } - }); + } + }else{ + type = window.location.href.indexOf("quick_service"); + modify_order = window.location.href.indexOf("modify_order"); + if (type != -1 && modify_order != -1) { + url = '../../../addorders/get_item_instance/'+value[i]["id"]; + console.log("ssssssss") + } + if(modify_order == -1 && type != -1){ + url = 'addorders/get_item_instance/'+value[i]["id"] ; + console.log("aaaaaa") + } + if (type ==-1 && modify_order == -1){ + url = '../addorders/get_item_instance/'+value[i]["id"]; + console.log("cccccccccc") + } + $.ajax({ + type: "GET", + url: url, + // data: {id:value[i]}, + success:function(result){ + + row = '
' + +"
" + +'
' + +''+result["name"]+'' + +'
' + +'
' + +'' + +' ' + +'
' + +'' + +'
' + +'
' + + $(".instance-list").append(row); + } + }); + } }); } @@ -442,10 +406,8 @@ $(function() { $(document).on('click', '#remove_set', function(event){ code = $(this).parent().parent('.selected-set').attr('data-code'); instance = $(".selected-instance"); - console.log(code) $(instance).each(function(i){ if ($(instance[i]).attr('data-code')==code){ - console.log($(instance[i])) $(instance[i]).removeClass("selected-instance") } }); @@ -496,7 +458,6 @@ $(function() { var rowCount = $('.summary-items tbody tr').length+1; var set_option = [] $(items).each(function(i){ - console.log($(items[0]).attr('data-name')) code = $(items[i]).attr('data-code'); name = $(items[i]).attr('data-name'); price = $(items[i]).attr('data-price'); @@ -754,7 +715,6 @@ $(function() { attribute_arr = get_selected_attributes('selected-attribute'); option_arr = get_selected_attributes('selected-option'); - console.log(option_arr) if (item_row.length>0) { var instances = jQuery.parseJSON(item_row.attr('data-instances')); @@ -990,7 +950,6 @@ $(function() { dataType: "json", success:function(result){ if (result.status) { - console.log(result) if (result.data == null){ swal({ title: "Please Open Shift !", @@ -1042,8 +1001,13 @@ $(function() { }); //click save buttom after change qty $('#sx_itemModal').on('click','#save', function(){ - summary_items_filter(); - calculate_sub_total(); + if ($('#modal-qty').val()>0) { + summary_items_filter(); + calculate_sub_total(); + }else{ + swal("Opps", "Please enter number for qty ","warning"); + } + }); //calculate subtotal @@ -1205,7 +1169,6 @@ $(function() { $(".keypress_qty").on('keyup change', function (){ // $('.keypress_qty').keyup(function(e){ - id = $(this).attr('id'); value = $(this).val(); @@ -1243,54 +1206,68 @@ $(function() { var menu_id = $(this).attr("data-id"); var url = "get_menu_sub_category/"+menu_id; sub_category = $(this).find('.sub_category_list'); - show_sub_category_list(url,sub_category); + show_sub_category_list(url,sub_category,menu_id); }); //End menu category Click //show menu item list when click menu category - function show_sub_category_list(url,sub_category){ + function show_sub_category_list(url,sub_category,menu_id){ - if (type != -1 && modify_order != -1) { - var url = "../../../addorders/"+url; - }if(modify_order== -1 && type != -1){ - var url = 'addorders/'+url; - } - if (type ==-1 && modify_order == -1){ - var url = url; - } + var sub_category_list = $('.sub_category_list'); + sub_category_list.empty(); - var menu_list = $('.sub_category_list'); - menu_list.empty(); - //Start Ajax - $.ajax({ - type: "GET", - url: url, - data: {}, - dataType: "json", - success: function(data) { - var sub_category_list = $('.sub_category_list'); - sub_category_list.empty(); - data = data.sub_category; - - if (data.length>0) { - // if ((sub_category.hasClass('hidden'))) { + menus = JSON.parse(localStorage.getItem("menus")); + if (menus != null) { + for(var j in menus) { + var categories = menus[j]["categories"]; + for(var ii in categories) { + if (menu_id == categories[ii]["parent_id"]) { $(sub_category).removeClass('hidden'); - // }else{ - // $(sub_category).addClass('hidden'); - // } - - for(var i in data) { - - row = '' ; - $(sub_category).append(row); - //end is_sub_item false - } + row = '' ; + $(sub_category).append(row); + } } } - }); - //end Ajax + }else{ + if (type != -1 && modify_order != -1) { + var url = "../../../addorders/"+url; + }if(modify_order== -1 && type != -1){ + var url = 'addorders/'+url; + } + if (type ==-1 && modify_order == -1){ + var url = url; + } + //Start Ajax + $.ajax({ + type: "GET", + url: url, + data: {}, + dataType: "json", + success: function(data) { + var sub_category_list = $('.sub_category_list'); + sub_category_list.empty(); + data = data.sub_category; + if (data.length > 0) { + // if ((sub_category.hasClass('hidden'))) { + $(sub_category).removeClass('hidden'); + // }else{ + // $(sub_category).addClass('hidden'); + // } + for(var i in data) { + + row = '' ; + $(sub_category).append(row); + //end is_sub_item false + } + } + } + }); + //end Ajax + } } /* Get Item rows */ @@ -1378,5 +1355,119 @@ $(function() { // price = $("#unit_price").text(); // $("#total_price").text(qty*price); // }); + function show_menu_list(menu_items) { + var menu_list = $('.menu_items_list'); + menu_list.empty(); + for(var field in menu_items) { + if (menu_items[field].is_sub_item == false) { + instances = menu_items[field].instances ; + if (!instances.length > 0) { + swal("Hello Please Check!","Does not have instance item in this menu items ("+ menu_items[field].name+")","warning"); + } + if (instances.length > 0) { + qty = 1; + options = []; + price = 0; + + if (JSON.stringify(menu_items[field].item_sets)!='[]') { + fa_plus = ''; + add = ''; + menu_item_box = 'add_icon'; + data_target = 'sx_item_set_detailModal'; + data_modal = 'modal' + add_icon = "set_item_box" + code = menu_items[field].code; + name = menu_items[field].name; + instances = menu_items[field].instances; + $(instances).each(function(i){ + if (instances[i].is_default == true) { + price = parseFloat(instances[i].price).toFixed(2); + }else{ + price = 0; + } + }); + is_available = menu_items[field].is_available ; + is_on_promotion = 0; + item_attributes = menu_items[field].attributes; + promotion_price = menu_items[field].promotion_price; + }else{ + fa_plus = 'material-icons'; + add = 'view_list' + menu_item_box = 'menu_item_box'; + data_target = 'sx_item_detailModal'; + data_modal = '' + add_icon = "add_icon" + + $(instances).each(function(i){ + if (instances[i].is_default === true) { + code = instances[i].code; + name = instances[i].name; + price = parseFloat(instances[i].price).toFixed(2); + is_available = instances[i].is_available ; + is_on_promotion = instances[i].is_on_promotion; + item_attributes = instances[i].values; + promotion_price = instances[i].promotion_price; + code = instances[i].code; + } + }); + } + + if (menu_items[field].image) { + if (modify_order) { + image_path = "../../"+menu_items[field].image; + }else{ + image_path = menu_items[field].image; + } + + }else{ + if (modify_order) { + image_path = "../../image/logo.png"; + }else{ + image_path = "image/logo.png"; + } + } + + row = '
' + +'
' + +'
'+ menu_items[field].name +'
' + +"
" + +"" + +add+ '' + +'
' + +'
' + +"
" + + // +"
" + // +"" + // +"
" + + +'' + +'
'; + $('.menu_items_list').append(row); + } + //end instances in menu-items alest 1 instance + } + //end is_sub_item false + } + } }); \ No newline at end of file diff --git a/app/assets/javascripts/channels/check_new_order.js b/app/assets/javascripts/channels/check_new_order.js index 5bd64013..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){ @@ -19,21 +20,32 @@ 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.
"+ + 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', - timer: 1000, + html: true, closeOnConfirm: false, closeOnCancel: false, allowOutsideClick: false - },function(isConfirm){ + }, 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 84dd1982..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){ @@ -19,21 +20,32 @@ 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.
"+ + 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', - timer: 1000, + html: true, closeOnConfirm: false, closeOnCancel: false, allowOutsideClick: false - },function(isConfirm){ + }, 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 6727dbdb..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){ @@ -19,21 +20,32 @@ 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.
"+ + 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', - timer: 1000, + html: true, closeOnConfirm: false, closeOnCancel: false, allowOutsideClick: false - },function(isConfirm){ + }, 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_queue_station.js b/app/assets/javascripts/channels/order_queue_station.js index c8b59231..a72a7893 100755 --- a/app/assets/javascripts/channels/order_queue_station.js +++ b/app/assets/javascripts/channels/order_queue_station.js @@ -29,18 +29,21 @@ App.order_queue_station = App.cable.subscriptions.create('OrderQueueStationChann //end count var date = new Date(items[field]["created_at"]); - var show_date = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear() + ' ' + date.getHours()+ ':' + date.getMinutes(); + // var show_date = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear() + ' ' + date.getHours()+ ':' + date.getMinutes(); + var show_date =date.getHours()+ ':' + date.getMinutes() +' '+(date.getHours() >= 12 ? 'PM' : 'AM'); if (oqs_id == items[field]["order_queue_station_id"]) { - + var table_type = (items[field]["table_type"] != null) ? items[field]["table_type"]:""; + var zone = (items[field]["zone"] != null) ? "-"+items[field]["zone"]:"No Table"; + (name === 'true') ? 'Y' :'N'; row ='
' +'' +'
' +'
' - +''+items[field]["table_type"]+'-'+ items[field]["zone"] +'' - +'' + +''+table_type+''+ zone+'' + +'' +''+items[field]["order_id"]+'' +'
' +'

' diff --git a/app/assets/javascripts/channels/order_reservation.js b/app/assets/javascripts/channels/order_reservation.js index 68da8d87..468e4c31 100644 --- a/app/assets/javascripts/channels/order_reservation.js +++ b/app/assets/javascripts/channels/order_reservation.js @@ -3,26 +3,27 @@ App.order_reservation = App.cable.subscriptions.create('OrderReservationChannel' disconnected: function() {}, - received: function(data) { + received: function(data) { + var shop_code = data.shop_code; var order = data.data; if(order.length > 0){ - $('.order_reserve_cable tbody').html(""); - $(".nav-item.red > a > p.num").text(order.length); + $('.custom-table.'+shop_code+'_order_reserve_cable tbody').html(""); + $("."+shop_code+" > .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]); + showNewOrder(order[key],shop_code); } var rowCount = key+1; var date = new Date(value.created_at); 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 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"; @@ -42,7 +43,7 @@ App.order_reservation = App.cable.subscriptions.create('OrderReservationChannel' +'' +' '; - $('.custom-table.order_reserve_cable tbody').append(row); + $('.custom-table.'+shop_code+'_order_reserve_cable tbody').append(row); }); } diff --git a/app/assets/javascripts/custom.js b/app/assets/javascripts/custom.js index ca1bd0b9..ae8b727c 100644 --- a/app/assets/javascripts/custom.js +++ b/app/assets/javascripts/custom.js @@ -54,7 +54,7 @@ $(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, @@ -62,6 +62,17 @@ $(document).ready(function() { 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, + borderRadius: '0', + railBorderRadius: '0', + touchScrollStep : 45 + }); + // $('.delete').click(function(){ // var method = $(this).attr('data-method'); diff --git a/app/assets/javascripts/order_reservation.js b/app/assets/javascripts/order_reservation.js index c60accdf..83618770 100644 --- a/app/assets/javascripts/order_reservation.js +++ b/app/assets/javascripts/order_reservation.js @@ -2,6 +2,10 @@ $(function() { $("#discount").hide(); $(".expected_time").hide(); + $('#accepted').hide(); + $('#cancel').hide(); + $(".tbl_customer").hide(); + $(".order_close_cashier").hide(); $(function() { $('.first-1').click(); }); @@ -11,6 +15,10 @@ $(function() { $(".nav-item").on("click", function(){ type = $(this).attr("data-type"); refreshDetailData(); + $('#accepted').hide(); + $('#cancel').hide(); + $(".tbl_customer").hide(); + $(".order_close_cashier").hide(); if (type == "pending") { $(".first-1").click(); $('#accepted').text("ACCEPT"); @@ -24,18 +32,24 @@ $(function() { $('#accepted').text("READY TO DELIVERY"); $('#accepted').attr("data-value","delivery"); }else if(type == "completed"){ + // $('#cancel').hide(); $(".fourth-1").click(); - $('#accepted').text("PICK-UP"); + $('#accepted').text("COMPLETE"); $('#accepted').attr("data-value","completed"); - } + }else if(type == "processed"){ + $(".fifth-1").click(); + $(".order_close_cashier").show(); + // $('#accepted').hide(); + // $('#cancel').hide(); + } // console.log(type); }); $("#accepted").on("click", function(){ if($(this).text().trim() == "ACCEPT"){ - var requested_time = $("#requested_date_time").text(); + $("#status").text($(this).attr("data-value")); + var requested_time = $("#requested_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"); @@ -47,35 +61,155 @@ $(function() { }); $("#cancel").on("click", function(){ - 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); + var order_status = $("#order_status").text(); + $("#status").text($(this).attr("data-value")); + if(order_status!="new" && order_status!= "accepted" && order_status!="send_to_kitchen"){ + $("#AccessCodeModal").modal({show: true, backdrop: false, keyboard: false}); + }else{ + $("#rejected_reasonModal").modal({show: true, backdrop: false, keyboard: false}); + } }); - $("#save").on("click",function(){ - $("#waiting_timeErr").text(""); + $(".send_status").on("click",function(){ + $("#reject_reasonErr").html(""); + if($('#reject_reason').val() != ""){ + var order_status = $("#order_status").text(); + var status = $("#status").text(); + var order_id = $('#order_id').text(); + var callback = $('#callback_url').text(); + var ref_no = $('#ref_no').text(); + var reason = ""; + var approved_code = $("#approved_code").text(); + if(order_status == 'ready_to_delivery'){ + reason = "VOID || " + $('#reject_reason').val(); + }else{ + reason = $('#reject_reason').val(); + } + callback_url(callback,ref_no,order_id,status,"","","",reason,approved_code); + }else{ + $("#reject_reasonErr").html("This is required field"); + } + }); + + $(".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 = 'after'; + } + 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); + // var requested_time = new Date($("#requested_date_time").text()); + // if(type == 'after'){ + // requested_time.setMinutes(requested_time.getMinutes() + minutes); + // }else{ + // requested_time.setMinutes(requested_time.getMinutes() - minutes); + // } // console.log(requested_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; - callback_url(callback,ref_no,order_id,status,expected_time,waiting_time); - }else{ - $("#waiting_time").val(""); - $("#waiting_timeErr").text("Expected waiting time is greater than requested time!"); + 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(); + 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; } }); + + // $('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({ + 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"); @@ -92,6 +226,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"); @@ -99,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 @@ -112,20 +249,31 @@ function show_order_detail(url,sr_no){ dataType: "json", success: function(data) { // console.log(data); + $(".tbl_customer").show(); + if(data.status != "delivered"){ + $('#accepted').show(); + if(data.status != "ready_to_delivery" && data.status != "send_to_kitchen"){ + $('#cancel').show(); + } + }else{ + $('#accepted').hide(); + $('#cancel').hide(); + } 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; + // var requested_date = newDate.getFullYear() + '-' + (newDate.getMonth() >= 10? newDate.getMonth() : '0' + (newDate.getMonth() + 1)) +'-'+ (newDate.getDate() >= 10? newDate.getDate() : '0' + newDate.getDate()) +' '+time; + var requested_date = getOrderMonth(newDate.getMonth()) +' '+ (newDate.getDate() >= 10? newDate.getDate() : '0' + newDate.getDate()) +', '+newDate.getFullYear()+'('+getOrderDay(newDate.getDay())+')'+' '+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; + // 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 : ''); + $('#expected_time').text(data.expected_waiting_time? data.expected_waiting_time : ''); }else{ $('.expected_time').hide(); $('#expected_time').text(''); @@ -156,7 +304,8 @@ function show_order_detail(url,sr_no){ $("#discount").show(); } - $('#requested_date_time').text(requested_date); + //customer info detail + // $('#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'); @@ -174,18 +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); - if(delivery.delivery_type == "service"){ + $("#trans_ref").text(data.transaction_ref); + 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!=""){ @@ -193,11 +345,22 @@ 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); - if (data["receipt_no"]) { - $("#contact_info").text(data["receipt_no"]); + + if(data.remark!=null && data.remark!=""){ + var doemal_remark = data.remark.split("||"); + var remark = doemal_remark[0] +", "+ doemal_remark[1]; + $("#remark").text(remark); }else{ - $("#contact_info").text(data["order_reservation_id"]); + $("#remark").text(""); + } + + //no and order id info + $("#sr_number").text("NO."+sr_no); + $("#order_status").text(data.status); + if (data["receipt_no"]) { + $("#invoice_no").text(data["receipt_no"]); + }else{ + $("#invoice_no").text(data["order_reservation_id"]); } } @@ -207,40 +370,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, min_type: min_type, expected_time: waiting_time, remark: reason, access_code: access_code}, dataType: "json", success: function(data) { if (data.status) { @@ -255,6 +420,18 @@ function callback_url(callback,ref_no,order_id,status,time,exptime){ }, 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'; + }); } } }); @@ -278,26 +455,63 @@ function callback_url(callback,ref_no,order_id,status,time,exptime){ 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'); + var time = [(date.getHours()>10? date.getHours() : '0'+date.getHours()) - (isPM && !isMidday ? 12 : 0), + (date.getMinutes()>10? date.getMinutes() : '0'+date.getMinutes()) || '00'].join(':') + + (isPM ? ' PM' : ' AM'); return time; } -function showNewOrder(order_reservation){ - // console.log(order_reservation); +function showNewOrder(order_reservation,shop_code){ 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; + 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('/'+shop_code+'-beep.mp3'); // define your audio + // setTimeout(function(){ + // audio.loop = true; + audio.play(); + // },10000); + + // $("#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({ - html: true, title: 'Information', - text: "You have new order " + order_reservation.order_reservation_id + " at "+requested_date+"", + 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(); + } }); } +} + +function getOrderMonth(month){ + var MONTHS = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"]; + return MONTHS[month]; +} + +function getOrderDay(day){ + var DAYS = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]; + return DAYS[day]; } \ No newline at end of file diff --git a/app/assets/stylesheets/addorder.scss b/app/assets/stylesheets/addorder.scss index d8adba16..ba1089d2 100755 --- a/app/assets/stylesheets/addorder.scss +++ b/app/assets/stylesheets/addorder.scss @@ -247,4 +247,27 @@ i.logout_icon{ } .list-menu > a:hover{ text-decoration: none; +} +.cashier_number{ + width: 33%; + height:58px; + line-height:58px; + text-align:center; + background:#54A5AF; + // float:left; + // margin:2px; + font-size:20px; + color:white; + // cursor:pointer; +} +.border-top{ + border-top:1px solid #fff; +} + +.border-right{ + border-right:1px solid #fff; +} + +.border-left{ + border-left:1px solid #fff; } \ No newline at end of file diff --git a/app/assets/stylesheets/origami.scss b/app/assets/stylesheets/origami.scss index 212c5288..855ee984 100755 --- a/app/assets/stylesheets/origami.scss +++ b/app/assets/stylesheets/origami.scss @@ -10,6 +10,7 @@ @import "BSBMaterial/style"; @import "BSBMaterial/themes/all-themes"; @import "reset"; +@import "fileinput.min"; /* Reset */ @@ -452,6 +453,10 @@ iframe { width: 150%; height: 100%; } + +#receipt_pdf { + height: 400px; +} /* End iframe */ /* section class for webview */ diff --git a/app/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index f34c0f6f..1bb257de 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -6,53 +6,57 @@ 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 = OrderReservation.addCustomer(params) + customer_id = customer.id + end + render :json => { :status => true, :data => { :customer_id => customer_id} } + end end 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 @@ -60,15 +64,64 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController order_reservation_id, flag = OrderReservation.addOrderReservationInfo(order_reservation) if flag #&& ENV["SERVER_MODE"] != 'cloud' + shop = Shop.find_by_id(1) + if !shop.shop_code.nil? + shop_code = shop.shop_code + 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 - end - - if flag - render :json => { :status => true, :order_reservation_id => order_reservation_id, :message => "Order reservation is successfully created!" } + ActionCable.server.broadcast "order_reservation_channel",data: order_reservation,shop_code: shop_code 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 + order_reservation_id = params[:id] + status = params[:status] + remark = params[:remark] + + if params[:status] && params[:remark] + reason = status +"||"+remark + order_reservation = OrderReservation.find(order_reservation_id) + + if status == 'REMOVE' + if order_reservation.status == "new" || order_reservation.status == "accepted" + OrderReservation.update_order_reservation(order_reservation_id, nil, "rejected",nil,remark) + result = {:status=> true, :message => "rejected" } + else + result = {:status=> false, :message => "Status :: "+order_reservation.status+" cann't remove!" } + end + elsif status == 'FOC' + if order_reservation.status == "new" || order_reservation.status == "accepted" || order_reservation.status == "send_to_kitchen" + OrderReservation.update_order_reservation(order_reservation_id, nil, nil,nil,reason) + result = {:status=> true, :message => "FOC successfully" } + else + result = {:status=> false, :message => "Status :: "+order_reservation.status+" cann't get FOC!" } + end + elsif status == 'VOID' + if order_reservation.status == "ready_to_delivery" + OrderReservation.update_order_reservation(order_reservation_id, nil, nil,nil,reason) + result = {:status=> true, :message => "VOID successfully" } + else + result = {:status=> false, :message => "Status :: "+order_reservation.status+" cann't VOID!" } + end + end + else + result = { :status => false, :order_reservation_id => order_reservation_id, :message => "status and remark is required!" } + end + + render :json => result end end diff --git a/app/controllers/api/orders_controller.rb b/app/controllers/api/orders_controller.rb index d937c6c3..49afe833 100755 --- a/app/controllers/api/orders_controller.rb +++ b/app/controllers/api/orders_controller.rb @@ -220,33 +220,39 @@ class Api::OrdersController < Api::ApiController if ENV["SERVER_MODE"] != "cloud" #no print in cloud server # print assigned_item = AssignedOrderItem.find_by_instance_code(order_item.item_instance_code) - # order queue stations - oqs = assigned_item.order_queue_station + assigned_items = AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'") - order_slim_pdf = Lookup.collection_of("print_settings") #print_settings with name:OrderSlimPdf - - unique_code="OrderItemPdf" - if !order_slim_pdf.empty? - order_slim_pdf.each do |order_item_slim| - if order_item_slim[0] == 'OrderSlimPdf' - if order_item_slim[1] == '1' - unique_code="OrderItemSlimPdf" - else - unique_code="OrderItemPdf" - end - elsif order_item_slim[0] == 'OrderSetPdf' - if order_item_slim[1] == '1' - unique_code="OrderSetItemPdf" - else - unique_code="OrderItemPdf" + if !assigned_items.nil? + assigned_items.each do |assign_item| + # order queue stations + oqs = assign_item.order_queue_station + + order_slim_pdf = Lookup.collection_of("print_settings") #print_settings with name:OrderSlimPdf + + unique_code="OrderItemPdf" + if !order_slim_pdf.empty? + order_slim_pdf.each do |order_item_slim| + if order_item_slim[0] == 'OrderSlimPdf' + if order_item_slim[1] == '1' + unique_code="OrderItemSlimPdf" + else + unique_code="OrderItemPdf" + end + elsif order_item_slim[0] == 'OrderSetPdf' + if order_item_slim[1] == '1' + unique_code="OrderSetItemPdf" + else + unique_code="OrderItemPdf" + end + end end end + + print_settings=PrintSetting.find_by_unique_code(unique_code) + order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) + order_queue_printer.print_order_item(print_settings, oqs, order_item.order_id, order_items_id, print_status=" (Cancelled)", before_updated_qty ) end end - - print_settings=PrintSetting.find_by_unique_code(unique_code) - order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) - order_queue_printer.print_order_item(print_settings, oqs, order_item.order_id, order_items_id, print_status=" (Cancelled)", before_updated_qty ) end return return_json_status_with_code(200, "updated successfully!") diff --git a/app/controllers/api/restaurant/menu_controller.rb b/app/controllers/api/restaurant/menu_controller.rb index 96ba3cc0..011e4602 100755 --- a/app/controllers/api/restaurant/menu_controller.rb +++ b/app/controllers/api/restaurant/menu_controller.rb @@ -11,7 +11,10 @@ class Api::Restaurant::MenuController < Api::ApiController # to hash menu_array = [] all_menu.each do |m| - menu_array.push(m.to_json(:include => {:menu_categories => { :include => { :menu_items => { :include => [:menu_item_sets, :menu_item_instances => {:include => :menu_instance_item_sets}]} } }})) + menu_array.push(m.to_json(:include => {:menu_categories => + { :include => { :menu_items => + { :include => [:menu_item_sets, :menu_item_instances => + { :include => :menu_instance_item_sets}]} } }})) end #export Checksum file generate by md5 diff --git a/app/controllers/concerns/token_verification.rb b/app/controllers/concerns/token_verification.rb index b49ef597..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 = "local" #request.subdomain.downcase + "." + request.domain.downcase + from = request.subdomain.downcase + "." + request.domain.downcase #"local" aes = MyAesCrypt.new return aes.checkKeyForAuth(from, token) end diff --git a/app/controllers/crm/customers_controller.rb b/app/controllers/crm/customers_controller.rb index 1d0ad8e4..97f75135 100755 --- a/app/controllers/crm/customers_controller.rb +++ b/app/controllers/crm/customers_controller.rb @@ -96,7 +96,7 @@ class Crm::CustomersController < BaseCrmController # POST /crm/customers # POST /crm/customers.json - def create + def create # Remove "" default first params[:customer][:tax_profiles].delete_at(0) @crm_customers = Customer.new(customer_params) diff --git a/app/controllers/oqs/edit_controller.rb b/app/controllers/oqs/edit_controller.rb index 4bc99f59..e8f0edb5 100644 --- a/app/controllers/oqs/edit_controller.rb +++ b/app/controllers/oqs/edit_controller.rb @@ -27,49 +27,55 @@ class Oqs::EditController < BaseOqsController remarks = params[:remarks] order_item = OrderItem.find(order_items_id) - before_updated_qty = order_item.qty + order = Order.find(order_item.order_id) + if qty_weight.to_i <= order_item.qty.to_i + before_updated_qty = order_item.qty - order_item.item_order_by = current_user.name - order_item.qty = qty_weight - order_item.remark = remarks - order_item.save + order_item.item_order_by = current_user.name + order_item.qty = qty_weight + order_item.remark = remarks + order_item.save - if ENV["SERVER_MODE"] != "cloud" #no print in cloud server - # print - assigned_item = AssignedOrderItem.find_by_instance_code(order_item.item_instance_code) - assigned_items = AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'") - - if !assigned_items.nil? - assigned_items.each do |assign_item| - # order queue stations - oqs = assign_item.order_queue_station + if ENV["SERVER_MODE"] != "cloud" && order.source == 'cashier' #no print in cloud server + # print + assigned_item = AssignedOrderItem.find_by_instance_code(order_item.item_instance_code) + assigned_items = AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'") + + if !assigned_items.nil? + assigned_items.each do |assign_item| + # order queue stations + oqs = assign_item.order_queue_station - order_slim_pdf = Lookup.collection_of("print_settings") #print_settings with name:OrderSlimPdf - - unique_code="OrderItemPdf" - if !order_slim_pdf.empty? - order_slim_pdf.each do |order_item_slim| - if order_item_slim[0] == 'OrderSlimPdf' - if order_item_slim[1] == '1' - unique_code="OrderItemSlimPdf" - else - unique_code="OrderItemPdf" - end - elsif order_item_slim[0] == 'OrderSetPdf' - if order_item_slim[1] == '1' - unique_code="OrderSetItemPdf" - else - unique_code="OrderItemPdf" + order_slim_pdf = Lookup.collection_of("print_settings") #print_settings with name:OrderSlimPdf + + unique_code="OrderItemPdf" + if !order_slim_pdf.empty? + order_slim_pdf.each do |order_item_slim| + if order_item_slim[0] == 'OrderSlimPdf' + if order_item_slim[1] == '1' + unique_code="OrderItemSlimPdf" + else + unique_code="OrderItemPdf" + end + elsif order_item_slim[0] == 'OrderSetPdf' + if order_item_slim[1] == '1' + unique_code="OrderSetItemPdf" + else + unique_code="OrderItemPdf" + end end end end - end - print_settings=PrintSetting.find_by_unique_code(unique_code) - order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) - order_queue_printer.print_order_item(print_settings, oqs, order_item.order_id, order_items_id, print_status=" (Cancelled)", before_updated_qty ) + print_settings=PrintSetting.find_by_unique_code(unique_code) + order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) + order_queue_printer.print_order_item(print_settings, oqs, order_item.order_id, order_items_id, print_status=" (Cancelled)", before_updated_qty ) + end end end + render :json => {:status=> true } + else + render :json => {:status=> false, :message => "Not allowed over quantity!" } end end diff --git a/app/controllers/origami/addorders_controller.rb b/app/controllers/origami/addorders_controller.rb index 100635cd..63cb8736 100755 --- a/app/controllers/origami/addorders_controller.rb +++ b/app/controllers/origami/addorders_controller.rb @@ -18,11 +18,15 @@ class Origami::AddordersController < BaseOrigamiController if check_mobile @webview = true end - - today = DateTime.now - day = Date.today.wday - @menus = Menu.all - @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + + # if params[:menu] == "true" + @menus = [] + @menu = [] + # else + # @menus = Menu.all + # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + # end + @table_id = params[:id] @table = DiningFacility.find(@table_id) @booking = @table.get_booking @@ -59,10 +63,12 @@ class Origami::AddordersController < BaseOrigamiController end def get_item_instance - @id = MenuItemInstance.find(params[:id]) + @instance = MenuItemInstance.find(params[:id]) end def get_menu() + puts "sssssssssssssss" +puts params[:id] if (params[:id]) #Pull this menu @menu = Menu.find_by_id(params[:id]) @@ -115,8 +121,6 @@ class Origami::AddordersController < BaseOrigamiController end items_arr.push(items) } -puts items_arr.to_json - puts "sssssssssssssssssssssss" # begin # if params[:order_source] == "quick_service" # customer_id = "CUS-000000000002" # for no customer id from mobile diff --git a/app/controllers/origami/dashboard_controller.rb b/app/controllers/origami/dashboard_controller.rb index 8bdd5c27..9977850f 100644 --- a/app/controllers/origami/dashboard_controller.rb +++ b/app/controllers/origami/dashboard_controller.rb @@ -3,6 +3,8 @@ class Origami::DashboardController < BaseOrigamiController def index @shop = Shop.first + + today = DateTime.now.strftime('%Y-%m-%d') # @orders = Sale::where("payment_status='new' and sale_status='bill' and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'").count() # @sales = Sale::where("payment_status='paid' and sale_status='completed' and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'").count() @@ -56,6 +58,13 @@ class Origami::DashboardController < BaseOrigamiController # get printer info @print_settings = PrintSetting.get_precision_delimiter() @current_user = current_user + #dine-in cashier + dinein_cashier = Lookup.collection_of('dinein_cashier') + @dinein_cashier = 0 + if !dinein_cashier[0].nil? + @dinein_cashier = dinein_cashier[0][1] + end + #quick service quick_service = Lookup.collection_of('quick_service') @quick_service = 0 @@ -74,4 +83,8 @@ class Origami::DashboardController < BaseOrigamiController end end +def get_all_menu + @menus = Menu.all +end + end diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index ed857104..81724ff5 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -30,9 +30,9 @@ class Origami::HomeController < BaseOrigamiController @membership = MembershipSetting::MembershipSetting @payment_methods = PaymentMethodSetting.all - bookings = Booking.all - if !bookings.today.nil? - @order_items_count = Hash.new + # bookings = Booking.all + # if !bookings.today.nil? + # @order_items_count = Hash.new # bookings.each do |booking| # if booking.sale_id.nil? && booking.booking_status != 'moved' # if !booking.booking_orders.empty? @@ -60,7 +60,7 @@ class Origami::HomeController < BaseOrigamiController # end # end # end - end + # end @dining.bookings.active.each do |booking| if booking.sale_id.nil? && booking.booking_status != 'moved' @@ -132,7 +132,7 @@ class Origami::HomeController < BaseOrigamiController def check_emp_access_code pin_code = params[:code] employee = Employee.find_by_emp_id(pin_code) - if employee && employee.role == "manager" + if employee && (employee.role == "manager" || employee.role == "supervisor") result = {:status=> true, :message=>"Success" } else result = {:status=> false, :message=>"Invalid Access Code" } diff --git a/app/controllers/origami/moveroom_controller.rb b/app/controllers/origami/moveroom_controller.rb index b7260863..8f1430a6 100755 --- a/app/controllers/origami/moveroom_controller.rb +++ b/app/controllers/origami/moveroom_controller.rb @@ -11,6 +11,8 @@ class Origami::MoveroomController < BaseOrigamiController @orders = Order.all.order('date desc') @status_order = "" + @status_sale = "" + @sale_array = Array.new @dining = DiningFacility.find(params[:dining_id]) @dining.bookings.each do |booking| if booking.sale_id.nil? @@ -18,21 +20,38 @@ class Origami::MoveroomController < BaseOrigamiController booking.booking_orders.each do |booking_order| order = Order.find(booking_order.order_id) @obj_order = order + @customer = order.customer @date = order.created_at + @booking= booking order.order_items.each do |item| @order_items.push(item) end + accounts = @customer.tax_profiles + @account_arr =[] + accounts.each do |acc| + account = TaxProfile.find(acc) + @account_arr.push(account) + end end @status_order = 'order' else sale = Sale.find(booking.sale_id) - if sale.sale_status != "completed" + if sale.sale_status != "completed" && sale.sale_status != "waste" && sale.sale_status != "spoile" + @sale_array.push(sale) if @status_order == 'order' @status_order = 'sale' end + @booking= booking @date = sale.created_at @status_sale = 'sale' @obj_sale = sale + @customer = sale.customer + accounts = @customer.tax_profiles + @account_arr =[] + accounts.each do |acc| + account = TaxProfile.find(acc) + @account_arr.push(account) + end end end end diff --git a/app/controllers/origami/movetable_controller.rb b/app/controllers/origami/movetable_controller.rb index eaf7fca1..7efdd46c 100755 --- a/app/controllers/origami/movetable_controller.rb +++ b/app/controllers/origami/movetable_controller.rb @@ -18,7 +18,6 @@ class Origami::MovetableController < BaseOrigamiController if booking.sale_id.nil? @order_items = Array.new booking.booking_orders.each do |booking_order| - order = Order.find(booking_order.order_id) @obj_order = order @customer = order.customer @@ -37,7 +36,7 @@ class Origami::MovetableController < BaseOrigamiController @status_order = 'order' else sale = Sale.find(booking.sale_id) - if sale.sale_status != "completed" + if sale.sale_status != "completed" && sale.sale_status != "waste" && sale.sale_status != "spoile" @sale_array.push(sale) if @status_order == 'order' @status_order = 'sale' diff --git a/app/controllers/origami/order_reservation_controller.rb b/app/controllers/origami/order_reservation_controller.rb index 12a3ee2f..a3421fbd 100644 --- a/app/controllers/origami/order_reservation_controller.rb +++ b/app/controllers/origami/order_reservation_controller.rb @@ -1,41 +1,43 @@ class Origami::OrderReservationController < BaseOrigamiController def index - @order = OrderReservation.latest_order + @order = OrderReservation.latest_order #.active @count_on_order = OrderReservation.get_count_on_order + @count_on_completed = OrderReservation.get_count_on_completed + @shop = Shop.find_by_id(1) end def update @id = params[:order_id] @status = params[:status] - expected_waiting_time = params[:expected_time] + min_type = params[:min_type] + if min_type != "" + expected_waiting_time = params[:expected_time] + else + expected_waiting_time = min_type + " " +params[:expected_time] + end + remark = params[:remark] + access_code = params[:access_code] @order_reservation = OrderReservation.find(@id) - status = true - - if status - if @status == "processed" - result = OrderReservation.create_doemal_order(@order_reservation,current_user) - elsif @status == "delivery" - OrderReservation.update_order_reservation(@id, nil, "ready_to_delivery") - response = OrderReservation.send_status_to_ordering(@order_reservation.callback_url,@order_reservation.transaction_ref,"ready_to_delivery") - result = {:status=> true, :message => "ready for delivery" } - elsif @status == "completed" - result = OrderReservation.update_doemal_payment(@order_reservation,current_user) - else - if @status == "cancel" - OrderReservation.update_order_reservation(@id, nil, "cancelled") - result = {:status=> true, :message => "rejected" } - else - OrderReservation.update_order_reservation(@id, nil, "accepted", expected_waiting_time) - result = {:status=> true, :message => "accepted" } - end - end - render :json => result.to_json + if @status == "processed" + result = OrderReservation.create_doemal_order(@order_reservation,current_user) + elsif @status == "delivery" + OrderReservation.update_order_reservation(@id, nil, "ready_to_delivery") + response = OrderReservation.send_status_to_ordering(@order_reservation.callback_url,@order_reservation.transaction_ref,"ready_to_delivery") + result = {:status=> true, :message => "ready for delivery" } + elsif @status == "completed" + result = OrderReservation.update_doemal_payment(@order_reservation,current_user) else - result = {:status=> false, :message => "Order not accepted !" } - render :json => result.to_json - end + 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) + result = {:status=> true, :message => "accepted" } + end + end + render :json => result.to_json end def get_order @@ -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/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 3c5219af..7df42118 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -279,6 +279,9 @@ class Origami::PaymentsController < BaseOrigamiController new_total = Sale.get_rounding_adjustment(saleObj.grand_total) @rounding_adj = new_total-saleObj.grand_total saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:@rounding_adj) + @sale_data.grand_total = new_total + @sale_data.old_grand_total = saleObj.grand_total + @sale_data.rounding_adjustment = @rounding_adj else @rounding_adj = @sale_data.rounding_adjustment end diff --git a/app/controllers/origami/quick_service_controller.rb b/app/controllers/origami/quick_service_controller.rb index d5d3437b..86433417 100644 --- a/app/controllers/origami/quick_service_controller.rb +++ b/app/controllers/origami/quick_service_controller.rb @@ -10,24 +10,30 @@ class Origami::QuickServiceController < ApplicationController def index today = DateTime.now day = Date.today.wday - @menus = Menu.all - @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + # if params[:menu] == "true" + @menus = [] + @menu = [] + # else + # @menus = Menu.all + # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + # end @zone = Zone.all @customer = Customer.all @tables = Table.all.active.order('status desc') @rooms = Room.all.active.order('status desc') - # @tables = Table.all.active.order('zone_id asc').group("zone_id") - # @rooms = Room.all.active.order('zone_id asc').group("zone_id") - # @all_table = Table.all.active.order('status desc') - # @all_room = Room.all.active.order('status desc') - render "origami/addorders/detail" + render "origami/addorders/detail" end def modify_order today = DateTime.now day = Date.today.wday - @menus = Menu.all - @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + # if params[:menu] == "true" + @menus = [] + @menu = [] + # else + # @menus = Menu.all + # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + # end if(params[:id][0,3] == "BKI") @table_id = nil @table = nil diff --git a/app/controllers/origami/sale_edit_controller.rb b/app/controllers/origami/sale_edit_controller.rb index 1c5b5430..0f27567a 100755 --- a/app/controllers/origami/sale_edit_controller.rb +++ b/app/controllers/origami/sale_edit_controller.rb @@ -5,8 +5,10 @@ class Origami::SaleEditController < BaseOrigamiController sale_id = params[:sale_id] if params[:table_id] @table_id = params[:table_id] + @table_type = DiningFacility.find(@table_id).type else @table_id = nil + @table_type = nil end @cashier_type = params[:type] @@ -48,10 +50,13 @@ class Origami::SaleEditController < BaseOrigamiController end end end - action_by = current_user.id - approved_by = Employee.find_by_emp_id(access_code) + # FOr Sale Audit + action_by = current_user.name + if access_code != "null" + action_by = Employee.find_by_emp_id(access_code).name + end 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, approved_by.name,remark,"SALEITEMVOID" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, action_by,remark,"SALEITEMVOID" ) saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount) ProductCommission.create_product_commission(@newsaleitem, saleitemObj) @@ -82,10 +87,12 @@ class Origami::SaleEditController < BaseOrigamiController order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id order = Order.find(order_id) - action_by = current_user.id - approved_by = Employee.find_by_emp_id(access_code) + action_by = current_user.name + if access_code != "null" + action_by = Employee.find_by_emp_id(access_code).name + end 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, approved_by.name,remark,"SALEITEMFOC" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, action_by,remark,"SALEITEMFOC" ) saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order.source) ProductCommission.create_product_commission(@newsaleitem, saleitemObj) @@ -124,10 +131,12 @@ class Origami::SaleEditController < BaseOrigamiController saleitemObj.unit_price = update_price 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) + action_by = current_user.name + if access_code != "null" + action_by = Employee.find_by_emp_id(access_code).name + end 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, approved_by.name,remark,"SALEITEMEDIT" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,sale.cashier_id, action_by,remark,"SALEITEMEDIT" ) # saleitemObj.remark = 'edit' unless saleitemObj.product_name.include? 'updated' @@ -175,10 +184,12 @@ class Origami::SaleEditController < BaseOrigamiController order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id order = Order.find(order_id) - action_by = current_user.id - approved_by = Employee.find_by_emp_id(access_code) + action_by = current_user.name + if access_code != "null" + action_by = Employee.find_by_emp_id(access_code).name + end 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, approved_by.name,remark,"ITEMCANCELVOID" ) + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,saleObj.cashier_id, action_by,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/split_bill_controller.rb b/app/controllers/origami/split_bill_controller.rb index 5f074bb5..2d2ca4fb 100755 --- a/app/controllers/origami/split_bill_controller.rb +++ b/app/controllers/origami/split_bill_controller.rb @@ -19,7 +19,9 @@ class Origami::SplitBillController < BaseOrigamiController table_bookings = Booking.where("dining_facility_id = #{dining_id} and sale_id IS NOT NULL") if !table_bookings.nil? table_bookings.each do |table_booking| - @sale_data.push(table_booking.sale) + if table_booking.sale.sale_status != 'waste' && table_booking.sale.sale_status != 'spoile' + @sale_data.push(table_booking.sale) + end end end diff --git a/app/controllers/origami/table_invoices_controller.rb b/app/controllers/origami/table_invoices_controller.rb index 1e8b1fbd..bc89d598 100755 --- a/app/controllers/origami/table_invoices_controller.rb +++ b/app/controllers/origami/table_invoices_controller.rb @@ -22,7 +22,7 @@ class Origami::TableInvoicesController < BaseOrigamiController end end #end rounding adjustment - if sale.sale_status != "completed" + if sale.sale_status != "completed" && sale.sale_status != "waste" && sale.sale_status != "spoile" @sale_array.push(sale) end end @@ -52,7 +52,7 @@ class Origami::TableInvoicesController < BaseOrigamiController end end #end rounding adjustment - if sale.sale_status != "completed" && sale.sale_status != 'void' + if sale.sale_status != "completed" && sale.sale_status != 'void' && sale.sale_status != "waste" && sale.sale_status != "spoile" @sale_array.push(sale) end end diff --git a/app/controllers/origami/void_controller.rb b/app/controllers/origami/void_controller.rb index d601b0c0..5d9aa923 100755 --- a/app/controllers/origami/void_controller.rb +++ b/app/controllers/origami/void_controller.rb @@ -72,9 +72,12 @@ class Origami::VoidController < BaseOrigamiController # FOr Sale Audit action_by = current_user.name - approved_by = Employee.find_by_emp_id(access_code) + if access_code != "null" + action_by = Employee.find_by_emp_id(access_code).name + end + # 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" ) + sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, action_by,remark,"SALEVOID" ) # For Print diff --git a/app/controllers/origami/waste_spoile_controller.rb b/app/controllers/origami/waste_spoile_controller.rb index de7df434..9cfde698 100755 --- a/app/controllers/origami/waste_spoile_controller.rb +++ b/app/controllers/origami/waste_spoile_controller.rb @@ -55,9 +55,11 @@ class Origami::WasteSpoileController < BaseOrigamiController # FOr Sale Audit action_by = current_user.name - approved_by = Employee.find_by_emp_id(access_code) + if access_code != "null" + action_by = Employee.find_by_emp_id(access_code).name + end # 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,remark ) + sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, action_by,remark,remark ) # For Print diff --git a/app/controllers/reports/order_reservation_controller.rb b/app/controllers/reports/order_reservation_controller.rb index fb9517e4..bb351982 100644 --- a/app/controllers/reports/order_reservation_controller.rb +++ b/app/controllers/reports/order_reservation_controller.rb @@ -1,7 +1,7 @@ class Reports::OrderReservationController < BaseReportController # authorize_resource :class => false def index - @payments = [["All Payment",''], ["Cash Payment","cash"], ["Credit Payment","creditnote"], ["FOC Payment","foc"], ["Other Payment","card"]] + @providers = [["All",''], ["Direct Delivery","direct_delivery"],["Pick-Up","pick_up"],["food2u","food2u"], ["ygndoor2door","ygndoor2door"]] from, to = get_date_range_from_params @@ -17,8 +17,9 @@ class Reports::OrderReservationController < BaseReportController @shift = ShiftSale.where('shift_started_at = ? and shift_closed_at = ? ',shift_sale.shift_started_at, shift_sale.shift_closed_at) end end - payment_type = params[:payment_type] - @sale_data = Sale.get_sales_by_order_reservation(@shift_sale_range,@shift,from,to,payment_type) + + provider = params[:provider] + @order_reservation_data = OrderReservation.get_order_reservation_by_shift(@shift_sale_range,@shift,from,to,provider) @from = from @to = to # get printer info @@ -40,7 +41,7 @@ class Reports::OrderReservationController < BaseReportController def show from, to = get_date_range_from_params - @sale_data = Sale.get_by_shift_sale(from,to,Sale::SALE_STATUS_COMPLETED) + @sale_data = Sale.get_by_shift_sale_by_item(from,to,Sale::SALE_STATUS_COMPLETED) date_arr = Array.new @sale_data.each do |sale| diff --git a/app/controllers/reports/receipt_no_controller.rb b/app/controllers/reports/receipt_no_controller.rb index a86fb9b2..aa1dd8bd 100755 --- a/app/controllers/reports/receipt_no_controller.rb +++ b/app/controllers/reports/receipt_no_controller.rb @@ -20,7 +20,7 @@ authorize_resource :class => false payment_type = params[:payment_type] @sale_data = Sale.get_shift_sales_by_receipt_no(@shift_sale_range,@shift,from,to,payment_type) @sale_taxes = Sale.get_separate_tax(@shift_sale_range,@shift,from,to,payment_type) - @tax_profiles = TaxProfile.order('order_by asc').limit(2) + @tax_profiles = TaxProfile.where('group_type = "cashier"').order('order_by asc').limit(2) @from = from @to = to # get printer info diff --git a/app/controllers/settings/cashier_terminals_controller.rb b/app/controllers/settings/cashier_terminals_controller.rb index 31e8da04..1d1c5497 100755 --- a/app/controllers/settings/cashier_terminals_controller.rb +++ b/app/controllers/settings/cashier_terminals_controller.rb @@ -16,10 +16,12 @@ class Settings::CashierTerminalsController < ApplicationController # GET /settings/cashier_terminals/new def new @settings_cashier_terminal = CashierTerminal.new + @server_mode = ENV["SERVER_MODE"] end # GET /settings/cashier_terminals/1/edit def edit + @server_mode = ENV["SERVER_MODE"] end # POST /settings/cashier_terminals 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/controllers/settings/order_queue_stations_controller.rb b/app/controllers/settings/order_queue_stations_controller.rb index adcbc507..2458096e 100755 --- a/app/controllers/settings/order_queue_stations_controller.rb +++ b/app/controllers/settings/order_queue_stations_controller.rb @@ -18,10 +18,12 @@ class Settings::OrderQueueStationsController < ApplicationController # GET /settings/order_queue_stations/new def new @settings_order_queue_station = OrderQueueStation.new + @server_mode = ENV["SERVER_MODE"] end # GET /settings/order_queue_stations/1/edit def edit + @server_mode = ENV["SERVER_MODE"] end # POST /settings/order_queue_stations diff --git a/app/models/ability.rb b/app/models/ability.rb index 497e9322..fbf66f57 100755 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -248,6 +248,7 @@ class Ability can :reprint, :payment can :rounding_adj, :payment can :print, :payment + can :foc, :payment can :manage, Commission can :manage, Commissioner diff --git a/app/models/customer.rb b/app/models/customer.rb index c380f24b..b05caaf6 100755 --- a/app/models/customer.rb +++ b/app/models/customer.rb @@ -352,28 +352,6 @@ class Customer < ApplicationRecord end - #new customer for doemal - def self.addCustomer(params) - if params[:gender] == "female" - gender = "Female" - else - gender = "Male" - end - customer = Customer.new - customer.name = params[:name] - customer.email = params[:email] - customer.contact_no = params[:contact_no] - customer.gender = params[:gender] - customer.address = params[:address] - customer.date_of_birth = params[:date_of_birth] ? Time.parse(params[:date_of_birth]).strftime("%Y-%m-%d") : '' - customer.membership_id = params[:membership_id] - customer.customer_type = "Takeaway" - customer.tax_profiles = ["2"] - customer.save - - return customer - end - WALKIN = "CUS-000000000001" TAKEAWAY = "CUS-000000000002" diff --git a/app/models/menu_category.rb b/app/models/menu_category.rb index 948ffe69..218bacb8 100755 --- a/app/models/menu_category.rb +++ b/app/models/menu_category.rb @@ -81,7 +81,7 @@ class MenuCategory < ApplicationRecord def get_sub_category menu_category = MenuCategory.find_by_menu_category_id(self.id) - if menu_category + if !menu_category.nil? return true end return false 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_queue_station.rb b/app/models/order_queue_station.rb index 889491ed..1541828c 100755 --- a/app/models/order_queue_station.rb +++ b/app/models/order_queue_station.rb @@ -57,7 +57,11 @@ class OrderQueueStation < ApplicationRecord if oqs.auto_print && order_source != "quick_service" if oqs_order_items.length > 0 - print_slip(oqs, order, oqs_order_items) + if oqs.cut_per_item + print_slip_item(oqs, order, oqs_order_items) + else + print_slip(oqs, order, oqs_order_items) + end is_auto_printed = true end end @@ -91,8 +95,12 @@ class OrderQueueStation < ApplicationRecord end if oqs.auto_print && order_source != "quick_service" - if oqs_order_items.length > 0 - print_slip(oqs, order, oqs_order_items) + if oqs_order_items.length > 0 + if oqs.cut_per_item + print_slip_item(oqs, order, oqs_order_items) + else + print_slip(oqs, order, oqs_order_items) + end is_auto_printed = true end end @@ -137,8 +145,12 @@ class OrderQueueStation < ApplicationRecord end if oqs.auto_print - if oqs_order_items.length > 0 - print_slip(oqs, order, oqs_order_items) + if oqs_order_items.length > 0 + if oqs.cut_per_item + print_slip_item(oqs, order, oqs_order_items) + else + print_slip(oqs, order, oqs_order_items) + end is_auto_printed = true end end @@ -165,8 +177,12 @@ class OrderQueueStation < ApplicationRecord end if oqs.auto_print - if oqs_order_items.length > 0 - print_slip(oqs, order, oqs_order_items) + if oqs_order_items.length > 0 + if oqs.cut_per_item + print_slip_item(oqs, order, oqs_order_items) + else + print_slip(oqs, order, oqs_order_items) + end is_auto_printed = true end end @@ -211,7 +227,7 @@ class OrderQueueStation < ApplicationRecord end #Print order_item in 1 slip per item - def print_slip_item(oqs, assigned_item) + def print_slip_item(oqs, order, assigned_items) order_slim_pdf = Lookup.collection_of("print_settings") #print_settings with name:OrderSlimPdf unique_code="OrderItemPdf" if !order_slim_pdf.empty? @@ -232,14 +248,17 @@ class OrderQueueStation < ApplicationRecord end end - order_item = OrderItem.where("order_id='#{assigned_item.order_id}' AND item_instance_code='#{assigned_item.instance_code}'").first() + # order_item = OrderItem.where("order_id='#{assigned_item.order_id}' AND item_instance_code='#{assigned_item.instance_code}'").first() # print when complete click print_settings=PrintSetting.find_by_unique_code(unique_code) order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) - order_queue_printer.print_order_item(print_settings, oqs,item.order_id, order_item.order_items_id, print_status="" ) - + if !assigned_items.nil? + assigned_items.each do |order_item| + order_queue_printer.print_order_item(print_settings, oqs,order_item.order_id, order_item.order_items_id, print_status="" ) + end + end # update print status for completed same order items - assigned_order_item.each do |ai| + AssignedOrderItem.where("order_id = '#{ order.order_id }'").find_each do |ai| ai.print_status=true ai.save end diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index e5b95f8c..84209845 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -7,6 +7,7 @@ class OrderReservation < ApplicationRecord has_many :order_reservation_items has_one :delivery + scope :active, -> { where("created_at BETWEEN '#{DateTime.now.utc.beginning_of_day}' AND '#{DateTime.now.utc.end_of_day}'") } scope :latest_order, -> { order("order_reservation_id desc, created_at desc") } SEND_TO_KITCHEN = "send_to_kitchen" @@ -14,6 +15,28 @@ class OrderReservation < ApplicationRecord DELIVERED = "delivered" COMPLETED = "completed" + #new customer for doemal + def self.addCustomer(params) + if params[:gender] == "female" + gender = "Female" + else + gender = "Male" + end + customer = Customer.new + customer.name = params[:name] + customer.email = params[:email] + customer.contact_no = params[:contact_no] ? params[:contact_no] : '' + customer.gender = gender + customer.address = params[:address] ? params[:address] : '' + customer.date_of_birth = params[:date_of_birth] ? Time.parse(params[:date_of_birth]).strftime("%Y-%m-%d") : '' + customer.membership_id = params[:membership_id] + customer.customer_type = "Takeaway" + customer.tax_profiles = ["2"] + customer.save + + return customer + end + def self.addOrderReservationInfo(order_reserve) Rails.logger.debug order_reserve.to_s check_order_reservation = OrderReservation.where("transaction_ref = ?",order_reserve[:reference]) @@ -29,7 +52,7 @@ class OrderReservation < ApplicationRecord order_reservation.payment_type = order_reserve[:payment_info][:payment_type] order_reservation.payment_status = order_reserve[:payment_info][:payment_status] order_reservation.payment_ref = order_reserve[:payment_info][:payment_ref] - order_reservation.taxes = order_reserve[:payment_info][:taxes] + order_reservation.taxes = order_reserve[:payment_info][:taxes].to_json order_reservation.total_amount = order_reserve[:payment_info][:sub_total] order_reservation.total_tax = order_reserve[:payment_info][:total_tax] order_reservation.discount_amount = order_reserve[:payment_info][:discount_amount] @@ -39,7 +62,7 @@ class OrderReservation < ApplicationRecord end if order_reserve[:reservation_info] order_reservation.total_customer = order_reserve[:reservation_info][:total_user] - order_reservation.reservation_remark = order_reserve[:reservation_info][:reservation_note] + order_reservation.order_remark = order_reserve[:reservation_info][:reservation_note] end order_reservation.save! if order_reserve[:order_info][:items] @@ -70,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 @@ -101,9 +121,12 @@ class OrderReservation < ApplicationRecord #order reservation status updated update_order_reservation(order.id, @sale.sale_id, SEND_TO_KITCHEN) - result = {:status=> @status, :data => @sale, :message => "created" } - return result + result = {:status=> @status, :data => @sale, :message => "send to kitchen" } + else + result = {:status=> @status, :message => "No current shift open for this employee!" } end + + return result end def self.update_doemal_payment(order,current_user) @@ -137,7 +160,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") @@ -155,9 +178,10 @@ class OrderReservation < ApplicationRecord end Rails.logger.debug "Doemal URL" + base_url post_url = base_url + url - - if !waiting_time.nil? - send_params = {id: ref_no, waiting_time: waiting_time, status: status} + if waiting_time != "" + send_params = {id: ref_no,type: min_type, waiting_time: waiting_time, status: status} + elsif reason != "" + send_params = {id: ref_no, status: status, reason: reason} else send_params = {id: ref_no, status: status} end @@ -184,20 +208,77 @@ 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 end if !expected_waiting_time.nil? - order_reservation.expected_waiting_time = DateTime.parse(expected_waiting_time).utc + order_reservation.expected_waiting_time = expected_waiting_time + end + if !status.nil? + order_reservation.status = status + end + if !remark.nil? + order_reservation.order_remark = remark + end + if status == "delivered" + order_reservation.payment_status = "paid" end - order_reservation.status = status 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 - order_reservation = OrderReservation.select("COUNT(order_reservation_id) as count, status").group("status") + order_reservation = OrderReservation.select("COUNT(order_reservation_id) as count, status") + .where("status != 'delivered'") + .group("status") + end + + def self.get_count_on_completed + order_reservation = OrderReservation.select("COUNT(order_reservation_id) as count") + .where("created_at BETWEEN '#{DateTime.now.beginning_of_day}' AND '#{DateTime.now.end_of_day}' AND status = 'delivered'").first() end def self.get_pending_orders @@ -208,34 +289,80 @@ 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 - today = Time.now.utc - order_reservation = OrderReservation.where("status='accepted' and requested_time > '#{today}'") + 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 - today = Time.now.utc - order_reservation = OrderReservation.where("status='send_to_kitchen' and requested_time > '#{today}'") + 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 + def self.get_order_reservation_by_shift(shift_sale_range,shift,from,to,provider) + ## => left join -> show all sales although no orders + if provider.blank? + provider = '' + else + if provider.present? + provider = " and deliveries.provider = '#{provider}'" + end + end + + query = OrderReservation.select("order_reservations.*, deliveries.provider, deliveries.delivery_fee, customers.name, customers.email") + .joins(" JOIN deliveries on deliveries.order_reservation_id = order_reservations.order_reservation_id") + .joins(" JOIN customers on customers.customer_id = order_reservations.customer_id") + .joins(" JOIN sales on sales.sale_id = order_reservations.sale_id") + if shift.present? + query = query.where("sales.shift_sale_id in (?) #{provider} and sales.sale_status= 'completed' and sale_payments.payment_amount != 0", shift.to_a) + .joins("join sale_payments on sale_payments.sale_id = sales.sale_id") + .group("sales.sale_id") + elsif shift_sale_range.present? + query = query.where("sales.sale_status='completed' #{provider} and sale_payments.payment_amount != 0 and sales.shift_sale_id in (?)",shift_sale_range.to_a) + .joins("join sale_payments on sale_payments.sale_id = sales.sale_id") + .group("sales.sale_id") + else + query = query.where("sales.sale_status='completed' and sales.receipt_date between ? and ? #{provider} and sale_payments.payment_amount != 0",from,to) + .joins("join sale_payments on sale_payments.sale_id = sales.sale_id") + .group("sales.sale_id") + end + return query +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 e8a203fa..60cf0d7a 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -430,28 +430,55 @@ class Sale < ApplicationRecord # customer.tax_profiles.each do |cus_tax| # if cus_tax.to_i == tax.id if tax.group_type.to_s == order_source.to_s - sale_tax = SaleTax.new(:sale => sale) - sale_tax.tax_name = tax.name - sale_tax.tax_rate = tax.rate + if customer.customer_type.downcase == 'takeaway' + if tax.name.downcase == 'commercial tax' + sale_tax = SaleTax.new(:sale => sale) + sale_tax.tax_name = tax.name + sale_tax.tax_rate = tax.rate - # substract , to give after discount - total_tax = total_taxable - total_discount - #include or execulive - if tax.inclusive - rate = tax.rate - divided_value = (100 + rate)/rate - sale_tax.tax_payable_amount = total_tax / divided_value - else - sale_tax.tax_payable_amount = total_tax * tax.rate / 100 - total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount - end - #new taxable amount is standard rule for step by step - if shop.calc_tax_order - total_taxable = total_taxable + sale_tax.tax_payable_amount - end + # substract , to give after discount + total_tax = total_taxable - total_discount + #include or execulive + if tax.inclusive + rate = tax.rate + divided_value = (100 + rate)/rate + sale_tax.tax_payable_amount = total_tax / divided_value + else + sale_tax.tax_payable_amount = total_tax * tax.rate / 100 + total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount + end + #new taxable amount is standard rule for step by step + if shop.calc_tax_order + total_taxable = total_taxable + sale_tax.tax_payable_amount + end - sale_tax.inclusive = tax.inclusive - sale_tax.save + sale_tax.inclusive = tax.inclusive + sale_tax.save + end + else + sale_tax = SaleTax.new(:sale => sale) + sale_tax.tax_name = tax.name + sale_tax.tax_rate = tax.rate + + # substract , to give after discount + total_tax = total_taxable - total_discount + #include or execulive + if tax.inclusive + rate = tax.rate + divided_value = (100 + rate)/rate + sale_tax.tax_payable_amount = total_tax / divided_value + else + sale_tax.tax_payable_amount = total_tax * tax.rate / 100 + total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount + end + #new taxable amount is standard rule for step by step + if shop.calc_tax_order + total_taxable = total_taxable + sale_tax.tax_payable_amount + end + + sale_tax.inclusive = tax.inclusive + sale_tax.save + end end # end # end @@ -484,6 +511,33 @@ class Sale < ApplicationRecord # customer.tax_profiles.each do |cus_tax| # if cus_tax.to_i == tax.id if tax.group_type.to_s == order_source.to_s + if customer.customer_type.downcase == 'takeaway' + if tax.name.downcase == 'commercial tax' + sale_tax = SaleTax.new(:sale => self) + sale_tax.tax_name = tax.name + sale_tax.tax_rate = tax.rate + + # substract , to give after discount + total_tax = total_taxable - self.total_discount + #include or execulive + if tax.inclusive + rate = tax.rate + divided_value = (100 + rate)/rate + sale_tax.tax_payable_amount = total_tax / divided_value + else + sale_tax.tax_payable_amount = total_tax * tax.rate / 100 + total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount + end + + #new taxable amount is standard rule for step by step + if shop.calc_tax_order + total_taxable = total_taxable + sale_tax.tax_payable_amount + end + + sale_tax.inclusive = tax.inclusive + sale_tax.save + end + else sale_tax = SaleTax.new(:sale => self) sale_tax.tax_name = tax.name sale_tax.tax_rate = tax.rate @@ -507,6 +561,7 @@ class Sale < ApplicationRecord sale_tax.inclusive = tax.inclusive sale_tax.save + end end # end # end diff --git a/app/models/sale_item.rb b/app/models/sale_item.rb index fc32098f..d01ee5e0 100755 --- a/app/models/sale_item.rb +++ b/app/models/sale_item.rb @@ -98,9 +98,8 @@ class SaleItem < ApplicationRecord discount_accounts = [] Account.all.each do |a| discount_account = {:name => a.title, :price => 0} - # Check for actual sale items - sale_items.where("status = 'Discount'").find_each do |si| + sale_items.where("status = 'Discount'").each do |si| if si.account_id == a.id discount_account[:price] = (discount_account[:price].abs + si.price.abs) * (1) end diff --git a/app/pdf/order_set_item_pdf.rb b/app/pdf/order_set_item_pdf.rb index 1e7b9c7f..14a8ff62 100755 --- a/app/pdf/order_set_item_pdf.rb +++ b/app/pdf/order_set_item_pdf.rb @@ -4,8 +4,8 @@ class OrderSetItemPdf < Prawn::Document def initialize(print_settings,order_set_item, print_status, options, alt_name, before_updated_qty) self.page_width = print_settings.page_width self.page_height = print_settings.page_height - self.header_font_size = printer_settings.header_font_size.to_i - self.item_font_size = printer_settings.item_font_size.to_i + self.header_font_size = print_settings.header_font_size.to_i + self.item_font_size = print_settings.item_font_size.to_i self.margin = 0 self.price_width = 40 # No Need for item self.qty_width = 40 diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb index 95a6a277..59e6a320 100755 --- a/app/pdf/receipt_bill_pdf.rb +++ b/app/pdf/receipt_bill_pdf.rb @@ -206,7 +206,6 @@ 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/uploaders/commissioner_image_uploader.rb b/app/uploaders/commissioner_image_uploader.rb index 639ce7d7..8baa6dac 100644 --- a/app/uploaders/commissioner_image_uploader.rb +++ b/app/uploaders/commissioner_image_uploader.rb @@ -19,6 +19,14 @@ class CommissionerImageUploader < CarrierWave::Uploader::Base # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + def filename + if Shop.find(1).shop_code.nil? + "#{original_filename}" if original_filename.present? + else + "#{Shop.find(1).shop_code}_#{original_filename}" if original_filename.present? + end + end + # def cache_dir # '/tmp/images' # end diff --git a/app/uploaders/customer_image_uploader.rb b/app/uploaders/customer_image_uploader.rb index 1de0f3ad..3c4c6f67 100644 --- a/app/uploaders/customer_image_uploader.rb +++ b/app/uploaders/customer_image_uploader.rb @@ -19,6 +19,14 @@ class CustomerImageUploader < CarrierWave::Uploader::Base # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + def filename + if Shop.find(1).shop_code.nil? + "#{original_filename}" if original_filename.present? + else + "#{Shop.find(1).shop_code}_#{original_filename}" if original_filename.present? + end + end + # def cache_dir # '/tmp/images' # end diff --git a/app/uploaders/employee_image_uploader.rb b/app/uploaders/employee_image_uploader.rb index fd64db42..f1e32849 100644 --- a/app/uploaders/employee_image_uploader.rb +++ b/app/uploaders/employee_image_uploader.rb @@ -19,6 +19,14 @@ class EmployeeImageUploader < CarrierWave::Uploader::Base # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + def filename + if Shop.find(1).shop_code.nil? + "#{original_filename}" if original_filename.present? + else + "#{Shop.find(1).shop_code}_#{original_filename}" if original_filename.present? + end + end + # def cache_dir # '/tmp/images' # end diff --git a/app/uploaders/menu_item_image_uploader.rb b/app/uploaders/menu_item_image_uploader.rb index 90755159..fdf63f8d 100755 --- a/app/uploaders/menu_item_image_uploader.rb +++ b/app/uploaders/menu_item_image_uploader.rb @@ -19,6 +19,14 @@ class MenuItemImageUploader < CarrierWave::Uploader::Base # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + def filename + if Shop.find(1).shop_code.nil? + "#{original_filename}" if original_filename.present? + else + "#{Shop.find(1).shop_code}_#{original_filename}" if original_filename.present? + end + end + # def cache_dir # '/tmp/images' # end diff --git a/app/uploaders/product_image_uploader.rb b/app/uploaders/product_image_uploader.rb index fd037f0a..4b702a00 100755 --- a/app/uploaders/product_image_uploader.rb +++ b/app/uploaders/product_image_uploader.rb @@ -19,6 +19,14 @@ class ProductImageUploader < CarrierWave::Uploader::Base # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + def filename + if Shop.find(1).shop_code.nil? + "#{original_filename}" if original_filename.present? + else + "#{Shop.find(1).shop_code}_#{original_filename}" if original_filename.present? + end + end + # def cache_dir # '/tmp/images' # end diff --git a/app/uploaders/shop_image_uploader.rb b/app/uploaders/shop_image_uploader.rb index 63a01c21..009d83d9 100644 --- a/app/uploaders/shop_image_uploader.rb +++ b/app/uploaders/shop_image_uploader.rb @@ -19,6 +19,14 @@ class ShopImageUploader < CarrierWave::Uploader::Base # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + def filename + if Shop.find(1).shop_code.nil? + "#{original_filename}" if original_filename.present? + else + "#{Shop.find(1).shop_code}_#{original_filename}" if original_filename.present? + end + end + # def cache_dir # '/tmp/images' # end diff --git a/app/views/crm/customers/edit.json.jbuilder b/app/views/crm/customers/edit.json.jbuilder index 60148085..555989a4 100755 --- a/app/views/crm/customers/edit.json.jbuilder +++ b/app/views/crm/customers/edit.json.jbuilder @@ -1,4 +1,4 @@ json.extract! @crm_customer, :id, :name, :company, :contact_no, :email, :date_of_birth, :membership_id, :membership_type, :membership_authentication_code, - :salutation, :gender,:nrc_no,:address,:card_no, :paypar_account_no, :customer_type, :tax_profiles + :salutation, :gender,:nrc_no,:address,:card_no, :paypar_account_no, :customer_type, :image_path, :tax_profiles json.url crm_customer_url(@crm_customer, format: :json) \ No newline at end of file diff --git a/app/views/crm/customers/index.html.erb b/app/views/crm/customers/index.html.erb index 87f3cabd..96f1f985 100755 --- a/app/views/crm/customers/index.html.erb +++ b/app/views/crm/customers/index.html.erb @@ -185,7 +185,7 @@ $(document).on('click',".customer_tr",function(){ url: url, data: {}, dataType: "json", - success: function(data) { + success: function(data) { // Selected for Taxes var taxes = JSON.stringify(data.tax_profiles); var parse_taxes = JSON.parse(taxes); @@ -193,7 +193,7 @@ $(document).on('click',".customer_tr",function(){ $("#customer_tax_profiles option[value='" + value + "']").attr("selected","selected").css({'color':'#fff','background':'#215d9c'}); }); - $('#customer_id').val(data.id); + $('#customer_id').val(data.id); $('#customer_name').val(data.name); $('#customer_company').val(data.company); $('#customer_contact_no').val(data.contact_no); @@ -205,6 +205,9 @@ $(document).on('click',".customer_tr",function(){ $('#paypar_account_no').val(data.paypar_account_no); $('#customer_address').val(data.address); $('#customer_date_of_birth').val(data.date_of_birth); + if(data.image_path.url!=undefined && data.image_path.url!=null){ + $('.menu-item-img .img-thumbnail').attr('src',data.image_path.url); + } $('#customer_membership_type').val(data.membership_type); $('.selectpicker > option[value="'+data.membership_type+'"]').attr('selected','selected'); if (data.gender == 'Male') { diff --git a/app/views/crm/customers/show.json.jbuilder b/app/views/crm/customers/show.json.jbuilder index ffc312a2..3a6a8cb9 100755 --- a/app/views/crm/customers/show.json.jbuilder +++ b/app/views/crm/customers/show.json.jbuilder @@ -1,4 +1,4 @@ json.extract! @crm_customer, :id, :name, :company, :contact_no, :email, :date_of_birth, :membership_id, :membership_type, :membership_authentication_code, - :salutation, :gender,:nrc_no,:address,:card_no, :paypar_account_no, :customer_type, :tax_profiles + :salutation, :gender,:nrc_no,:address,:card_no, :paypar_account_no, :customer_type, :image_path, :tax_profiles json.url crm_customer_url(@crm_customer, format: :json) diff --git a/app/views/crm/dining_queues/_form.html.erb b/app/views/crm/dining_queues/_form.html.erb index 51e2c097..7c50a06d 100755 --- a/app/views/crm/dining_queues/_form.html.erb +++ b/app/views/crm/dining_queues/_form.html.erb @@ -11,8 +11,8 @@ <%= f.input :queue_no , :class => "dining",:id => "dining", :readonly => true%> <%= f.hidden_field :customer_id %> <%= f.input :name %> - <%= f.input :contact_no %> - <%= f.input :seater %> + <%= f.input :contact_no , input_html: { min: 1, :onkeypress => "return isNumberKey(event);", :onkeyup => "notChar(this.value);" } %> + <%= f.input :seater , input_html: { min: 1, :onkeypress => "return isNumberKey(event);", :onkeyup => "notNegative(this.value);" } %> <%= f.input :remark %>


@@ -111,11 +111,29 @@ \ No newline at end of file diff --git a/app/views/origami/home/index.html.erb b/app/views/origami/home/index.html.erb index 31386cfe..e1cdb699 100755 --- a/app/views/origami/home/index.html.erb +++ b/app/views/origami/home/index.html.erb @@ -142,7 +142,6 @@ $(document).ready(function(){ var webview = <%= @webview %>; showHideNavbar(webview,"index"); - $(".tables").on('click', function(){ var dining_id = $(this).attr("data-id"); window.location.href = '/origami/table/' + dining_id; diff --git a/app/views/origami/home/show.html.erb b/app/views/origami/home/show.html.erb index 54dd9e41..2915d3ca 100755 --- a/app/views/origami/home/show.html.erb +++ b/app/views/origami/home/show.html.erb @@ -487,8 +487,13 @@ <% if current_login_employee.role != "waiter" %> - Edit - Void + <% if current_login_employee.role == "cashier" %> + Edit + Void + <% else %> + + +
+
+
+
MOVE --> ' <%= @dining.name %> ' to
+ + <% if @status_order == 'order' && @status_sale != 'sale' %> + <% if !@obj_order.nil? %> +
+ <% else %> +
+ <% end %> + <% if !@booking.nil? %> + ORDER DETAILS | Table <%= @dining.name rescue "" %> + <% if @booking.checkout_by.nil? && !@booking.reserved_by.nil? %> + <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <%= @booking.checkout_at.utc.getlocal.strftime("%I:%M %p") %> + <% else %> + Checkin Time : <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> + <% end %> + <% end %> +
+ <% elsif @status_sale == 'sale' %> +
INVOICE DETAILS | Table <%= @dining.name rescue "" %> + <% if !@booking.reserved_by.nil? && %> + <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <%= @booking.checkout_at.utc.getlocal.strftime("%I:%M %p") %> + <% else %> + Checkin Time : <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> + <% end %> +
+ <% else %> + ORDER DETAILS | Table <%= @dining.name rescue "" %> + <% end %> +
+
+
+
+ <% if (!@sale_array.empty?) && (!@date.nil?) %> +
+   Receipt No: + <% if @status_sale == 'sale' %> + <%= @sale_array[0].receipt_no rescue '' %> + <% end %> + +
+
+
+ Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y-%I:%M %p") rescue '-' %> +
+
+ <% elsif !@date.nil? %> +
+   Order No: + <% if @status_order == 'order' %> + <%= @obj_order.order_id rescue '' %> + <% end %> + +
+
+
+ Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y") rescue '-' %> +
+
+ <% end %> +
+
+
+
+ <% if @status_sale == 'sale' && !@sale_array.empty? %> + +   Customer : <%= @sale_array[0].customer.name rescue '' %> + <% elsif @status_order == 'order' && !@customer.nil? + %> + +   Customer : <%= @customer.name rescue "" %> + <% end %> + +
+
+
+
+ + + + + + + + + + + <% + count = 0 + sub_total = 0 + if @status_sale == "sale" + @sale_array[0].sale_items.each do |sale_item| + count += 1 + sub_total = sub_total + sale_item.price + %> + + <% unless sale_item.price <= 0 %> + + + + + + + <% + end + end + end + + if @status_order == 'order' && @status_sale != 'sale' + unless @order_items.nil? || @order_items.empty? + count = 0 + @order_items.each do |order_item | + count += 1 + sub_total = sub_total + (order_item.price * order_item.qty) + + #unless order_item.price <= 0 %> + + + + + + + <% + #end + end + end + end + %> + +
#ItemsQTYPrice
<%= count %><%= sale_item.product_name %><%= sale_item.qty %><%= sale_item.price %>
<%= count %><%= order_item.item_name %><%= order_item.qty %><%= order_item.qty*order_item.price %>
+
+
+<% +if @status_sale == 'sale' + unless @order_items.nil? + %> + Pending New Order + + <% + @order_items.each do |order_item | + %> + + + + + + + + <% + end + %> +
<%= order_item.item_name %><%= order_item.qty %><%= order_item.qty*order_item.price %>
+ + <% + else + @sale_array.each do |sale| + if @sale_array.size > 1 + unless sale.receipt_no == @sale_array[0].receipt_no + %> + Pending Payment + + + + + +
Receipt No - <%= sale.receipt_no %>
+ <% + end + end + end + end +end +%> +
+
+
MOVE ROOM
+
+
+ + +
+ + + + +
+
+
diff --git a/app/views/origami/movetable/move_dining.html.erb b/app/views/origami/movetable/move_dining.html.erb index 76f704e8..64102211 100755 --- a/app/views/origami/movetable/move_dining.html.erb +++ b/app/views/origami/movetable/move_dining.html.erb @@ -22,27 +22,27 @@
<% @tables.each do |table| %> <% if table.status == 'occupied' %> - <% if table.get_booking.nil? %> - <% if table.get_checkout_booking.nil? %> -
- <% else %> -
- <% end %> -
- <%= table.name %> -
-
- <% else %> - <% if table.get_checkout_booking.nil? %> -
- <% else %> -
- <% end %> -
- <%= table.name %> + <% if table.get_booking.nil? %> + <% if table.get_checkout_booking.nil? %> +
+ <% else %> +
+ <% end %> +
+ <%= table.name %> +
-
- <% end %> + <% else %> + <% if table.get_checkout_booking.nil? %> +
+ <% else %> +
+ <% end %> +
+ <%= table.name %> +
+
+ <% end %> <% else %>
@@ -54,119 +54,120 @@
+
<% @rooms.each do |room| %> <% if room.status == 'occupied' %> - <% if room.get_booking.nil? %> -
+ <% if room.get_booking.nil? %> +
<% else %> -
- <% end %> -
- <%= room.name %> -
+
+ <% end %> +
+ <%= room.name %>
- <% else %> -
-
- <%= room.name %>
+ <% else %> +
+
+ <%= room.name %> +
+
+ <% end %> + <% end %>
- <% end %> - <% end %> +
+ +
- - +
-
- -
- + - -
-
-
-
MOVE --> ' <%= @dining.name %> ' to
- - <% if @status_order == 'order' && @status_sale != 'sale' %> - <% if !@obj_order.nil? %> -
- <% else %> -
- <% end %> - <% if !@booking.nil? %> - ORDER DETAILS | Table <%= @dining.name rescue "" %> - <% if @booking.checkout_by.nil? && !@booking.reserved_by.nil? %> - <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <%= @booking.checkout_at.utc.getlocal.strftime("%I:%M %p") %> - <% else %> - Checkin Time : <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <% end %> - <% end %> -
- <% elsif @status_sale == 'sale' %> -
INVOICE DETAILS | Table <%= @dining.name rescue "" %> - <% if !@booking.reserved_by.nil? && %> - <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <%= @booking.checkout_at.utc.getlocal.strftime("%I:%M %p") %> - <% else %> - Checkin Time : <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <% end %> -
- <% else %> - ORDER DETAILS | Table <%= @dining.name rescue "" %> - <% end %> -
-
-
-
- <% if (!@sale_array.empty?) && (!@date.nil?) %> -
-   Receipt No: - <% if @status_sale == 'sale' %> + +
+
+
+
MOVE --> ' <%= @dining.name %> ' to
+ + <% if @status_order == 'order' && @status_sale != 'sale' %> + <% if !@obj_order.nil? %> +
+ <% else %> +
+ <% end %> + <% if !@booking.nil? %> + ORDER DETAILS | Table <%= @dining.name rescue "" %> + <% if @booking.checkout_by.nil? && !@booking.reserved_by.nil? %> + <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <%= @booking.checkout_at.utc.getlocal.strftime("%I:%M %p") %> + <% else %> + Checkin Time : <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> + <% end %> + <% end %> +
+ <% elsif @status_sale == 'sale' %> +
INVOICE DETAILS | Table <%= @dining.name rescue "" %> + <% if !@booking.reserved_by.nil? && %> + <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> - <%= @booking.checkout_at.utc.getlocal.strftime("%I:%M %p") %> + <% else %> + Checkin Time : <%= @booking.checkin_at.utc.getlocal.strftime("%I:%M %p") %> + <% end %> +
+ <% else %> + ORDER DETAILS | Table <%= @dining.name rescue "" %> + <% end %> +
+
+
+
+ <% if (!@sale_array.empty?) && (!@date.nil?) %> +
+   Receipt No: + <% if @status_sale == 'sale' %> <%= @sale_array[0].receipt_no rescue '' %> - <% end %> - -
-
-
- Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y-%I:%M %p") rescue '-' %> -
-
- <% elsif !@date.nil? %> -
-   Order No: - <% if @status_order == 'order' %> - <%= @obj_order.order_id rescue '' %> + <% end %> + +
+
+
+ Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y-%I:%M %p") rescue '-' %> +
+
+ <% elsif !@date.nil? %> +
+   Order No: + <% if @status_order == 'order' %> + <%= @obj_order.order_id rescue '' %> - <% end %> - -
+ <% end %> + +
Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y") rescue '-' %>
- <% end %> + <% end %> +
-
-
-
- - <% if @status_sale == 'sale' && !@sale_array.empty? %> - -   Customer : <%= @sale_array[0].customer.name rescue '' %> - <% elsif @status_order == 'order' && !@customer.nil? - %> - -   Customer : <%= @customer.name rescue "" %> - <% end %> +
+
+ + <% if @status_sale == 'sale' && !@sale_array.empty? %> + +   Customer : <%= @sale_array[0].customer.name rescue '' %> + <% elsif @status_order == 'order' && !@customer.nil? + %> + +   Customer : <%= @customer.name rescue "" %> + <% end %> +
-
-
+
@@ -243,7 +244,7 @@ if @status_sale == 'sale' end %>
- + <% else @sale_array.each do |sale| @@ -289,30 +290,22 @@ end showHideNavbar(webview); $(".tables").on('click', function(){ - $('.tables').removeClass('selected-item'); - $(this).addClass('selected-item'); - var dining_name = $(this).attr("data-name"); - var dining_id = $(this).attr("data-id"); - var change_from = "<%= @dining.id %>"; - if (dining_id == change_from) { - /*$.alert({ - title: 'Alert!', - content: 'Please Select Another Table', - type: 'red', - typeAnimated: true, - btnClass: 'btn-danger', - });*/ - swal({ - title: "Alert!!", - text: 'Please Select Another Table !', - type: 'warning', - }); - }else{ - $('#moved').text(" ' " + dining_name + " ' ") - $('#change_table_value').val(dining_id); - } - - }) + $('.tables').removeClass('selected-item'); + $(this).addClass('selected-item'); + var dining_name = $(this).attr("data-name"); + var dining_id = $(this).attr("data-id"); + var change_from = "<%= @dining.id %>"; + if ((dining_id == change_from) || (dining_name==undefined)) { + swal({ + title: "Alert!!", + text: 'Please select another table !', + type: 'warning', + }); + }else{ + $('#moved').text(" ' " + dining_name + " ' ") + $('#change_table_value').val(dining_id); + } + }); $(".rooms").on('click', function(){ $('.rooms').removeClass('selected-item'); @@ -323,14 +316,14 @@ end if (dining_id == change_from) { swal({ title: "Alert!!", - text: 'Please Select Another Table !', + text: 'Please select another room !', type: 'warning', }); }else{ $('#moved').text(dining_name) $('#change_table_value').val(dining_id); } - }) + }); $('#move_table').on('click',function(){ change_to = $('#change_table_value').val(); @@ -362,7 +355,32 @@ end } }); } - }) + }); + + $('#add_invoice').on('click', function () { + var dining_id = "<%= @dining.id %>"; + var sale_id = $("#sale_id").val(); + var ajax_url = "/origami/sale/append_order"; + $.ajax({ + type: "POST", + url: ajax_url, + data: 'dining_id=' + dining_id + "&sale_id=" + sale_id, + success: function (result) { + swal({ + title: "Information!", + text: "Invoice updated", + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function () { + $("#first_bill").removeAttr('disabled'); + $("#pay").removeAttr('disabled'); + window.location.reload(); + }); + } + }); + }); }); $('#back').on('click',function(){ window.location.href = '/origami/table/'+ "<%= @dining.id %>"; diff --git a/app/views/origami/order_reservation/get_order.json.jbuilder b/app/views/origami/order_reservation/get_order.json.jbuilder index b3cb8f65..6b0caba2 100644 --- a/app/views/origami/order_reservation/get_order.json.jbuilder +++ b/app/views/origami/order_reservation/get_order.json.jbuilder @@ -4,7 +4,7 @@ if @order :requested_time,:expected_waiting_time,:callback_url,:transaction_ref,:item_count,:total_customer,:payment_type, :payment_status,:payment_ref,:taxes,:total_amount,:total_tax, :discount_amount,:convenience_charge,:grand_total,:status,:order_remark, - :reservation_remark,:sale_id) + :remark,:sale_id) @delivery = Delivery.find_by_order_reservation_id(@order.order_reservation_id) if @delivery json.delivery do |json| diff --git a/app/views/origami/order_reservation/index.html.erb b/app/views/origami/order_reservation/index.html.erb index a15b45aa..d2903041 100644 --- a/app/views/origami/order_reservation/index.html.erb +++ b/app/views/origami/order_reservation/index.html.erb @@ -1,48 +1,65 @@ <%= 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 + end + end + end + + if !@count_on_completed.nil? + processed_count = @count_on_completed.count + end + %> +
-
-
-
+
@@ -230,7 +289,11 @@ - +
+ + + +
@@ -296,8 +359,8 @@ - @@ -321,47 +384,55 @@
-
-
+
+
-
CUSTOMER & DELIVERY INFORMATION + CUSTOMER & DELIVERY INFORMATION
-
- +
+
- - + + + - + + + - - - @@ -372,13 +443,33 @@ + + +
- NAME
- +
+ REF.
+
+
REQUESTED TIME
+ COOKING TIME
+ MINS +
+ + NAME
+ +
PHONE
- EXPECTED TIME
- -
+ ADDRESS
+ DELEVERY
+ +
+
+ +
+
+
+
-
+ @@ -391,24 +482,193 @@
-
-
-
\ 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 41f02b5d..734264a1 100755 --- a/app/views/origami/payments/show.html.erb +++ b/app/views/origami/payments/show.html.erb @@ -350,20 +350,30 @@ reply Back - + <% if current_login_employee.role == "cashier" %> + FOC + Void + Waste + Spoile + <% else %> + - --> - FOC - Void - Waste - Spoile + + <% end %> + <% if @cashier_type=="quick_service" %>
+ <% if current_login_employee.role == "cashier" %> Edit + <% else %> + + <% if current_login_employee.role == "cashier" %> + Edit + Void + <% else %> - <% if @sale.sale_status != 'void' %> - - <% end %> + + <% if @sale.sale_status != 'void' && @sale.sale_status != 'waste' && @sale.sale_status != 'spoile' %> + <% if current_login_employee.role == "cashier" %> + Void + <% else %> + + <% end %> + <% end %>
+ + + + diff --git a/app/views/origami/shifts/show.html.erb b/app/views/origami/shifts/show.html.erb index 006763eb..8d4c0840 100755 --- a/app/views/origami/shifts/show.html.erb +++ b/app/views/origami/shifts/show.html.erb @@ -31,7 +31,7 @@
- <% if @bank_integration == '1' %> + <% if @bank_integration == '1' && @cashier_type!="ordering" %> <% end %>
@@ -73,10 +73,12 @@ }); $('#back').on('click',function(){ - if(cashier_type!='quick_service'){ + if(cashier_type=='cashier'){ window.location.href = '/origami'; - }else{ + }else if(cashier_type=='quick_service'){ window.location.href = '/origami/quick_service'; + }else{ + window.location.href = '/origami/order_reservation'; } }); diff --git a/app/views/origami/surveys/_form.html.erb b/app/views/origami/surveys/_form.html.erb index 1b6d07e2..e480430f 100755 --- a/app/views/origami/surveys/_form.html.erb +++ b/app/views/origami/surveys/_form.html.erb @@ -9,7 +9,7 @@
- <%= f.input :child, input_html: { value: @survey_data.child, class: 'col-md-10', :onChange => "total_customer();" }%> +
@@ -67,29 +67,29 @@
- <%= f.input :child , input_html: { class: 'col-md-10' , :onChange => "total_customer();"}%> + <%= f.input :child , input_html: { class: 'col-md-10' ,min:'1', :onChange => "total_customer();"}%>
- <%= f.input :adult , input_html: { class: 'col-md-10' , :onChange => "total_customer();"}%> + <%= f.input :adult , input_html: { class: 'col-md-10' ,min:'1', :onChange => "total_customer();"}%>
- <%= f.input :male , input_html: { class: 'col-md-10' }%> + <%= f.input :male , input_html: { min:'1',class: 'col-md-10' }%>
- <%= f.input :female , input_html: { class: 'col-md-10' }%> + <%= f.input :female , input_html: { min:'1',class: 'col-md-10' }%>
- <%= f.input :total_customer, input_html: { :readonly => true, class: 'col-md-11'} %> - <%= f.input :local , input_html: { class: 'col-md-11' }%> + <%= f.input :total_customer, input_html: { :readonly => true,min:'1', class: 'col-md-11'} %> + <%= f.input :local , input_html: { min:'1',class: 'col-md-11' }%>
Foreigner diff --git a/app/views/origami/table_invoices/show.html.erb b/app/views/origami/table_invoices/show.html.erb index fc19f909..5bd0d068 100644 --- a/app/views/origami/table_invoices/show.html.erb +++ b/app/views/origami/table_invoices/show.html.erb @@ -166,8 +166,14 @@ <%end%> <% end %> -
diff --git a/app/views/reports/order_reservation/_shift_sale_report_filter.html.erb b/app/views/reports/order_reservation/_shift_sale_report_filter.html.erb index a1db6824..a859d4c0 100755 --- a/app/views/reports/order_reservation/_shift_sale_report_filter.html.erb +++ b/app/views/reports/order_reservation/_shift_sale_report_filter.html.erb @@ -18,10 +18,10 @@
- <% if defined? payments %> + <% if defined? providers %>
- - <%= select_tag "payment_type", options_for_select(@payments, :selected => params[:payment_type]), :class => "form-control" %> + + <%= select_tag "provider", options_for_select(@providers, :selected => params[:provider]), :class => "form-control" %>
<% end %>
@@ -49,37 +49,6 @@
diff --git a/app/views/reports/order_reservation/index.html.erb b/app/views/reports/order_reservation/index.html.erb index 567b056b..ef5feafc 100755 --- a/app/views/reports/order_reservation/index.html.erb +++ b/app/views/reports/order_reservation/index.html.erb @@ -1,7 +1,7 @@ diff --git a/app/views/reports/receipt_no/index.html.erb b/app/views/reports/receipt_no/index.html.erb index 567b056b..9581d5df 100755 --- a/app/views/reports/receipt_no/index.html.erb +++ b/app/views/reports/receipt_no/index.html.erb @@ -59,20 +59,16 @@ <% if @print_settings.precision.to_i > 0 - precision = @print_settings.precision - else - precision = 0 - end - #check delimiter - if @print_settings.delimiter - delimiter = "," - else - delimiter = "" - end - - puts precision - puts "predelidm" - puts delimiter %> + precision = @print_settings.precision + else + precision = 0 + end + #check delimiter + if @print_settings.delimiter + delimiter = "," + else + delimiter = "" + end %> <% grand_total = 0 %> <% old_grand_total = 0 %> @@ -116,12 +112,18 @@   <%= number_with_precision(total_sum, precision: precision.to_i ,delimiter: delimiter) rescue '-' %> <%= number_with_precision(discount_amt, precision: precision.to_i ,delimiter: delimiter) rescue '-' %> - <% @sale_taxes.each do |tax| %> - <%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %> + <% if !@sale_taxes.empty? + @sale_taxes.each do |tax| %> + <%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %> + <% end %> + <% else %> + <% @tax_profiles.each do |tax| %> + 0 + <% end %> <% end %> <%= number_with_precision(grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '-' %> <%= rounding_adj.to_f rescue '-' %> - <%= number_with_precision(grand_total.to_f.round + rounding_adj, precision: precision.to_i ,delimiter: delimiter) %> + <%= number_with_precision(grand_total.to_f.round + rounding_adj, precision: precision.to_i ,delimiter: delimiter) rescue '0' %>   diff --git a/app/views/reports/saleitem/index.xls.erb b/app/views/reports/saleitem/index.xls.erb index 85c666a5..82b11aef 100755 --- a/app/views/reports/saleitem/index.xls.erb +++ b/app/views/reports/saleitem/index.xls.erb @@ -59,16 +59,18 @@ <% unless @sale_data.blank? %> <% @sale_data.each do |sale| %> - + <% if sale.status_type == "Discount" + total_qty += sale.total_item*(-1) + end %> - + <% if !acc_arr.include?(sale.account_id) %> <%= sale.account_name %> @@ -103,7 +105,12 @@ <% end %> <%= sale.item_code rescue '-' %> <%= sale.product_name rescue '-' %> - <%= sale.total_item rescue '-' %> + <% if sale.status_type != "Discount" %> + <%= sale.total_item rescue '-' %> + <%else%> + <%= sale.total_item*(-1) rescue '-' %> + <% end %> + <%= number_with_precision(sale.unit_price , precision:precision.to_i,delimiter:delimiter) rescue '-'%> <%= number_with_precision(sale.grand_total , precision:precision.to_i,delimiter:delimiter) rescue '-'%> @@ -114,10 +121,12 @@ <% count = count + 1 %> <% sub_total += sale.grand_total %> <% #sub_qty += sale.total_item %> - <% if sale.status_type!="Discount" && (!sale.product_name.include? "FOC") + <% if sale.status_type !="Discount" && (!sale.product_name.include? "FOC") sub_qty += sale.total_item end %> - + <% if sale.status_type =="Discount" + sub_qty += sale.total_item*(-1) + end %> <% if count == value %>   diff --git a/app/views/reports/waste_and_spoilage/index.xls.erb b/app/views/reports/waste_and_spoilage/index.xls.erb index 4b4fa0a3..48f26650 100755 --- a/app/views/reports/waste_and_spoilage/index.xls.erb +++ b/app/views/reports/waste_and_spoilage/index.xls.erb @@ -5,52 +5,77 @@
Report For <%= @sale_type? @sale_type : 'Waste' %>
- <% @sale_data.each do |sale| %> + <% 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| %> + <% if !receipt_arr.include?(sale.receipt_no) %> + + + + + + + + + + + + + + + + + + <% receipt_arr.push(sale.receipt_no) %> + <% menu_cat_arr.clear %> + <% count = 0 %> + <% end %> - <% sale.sale_items.each do |item| %> - <% if !item.item_instance_code.nil?%> - <% waste_and_spoil_item_count += item.qty.to_i%> - - - - - - - - <% end %> - <% end %> - - - - - - - - <% 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
 
+ Receipt No :<%= sale.receipt_no %> + Date : <%= sale.created_at.utc.getlocal.strftime("%e,%b %Y %I:%M %p") %>
Menu CategoryItem NameItem CodeQtyPriceTotal Price
<%= item.product_name %><%= item.product_code %><%= item.qty %><%= item.price %><%= item.price %>
Total Qty: - <%= waste_and_spoil_item_count %> - Grand Total: - - <%= sale.grand_total %> - -
<%= sale.name %> <%= sale.product_name %><%= sale.product_code %><%= sale.qty.to_i %><%= sale.unit_price %><%= sale.price %>
Total Qty: + + <%= waste_and_spoil_item_count %> + <% waste_and_spoil_item_count = 0%> + Grand Total: + + <%= sale.grand_total %> + +
diff --git a/app/views/settings/cashier_terminals/_form.html.erb b/app/views/settings/cashier_terminals/_form.html.erb index d5693561..3ba13d97 100755 --- a/app/views/settings/cashier_terminals/_form.html.erb +++ b/app/views/settings/cashier_terminals/_form.html.erb @@ -12,7 +12,11 @@ <%= f.input :auto_print_receipt %> <%= f.label "Select Zones", :class => 'control-label' %> <%= f.collection_check_boxes :zone_ids , Zone.all, :id, :name , :class => 'checkbox form-group'%> - <%= f.input :printer_name, :as => :select, :collection => Printer::PrinterWorker.printers, include_blank: false %> + <% if(@server_mode != 'cloud') %> + <%= f.input :printer_name, :as => :select, :collection => Printer::PrinterWorker.printers, include_blank: false %> + <% else %> + <%= f.input :printer_name, :as => :select, :collection => [], include_blank: false %> + <% end %> <%= f.input :font %> <%= f.input :font_size %> <%= f.input :show_tax %> @@ -58,4 +62,20 @@
- \ No newline at end of file + \ No newline at end of file diff --git a/app/views/settings/order_queue_stations/_form.html.erb b/app/views/settings/order_queue_stations/_form.html.erb index 0ffa8f9a..adab922a 100755 --- a/app/views/settings/order_queue_stations/_form.html.erb +++ b/app/views/settings/order_queue_stations/_form.html.erb @@ -15,8 +15,11 @@ div.form-inputs span{
<%= f.input :station_name %> <%= f.input :is_active %> - - <%= f.input :printer_name, :as => :select, :collection => Printer::PrinterWorker.printers, include_blank: false %> + <% if(@server_mode != 'cloud') %> + <%= f.input :printer_name, :as => :select, :collection => Printer::PrinterWorker.printers, include_blank: false %> + <% else %> + <%= f.input :printer_name, :as => :select, :collection => [], include_blank: false %> + <% end %> <%= f.input :print_copy %> <%= f.hidden_field :processing_items %> @@ -63,4 +66,20 @@ div.form-inputs span{
- + diff --git a/config/initializers/action_controller.rb b/config/initializers/action_controller.rb index b84bca54..e0eb7455 100644 --- a/config/initializers/action_controller.rb +++ b/config/initializers/action_controller.rb @@ -20,11 +20,11 @@ class ActionController::Base end else #check for license file - # if check_license - # current_license(ENV["SX_PROVISION_URL"]) - # else - # redirect_to activate_path - # end + if check_license + current_license(ENV["SX_PROVISION_URL"]) + else + redirect_to activate_path + end end end diff --git a/config/locales/en.yml b/config/locales/en.yml index cdce1df7..1c03285a 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: @@ -435,7 +436,7 @@ en: item: "Item" revenue: "Revenue" total_price_by: "Total Price By" - sub_total: "Sub Total" + sub_totalိိ: "Sub Total" cash_received: "Cash Received" card_sales: "Card Sales" select_payments: "Select Payments" @@ -470,6 +471,15 @@ en: adult: "Adult" foreigner: "Foreigner" local: "Local" + order_reservation_report: "Order Reservation" + requested_time: "Requested Time" + provider: "Provider" + delivery_fee: "Delivery Fee" + delivery_tax: "Delivery Tax" + convenience_charge: "Convenience Charge" + convenience_tax: "Convenience Tax" + commercial_tax: "Commercial Tax" + select_providers: "Select Providers" code_txt: "code " charge_txt: "charge" diff --git a/config/locales/mm.yml b/config/locales/mm.yml index aba51ed5..3a1aa2b6 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: @@ -464,6 +465,15 @@ mm: adult: "လူကြီး" foreigner: "နိုင်ငံခြားသား" local: "နိုင်ငံသား" + order_reservation_report: "ၾကိဳတင္ order မွာယူျခင္း" + requested_time: "Requested Time" + provider: "Provider" + delivery_fee: "Delivery Fee" + delivery_tax: "Delivery Tax" + convenience_charge: "Convenience Charge" + convenience_tax: "Convenience Tax" + commercial_tax: "Commercial Tax" + select_providers: "Select Providers" code_txt: "ကုတ်ဒ် " charge_txt: "ကောက်ခံသည်" diff --git a/config/puma.rb b/config/puma.rb deleted file mode 100755 index c8e0145e..00000000 --- a/config/puma.rb +++ /dev/null @@ -1,48 +0,0 @@ -# Puma can serve each request in a thread from an internal thread pool. -# The `threads` method setting takes two numbers a minimum and maximum. -# Any libraries that use thread pools should be configured to match -# the maximum value specified for Puma. Default is set to 5 threads for minimum -# and maximum, this matches the default thread size of Active Record. -# -threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i -threads threads_count, threads_count - -# Specifies the `port` that Puma will listen on to receive requests, default is 3000. -# -port ENV.fetch("PORT") { 3000 } - -# Specifies the `environment` that Puma will run in. -# -environment ENV.fetch("RAILS_ENV") { "development" } - -# Specifies the number of `workers` to boot in clustered mode. -# Workers are forked webserver processes. If using threads and workers together -# the concurrency of the application would be max `threads` * `workers`. -# Workers do not work on JRuby or Windows (both of which do not support -# processes). -# -# workers ENV.fetch("WEB_CONCURRENCY") { 2 } - -# Use the `preload_app!` method when specifying a `workers` number. -# This directive tells Puma to first boot the application and load code -# before forking the application. This takes advantage of Copy On Write -# process behavior so workers use less memory. If you use this option -# you need to make sure to reconnect any threads in the `on_worker_boot` -# block. -# -# preload_app! - -# The code in the `on_worker_boot` will be called if you are using -# clustered mode by specifying a number of `workers`. After each worker -# process is booted this block will be run, if you are using `preload_app!` -# option you will want to use this block to reconnect to any threads -# or connections that may have been created at application boot, Ruby -# cannot share connections between processes. -# -# on_worker_boot do -# ActiveRecord::Base.establish_connection if defined?(ActiveRecord) -# end - -# Allow puma to be restarted by `rails restart` command. - -plugin :tmp_restart diff --git a/config/routes.rb b/config/routes.rb index 0f329c95..6b888e1d 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -88,6 +88,7 @@ scope "(:locale)", locale: /en|mm/ do namespace :order_reserve do post "customer" => "order_reservation#check_customer" post "order" => "order_reservation#create" + post "callback/:id" => "order_reservation#update_status" end end @@ -97,6 +98,7 @@ scope "(:locale)", locale: /en|mm/ do post '/check_emp_access_code/:code' => 'home#check_emp_access_code', :defaults => { :format => 'json' } get "dashboard" => "dashboard#index" + get "get_all_menu" => "dashboard#get_all_menu" get "quick_service" => "quick_service#index" @@ -445,6 +447,7 @@ scope "(:locale)", locale: /en|mm/ do resources :order_reservation, :only => [:index, :show] get "saleitem/get_shift_by_date", to: "saleitem#show", as: "get_shift_by_sale_item" get "receipt_no/get_shift_by_date", to: "receipt_no#get_shift_by_date", as: "get_shift_by_date" + get "order_reservation/get_shift_by_date", to: "order_reservation#show", as: "get_shift_by_order_reservation" end diff --git a/config/schedule.rb b/config/schedule.rb index 8f151e3d..fc38bc2a 100755 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -14,14 +14,14 @@ every 1.minutes do runner "DiningFacility.checkin_time" end -every 3.minutes do +every 10.minutes do runner "OrderReservation.check_new_order" end -every 5.minutes do +every 10.minutes do runner "OrderReservation.check_order_send_to_kitchen" end -every 5.minutes do +every 10.minutes do runner "OrderReservation.check_order_ready_to_delivery" end \ No newline at end of file diff --git a/config/shops.json b/config/shops.json index 65755243..4037179b 100644 --- a/config/shops.json +++ b/config/shops.json @@ -13,6 +13,20 @@ "key": "634W2ioj6QA88vafKamHBRu5aKX/BLIPdTWuuXGFBsA=\n", "iv": "QqpO/h7o60dYTbNETRbZ4g==\n" } + }, + { + "lookup": "order-111.pos-myanmar.test", + "value": { + "key": "7NA6WkE58MZ56w6CUPEyUN5ZlWzuidRDkc2ao6LeHTs=\n", + "iv": "B94kSYIdH6ff8s1ltQzB1Q==\n" + } + }, + { + "lookup": "aungcafe-212.pos-myanmar.test", + "value": { + "key": "DvPxzB6QjHNnfuxBz6rdOuSn0/5TkckwCu3jNv0geHY=\n", + "iv": "pJ5k8JKbfti70KQoLZCm/Q==\n" + } } ] } diff --git a/db/migrate/20180406080240_create_order_reservations.rb b/db/migrate/20180406080240_create_order_reservations.rb index b96b92ca..a343958f 100644 --- a/db/migrate/20180406080240_create_order_reservations.rb +++ b/db/migrate/20180406080240_create_order_reservations.rb @@ -4,7 +4,7 @@ class CreateOrderReservations < ActiveRecord::Migration[5.1] t.string :order_reservation_id, :limit => 16, :primary_key => true t.string :order_reservation_type, :null => false t.string :customer_id, :null => false - t.datetime :requested_time, :null => false + t.string :requested_time, :null => false t.string :callback_url, :null => false t.string :transaction_ref, :null => false t.string :sale_id @@ -21,7 +21,7 @@ class CreateOrderReservations < ActiveRecord::Migration[5.1] t.decimal :grand_total, :precision => 10, :scale => 2, :null => false, :default => 0.00 t.string :status, :null => false, :default => "new" t.string :order_remark - t.string :reservation_remark + t.string :remark t.timestamps end end diff --git a/db/sym_master.sql b/db/sym_master.sql index 3677fc2f..60b5e6f5 100755 --- a/db/sym_master.sql +++ b/db/sym_master.sql @@ -825,6 +825,55 @@ delete from sym_node; values('order_queue_stations','sx_2_cloud', 200, current_timestamp, current_timestamp); # End Oqs Channel +### Batch Monitoring ###### + +#Monitor# +insert into sym_monitor (monitor_id, node_group_id, external_id, type, threshold, run_period, run_count, severity_level, enabled, create_time, last_update_by, last_update_time) +value ('SystemBatchErrorMonitor', 'All', 'All', 'batchError', 1, 1, 1, 300, 1, now(), 'admin', now()); + +insert into sym_monitor (monitor_id, node_group_id, external_id, type, threshold, run_period, run_count, severity_level, enabled, create_time, last_update_by, last_update_time) +value ('SystemBatchUnsendMonitor', 'All', 'All', 'batchUnsent', 10, 1, 1, 100, 1, now(), 'admin', now()); + +insert into sym_monitor (monitor_id, node_group_id, external_id, type, threshold, run_period, run_count, severity_level, enabled, create_time, last_update_by, last_update_time) +value ('SystemLogMonitor', 'All', 'All', 'log', 1, 1, 1, 300, 1, now(), 'admin', now()); + +#Parameter# +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.allow.untrusted.cert', 'true', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.auth', 'true', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.from', 'sym_alert@smartsales.asia', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.host', 'smtp.mailgun.org', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.password', '1cc051ec3edf699d17b78e5cd14ceb6b', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.port', '465', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.starttls', 'false', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.transport', 'smtps', now(), 'admin', now()); + +insert into sym_parameter (external_id, node_group_id, param_key, param_value, create_time, last_update_by, last_update_time) +value ('All', 'All', 'smtp.user', 'postmaster@smartsales.asia', now(), 'admin', now()); + +insert into sym_notification (notification_id, node_group_id, external_id, severity_level, type, expression, enabled, create_time, last_update_by, last_update_time) +value ('notify_info', 'ALL', 'ALL', 100, 'email', 'info@connect.smartsales.asia', 1, now(), 'admin', now()); + +insert into sym_notification (notification_id, node_group_id, external_id, severity_level, type, expression, enabled, create_time, last_update_by, last_update_time) +value ('notify_severe', 'ALL', 'ALL', 300, 'email', 'info@connect.smartsales.asia', 1, now(), 'admin', now()); + + + +### End of Batch Monitoring #### insert into sym_node (node_id,node_group_id,external_id,sync_enabled,sync_url,schema_version,symmetric_version,database_type,database_version,heartbeat_time,timezone_offset,batch_to_send_count,batch_in_error_count,created_at_node_id) values ('000','sx','000',1,null,null,null,null,null,current_timestamp,null,0,0,'000'); diff --git a/public/beep.mp3 b/public/beep.mp3 new file mode 100644 index 00000000..1ba1c352 Binary files /dev/null and b/public/beep.mp3 differ