diff --git a/app/assets/javascripts/addorder.js b/app/assets/javascripts/addorder.js index 71cf182e..59b1081a 100755 --- a/app/assets/javascripts/addorder.js +++ b/app/assets/javascripts/addorder.js @@ -1,7 +1,9 @@ $(function() { var role = $('#role').val(); + localStorage.removeItem("menus") 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,8 +98,8 @@ $(function() { } //end show list function //click menu sidebar menu category - $('.menu_category').on("click", function(){ - // 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; @@ -105,7 +107,7 @@ $(function() { 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'); + sub_category = $(this).siblings('.sub_category_list'); show_sub_category_list(sub_url,sub_category,menu_id); } }); @@ -113,9 +115,11 @@ $(function() { //click menu sidebar menu category $(document).on('click', '.menu_sub_category', function(event){ - event.preventDefault(); + // 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); }); @@ -133,117 +137,6 @@ $(function() { for(var ii in categories) { if (categories[ii]["id"] == menu_id) { var menu_items = categories[ii]["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 - // } - // //end is_sub_item false - // } show_menu_list(menu_items); } } @@ -272,118 +165,7 @@ $(function() { var menu_items_list = $('.menu_items_list'); menu_items_list.empty(); menu_items = data.menu_items; -show_menu_list(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 - // } - // //end is_sub_item false - // } + show_menu_list(menu_items); } }); //end Ajax @@ -405,26 +187,30 @@ show_menu_list(menu_items); 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){ + $(value).each(function(i){ menus = JSON.parse(localStorage.getItem("menus")); if (menus != null) { - for(var i in menus) { - var categories = menus[i]["categories"]; + 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 iv in result) { - if (value[i]["id"] == result[iv]["id"]) { + for(var v in result) { + + if (value[i]["id"] == result[v]["id"]) { + + console.log("ssssssss") + row = '
' - +"
" +'
' - +''+result[iv]["name"]+'' + +''+result[v]["name"]+'' +'
' +'
' +'' +' ' +'
' +'' +'
' @@ -452,6 +238,8 @@ show_menu_list(menu_items); } } }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") @@ -1376,7 +1164,6 @@ show_menu_list(menu_items); $(".keypress_qty").on('keyup change', function (){ // $('.keypress_qty').keyup(function(e){ - id = $(this).attr('id'); value = $(this).val(); @@ -1429,11 +1216,7 @@ show_menu_list(menu_items); for(var j in menus) { var categories = menus[j]["categories"]; for(var ii in categories) { - if (menu_id == categories[ii]["parent_id"]) { - console.log("parrrrrrrrrrrrrrrrr"); - console.log(categories[ii]["parent_id"]); - console.log(menu_id); - + if (menu_id == categories[ii]["parent_id"]) { $(sub_category).removeClass('hidden'); row = '' ; $(sub_category).append(row); diff --git a/app/assets/javascripts/channels/check_new_order.js b/app/assets/javascripts/channels/check_new_order.js index 5bd64013..403874e9 100644 --- a/app/assets/javascripts/channels/check_new_order.js +++ b/app/assets/javascripts/channels/check_new_order.js @@ -19,21 +19,22 @@ 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("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); + // $("#notify_new_order").modal({show: true, keyboard: false, backdrop: false}); } } }); diff --git a/app/assets/javascripts/channels/check_order_ready_to_delivery.js b/app/assets/javascripts/channels/check_order_ready_to_delivery.js index 84dd1982..4627dede 100644 --- a/app/assets/javascripts/channels/check_order_ready_to_delivery.js +++ b/app/assets/javascripts/channels/check_order_ready_to_delivery.js @@ -19,21 +19,22 @@ 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("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); + // $("#notify_order_ready_to_delivery").modal({show: true, keyboard: false, backdrop: false}); } } }); diff --git a/app/assets/javascripts/channels/check_order_send_to_kitchen.js b/app/assets/javascripts/channels/check_order_send_to_kitchen.js index 6727dbdb..31c6b75c 100644 --- a/app/assets/javascripts/channels/check_order_send_to_kitchen.js +++ b/app/assets/javascripts/channels/check_order_send_to_kitchen.js @@ -19,21 +19,22 @@ 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("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); + // $("#notify_order_send_to_kitchen").modal({show: true, keyboard: false, backdrop: false}); } } }); diff --git a/app/assets/javascripts/channels/order_reservation.js b/app/assets/javascripts/channels/order_reservation.js index 68da8d87..52b4cef5 100644 --- a/app/assets/javascripts/channels/order_reservation.js +++ b/app/assets/javascripts/channels/order_reservation.js @@ -17,7 +17,7 @@ App.order_reservation = App.cable.subscriptions.create('OrderReservationChannel' 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"){ diff --git a/app/assets/javascripts/order_reservation.js b/app/assets/javascripts/order_reservation.js index 07eab9e1..d17250ae 100644 --- a/app/assets/javascripts/order_reservation.js +++ b/app/assets/javascripts/order_reservation.js @@ -2,6 +2,9 @@ $(function() { $("#discount").hide(); $(".expected_time").hide(); + $('#accepted').hide(); + $('#cancel').hide(); + $(".tbl_customer").hide(); $(function() { $('.first-1').click(); }); @@ -11,6 +14,9 @@ $(function() { $(".nav-item").on("click", function(){ type = $(this).attr("data-type"); refreshDetailData(); + $('#accepted').hide(); + $('#cancel').hide(); + $(".tbl_customer").hide(); if (type == "pending") { $(".first-1").click(); $('#accepted').text("ACCEPT"); @@ -24,10 +30,15 @@ $(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(); + // $('#accepted').hide(); + // $('#cancel').hide(); + } // console.log(type); }); @@ -36,7 +47,6 @@ $(function() { $("#status").text($(this).attr("data-value")); var requested_time = $("#requested_date_time").text(); $("#requested_order_time").text(requested_time); - showTimePicker(requested_time); $("#waiting_timeModal").modal({show : true, backdrop: false, keyboard : false}); }else{ var status = $(this).attr("data-value"); @@ -48,38 +58,117 @@ $(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); - // console.log(date_time); - if(waiting_time.getTime() < requested_time.getTime()){ - var time_diff = (requested_time.getTime() - waiting_time.getTime()); - var expected_time = (Math.floor(time_diff) / 1000) / 60; - }else{ - var time_diff = (waiting_time.getTime() - requested_time.getTime()); - var expected_time = (Math.floor(time_diff) / 1000) / 60; - // $("#waiting_time").val(""); - // $("#waiting_timeErr").text("Expected waiting time is greater than requested time!"); + callback_url(callback,ref_no,order_id,status,type,minutes); + }); + + $(document).on('click','.access_number', function(event){ + if(event.handled !== true) { + var original_value = $('#access_code').val(); + var input_type = $(this).attr("data-type"); + + switch (input_type) { + case 'num': + var input_value = $(this).attr("data-value"); + if (original_value){ + $('#access_code').val(original_value + input_value); + }else{ + $('#access_code').val(original_value + input_value); + } + break; + case 'ok': + var type = $(this).attr("data-action"); + code = $('#access_code').val(); + check_emp_access_code(code,type) + break; + case 'clr': + $('#access_code').val(""); + break; + } + event.handled = true; + } else { + return false; } - callback_url(callback,ref_no,order_id,status,expected_time,waiting_time); }); }); +function check_emp_access_code(access_code,type) { + var url = "/origami/check_emp_access_code/" + access_code ; + $.ajax({ + type: 'POST', + url: url, + data: {}, + success: function (result) { + console.log(result) + if (result.status == true) { + // createAccessCode(code); + $("#approved_code").text(code); + $('#AccessCodeModal').modal('hide'); + $("#rejected_reasonModal").modal({show: true, backdrop: false, keyboard: false}); + }else{ + swal("Opps",result.message,"warning") + } + } + }); +} + function customTableClick(){ $(".custom-table .custom-tr").on("click", function(){ $(".custom-tr").removeClass("tr-active"); @@ -96,6 +185,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"); @@ -116,20 +206,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(''); @@ -160,7 +261,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'); @@ -184,6 +286,7 @@ function show_order_detail(url,sr_no){ $('#callback_url').text(data.callback_url); $('#order_id').text(data.order_reservation_id); + $("#trans_ref").text(data.transaction_ref); if(delivery.delivery_type == "service"){ $("#delivery_info").text("(DELIVERY)"); }else if(delivery.delivery_type == "pick_up"){ @@ -197,11 +300,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"]); } } @@ -211,40 +325,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) { @@ -293,7 +409,14 @@ function showNewOrder(order_reservation){ if((order_reservation!=undefined) && (order_reservation!=null) && (order_reservation!="")){ var date = new Date(order_reservation.requested_time); var time = timeFormat(date); - var requested_date = date.getFullYear() + '-' + (date.getMonth() > 10? date.getMonth() : '0' + (date.getMonth() + 1)) +'-'+ (date.getDate() > 10? date.getDate() : '0' + date.getDate()) +' '+time; + var requested_date = date.getFullYear() + '-' + (date.getMonth() >= 10? date.getMonth() : '0' + (date.getMonth() + 1)) +'-'+ (date.getDate() >= 10? date.getDate() : '0' + date.getDate()) +' '+time; + //audio play + var audio = new Audio('/beep.wav'); // define your audio + // setTimeout(function(){ + // audio.loop = true; + audio.play(); + // },10000); + swal({ html: true, title: 'Information', @@ -304,4 +427,14 @@ function showNewOrder(order_reservation){ allowOutsideClick: false }); } +} + +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/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index f34c0f6f..1d9e3fab 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -6,23 +6,27 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController def check_customer customer_id = 0 + status = false if !params[:name] render :json => { :status => false, :message => "name is required!" } elsif !params[:email] render :json => { :status => false, :message => "email is required!" } elsif !params[:membership_id] render :json => { :status => false, :message => "membership_id is required!" } - end - - check_customer = Customer.find_by_email_and_membership_id(params[:email],params[:membership_id]) - if !check_customer.nil? - customer_id = check_customer.customer_id else - customer = Customer.addCustomer(params) - customer_id = customer.id + status = true end - render :json => { :status => true, :data => { :customer_id => customer_id} } + if status + check_customer = Customer.find_by_email_and_membership_id(params[:email],params[:membership_id]) + if !check_customer.nil? + customer_id = check_customer.customer_id + else + customer = Customer.addCustomer(params) + customer_id = customer.id + end + render :json => { :status => true, :data => { :customer_id => customer_id} } + end end def create @@ -71,4 +75,42 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController end end 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/origami/addorders_controller.rb b/app/controllers/origami/addorders_controller.rb index fd298fb3..e4e17328 100755 --- a/app/controllers/origami/addorders_controller.rb +++ b/app/controllers/origami/addorders_controller.rb @@ -18,14 +18,17 @@ class Origami::AddordersController < BaseOrigamiController if check_mobile @webview = true end - - # if params[:menus].present? - # @menus = JSON.parse(params[:menus], object_class: OpenStruct) - # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') - # else - @menus = Menu.all - @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') - # end +puts params[:menu] +puts "sssssssssssssssssssssssssss" + if params[:menus].present? + @menus = JSON.parse(params[:menus], object_class: OpenStruct) + @menu = JSON.parse(params[:category], object_class: OpenStruct) + puts @menus.to_json + puts @menu.to_json + 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) diff --git a/app/controllers/origami/order_reservation_controller.rb b/app/controllers/origami/order_reservation_controller.rb index 32f0e63d..e3536205 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 + puts Time.now.utc @order = OrderReservation.latest_order #.active @count_on_order = OrderReservation.get_count_on_order + @count_on_completed = OrderReservation.get_count_on_completed 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/sale_edit_controller.rb b/app/controllers/origami/sale_edit_controller.rb index 0b3b989d..f90858e3 100755 --- a/app/controllers/origami/sale_edit_controller.rb +++ b/app/controllers/origami/sale_edit_controller.rb @@ -50,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.present? + 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) @@ -84,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.present? + 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) @@ -126,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.present? + 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' @@ -177,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.present? + 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/void_controller.rb b/app/controllers/origami/void_controller.rb index d601b0c0..f8311cd3 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.present? + 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/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/settings/menus_controller.rb b/app/controllers/settings/menus_controller.rb index f73226f4..39b9b021 100755 --- a/app/controllers/settings/menus_controller.rb +++ b/app/controllers/settings/menus_controller.rb @@ -195,7 +195,9 @@ class Settings::MenusController < ApplicationController # end end - file_path = "public/menus/" + menu.name + ".xlsx" + directory_name = "public/menus" + Dir.mkdir(directory_name) unless File.exists?(directory_name) + file_path = directory_name +"/" + menu.name + ".xlsx" p.serialize(file_path) render :json => { status: true, path: file_path } end diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index f4f610fc..64df8ee9 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -30,7 +30,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] @@ -40,7 +40,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] @@ -102,7 +102,7 @@ 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" } + result = {:status=> @status, :data => @sale, :message => "send to kitchen" } return result end end @@ -138,7 +138,7 @@ class OrderReservation < ApplicationRecord end end - def self.send_status_to_ordering(url,ref_no,status,waiting_time=nil) + def self.send_status_to_ordering(url,ref_no,status,waiting_time=nil,min_type=nil,reason=nil) base_url = 'https://api.doemal.com' token = '3T-tnlYtFJ-5Z1vY6XQqxQ' order_reservation = Lookup.collection_of("order_reservation") @@ -158,7 +158,9 @@ class OrderReservation < ApplicationRecord post_url = base_url + url if !waiting_time.nil? - send_params = {id: ref_no, waiting_time: waiting_time, status: status} + send_params = {id: ref_no,type: min_type, waiting_time: waiting_time, status: status} + elsif !reason.nil? + send_params = {id: ref_no, status: status, reason: reason} else send_params = {id: ref_no, status: status} end @@ -185,20 +187,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 @@ -218,8 +277,7 @@ class OrderReservation < ApplicationRecord end def self.check_order_send_to_kitchen - today = Time.now.utc - order_reservation = OrderReservation.where("status='accepted' and requested_time > '#{today}' and expected_waiting_time < '#{today}'") + 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 @@ -228,8 +286,7 @@ class OrderReservation < ApplicationRecord end def self.check_order_ready_to_delivery - today = Time.now.utc - order_reservation = OrderReservation.where("status='send_to_kitchen' and requested_time > '#{today}' and expected_waiting_time < '#{today}'") + 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 @@ -237,6 +294,36 @@ class OrderReservation < ApplicationRecord 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/views/layouts/_left_sidebar.html.erb b/app/views/layouts/_left_sidebar.html.erb index ea3a7b61..7820c3bb 100644 --- a/app/views/layouts/_left_sidebar.html.erb +++ b/app/views/layouts/_left_sidebar.html.erb @@ -132,6 +132,9 @@
  • Product Sale
  • +
  • + Order Reservation +
  • Receipt
  • diff --git a/app/views/origami/addorders/detail.html.erb b/app/views/origami/addorders/detail.html.erb index 43ab6db0..76b18ca1 100644 --- a/app/views/origami/addorders/detail.html.erb +++ b/app/views/origami/addorders/detail.html.erb @@ -5,29 +5,16 @@ <% type = request.path_info.include?('quick_service')%> <% modify_order = request.path_info.include?('modify_order')%> -
    +
    -
    - -
  • +
  • - <%= @menus[0].name %> - -
  • - -
    -
    -
    -
    - +
    + + + + + +
    +
    +
    +
    + + <%end %>
    +
    -
    +
    <% if type && modify_order%> -
    - <% else%> - -
    +
    + +
    + <% else%> + +
    -
    -
    - -
    - <% end%> - - -
    +
    +
    + +
    + <% end%> +
    <% else %>
    @@ -212,6 +219,7 @@ +
    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/routes.rb b/config/routes.rb index df4d4da0..1a9edf61 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 @@ -238,7 +239,7 @@ scope "(:locale)", locale: /en|mm/ do get '/addorders/get_menu_sub_category/:id' => "addorders#get_menu_sub_category",:as => "get_menu_sub_category", :defaults => { :format => 'json' } get '/addorders/products/list' => "addorders#get_all_product",:as => "get_all_product", :defaults => { :format => 'json' } - get '/:addorders/:id' => "addorders#detail" + # match '/:addorders/:id' => "addorders#detail", via: [:post, :get] post '/:addorders/create' => "addorders#create",:as => "addorder_create", :defaults => { :format => 'json' } @@ -446,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/db/sym_master.sql b/db/sym_master.sql index 57408181..60b5e6f5 100755 --- a/db/sym_master.sql +++ b/db/sym_master.sql @@ -865,6 +865,12 @@ 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 #### diff --git a/public/beep.wav b/public/beep.wav new file mode 100644 index 00000000..015e1f64 Binary files /dev/null and b/public/beep.wav differ