From 7c6d842a3103f0661727ec1a5fa61f860947179f Mon Sep 17 00:00:00 2001 From: phyusin Date: Wed, 2 May 2018 11:59:35 +0630 Subject: [PATCH 1/2] change UI and add expected waiting time --- .../javascripts/channels/order_reservation.js | 13 ++- app/assets/javascripts/order_reservation.js | 86 +++++++++++--- .../order_reservation_controller.rb | 3 +- .../origami/order_reservation_controller.rb | 7 +- app/models/order_reservation.rb | 109 +++--------------- app/uploaders/menu_item_image_uploader.rb | 2 +- .../order_reservation/get_order.json.jbuilder | 2 +- .../origami/order_reservation/index.html.erb | 39 ++++++- 8 files changed, 145 insertions(+), 116 deletions(-) diff --git a/app/assets/javascripts/channels/order_reservation.js b/app/assets/javascripts/channels/order_reservation.js index d085f9ba..0a3ef37c 100644 --- a/app/assets/javascripts/channels/order_reservation.js +++ b/app/assets/javascripts/channels/order_reservation.js @@ -12,7 +12,7 @@ App.checkin = App.cable.subscriptions.create('OrderReservationChannel', { $.each(order, function(key,value){ var rowCount = key+1; var date = new Date(value.created_at); - + var deliveries = value["delivery"]; var isPM = date.getHours() >= 12; var isMidday = date.getHours() == 12; var time = [date.getHours() - (isPM && !isMidday ? 12 : 0), @@ -20,6 +20,15 @@ App.checkin = App.cable.subscriptions.create('OrderReservationChannel', { (isPM ? ' PM' : 'AM'); var created_at = date.getFullYear() +'-'+ (date.getMonth() > 10? date.getMonth() : '0' + (date.getMonth() + 1)) +'-'+ date.getDate(); + var delivery_type = ""; + if(deliveries.delivery_type == "service"){ + delivery_type = "DELIVERY"; + }else if(deliveries.delivery_type == "pick_up"){ + delivery_type = "PICK-UP"; + }else{ + delivery_type = "DIRECT DELIVERY"; + } + row = '' +''+rowCount +'' @@ -30,7 +39,7 @@ App.checkin = App.cable.subscriptions.create('OrderReservationChannel', { +''+value.grand_total +'' +'' - +''+ value.status +'' + +''+ delivery_type +'' +'' +' ' diff --git a/app/assets/javascripts/order_reservation.js b/app/assets/javascripts/order_reservation.js index b33ea931..b99dad8d 100644 --- a/app/assets/javascripts/order_reservation.js +++ b/app/assets/javascripts/order_reservation.js @@ -24,8 +24,8 @@ $(function() { // console.log(type); }); - jQuery(function(){ - jQuery('.first-1').click(); + $(function(){ + $('.first-1').click(); }); $(".custom-tr").on("click", function(){ @@ -66,15 +66,28 @@ $(function() { var items = data["order_items"]; var item_list = $('.summary-items'); - var date = new Date(data.requested_time); - var newDate = new Date(date.getTime() + (date.getTimezoneOffset() * 60000)); - + var newDate = new Date(data.requested_time); var isPM = newDate.getHours() >= 12; var isMidday = newDate.getHours() == 12; var time = [newDate.getHours() - (isPM && !isMidday ? 12 : 0), newDate.getMinutes() || '00'].join(':') + (isPM ? ' PM' : 'AM'); - var requested_date = newDate.getFullYear() + '-' + (newDate.getMonth() > 10? newDate.getMonth() : '0' + (newDate.getMonth() + 1)) +'-'+ newDate.getDate() +' '+time; + var requested_date = newDate.getFullYear() + '-' + (newDate.getMonth() > 10? newDate.getMonth() : '0' + (newDate.getMonth() + 1)) +'-'+ (newDate.getDate() > 10? newDate.getDate() : '0' + newDate.getDate()) +' '+time; + + if((data.expected_waiting_time!=undefined) && (data.expected_waiting_time!=null)){ + var expDate = new Date(data.expected_waiting_time); + var isPM = expDate.getHours() >= 12; + var isMidday = expDate.getHours() == 12; + var exptime = [expDate.getHours() - (isPM && !isMidday ? 12 : 0), + expDate.getMinutes() || '00'].join(':') + + (isPM ? ' PM' : 'AM'); + var expected_time = expDate.getFullYear() + '-' + (expDate.getMonth() > 10? expDate.getMonth() : '0' + (expDate.getMonth() + 1)) +'-'+ (expDate.getDate() > 10? expDate.getDate() : '0' + expDate.getDate()) +' '+exptime; + $('.expected_time').show(); + $('#expected_time').text(expected_time? expected_time : ''); + }else{ + $('.expected_time').hide(); + $('#expected_time').text(''); + } item_list.empty(); @@ -153,11 +166,10 @@ $(function() { } $("#accepted").on("click", function(){ - var status = $(this).attr("data-value"); - var order_id = $('#order_id').text(); - var ref_no = $('#ref_no').text(); - var callback = $('#callback_url').text(); - callback_url(callback,ref_no,order_id,status); + 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}); }); $("#cancel").on("click", function(){ @@ -168,20 +180,44 @@ $(function() { callback_url(callback,ref_no,order_id,status); }); - function callback_url(callback,ref_no,order_id,status){ + function showTimePicker(requested_time){ + // var date = new Date(requested_time); + // var isPM = date.getHours() >= 12; + // var isMidday = date.getHours() == 12; + // var time = [date.getHours() - (isPM && !isMidday ? 12 : 0), + // date.getMinutes() || '00'].join(':') + + // (isPM ? 'pm' : 'am'); + // console.log(time); + $('.timepicker').bootstrapMaterialDatePicker({ + format: 'HH:mm', + useSeconds: false, + clearButton: true, + date: false + }); + } + + function callback_url(callback,ref_no,order_id,status,time,exptime){ var url = 'order_reservation/update'; var post_url = "order_reservation/send_status"; + var waiting_time = ""; + if(time!=undefined && time!=""){ + waiting_time = time; + } + var expected_time = ""; + if(exptime!=undefined && exptime!=""){ + expected_time = exptime; + } $.ajax({ type: "POST", url: post_url, - data: {url: callback, ref_no: ref_no, status: status}, + data: {url: callback, ref_no: ref_no, status: status, waiting_time: waiting_time}, dataType: "json", success: function(data) { if(data.status){ $.ajax({ type: "POST", url: url, - data: {'order_id': order_id, 'status': status}, + data: {'order_id': order_id, 'status': status, 'expected_time' : expected_time}, dataType: "json", success: function(data) { if (data.status) { @@ -215,5 +251,27 @@ $(function() { } }); } + + $("#save").on("click",function(){ + $("#waiting_timeErr").text(""); + var status = $("#status").text(); + var order_id = $('#order_id').text(); + var ref_no = $('#ref_no').text(); + var callback = $('#callback_url').text(); + var requested_time = new Date($("#requested_date_time").text()); + var date_time = requested_time.getFullYear()+'-'+(requested_time.getMonth() > 10? requested_time.getMonth() : '0'+ (requested_time.getMonth() + 1))+'-'+(requested_time.getDate()> 10? requested_time.getDate() : '0' + requested_time.getDate()); + var waiting_time = new Date(date_time+' '+$("#waiting_time").val()); + // requested_time.setHours(requested_time.getHours() - 1); + // console.log(requested_time); + 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!"); + } + + }); }); diff --git a/app/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index 902e62e7..57337b5e 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -59,7 +59,8 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController order_reservation = params order_reservation_id, flag = OrderReservation.addOrderReservationInfo(order_reservation) - order_reservation = OrderReservation.latest_order.where("status = 'new'") #find(order_reservation_id) + order_reservation = OrderReservation.get_pending_orders #find(order_reservation_id) + if flag #&& ENV["SERVER_MODE"] != 'cloud' ActionCable.server.broadcast "order_reservation_channel",data: order_reservation end diff --git a/app/controllers/origami/order_reservation_controller.rb b/app/controllers/origami/order_reservation_controller.rb index f952c7f4..12a3ee2f 100644 --- a/app/controllers/origami/order_reservation_controller.rb +++ b/app/controllers/origami/order_reservation_controller.rb @@ -7,7 +7,8 @@ class Origami::OrderReservationController < BaseOrigamiController def update @id = params[:order_id] - @status = params[:status] + @status = params[:status] + expected_waiting_time = params[:expected_time] @order_reservation = OrderReservation.find(@id) status = true @@ -26,7 +27,7 @@ class Origami::OrderReservationController < BaseOrigamiController OrderReservation.update_order_reservation(@id, nil, "cancelled") result = {:status=> true, :message => "rejected" } else - OrderReservation.update_order_reservation(@id, nil, "accepted") + OrderReservation.update_order_reservation(@id, nil, "accepted", expected_waiting_time) result = {:status=> true, :message => "accepted" } end end @@ -51,7 +52,7 @@ class Origami::OrderReservationController < BaseOrigamiController status = params[:status] end - response = OrderReservation.send_status_to_ordering(params[:url],params[:ref_no],status) + response = OrderReservation.send_status_to_ordering(params[:url],params[:ref_no],status,params[:waiting_time]) render :json => response end diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index 7261ec98..d60d908e 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -21,7 +21,7 @@ class OrderReservation < ApplicationRecord order_reservation = OrderReservation.new order_reservation.order_reservation_type = order_reserve[:order_type] order_reservation.customer_id = order_reserve[:cus_info] - order_reservation.requested_time = DateTime.parse(order_reserve[:requested_time]).utc + order_reservation.requested_time = Time.parse(order_reserve[:requested_time]).utc order_reservation.callback_url = order_reserve[:callback_url] order_reservation.transaction_ref = order_reserve[:reference] if order_reserve[:order_info] @@ -134,96 +134,10 @@ class OrderReservation < ApplicationRecord result = {:status=> true, :message => DELIVERED } return result - # rebate_amount = nil - - # For Cashier by Zone - # bookings = Booking.where("sale_id='#{sale_id}'") - - # if bookings[0].dining_facility_id.to_i > 0 - # table = DiningFacility.find(bookings[0].dining_facility_id) - # cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) - # cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id) - # else - # shift = ShiftSale.find(saleObj.shift_sale_id) - # cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id) - # end - - # For Print - # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server - # receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf - # unique_code = "ReceiptBillPdf" - # if !receipt_bill_a5_pdf.empty? - # receipt_bill_a5_pdf.each do |receipt_bilA5| - # if receipt_bilA5[0] == 'ReceiptBillA5Pdf' - # if receipt_bilA5[1] == '1' - # unique_code = "ReceiptBillA5Pdf" - # else - # unique_code = "ReceiptBillPdf" - # end - # end - # end - # end - - # customer= Customer.find(saleObj.customer_id) - - # get member information - # rebate = MembershipSetting.find_by_rebate(1) - # credit_data = SalePayment.find_by_sale_id_and_payment_method(sale_id,'creditnote') - - # if customer.membership_id != nil && rebate && credit_data.nil? - # member_info = Customer.get_member_account(customer) - # if member_info["status"] == true - # rebate_amount = Customer.get_membership_transactions(customer,saleObj.receipt_no) - # current_balance = SaleAudit.paymal_search(sale_id) - # end - # end - - #orders print out - # if params[:type] == "quick_service" - # booking = Booking.find_by_sale_id(sale_id) - # if booking.dining_facility_id.to_i>0 - # table_id = booking.dining_facility_id - # else - # table_id = 0 - # end - - # booking.booking_orders.each do |order| - # # Order.pay_process_order_queue(order.order_id, table_id) - # oqs = OrderQueueStation.new - # oqs.pay_process_order_queue(order.order_id, table_id) - # end - - # end - - #for card sale data - # card_data = Array.new - # card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id) - # if !card_sale_trans_ref_no.nil? - # card_sale_trans_ref_no.each do |cash_sale_trans| - # card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s - # card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s - # card_no = cash_sale_trans.pan.last(4) - # card_no = card_no.rjust(19,"**** **** **** ") - # card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id}) - # end - # end - - # get printer info - # print_settings=PrintSetting.find_by_unique_code(unique_code) - # Calculate Food and Beverage Total - # item_price_by_accounts = SaleItem.calculate_price_by_accounts(saleObj.sale_items) - # discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items) - - # printer = Printer::ReceiptPrinter.new(print_settings) - # filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Paid",current_balance,card_data) - - # render json: JSON.generate({:status => saleObj.rebate_status, :message => "Can't Rebate coz of Sever Error ", :filename => filename, :receipt_no => sale_receipt_no, :printer_name => printer_name}) - - #end end end - def self.send_status_to_ordering(url,ref_no,status) + def self.send_status_to_ordering(url,ref_no,status,waiting_time=nil) base_url = 'https://api.doemal.com' token = '3T-tnlYtFJ-5Z1vY6XQqxQ' order_reservation = Lookup.collection_of("order_reservation") @@ -242,10 +156,15 @@ class OrderReservation < ApplicationRecord 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} + else + send_params = {id: ref_no, status: status} + end begin response = HTTParty.post(post_url, - :body => { id: ref_no, status: status}.to_json, + :body => send_params.to_json, :headers => { 'Authorization' => 'Token token='+token, 'Content-Type' => 'application/json', @@ -265,11 +184,14 @@ class OrderReservation < ApplicationRecord return response end - def self.update_order_reservation(id, sale_id, status) + def self.update_order_reservation(id, sale_id, status, expected_waiting_time=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 + end order_reservation.status = status order_reservation.save end @@ -278,6 +200,13 @@ class OrderReservation < ApplicationRecord order_reservation = OrderReservation.select("COUNT(order_reservation_id) as count, status").group("status") end + def self.get_pending_orders + order_reservation = OrderReservation.select("order_reservations.*,deliveries.provider,deliveries.delivery_type") + .joins(" JOIN deliveries as del on del.order_reservation_id=order_reservations.order_reservation_id") + .where("order_reservations.status='new'") + .order("order_reservations.order_reservation_id desc, order_reservations.created_at desc") + end + private def generate_custom_id self.order_reservation_id = SeedGenerator.generate_id(self.class.name, "ODRS") diff --git a/app/uploaders/menu_item_image_uploader.rb b/app/uploaders/menu_item_image_uploader.rb index 91bbdc37..90755159 100755 --- a/app/uploaders/menu_item_image_uploader.rb +++ b/app/uploaders/menu_item_image_uploader.rb @@ -33,7 +33,7 @@ class MenuItemImageUploader < CarrierWave::Uploader::Base # Process files as they are uploaded: # process scale: [200, 300] - process :resize_to_fit => [200, 150] + process :resize_to_fit => [400, 250]#[200, 150] # # def scale(width, height) diff --git a/app/views/origami/order_reservation/get_order.json.jbuilder b/app/views/origami/order_reservation/get_order.json.jbuilder index 8f14c263..b3cb8f65 100644 --- a/app/views/origami/order_reservation/get_order.json.jbuilder +++ b/app/views/origami/order_reservation/get_order.json.jbuilder @@ -1,7 +1,7 @@ if @order json.(@order, :order_reservation_id,:order_reservation_type,:customer_id, - :requested_time,:callback_url,:transaction_ref,:item_count,:total_customer,:payment_type, + :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) diff --git a/app/views/origami/order_reservation/index.html.erb b/app/views/origami/order_reservation/index.html.erb index b0b10193..9c6df102 100644 --- a/app/views/origami/order_reservation/index.html.erb +++ b/app/views/origami/order_reservation/index.html.erb @@ -4,7 +4,7 @@