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/pdf/receipt_bill_a5_pdf.rb b/app/pdf/receipt_bill_a5_pdf.rb
index 7253bfe1..78b27e3f 100644
--- a/app/pdf/receipt_bill_a5_pdf.rb
+++ b/app/pdf/receipt_bill_a5_pdf.rb
@@ -202,10 +202,12 @@ class ReceiptBillA5Pdf < Prawn::Document
y_position = cursor
move_down line_move
sub_total = 0.0
+ total_qty = 0.0
sale_items.each do |item|
# check for item not to show
if item.price != 0
sub_total += item.price #(item.qty*item.unit_price) - comment for room charges
+ total_qty += item.qty
qty = item.qty
total_price = item.price #item.qty*item.unit_price - comment for room charges
price = item.unit_price
@@ -240,12 +242,15 @@ class ReceiptBillA5Pdf < Prawn::Document
move_down line_move
y_position = cursor
- bounding_box([0,y_position], :width =>self.description_width, :height => self.item_height) do
+ bounding_box([0,y_position], :width =>self.item_width + self.price_width, :height => self.item_height) do
text "Sub Total", :size => self.item_font_size,:align => :left
end
- bounding_box([self.description_width,y_position], :width =>self.label_width) do
- text "#{number_with_precision(sub_total, :precision => precision.to_i, :delimiter => delimiter)}" ,:delimiter => ',', :size => self.item_font_size,:align => :right
- end
+ bounding_box([self.item_width + self.price_width + 11,y_position], :width =>self.qty_width, :height => self.item_height) do
+ text "#{number_with_precision(total_qty, :precision => precision.to_i, :delimiter => delimiter)}", :size => self.item_font_size,:align => :center
+ end
+ bounding_box([self.item_width + self.price_width + 8,y_position], :width =>self.total_width, :height => self.item_height) do
+ text "#{number_with_precision(sub_total, :precision => precision.to_i, :delimiter => delimiter)}", :size => self.item_font_size,:align => :right
+ end
end
def all_total(sale_data,precision,delimiter)
diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb
index e84de387..cf3e480f 100755
--- a/app/pdf/receipt_bill_pdf.rb
+++ b/app/pdf/receipt_bill_pdf.rb
@@ -196,11 +196,13 @@ class ReceiptBillPdf < Prawn::Document
y_position = cursor
move_down line_move
sub_total = 0.0
- total_qty = 0
+ total_qty = 0.0
+
sale_items.each do |item|
# check for item not to show
if item.price != 0
sub_total += item.price #(item.qty*item.unit_price) - comment for room charges
+ total_qty += item.qty
qty = item.qty
total_price = item.price #item.qty*item.unit_price - comment for room charges
price = item.unit_price
@@ -236,13 +238,16 @@ class ReceiptBillPdf < Prawn::Document
move_down line_move
y_position = cursor
- bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do
+ bounding_box([0,y_position], :width =>self.item_width + self.price_width, :height => self.item_height) do
text "Sub Total", :size => self.item_font_size,:align => :left
end
- text_box "#{number_with_precision(total_qty, :precision => precision.to_i)}", :at =>[item_qty_front_width,y_position], :width => item_qty_end_width, :size => self.item_font_size, :align => :center, :overflow => :shrink_to_fix
- bounding_box([self.item_description_width,y_position], :width =>self.label_width) do
- text "#{number_with_precision(sub_total, :precision => precision.to_i, :delimiter => delimiter)}" ,:delimiter => ',', :size => self.item_font_size,:align => :right
- end
+ bounding_box([self.item_width + self.price_width + 11,y_position], :width =>self.qty_width, :height => self.item_height) do
+ text "#{number_with_precision(total_qty, :precision => precision.to_i, :delimiter => delimiter)}", :size => self.item_font_size,:align => :center
+ end
+ bounding_box([self.item_width + self.price_width + 8,y_position], :width =>self.total_width, :height => self.item_height) do
+ text "#{number_with_precision(sub_total, :precision => precision.to_i, :delimiter => delimiter)}", :size => self.item_font_size,:align => :right
+ end
+
end
def all_total(sale_data,precision,delimiter)
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 @@