Merge branch 'master' into cloud
This commit is contained in:
25
app/assets/javascripts/channels/checkin.js
Normal file
25
app/assets/javascripts/channels/checkin.js
Normal file
@@ -0,0 +1,25 @@
|
||||
App.order = App.cable.subscriptions.create('CheckinChannel', {
|
||||
// App.messages = App.cable.subscriptions.create('MessagesChannel', {
|
||||
|
||||
connected: function() {},
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
10
app/channels/checkin_channel.rb
Normal file
10
app/channels/checkin_channel.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
class CheckinChannel < ApplicationCable::Channel
|
||||
def subscribed
|
||||
stream_from "checkin_channel"
|
||||
end
|
||||
|
||||
def unsubscribed
|
||||
stop_all_streams
|
||||
# Any cleanup needed when channel is unsubscribed
|
||||
end
|
||||
end
|
||||
@@ -2,6 +2,8 @@ class BaseOrigamiController < ActionController::Base
|
||||
include LoginVerification
|
||||
layout "origami"
|
||||
|
||||
before_action :checkin_process
|
||||
|
||||
#before_action :check_installation
|
||||
protect_from_forgery with: :exception
|
||||
rescue_from CanCan::AccessDenied do |exception|
|
||||
@@ -13,4 +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: 30.seconds).perform_later()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -72,7 +72,7 @@ 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(:grand_total)
|
||||
@employee_sales = Sale.employee_sales(today).sum('total_amount')
|
||||
@inventories = StockJournal.inventory_balances(today).sum(:balance)
|
||||
|
||||
@total_sale = Sale.total_sale(today)
|
||||
|
||||
@@ -37,7 +37,7 @@ class Origami::OtherChargesController < BaseOrigamiController
|
||||
sale_item.qty = 1
|
||||
sale_item.unit_price = di["price"]
|
||||
sale_item.taxable_price = di["price"] * 1
|
||||
sale_item.is_taxable = 1
|
||||
sale_item.is_taxable = di["is_taxable"]
|
||||
sale_item.account_id = 0
|
||||
|
||||
sale_item.price = di["price"] * 1
|
||||
|
||||
10
app/jobs/checkin_job.rb
Normal file
10
app/jobs/checkin_job.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
class CheckinJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform()
|
||||
table = DiningFacility.get_checkin_booking
|
||||
ActionCable.server.broadcast "checkin_channel",table: table
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
@@ -96,4 +96,26 @@ class DiningFacility < ApplicationRecord
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.get_checkin_booking
|
||||
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
|
||||
bookings.each do |booking|
|
||||
now = Time.now.utc.getlocal
|
||||
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_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) && (checkout_at_min <= 15)
|
||||
arr_booking.push({'table_id' => booking.dining_facility_id})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return arr_booking
|
||||
end
|
||||
end
|
||||
|
||||
@@ -984,7 +984,7 @@ end
|
||||
end
|
||||
|
||||
def self.employee_sales(today)
|
||||
query = Sale.select("e.name as employee_name,grand_total")
|
||||
query = Sale.select("e.name as employee_name,(CASE WHEN sp.payment_method='cash' THEN (SUM(sp.payment_amount) - SUM(sales.amount_changed)) ELSE sp.payment_amount END) as total_amount")
|
||||
.where('sales.payment_status="paid" and sales.sale_status = "completed" and DATE_FORMAT(sales.receipt_date,"%Y-%m-%d") = ?',today)
|
||||
.joins("join employees e on e.id=sales.cashier_id")
|
||||
.joins("join sale_payments sp on sp.sale_id=sales.sale_id")
|
||||
@@ -1103,7 +1103,7 @@ end
|
||||
.joins("JOIN sale_items as a ON a.sale_id = sales.sale_id")
|
||||
.where("sales.sale_status = 'completed' and DATE_FORMAT(sales.receipt_date,'%Y-%m-%d') = ?",today)
|
||||
.group("a.product_code")
|
||||
.order("SUM(a.price) DESC")
|
||||
.order("SUM(a.qty) DESC")
|
||||
.first()
|
||||
end
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div><strong id="order-title">ORDER DETAILS</strong></div>
|
||||
</div> -->
|
||||
<div class="card-block">
|
||||
<div class="card-title row">
|
||||
<div class="row card-title">
|
||||
<div class="col-lg-6 col-md-6 col-sm-6">
|
||||
<p id="sale-id" class="hidden"><%=@sale_data.sale_id %></p>
|
||||
<p>Receipt No: <span id="receipt_no"><%=@sale_data.receipt_no rescue ' '%></span></p>
|
||||
@@ -95,12 +95,16 @@
|
||||
<div class="card-title">
|
||||
<div class="form-horizontal">
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||
<div class="-group">
|
||||
<div class="bottom-5">
|
||||
<input type="text" id="other-charges-amount" name="other-charges-amount" class="form-control" placeholder="Amount" />
|
||||
</div>
|
||||
<div class="-group">
|
||||
<div class="bottom-5">
|
||||
<textarea id="reasons" name="reasons" rows="2" class="form-control" placeholder="Reasons"></textarea>
|
||||
</div>
|
||||
<div class="bottom-5">
|
||||
<input type="checkbox" id="is_taxable" name="is_taxable" />
|
||||
<lable for="is_taxable">Is Taxable</lable>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -270,11 +274,15 @@
|
||||
var sub_total = $('#order-sub-total').text();
|
||||
var charge_amount = $("#other-charges-amount").val();
|
||||
var reasons = $("#reasons").val();
|
||||
var is_taxable = 0
|
||||
if ($("#is_taxable:checked").length > 0) {
|
||||
is_taxable = 1
|
||||
}
|
||||
|
||||
// Update sub total
|
||||
$('#order-sub-total').text(parseFloat(sub_total) + parseFloat(charge_amount));
|
||||
|
||||
var item_row = item_row_template(sale_id, charge_amount, reasons);
|
||||
var item_row = item_row_template(sale_id, charge_amount, reasons, is_taxable);
|
||||
$("#order-items-table tbody").append(item_row);
|
||||
});
|
||||
|
||||
@@ -323,13 +331,14 @@
|
||||
var sale_item = {};
|
||||
sale_item.id = $(this).attr('id');
|
||||
sale_item.name = $(this).find('#item-name-price').text();
|
||||
sale_item.price = $(this).find('#item-total-price').text();
|
||||
sale_item.price = $(this).find('#item-total-price').text()
|
||||
sale_item.is_taxable = $(this).find('#item_taxable').text();
|
||||
sale_items.push(sale_item);
|
||||
});
|
||||
return sale_items;
|
||||
}
|
||||
|
||||
function item_row_template(sale_id, charge_amount, reasons){
|
||||
function item_row_template(sale_id, charge_amount, reasons, is_taxable){
|
||||
var item_row = "<tr class='other-item-row' id='SLI-000000000000'>" +
|
||||
"<td style='width: 60%; text-align: left;'>" +
|
||||
"<span id='item_account_type' class='hidden'>" +
|
||||
@@ -338,6 +347,7 @@
|
||||
"<span id='item-name-price'>" +
|
||||
reasons +
|
||||
"</span>" +
|
||||
"<span id='item_taxable' class='hidden'>" + is_taxable + "</span>" +
|
||||
"</td>" +
|
||||
"<td style='width: 20%; text-align: right;'>" +
|
||||
"<span id='item-qty'>1</span>" +
|
||||
|
||||
30
db/seeds.rb
30
db/seeds.rb
@@ -131,7 +131,7 @@ beverage = Account.create({title: "Beverage", account_type: "1"})
|
||||
product = Account.create({title: "Product", account_type: "2"})
|
||||
|
||||
# YGN BBQ
|
||||
person = Account.create({title: "Person", account_type: "3"})
|
||||
# person = Account.create({title: "Person", account_type: "3"})
|
||||
# END
|
||||
|
||||
#Default Menu Options
|
||||
@@ -140,7 +140,7 @@ menu_options = MenuItemOption.create([{option_type: "Oil", name: "Less Oil", val
|
||||
menu_pkg_options = MenuItemOption.create([{option_type: "Package", name: "Bottle", value: "Bottle"},{option_type: "Package", name: "Can", value: "can"}])
|
||||
|
||||
# #Default Menu Category
|
||||
menu_category1 = MenuCategory.create({menu: menu, code:"C001", name: "Person", alt_name: "Person", order_by: 1, is_available: 1, created_by: "SYSTEM DEFAULT"})
|
||||
# menu_category1 = MenuCategory.create({menu: menu, code:"C001", name: "Person", alt_name: "Person", order_by: 1, is_available: 1, created_by: "SYSTEM DEFAULT"})
|
||||
# menu_category2 = MenuCategory.create({menu: menu, code:"C005", name: "Beef & Mutton", alt_name: "Beef_and_mutton", order_by: 2,created_by: "SYSTEM DEFAULT"})
|
||||
# menu_category3 = MenuCategory.create({menu: menu, code:"C006", name: "Pork", alt_name: "Pork", order_by: 3,created_by: "SYSTEM DEFAULT"})
|
||||
# menu_category4 = MenuCategory.create({menu: menu, code:"C006", name: "Chicken", alt_name: "Chicken", order_by: 1, menu_category_id: menu_category3.id, created_by: "SYSTEM DEFAULT"})
|
||||
@@ -159,14 +159,14 @@ menu_pkg_options = MenuItemOption.create([{option_type: "Package", name: "Bottle
|
||||
# menu_category2_menu_item2 = SimpleMenuItem.create({item_code:"I009", name: "Default Menu Item Name 2", alt_name: "Alternate Menu Item Name 2",menu_category: menu_category2 , min_selectable_item: 1, max_selectable_item:1, min_qty: 3 , account: food})
|
||||
|
||||
# YGN BBQ
|
||||
menu_item_attribute_adult = MenuItemAttribute.create({attribute_type:"person", name: "Adult", value: "adult"})
|
||||
menu_item_attribute_child = MenuItemAttribute.create({attribute_type:"person", name: "Child", value: "child"})
|
||||
# menu_item_attribute_adult = MenuItemAttribute.create({attribute_type:"person", name: "Adult", value: "adult"})
|
||||
# menu_item_attribute_child = MenuItemAttribute.create({attribute_type:"person", name: "Child", value: "child"})
|
||||
|
||||
menu_category1_menu_item0 = SimpleMenuItem.create({item_code:"P00001", name: "Adult", alt_name: "",menu_category: menu_category1 , min_qty: 1, account: person, :item_attributes => "['1']", created_by: "System" })
|
||||
menu_item0_instance = MenuItemInstance.create({item_instance_name:"",item_instance_code:"PI0001", menu_item: menu_category1_menu_item0, price:15000.00, is_on_promotion:false, is_default:true, :item_attributes => "['1']" })
|
||||
# menu_category1_menu_item0 = SimpleMenuItem.create({item_code:"P00001", name: "Adult", alt_name: "",menu_category: menu_category1 , min_qty: 1, account: person, :item_attributes => "['1']", created_by: "System" })
|
||||
# menu_item0_instance = MenuItemInstance.create({item_instance_name:"",item_instance_code:"PI0001", menu_item: menu_category1_menu_item0, price:15000.00, is_on_promotion:false, is_default:true, :item_attributes => "['1']" })
|
||||
|
||||
menu_category1_menu_item1 = SimpleMenuItem.create({item_code:"P00002", name: "Child", alt_name: "",menu_category: menu_category1 , min_qty: 1, account: person, :item_attributes => "['2']", created_by: "System" })
|
||||
menu_item1_instance = MenuItemInstance.create({item_instance_name:"",item_instance_code:"PI0002", menu_item: menu_category1_menu_item1, price:10000.00, is_on_promotion:false, is_default:true, :item_attributes => "['2']" })
|
||||
# menu_category1_menu_item1 = SimpleMenuItem.create({item_code:"P00002", name: "Child", alt_name: "",menu_category: menu_category1 , min_qty: 1, account: person, :item_attributes => "['2']", created_by: "System" })
|
||||
# menu_item1_instance = MenuItemInstance.create({item_instance_name:"",item_instance_code:"PI0002", menu_item: menu_category1_menu_item1, price:10000.00, is_on_promotion:false, is_default:true, :item_attributes => "['2']" })
|
||||
# END
|
||||
|
||||
menu_item_attribute_size_small = MenuItemAttribute.create({attribute_type:"size", name: "Small", value: "small"})
|
||||
@@ -193,7 +193,7 @@ close_cashier_printer=PrintSetting.create({name: "Close Cashier", unique_code: "
|
||||
crm_order_printer=PrintSetting.create({name: "CRM Order", unique_code: "CrmOrderPdf", printer_name: "Cashier", precision: "0", delimiter: 0, heading_space: 5, page_width: 210, page_height: 1450})
|
||||
queue_no_printer=PrintSetting.create({name: "Queue No", unique_code: "QueueNoPdf", printer_name: "Cashier", precision: "0", delimiter: 0, heading_space: 5, page_width: 210, page_height: 1450})
|
||||
|
||||
cashier_terminal = CashierTerminal.create({name:"Terminal 1", printer_name: "Cashier"})
|
||||
# cashier_terminal = CashierTerminal.create({name:"Terminal 1", printer_name: "Cashier"})
|
||||
|
||||
zone = Zone.create({id:1, name: "H1", is_active:true, created_by: "SYSTEM DEFAULT"})
|
||||
|
||||
@@ -219,13 +219,13 @@ payment_methods = PaymentMethodSetting.create({payment_method:"Master",gateway_u
|
||||
payment_methods = PaymentMethodSetting.create({payment_method:"Redeem",gateway_url: "http://membership.paypar.ws",merchant_account_id:"RxzaYyAGzm7VqAZ4hKnv"})
|
||||
|
||||
#Default Order Queue stations
|
||||
order_queue_station1 = OrderQueueStation.create({station_name: "K1", is_active: true,printer_name: "Cashier", processing_items: JSON.generate(['01001','01002','01003','01004']), print_copy:true, cut_per_item: false, use_alternate_name: false, created_by: "SYSTEM DEFAULT"})
|
||||
order_queue_station2 = OrderQueueStation.create({station_name: "K2", is_active: false,printer_name: "Cashier", processing_items: JSON.generate(['02005','02006','02007','02008']), print_copy:true, cut_per_item: true, use_alternate_name: true, created_by: "SYSTEM DEFAULT"})
|
||||
zone_order_queue_station = OrderQueueStation.create({station_name: "K3", is_active: false, printer_name: "Cashier", processing_items: JSON.generate(['01001','01002','01003','01004','02005','02006','02007','02008']), print_copy: true, cut_per_item: true, use_alternate_name: false, created_by: "SYSTEM DEFAULT"})
|
||||
# order_queue_station1 = OrderQueueStation.create({station_name: "K1", is_active: true,printer_name: "Cashier", processing_items: JSON.generate(['01001','01002','01003','01004']), print_copy:true, cut_per_item: false, use_alternate_name: false, created_by: "SYSTEM DEFAULT"})
|
||||
# order_queue_station2 = OrderQueueStation.create({station_name: "K2", is_active: false,printer_name: "Cashier", processing_items: JSON.generate(['02005','02006','02007','02008']), print_copy:true, cut_per_item: true, use_alternate_name: true, created_by: "SYSTEM DEFAULT"})
|
||||
# zone_order_queue_station = OrderQueueStation.create({station_name: "K3", is_active: false, printer_name: "Cashier", processing_items: JSON.generate(['01001','01002','01003','01004','02005','02006','02007','02008']), print_copy: true, cut_per_item: true, use_alternate_name: false, created_by: "SYSTEM DEFAULT"})
|
||||
|
||||
# QueueStationZone
|
||||
zone_queue_station1 = OrderQueueProcessByZone.create({order_queue_station: order_queue_station1, zone: zone})
|
||||
zone_queue_station2 = OrderQueueProcessByZone.create({order_queue_station: order_queue_station2, zone: zone})
|
||||
zone_queue_station3 = OrderQueueProcessByZone.create({order_queue_station: zone_order_queue_station, zone: zone})
|
||||
# zone_queue_station1 = OrderQueueProcessByZone.create({order_queue_station: order_queue_station1, zone: zone})
|
||||
# zone_queue_station2 = OrderQueueProcessByZone.create({order_queue_station: order_queue_station2, zone: zone})
|
||||
# zone_queue_station3 = OrderQueueProcessByZone.create({order_queue_station: zone_order_queue_station, zone: zone})
|
||||
|
||||
puts " Finished System Default Set Up Data"
|
||||
|
||||
5
spec/jobs/checkin_job_spec.rb
Normal file
5
spec/jobs/checkin_job_spec.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe CheckinJob, type: :job do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
||||
Reference in New Issue
Block a user