merge with master
This commit is contained in:
@@ -949,7 +949,7 @@ $(function() {
|
||||
$(sub_category).removeClass('hidden');
|
||||
for(var i in data) {
|
||||
|
||||
row = '<li class="menu_category" data-id="'+data[i].id+'">'
|
||||
row = '<li class="menu_category fadeInTop animated" data-id="'+data[i].id+'">'
|
||||
+'<a class="nav-link" data-toggle="tab" href="" role="tab">'+ data[i].name+'</a>'
|
||||
+'</li>' ;
|
||||
$(sub_category).append(row);
|
||||
|
||||
@@ -5,10 +5,15 @@ App.order = App.cable.subscriptions.create('BillChannel', {
|
||||
|
||||
disconnected: function() {},
|
||||
|
||||
received: function(data) {
|
||||
$('.table_'+data.table.id).removeClass('blue');
|
||||
$('.table_'+data.table.id).addClass('red');
|
||||
$('.new_text_'+data.table.id).removeClass('hide')
|
||||
received: function(data) {
|
||||
if($('.table_'+data.table.id).hasClass('blue')){
|
||||
$('.table_'+data.table.id).removeClass('blue');
|
||||
$('.table_'+data.table.id).addClass('red');
|
||||
}else{
|
||||
$('.table_'+data.table.id).removeClass('orange');
|
||||
$('.table_'+data.table.id).addClass('red');
|
||||
}
|
||||
$('.new_text_'+data.table.id).removeClass('hide');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ App.call_waiter = App.cable.subscriptions.create('CallWaiterChannel', {
|
||||
table = data.table
|
||||
|
||||
// for Notificaiotn message
|
||||
var element = "#notify-wrapper"
|
||||
var placementFrom = "top";
|
||||
var placementAlign = "center";
|
||||
var animateEnter = "";
|
||||
@@ -17,21 +18,22 @@ App.call_waiter = App.cable.subscriptions.create('CallWaiterChannel', {
|
||||
var text = " Calling Waiter <br> "+table.name ;
|
||||
|
||||
if (text != null || colorName != null){
|
||||
showNotification(colorName, text, placementFrom, placementAlign, animateEnter, animateExit);
|
||||
showNotification(element, colorName, text, placementFrom, placementAlign, animateEnter, animateExit);
|
||||
}
|
||||
|
||||
function showNotification(colorName, text, placementFrom, placementAlign, animateEnter, animateExit) {
|
||||
function showNotification(element, colorName, text, placementFrom, placementAlign, animateEnter, animateExit) {
|
||||
if (colorName === null || colorName === '') { colorName = 'bg-black'; }
|
||||
if (animateEnter === null || animateEnter === '') { animateEnter = 'animated fadeInDown'; }
|
||||
if (animateExit === null || animateExit === '') { animateExit = 'animated fadeOutUp'; }
|
||||
var allowDismiss = true;
|
||||
|
||||
$.notify({
|
||||
message: text
|
||||
},
|
||||
{
|
||||
element: element,
|
||||
type: colorName,
|
||||
allow_dismiss: allowDismiss,
|
||||
newest_on_top: true,
|
||||
timer: 200000000000000,
|
||||
placement: {
|
||||
from: placementFrom,
|
||||
@@ -41,8 +43,8 @@ App.call_waiter = App.cable.subscriptions.create('CallWaiterChannel', {
|
||||
enter: animateEnter,
|
||||
exit: animateExit
|
||||
},
|
||||
template: '<div data-notify="container" style="max-width: 180px !important;" class="bootstrap-notify-container alert alert-dismissible {0} ' + (allowDismiss ? "p-r-30" : "") + '" role="alert">' +
|
||||
'<button type="button" aria-hidden="true" class="close float-right m-l-20 m-t--5" data-notify="dismiss" style="right: -5px;">×</button>' +
|
||||
template: '<div data-notify="container" style="width:180px !important;" class="bootstrap-notify-container alert alert-dismissible {0} ' + (allowDismiss ? "p-r-30" : "") + '" role="alert">' +
|
||||
'<button type="button" aria-hidden="true" class="close notify-close float-right m-l-5 m-t--5" data-notify="dismiss">×</button>' +
|
||||
'<span data-notify="icon"></span> ' +
|
||||
'<span data-notify="title">{1}</span> ' +
|
||||
'<span data-notify="message">{2}</span>' +
|
||||
|
||||
14
app/assets/javascripts/channels/check_in_booking.js
Normal file
14
app/assets/javascripts/channels/check_in_booking.js
Normal file
@@ -0,0 +1,14 @@
|
||||
App.checkin = App.cable.subscriptions.create('CheckInBookingChannel', {
|
||||
// App.messages = App.cable.subscriptions.create('MessagesChannel', {
|
||||
|
||||
connected: function() {},
|
||||
|
||||
disconnected: function() {},
|
||||
|
||||
received: function(data) {
|
||||
$('.table_'+data.table.id).removeClass('green');
|
||||
$('.table_'+data.table.id).addClass('blue');
|
||||
$('.new_text_'+data.table.id).removeClass('hide')
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5,21 +5,22 @@ App.order = App.cable.subscriptions.create('CheckinChannel', {
|
||||
|
||||
disconnected: function() {},
|
||||
|
||||
received: function(data) {
|
||||
if((data.table != undefined) && (data.table.length > 0)){
|
||||
$.each(data.table,function(key,value){
|
||||
if($('.table_'+value.table_id).hasClass('blue')){
|
||||
$('.table_'+value.table_id).removeClass('blue');
|
||||
$('.table_'+value.table_id).addClass('orange');
|
||||
}
|
||||
else if($('.table_'+value.table_id).hasClass('red')){
|
||||
$('.table_'+value.table_id).removeClass('red');
|
||||
$('.table_'+value.table_id).addClass('orange');
|
||||
}
|
||||
$('.new_text_'+value.table_id).removeClass('hide');
|
||||
});
|
||||
|
||||
}
|
||||
received: function(data) {
|
||||
$.each(data.table,function(key,value){
|
||||
if($('.table_'+value.table_id).hasClass('blue')){
|
||||
$('.table_'+value.table_id).removeClass('blue');
|
||||
$('.table_'+value.table_id).addClass('orange');
|
||||
}
|
||||
else if($('.table_'+value.table_id).hasClass('red')){
|
||||
$('.table_'+value.table_id).removeClass('red');
|
||||
$('.table_'+value.table_id).addClass('orange');
|
||||
}
|
||||
else {
|
||||
$('.table_'+value.table_id).removeClass('green');
|
||||
$('.table_'+value.table_id).addClass('orange');
|
||||
}
|
||||
$('.new_text_'+value.table_id).removeClass('hide');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -362,8 +362,31 @@ tr.discount-item-row:hover {
|
||||
|
||||
/* End Payment Page */
|
||||
|
||||
/*Logout Icon*/
|
||||
/* Logout Icon */
|
||||
|
||||
i.logout_icon{
|
||||
position: relative;
|
||||
top: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
/* End Logout Icon */
|
||||
|
||||
/* Notify */
|
||||
|
||||
#notify-wrapper {
|
||||
position: absolute;
|
||||
top: 55px;
|
||||
left: 10px;
|
||||
z-index: 9999;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
[data-notify="container"] {
|
||||
margin-bottom: 5px !important;
|
||||
margin-left:5px !important;
|
||||
position:relative !important;
|
||||
top: 25% !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
/* End Notify */
|
||||
|
||||
10
app/channels/check_in_booking_channel.rb
Normal file
10
app/channels/check_in_booking_channel.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
class CheckInBookingChannel < ApplicationCable::Channel
|
||||
def subscribed
|
||||
stream_from "check_in_booking_channel"
|
||||
end
|
||||
|
||||
def unsubscribed
|
||||
stop_all_streams
|
||||
# Any cleanup needed when channel is unsubscribed
|
||||
end
|
||||
end
|
||||
@@ -5,8 +5,12 @@ class Api::CheckInProcessController < Api::ApiController
|
||||
dining_facility = DiningFacility.find(params[:dining_id])
|
||||
booking = dining_facility.get_current_checkout_booking
|
||||
if !booking.nil?
|
||||
|
||||
DiningFacility.check_in_booking(params[:dining_id])
|
||||
|
||||
check_in_time = booking.checkin_at.utc.getlocal.strftime("%Y-%m-%d %H:%M")
|
||||
check_out_time = booking.checkout_at.utc.getlocal.strftime("%Y-%m-%d %H:%M")
|
||||
|
||||
render :json => { :status => true, :check_in_time => check_in_time, :check_out_time => check_out_time }
|
||||
else
|
||||
render :json => { :status => false, :error_message => "No current booking!" }
|
||||
@@ -18,20 +22,16 @@ class Api::CheckInProcessController < Api::ApiController
|
||||
if params[:dining_id]
|
||||
dining_facility = DiningFacility.find(params[:dining_id])
|
||||
if dining_facility.status == "available"
|
||||
dining_charge = DiningCharge.select('charge_type','charge_block')
|
||||
.where('dining_facility_id = ?',params[:dining_id])
|
||||
.first()
|
||||
lookup_checkout_time = Lookup.collection_of("checkout_time")
|
||||
|
||||
checkout_at = Time.now.utc
|
||||
|
||||
if !dining_charge.nil?
|
||||
hr = (dining_charge.charge_block.utc.strftime("%H").to_i).to_int
|
||||
min = (dining_charge.charge_block.utc.strftime("%M").to_i).to_int
|
||||
# if dining_charge.charge_type == 'hr'
|
||||
checkout_at = checkout_at + hr.hour + min.minutes
|
||||
# else
|
||||
|
||||
# end
|
||||
if !lookup_checkout_time.nil?
|
||||
if lookup_checkout_time[0][0] == 'hr'
|
||||
checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.hour
|
||||
else
|
||||
checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.minutes
|
||||
end
|
||||
end
|
||||
|
||||
dining_facility.status = "occupied"
|
||||
|
||||
@@ -23,7 +23,6 @@ class ApplicationController < ActionController::Base
|
||||
end
|
||||
|
||||
def lookup_domain
|
||||
|
||||
if request.subdomain.present? && request.subdomain != "www"
|
||||
from = request.subdomain.downcase + "." + request.domain.downcase
|
||||
@license = cache_license(ENV["SX_PROVISION_URL"], from) # request.subdomain.downcase
|
||||
|
||||
@@ -2,7 +2,7 @@ class BaseOrigamiController < ActionController::Base
|
||||
include LoginVerification
|
||||
layout "origami"
|
||||
|
||||
before_action :checkin_process
|
||||
# before_action :checkin_process
|
||||
|
||||
#before_action :check_installation
|
||||
protect_from_forgery with: :exception
|
||||
@@ -15,7 +15,7 @@ class BaseOrigamiController < ActionController::Base
|
||||
@current_user ||= Employee.find_by_token_session(session[:session_token]) if session[:session_token]
|
||||
end
|
||||
|
||||
def checkin_process
|
||||
CheckinJob.set(wait: 1.minute).perform_later()
|
||||
end
|
||||
# def checkin_process
|
||||
# CheckinJob.set(wait: 1.minute).perform_later()
|
||||
# end
|
||||
end
|
||||
|
||||
@@ -72,7 +72,8 @@ class HomeController < ApplicationController
|
||||
@hourly_sales = Sale.hourly_sales(today).sum(:grand_total)
|
||||
# .group_by_hour(:created_at, :time_zone => 'Asia/Rangoon',format: '%I:%p')
|
||||
# .sum(:grand_total)
|
||||
@employee_sales = Sale.employee_sales(today).sum('payment_amount')
|
||||
@employee_sales = Sale.employee_sales(today)
|
||||
.sum('(CASE WHEN sp.payment_method="cash" THEN (sp.payment_amount - sales.amount_changed) ELSE sp.payment_amount END)')
|
||||
@inventories = StockJournal.inventory_balances(today).sum(:balance)
|
||||
|
||||
@total_sale = Sale.total_sale(today)
|
||||
|
||||
@@ -1,20 +1,15 @@
|
||||
class Origami::CheckInProcessController < BaseOrigamiController
|
||||
|
||||
def check_in_process
|
||||
dining_charge = DiningCharge.select('charge_type','charge_block')
|
||||
.where('dining_facility_id = ?',params[:dining_id])
|
||||
.first()
|
||||
|
||||
lookup_checkout_time = Lookup.collection_of("checkout_time")
|
||||
checkout_at = Time.now.utc
|
||||
|
||||
if !dining_charge.nil?
|
||||
hr = (dining_charge.charge_block.utc.strftime("%H").to_i).to_int
|
||||
min = (dining_charge.charge_block.utc.strftime("%M").to_i).to_int
|
||||
# if dining_charge.charge_type == 'hr'
|
||||
checkout_at = checkout_at + hr.hour + min.minutes
|
||||
# else
|
||||
|
||||
# end
|
||||
if !lookup_checkout_time.nil?
|
||||
if lookup_checkout_time[0][0] == 'hr'
|
||||
checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.hour
|
||||
else
|
||||
checkout_at = checkout_at + (lookup_checkout_time[0][1]).to_i.minutes
|
||||
end
|
||||
end
|
||||
@dining_facility = DiningFacility.find(params[:dining_id])
|
||||
@dining_facility.status = "occupied"
|
||||
|
||||
@@ -44,7 +44,7 @@ class Origami::PaymentsController < BaseOrigamiController
|
||||
|
||||
# printer = Printer::ReceiptPrinter.new(print_settings)
|
||||
|
||||
# printer.print_receipt_bill(print_settings,cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_details, "Frt")
|
||||
# printer.print_receipt_bill(print_settings,cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_details, "Frt")
|
||||
end
|
||||
|
||||
def create
|
||||
@@ -264,8 +264,13 @@ class Origami::PaymentsController < BaseOrigamiController
|
||||
# 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)
|
||||
|
||||
<<<<<<< HEAD
|
||||
# printer = Printer::ReceiptPrinter.new(print_settings)
|
||||
# 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, "FOC")
|
||||
=======
|
||||
printer = Printer::ReceiptPrinter.new(print_settings)
|
||||
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, "FOC",nil)
|
||||
>>>>>>> master
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -5,6 +5,10 @@ class Origami::SalesController < BaseOrigamiController
|
||||
@complete = Sale.where("DATE_FORMAT(created_at,'%Y-%m-%d') = ? and sale_status != 'new'",DateTime.now.strftime('%Y-%m-%d'))
|
||||
@orders = Order.all.order('date desc')
|
||||
@sale = Sale.find(params[:sale_id])
|
||||
@order = SaleOrder.find_by_sale_id(@sale.sale_id).order_id
|
||||
@booking = BookingOrder.find_by_order_id(@order).booking_id
|
||||
@table_id = Booking.find(@booking).dining_facility_id
|
||||
@dining = DiningFacility.find(@table_id)
|
||||
end
|
||||
|
||||
def add_to_existing_invoice
|
||||
|
||||
@@ -18,7 +18,7 @@ class Reports::SaleitemController < BaseReportController
|
||||
@sale_data, @other_charges,@discount_data , @cash_data , @card_data , @credit_data , @foc_data , @grand_total , @change_amount = Sale.get_by_shift_items(shift_sale_range,shift, from, to, Sale::SALE_STATUS_COMPLETED)
|
||||
|
||||
@sale_taxes = Sale.get_separate_tax(shift_sale_range,shift,from,to,nil)
|
||||
puts @sale_data.to_json
|
||||
|
||||
@account_cate_count = Hash.new {|hash, key| hash[key] = 0}
|
||||
|
||||
|
||||
|
||||
9
app/jobs/check_in_booking_job.rb
Normal file
9
app/jobs/check_in_booking_job.rb
Normal file
@@ -0,0 +1,9 @@
|
||||
class CheckInBookingJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(table)
|
||||
ActionCable.server.broadcast "check_in_booking_channel",table: table
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
class CheckinJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform()
|
||||
def self.perform()
|
||||
table = DiningFacility.get_checkin_booking
|
||||
ActionCable.server.broadcast "checkin_channel",table: table
|
||||
if table.length > 0
|
||||
ActionCable.server.broadcast "checkin_channel",table: table
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -78,8 +78,17 @@ class DiningFacility < ApplicationRecord
|
||||
def get_checkout_booking
|
||||
booking = self.get_current_checkout_booking
|
||||
if booking
|
||||
lookup_checkout_time = Lookup.collection_of("checkout_alert_time")
|
||||
free_time_min = 0
|
||||
if !lookup_checkout_time.nil?
|
||||
if lookup_checkout_time[0][0] == 'min'
|
||||
free_time_min = (lookup_checkout_time[0][1]).to_i
|
||||
else
|
||||
free_time_min = 15
|
||||
end
|
||||
end
|
||||
|
||||
now = Time.now.utc
|
||||
puts now
|
||||
hr = (now.strftime("%H").to_i).to_int
|
||||
min = (now.strftime("%M").to_i).to_int
|
||||
if !booking.checkout_at.nil?
|
||||
@@ -89,7 +98,7 @@ class DiningFacility < ApplicationRecord
|
||||
checkout_at_min -= min
|
||||
if (checkout_at_hr < hr)
|
||||
return booking
|
||||
elsif (checkout_at_hr == hr && checkout_at_min <= 15)
|
||||
elsif (checkout_at_hr == hr && checkout_at_min <= free_time_min)
|
||||
return booking
|
||||
else
|
||||
return nil
|
||||
@@ -104,18 +113,28 @@ class DiningFacility < ApplicationRecord
|
||||
bookings = Booking.where("booking_status ='assign' and checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' and reserved_by is not null and checkout_by is null")
|
||||
arr_booking = Array.new
|
||||
if bookings
|
||||
lookup_checkout_time = Lookup.collection_of("checkout_alert_time")
|
||||
free_time_min = 0
|
||||
if !lookup_checkout_time.nil?
|
||||
if lookup_checkout_time[0][0] == 'min'
|
||||
free_time_min = (lookup_checkout_time[0][1]).to_i
|
||||
else
|
||||
free_time_min = 15
|
||||
end
|
||||
end
|
||||
|
||||
bookings.each do |booking|
|
||||
now = Time.now.utc.getlocal
|
||||
now = Time.now.utc
|
||||
hr = (now.strftime("%H").to_i).to_int
|
||||
min = (now.strftime("%M").to_i).to_int
|
||||
if !booking.checkout_at.nil?
|
||||
checkout_at = booking.checkout_at.utc.getlocal
|
||||
checkout_at = booking.checkout_at.utc
|
||||
checkout_at_hr = (checkout_at.strftime("%H").to_i).to_int
|
||||
checkout_at_min = (checkout_at.strftime("%M").to_i).to_int
|
||||
checkout_at_min -= min
|
||||
if (checkout_at_hr < hr)
|
||||
arr_booking.push({'table_id' => booking.dining_facility_id})
|
||||
elsif (checkout_at_hr == hr && checkout_at_min <= 15)
|
||||
elsif (checkout_at_hr == hr && checkout_at_min <= free_time_min)
|
||||
arr_booking.push({'table_id' => booking.dining_facility_id})
|
||||
end
|
||||
end
|
||||
@@ -123,4 +142,11 @@ class DiningFacility < ApplicationRecord
|
||||
end
|
||||
return arr_booking
|
||||
end
|
||||
|
||||
#send order items and send to order queue
|
||||
def self.check_in_booking(table_id)
|
||||
table = DiningFacility.find(table_id)
|
||||
#Send to background job for processing
|
||||
CheckInBookingJob.perform_later(table)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -984,12 +984,11 @@ end
|
||||
end
|
||||
|
||||
def self.employee_sales(today)
|
||||
query = Sale.select('(CASE WHEN (sp.payment_method="mpu" or sp.payment_method="visa" or sp.payment_method="master" or sp.payment_method="jcb") THEN "card" ELSE sp.payment_method END) as payment_name, (CASE WHEN sp.payment_method="cash" THEN (SUM(sp.payment_amount) - SUM(sales.amount_changed)) ELSE SUM(sp.payment_amount) END) as payment_amount')
|
||||
.joins("join employees e on e.id=sales.cashier_id")
|
||||
.joins("join sale_payments sp on sp.sale_id=sales.sale_id")
|
||||
.where("sales.payment_status='paid' and sales.sale_status = 'completed' and DATE_FORMAT(sales.receipt_date,'%Y-%m-%d') = '#{today}'")
|
||||
.group('payment_method','e.name')
|
||||
.order('e.name')
|
||||
query = Sale.joins("JOIN employees as e on e.id=sales.cashier_id")
|
||||
.joins("JOIN sale_payments as sp on sp.sale_id=sales.sale_id")
|
||||
.where("sales.payment_status='paid' and sales.sale_status = 'completed' and DATE_FORMAT(sales.receipt_date,'%Y-%m-%d') = '#{today}'")
|
||||
.group("(CASE WHEN (sp.payment_method='mpu' or sp.payment_method='visa' or sp.payment_method='master' or sp.payment_method='jcb') THEN 'card' ELSE sp.payment_method END)","e.name")
|
||||
.order("e.name")
|
||||
end
|
||||
|
||||
def self.total_sale(today)
|
||||
@@ -1043,11 +1042,16 @@ end
|
||||
end
|
||||
|
||||
def self.total_customer(today)
|
||||
query = Sale.select("(CASE WHEN (c.customer_type='Dinein' or c.customer_type='Takeaway') THEN count(sales.customer_id) ELSE count(distinct sales.customer_id) END) as total_cus")
|
||||
.joins("JOIN customers as c ON c.customer_id = sales.customer_id")
|
||||
.where('sales.sale_status = "completed" and DATE_FORMAT(sales.receipt_date,"%Y-%m-%d") = ?',today)
|
||||
.order('sales.sale_id ASC')
|
||||
.first()
|
||||
dinein_cnt = self.total_dinein(today)
|
||||
takeaway_cnt = self.total_takeaway(today)
|
||||
membership_cnt = self.total_membership(today)
|
||||
|
||||
total_cus = 0
|
||||
if !dinein_cnt.nil? || !takeaway_cnt.nil? || !membership_cnt.nil?
|
||||
total_cus = dinein_cnt.total_dinein_cus.to_int + takeaway_cnt.total_take_cus.to_int + membership_cnt.total_memb_cus.to_int
|
||||
end
|
||||
|
||||
return total_cus
|
||||
end
|
||||
|
||||
def self.total_dinein(today)
|
||||
@@ -1067,12 +1071,12 @@ end
|
||||
def self.total_membership(today)
|
||||
query = Sale.select("count(distinct sales.customer_id) as total_memb_cus")
|
||||
.joins("JOIN customers as c ON c.customer_id = sales.customer_id")
|
||||
.where('sales.sale_status = "completed" and DATE_FORMAT(sales.receipt_date,"%Y-%m-%d") = ? and c.customer_type = "Takeaway" and c.membership_id is not null',today)
|
||||
.where('sales.sale_status = "completed" and DATE_FORMAT(sales.receipt_date,"%Y-%m-%d") = ? and ((c.customer_type = "Dinein" and c.membership_id is not null) or (c.customer_type = "Takeaway" and c.membership_id is not null))',today)
|
||||
.first()
|
||||
end
|
||||
|
||||
def self.total_other_customer(today)
|
||||
query = Sale.select("count(distinct sales.customer_id) as total_cus")
|
||||
query = Sale.select("count(sales.customer_id) as total_cus")
|
||||
.joins("JOIN customers as c ON c.customer_id = sales.customer_id")
|
||||
.where('sales.sale_status = "completed" and DATE_FORMAT(sales.receipt_date,"%Y-%m-%d") = ? and c.customer_type is null and c.membership_id is null',today)
|
||||
.first()
|
||||
@@ -1111,8 +1115,8 @@ end
|
||||
|
||||
def self.total_foc_items(today)
|
||||
query = Sale.joins("JOIN sale_items as a ON a.sale_id = sales.sale_id")
|
||||
.where("sales.sale_status = 'completed' and a.remark='foc' and DATE_FORMAT(sales.receipt_date,'%Y-%m-%d') = ?",today)
|
||||
.count()
|
||||
.where("sales.sale_status = 'completed' and a.remark='foc' and a.product_name not like '%FOC%' and DATE_FORMAT(sales.receipt_date,'%Y-%m-%d') = ?",today)
|
||||
.sum("a.qty")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -27,10 +27,14 @@ class SaleItem < ApplicationRecord
|
||||
end
|
||||
|
||||
def self.update_existing_item(qty, item, sale_id, type, item_price, price)
|
||||
# Original Item to add remark
|
||||
item.remark = type
|
||||
item.save
|
||||
|
||||
sale_item = SaleItem.new
|
||||
sale_item.product_code = item.product_code
|
||||
sale_item.item_instance_code = item.item_instance_code
|
||||
sale_item.product_name = item.product_name + "(#{type})"
|
||||
sale_item.product_name = item.product_name + " (#{type.upcase})"
|
||||
sale_item.product_alt_name = item.product_alt_name
|
||||
sale_item.account_id = item.account_id
|
||||
sale_item.remark = type
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
<% if current_user.role == 'administrator' || current_user.role == 'manager' %>
|
||||
<div class="row">
|
||||
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9">
|
||||
<div class="col-xs-8 col-sm-8 col-md-8 col-lg-8">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">
|
||||
<div class="card">
|
||||
@@ -111,7 +111,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
|
||||
<div class="col-xs-4 col-sm-4 col-md-4 col-lg-4">
|
||||
<% if !@summ_sale.nil? %>
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||
@@ -185,7 +185,7 @@
|
||||
<% if !@total_customer.nil? %>
|
||||
<tr>
|
||||
<td><%= t("views.right_panel.detail.total") %> <%= t :customer %> : </td>
|
||||
<td align="right"><%= @total_customer.total_cus %></td>
|
||||
<td align="right"><%= @total_customer %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% if !@total_dinein.nil? %>
|
||||
@@ -254,7 +254,7 @@
|
||||
<% if !@total_foc_items.nil? %>
|
||||
<tr>
|
||||
<td width="40px"><%= t("views.right_panel.detail.total") %> <%= t("views.btn.foc") %> <%= t("views.right_panel.detail.item") %> : </td>
|
||||
<td align="right" width="60px"><%= @total_foc_items %></td>
|
||||
<td align="right" width="60px"><%= @total_foc_items.to_int %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
|
||||
@@ -41,6 +41,10 @@
|
||||
<%= render 'layouts/right_sidebar' %>
|
||||
</section>
|
||||
|
||||
<!-- Notify -->
|
||||
<div id="notify-wrapper"></div>
|
||||
<!-- Notify -->
|
||||
|
||||
<!-- Main Content -->
|
||||
<section class="content">
|
||||
<% flash.each do |type, message| %>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<li class="nav-item menu_category sub_click" data-id="<%=menu.id%>">
|
||||
<p class="hidden menu-id"><%= menu.id %></p>
|
||||
<a class="nav-link" data-toggle="tab" href="" role="tab"> <%= menu.name%>
|
||||
<ul class=" sub_category_list hidden" id="sub_category_list">
|
||||
<ul class=" sub_category_list hidden fadeInTop animated" id="sub_category_list">
|
||||
</ul>
|
||||
</a>
|
||||
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
<input type="hidden" id="sale_id" value="<%= @sale_array[0].sale_id %>">
|
||||
<%
|
||||
# Can't check for discount
|
||||
unless sale_item.price == 0
|
||||
# unless sale_item.price == 0
|
||||
count += 1
|
||||
%>
|
||||
<tr>
|
||||
@@ -231,8 +231,7 @@
|
||||
</tr>
|
||||
|
||||
<%
|
||||
|
||||
end
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -243,7 +242,7 @@
|
||||
count += 1
|
||||
sub_total = sub_total + (order_item.price * order_item.qty)
|
||||
|
||||
unless order_item.price == 0 %>
|
||||
# unless order_item.price == 0 %>
|
||||
<tr>
|
||||
<td><%= count %></td>
|
||||
<td class='item-name'><%= order_item.item_name %></td>
|
||||
@@ -252,7 +251,7 @@
|
||||
</tr>
|
||||
<%
|
||||
|
||||
end
|
||||
# end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
<input type="hidden" id="sale_id" value="<%= @sale_array[0].sale_id %>">
|
||||
<%
|
||||
# Can't check for discount
|
||||
unless sale_item.price == 0
|
||||
# unless sale_item.price == 0
|
||||
count += 1
|
||||
%>
|
||||
<tr>
|
||||
@@ -227,7 +227,7 @@
|
||||
|
||||
<%
|
||||
|
||||
end
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
count += 1
|
||||
sub_total = sub_total + (order_item.price * order_item.qty)
|
||||
|
||||
unless order_item.price == 0 %>
|
||||
# unless order_item.price == 0 %>
|
||||
<tr>
|
||||
<td><%= count %></td>
|
||||
<td class='item-name'><%= order_item.item_name %></td>
|
||||
@@ -247,7 +247,7 @@
|
||||
</tr>
|
||||
<%
|
||||
|
||||
end
|
||||
# end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
<div class="col-lg-5 col-md-5 col-sm-5">
|
||||
<div class="card" >
|
||||
<div class="card-header">
|
||||
<div><strong id="order-title">INVOICE DETAILS </strong></div>
|
||||
<div><strong id="order-title">INVOICE DETAILS </strong>| Table <%= @dining.name rescue "" %></div>
|
||||
</div>
|
||||
<div class="card-block">
|
||||
<div class="card-title row p-l-5 p-r-5">
|
||||
@@ -146,7 +146,7 @@
|
||||
sub_total = sub_total + sale_item.price
|
||||
%>
|
||||
<input type="hidden" id="sale_id" value="<%= @sale.sale_id %>">
|
||||
<% unless sale_item.price <= 0 %>
|
||||
<% #unless sale_item.price <= 0 %>
|
||||
<tr>
|
||||
<td class='item-name'><%= sale_item.product_name %></td>
|
||||
<td class='item-attr'><%= sale_item.qty %></td>
|
||||
@@ -154,7 +154,7 @@
|
||||
</tr>
|
||||
<%
|
||||
|
||||
end
|
||||
#end
|
||||
end
|
||||
|
||||
%>
|
||||
|
||||
@@ -86,6 +86,6 @@ Rails.application.configure do
|
||||
config.active_record.dump_schema_after_migration = false
|
||||
|
||||
# Action Cable Setup
|
||||
config.action_cable.url = "ws://192.168.1.24:9292/cable"
|
||||
# config.action_cable.url = "ws://192.168.1.24:9292/cable"
|
||||
config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/]
|
||||
end
|
||||
|
||||
@@ -10,3 +10,7 @@ dbusername: LapN+Geriht8yk866FxNiQ==
|
||||
dbpassword: QtboWZ4ATE05vvYw6J+Uqw==
|
||||
api_token: nGyMizHtoVEFYCjSVEFJuzkxuBJwSsH
|
||||
app_token: QUdPwSakcsnuVLdfkXgGHhPMiIOcSSfaVwQyA
|
||||
|
||||
plan_sku: 001
|
||||
renewable_date: 2018-12-14
|
||||
plan_name: Community
|
||||
|
||||
@@ -10,3 +10,6 @@ every 30.minutes do
|
||||
runner "Customer.update_membership"
|
||||
end
|
||||
|
||||
every 1.minutes do
|
||||
runner "CheckinJob.perform"
|
||||
end
|
||||
5
spec/jobs/check_in_booking_job_spec.rb
Normal file
5
spec/jobs/check_in_booking_job_spec.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe CheckInBookingJob, type: :job do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
||||
Reference in New Issue
Block a user