Merge branch 'master' of bitbucket.org:code2lab/sxrestaurant into adminbsb_material_ui
This commit is contained in:
1
Gemfile
1
Gemfile
@@ -121,3 +121,4 @@ gem 'momentjs-rails' # for date-range selector
|
|||||||
# gem 'bootstrap-datepicker-rails' # date picker
|
# gem 'bootstrap-datepicker-rails' # date picker
|
||||||
# gem 'jquery-datetimepicker-rails'
|
# gem 'jquery-datetimepicker-rails'
|
||||||
# gem 'select2-rails' # for multi-select and auto-complete select box
|
# gem 'select2-rails' # for multi-select and auto-complete select box
|
||||||
|
gem "chartkick" #chart lib
|
||||||
@@ -49,6 +49,7 @@ GEM
|
|||||||
activemodel (>= 4.0.0)
|
activemodel (>= 4.0.0)
|
||||||
activesupport (>= 4.0.0)
|
activesupport (>= 4.0.0)
|
||||||
mime-types (>= 1.16)
|
mime-types (>= 1.16)
|
||||||
|
chartkick (2.2.5)
|
||||||
chronic (0.10.2)
|
chronic (0.10.2)
|
||||||
coffee-rails (4.2.2)
|
coffee-rails (4.2.2)
|
||||||
coffee-script (>= 2.2.0)
|
coffee-script (>= 2.2.0)
|
||||||
@@ -261,6 +262,7 @@ DEPENDENCIES
|
|||||||
byebug
|
byebug
|
||||||
cancancan (~> 1.10)
|
cancancan (~> 1.10)
|
||||||
carrierwave (~> 1.0)
|
carrierwave (~> 1.0)
|
||||||
|
chartkick
|
||||||
coffee-rails (~> 4.2)
|
coffee-rails (~> 4.2)
|
||||||
cups (~> 0.0.7)
|
cups (~> 0.0.7)
|
||||||
database_cleaner
|
database_cleaner
|
||||||
@@ -303,4 +305,4 @@ DEPENDENCIES
|
|||||||
whenever
|
whenever
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
1.15.3
|
1.16.0
|
||||||
|
|||||||
@@ -26,7 +26,8 @@
|
|||||||
//= require autosize/autosize.js
|
//= require autosize/autosize.js
|
||||||
//= require jquery-countto/jquery.countTo.js
|
//= require jquery-countto/jquery.countTo.js
|
||||||
//= require raphael/raphael.min
|
//= require raphael/raphael.min
|
||||||
//= require chartjs/Chart.bundle.js
|
//= require Chart.bundle
|
||||||
|
//= require chartkick
|
||||||
//= require fileinput.min
|
//= require fileinput.min
|
||||||
//= require settings/processing_items
|
//= require settings/processing_items
|
||||||
//= require BSBMaterial/admin.js
|
//= require BSBMaterial/admin.js
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ $(document).ready(function() {
|
|||||||
$('body').bootstrapMaterialDesign();
|
$('body').bootstrapMaterialDesign();
|
||||||
|
|
||||||
var height = ($(window).height() - ($('.legal').outerHeight() + $('.user-info').outerHeight() + $('.navbar').innerHeight()));
|
var height = ($(window).height() - ($('.legal').outerHeight() + $('.user-info').outerHeight() + $('.navbar').innerHeight()));
|
||||||
console.log(height);
|
|
||||||
console.log($('#order-detail-slimscroll').attr('data-height'))
|
|
||||||
|
|
||||||
$('#custom-slimscroll').slimScroll({
|
$('#custom-slimscroll').slimScroll({
|
||||||
height: height,
|
height: height,
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ class Api::OrdersController < Api::ApiController
|
|||||||
@order.guest = params[:guest_info]
|
@order.guest = params[:guest_info]
|
||||||
@order.table_id = params[:table_id] # this is dining facilities's id
|
@order.table_id = params[:table_id] # this is dining facilities's id
|
||||||
@order.new_booking = true
|
@order.new_booking = true
|
||||||
|
@order.waiters = current_login_employee.name
|
||||||
@order.employee_name = current_login_employee.name
|
@order.employee_name = current_login_employee.name
|
||||||
#Create Table Booking or Room Booking
|
#Create Table Booking or Room Booking
|
||||||
if !params["booking_id"].nil?
|
if !params["booking_id"].nil?
|
||||||
|
|||||||
@@ -67,13 +67,21 @@ class HomeController < ApplicationController
|
|||||||
@orders = Sale::where("payment_status='new' and sale_status='bill' and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'").count()
|
@orders = Sale::where("payment_status='new' and sale_status='bill' and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'").count()
|
||||||
@sales = Sale::where("payment_status='paid' and sale_status='completed' and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'").count()
|
@sales = Sale::where("payment_status='paid' and sale_status='completed' and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'").count()
|
||||||
|
|
||||||
@top_products = Sale.top_products(today)
|
@top_products = Sale.top_products(today).sum('i.qty')
|
||||||
@hourly_sales = Sale.hourly_sales(today).sum(:grand_total)
|
@hourly_sales = Sale.hourly_sales(today).sum(:grand_total)
|
||||||
# .group_by_hour(:created_at, :time_zone => 'Asia/Rangoon',format: '%I:%p')
|
# .group_by_hour(:created_at, :time_zone => 'Asia/Rangoon',format: '%I:%p')
|
||||||
# .sum(:grand_total)
|
# .sum(:grand_total)
|
||||||
@employee_sales = Sale.employee_sales(today).sum(:grand_total)
|
@employee_sales = Sale.employee_sales(today).sum(:grand_total)
|
||||||
@inventories = StockJournal.inventory_balances(today).sum(:balance)
|
@inventories = StockJournal.inventory_balances(today).sum(:balance)
|
||||||
|
|
||||||
|
#@employee_sales = Hash.new
|
||||||
|
#employee_sales.each do |key, value|
|
||||||
|
# if(@employee_sales.has_key? key[1])
|
||||||
|
# @employee_sales[key[1]].push({key[0] => value})
|
||||||
|
# else
|
||||||
|
# @employee_sales[key[1]] = [key[0] => value]
|
||||||
|
# end
|
||||||
|
#end
|
||||||
@total_sale = Sale.total_sale(today)
|
@total_sale = Sale.total_sale(today)
|
||||||
@total_count = Sale.total_count(today)
|
@total_count = Sale.total_count(today)
|
||||||
@total_card = Sale.total_card_sale(today)
|
@total_card = Sale.total_card_sale(today)
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ class Oqs::HomeController < BaseOqsController
|
|||||||
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
||||||
left join order_queue_process_by_zones as oqpz on oqpz.order_queue_station_id = oqs.id
|
left join order_queue_process_by_zones as oqpz on oqpz.order_queue_station_id = oqs.id
|
||||||
left join orders as od ON od.order_id = assigned_order_items.order_id
|
left join orders as od ON od.order_id = assigned_order_items.order_id
|
||||||
left join order_items as odt ON odt.item_code = assigned_order_items.item_code AND odt.order_id = assigned_order_items.order_id
|
left join order_items as odt ON odt.item_instance_code = assigned_order_items.instance_code AND odt.order_id = assigned_order_items.order_id
|
||||||
left join customers as cus ON cus.customer_id = od.customer_id
|
left join customers as cus ON cus.customer_id = od.customer_id
|
||||||
left join booking_orders as bo on bo.order_id = assigned_order_items.order_id
|
left join booking_orders as bo on bo.order_id = assigned_order_items.order_id
|
||||||
left join bookings as bk on bk.booking_id = bo.booking_id
|
left join bookings as bk on bk.booking_id = bo.booking_id
|
||||||
@@ -142,7 +142,7 @@ class Oqs::HomeController < BaseOqsController
|
|||||||
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
||||||
left join order_queue_process_by_zones as oqpz on oqpz.order_queue_station_id = oqs.id
|
left join order_queue_process_by_zones as oqpz on oqpz.order_queue_station_id = oqs.id
|
||||||
left join orders as od ON od.order_id = assigned_order_items.order_id
|
left join orders as od ON od.order_id = assigned_order_items.order_id
|
||||||
left join order_items as odt ON odt.item_code = assigned_order_items.item_code AND odt.order_id = assigned_order_items.order_id
|
left join order_items as odt ON odt.item_instance_code = assigned_order_items.instance_code AND odt.order_id = assigned_order_items.order_id
|
||||||
left join customers as cus ON cus.customer_id = od.customer_id
|
left join customers as cus ON cus.customer_id = od.customer_id
|
||||||
left join booking_orders as bo on bo.order_id = assigned_order_items.order_id
|
left join booking_orders as bo on bo.order_id = assigned_order_items.order_id
|
||||||
left join bookings as bk on bk.booking_id = bo.booking_id
|
left join bookings as bk on bk.booking_id = bo.booking_id
|
||||||
@@ -161,7 +161,7 @@ class Oqs::HomeController < BaseOqsController
|
|||||||
query = AssignedOrderItem.select("count(odt.item_code) as total,oqs.id as station_id")
|
query = AssignedOrderItem.select("count(odt.item_code) as total,oqs.id as station_id")
|
||||||
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
||||||
left join orders as od ON od.order_id = assigned_order_items.order_id
|
left join orders as od ON od.order_id = assigned_order_items.order_id
|
||||||
left join order_items as odt ON odt.item_code = assigned_order_items.item_code AND odt.order_id = assigned_order_items.order_id
|
left join order_items as odt ON odt.item_instance_code = assigned_order_items.instance_code AND odt.order_id = assigned_order_items.order_id
|
||||||
left join customers as cus ON cus.customer_id = od.customer_id
|
left join customers as cus ON cus.customer_id = od.customer_id
|
||||||
left join booking_orders as bo on bo.order_id = assigned_order_items.order_id
|
left join booking_orders as bo on bo.order_id = assigned_order_items.order_id
|
||||||
left join bookings as bk on bk.booking_id = bo.booking_id
|
left join bookings as bk on bk.booking_id = bo.booking_id
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ class Origami::AddordersController < ApplicationController#BaseOrigamiController
|
|||||||
@order.table_id = params[:table_id] # this is dining facilities's id
|
@order.table_id = params[:table_id] # this is dining facilities's id
|
||||||
@order.new_booking = true
|
@order.new_booking = true
|
||||||
@order.waiters = current_login_employee.name
|
@order.waiters = current_login_employee.name
|
||||||
|
@order.employee_name = current_login_employee.name
|
||||||
#Create Table Booking or Room Booking
|
#Create Table Booking or Room Booking
|
||||||
if !params["booking_id"].nil?
|
if !params["booking_id"].nil?
|
||||||
# check booking id is already completed.
|
# check booking id is already completed.
|
||||||
|
|||||||
@@ -7,10 +7,11 @@ class AssignedOrderItem < ApplicationRecord
|
|||||||
belongs_to :order
|
belongs_to :order
|
||||||
belongs_to :order_queue_station
|
belongs_to :order_queue_station
|
||||||
|
|
||||||
def self.assigned_order_item (order, item_code, order_queue_station )
|
def self.assigned_order_item (order, item_code, instance_code, order_queue_station )
|
||||||
assigned_order_item = AssignedOrderItem.new()
|
assigned_order_item = AssignedOrderItem.new()
|
||||||
assigned_order_item.order = order
|
assigned_order_item.order = order
|
||||||
assigned_order_item.item_code = item_code
|
assigned_order_item.item_code = item_code
|
||||||
|
assigned_order_item.instance_code = instance_code
|
||||||
assigned_order_item.order_queue_station = order_queue_station
|
assigned_order_item.order_queue_station = order_queue_station
|
||||||
assigned_order_item.print_status = false
|
assigned_order_item.print_status = false
|
||||||
assigned_order_item.delivery_status = false
|
assigned_order_item.delivery_status = false
|
||||||
@@ -23,7 +24,7 @@ class AssignedOrderItem < ApplicationRecord
|
|||||||
oqs.id as station_id, oqs.station_name,
|
oqs.id as station_id, oqs.station_name,
|
||||||
oqs.is_active, oqpz.zone_id,
|
oqs.is_active, oqpz.zone_id,
|
||||||
df.name as zone, df.type as table_type,
|
df.name as zone, df.type as table_type,
|
||||||
odt.order_id, odt.item_code, odt.item_name,
|
odt.order_id, odt.item_code, odt.item_instance_code, odt.item_name,
|
||||||
odt.price, odt.qty, odt.item_order_by, odt.options,
|
odt.price, odt.qty, odt.item_order_by, odt.options,
|
||||||
cus.name as customer_name, odt.created_at")
|
cus.name as customer_name, odt.created_at")
|
||||||
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
.joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class OrderQueueStation < ApplicationRecord
|
|||||||
# else
|
# else
|
||||||
|
|
||||||
if (order_item.price != 0)
|
if (order_item.price != 0)
|
||||||
AssignedOrderItem.assigned_order_item(order, order_item.item_code, oqs)
|
AssignedOrderItem.assigned_order_item(order, order_item.item_code, order_item.item_instance_code, oqs)
|
||||||
oqs_order_items.push(order_item)
|
oqs_order_items.push(order_item)
|
||||||
end
|
end
|
||||||
# end
|
# end
|
||||||
|
|||||||
@@ -605,7 +605,7 @@ end
|
|||||||
|
|
||||||
def self.get_item_query()
|
def self.get_item_query()
|
||||||
query = Sale.select("acc.title as account_name,mi.account_id, i.item_instance_code as item_code, " +
|
query = Sale.select("acc.title as account_name,mi.account_id, i.item_instance_code as item_code, " +
|
||||||
"(SUM(i.qty * i.unit_price)) as grand_total,SUM(i.qty) as total_item," +
|
"(i.qty * i.unit_price) as grand_total,(i.qty) as total_item," +
|
||||||
" i.unit_price as unit_price,i.product_name as product_name, mc.name as" +
|
" i.unit_price as unit_price,i.product_name as product_name, mc.name as" +
|
||||||
" menu_category_name,mc.id as menu_category_id ")
|
" menu_category_name,mc.id as menu_category_id ")
|
||||||
|
|
||||||
@@ -617,7 +617,7 @@ def self.get_item_query()
|
|||||||
|
|
||||||
query = query.joins(" JOIN accounts acc ON acc.id = mi.account_id")
|
query = query.joins(" JOIN accounts acc ON acc.id = mi.account_id")
|
||||||
query = query.where("i.unit_price > 0")
|
query = query.where("i.unit_price > 0")
|
||||||
query = query.group('i.product_code ').order("mi.account_id, mi.menu_category_id")
|
query = query.group("i.item_instance_code").order("mi.account_id, mi.menu_category_id")
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get_by_shift_items(shift_sale_range, shift, from, to, status)
|
def self.get_by_shift_items(shift_sale_range, shift, from, to, status)
|
||||||
@@ -904,7 +904,7 @@ end
|
|||||||
query = Sale.select("(SUM(i.qty) * i.price) as grand_total,SUM(i.qty) as total_item," +
|
query = Sale.select("(SUM(i.qty) * i.price) as grand_total,SUM(i.qty) as total_item," +
|
||||||
" i.price as unit_price,mi.name as product_name")
|
" i.price as unit_price,mi.name as product_name")
|
||||||
.joins("JOIN sale_items i ON i.sale_id = sales.sale_id JOIN menu_items mi ON i.product_code = mi.item_code")
|
.joins("JOIN sale_items i ON i.sale_id = sales.sale_id JOIN menu_items mi ON i.product_code = mi.item_code")
|
||||||
.where("(i.qty > 0 ) and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'"+
|
.where("(i.qty > 0 and i.price > 0) and DATE_FORMAT(receipt_date,'%Y-%m-%d') = '#{today}'"+
|
||||||
"and payment_status='paid' and sale_status= 'completed'")
|
"and payment_status='paid' and sale_status= 'completed'")
|
||||||
.group('mi.name')
|
.group('mi.name')
|
||||||
.order("SUM(i.qty) DESC").limit(5)
|
.order("SUM(i.qty) DESC").limit(5)
|
||||||
@@ -918,10 +918,11 @@ end
|
|||||||
|
|
||||||
def self.employee_sales(today)
|
def self.employee_sales(today)
|
||||||
query = Sale.select("e.name as employee_name,grand_total")
|
query = Sale.select("e.name as employee_name,grand_total")
|
||||||
.where('payment_status="paid" and sale_status = "completed" and DATE_FORMAT(receipt_date,"%Y-%m-%d") = ?',today)
|
.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 employees e on e.id=sales.cashier_id")
|
||||||
.group('e.name')
|
.joins("join sale_payments sp on sp.sale_id=sales.sale_id")
|
||||||
.order('e.name ASC')
|
.group("sp.payment_method","e.name")
|
||||||
|
.order('e.name')
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.total_sale(today)
|
def self.total_sale(today)
|
||||||
|
|||||||
@@ -1,70 +1,75 @@
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="block-header">
|
<div class="block-header">
|
||||||
<h2><%= t :dashboard %></h2>
|
<h2><%= t :dashboard %></h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Widgets -->
|
||||||
|
<div class="row clearfix">
|
||||||
|
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
||||||
|
<div class="info-box bg-cyan hover-expand-effect">
|
||||||
|
<div class="icon">
|
||||||
|
<i class="material-icons">help</i>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="text"><%= t :sale_count %></div>
|
||||||
|
<div class="number count-to" data-from="0" data-to="<%= @total_count%>" data-speed="1000" data-fresh-interval="20"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
||||||
|
<div class="info-box bg-pink hover-expand-effect">
|
||||||
|
<div class="icon">
|
||||||
|
<i class="material-icons">attach_money</i>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="text"><%= t :total_sale %></div>
|
||||||
|
<div class="number count-to" data-from="0" data-to="<%= @total_sale%>" data-speed="15" data-fresh-interval="20"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Widgets -->
|
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
||||||
<div class="row clearfix">
|
<div class="info-box bg-light-green hover-expand-effect">
|
||||||
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
<div class="icon">
|
||||||
<div class="info-box bg-cyan hover-expand-effect">
|
<i class="material-icons">person_add</i>
|
||||||
<div class="icon">
|
|
||||||
<i class="material-icons">help</i>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="text"><%= t :sale_count %></div>
|
|
||||||
<div class="number count-to" data-from="0" data-to="<%= @total_count%>" data-speed="1000" data-fresh-interval="20"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
<div class="content">
|
||||||
<div class="info-box bg-pink hover-expand-effect">
|
<div class="text"><%= t :total_credit %></div>
|
||||||
<div class="icon">
|
<div class="number count-to" data-from="0" data-to="<%= @total_credit%>" data-speed="1000" data-fresh-interval="20"></div>
|
||||||
<i class="material-icons">attach_money</i>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="text"><%= t :total_sale %></div>
|
|
||||||
<div class="number count-to" data-from="0" data-to="<%= @total_sale%>" data-speed="15" data-fresh-interval="20"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
|
||||||
<div class="info-box bg-light-green hover-expand-effect">
|
|
||||||
<div class="icon">
|
|
||||||
<i class="material-icons">person_add</i>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="text"><%= t :total_credit %></div>
|
|
||||||
<div class="number count-to" data-from="0" data-to="<%= @total_credit%>" data-speed="1000" data-fresh-interval="20"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
|
||||||
<div class="info-box bg-orange hover-expand-effect">
|
|
||||||
<div class="icon">
|
|
||||||
<i class="material-icons">credit_card</i>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="text"><%= t :total_card %></div>
|
|
||||||
<div class="number count-to" data-from="0" data-to="<%= @total_card%>" data-speed="1000" data-fresh-interval="20"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- #END# Widgets -->
|
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
|
||||||
<!-- CPU Usage -->
|
<div class="info-box bg-orange hover-expand-effect">
|
||||||
|
<div class="icon">
|
||||||
|
<i class="material-icons">credit_card</i>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="text"><%= t :total_card %></div>
|
||||||
|
<div class="number count-to" data-from="0" data-to="<%= @total_card%>" data-speed="1000" data-fresh-interval="20"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- #END# Widgets -->
|
||||||
|
<!-- CPU Usage -->
|
||||||
|
|
||||||
<% if current_user.role == 'administrator' || current_user.role == 'manager' %>
|
<% if current_user.role == 'administrator' || current_user.role == 'manager' %>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||||
<div class="card">
|
<div class="row">
|
||||||
<div class="body">
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||||
<h4><i class="material-icons md-24">dashboard</i><%= (t :top) + " " + (t :products) %></h4>
|
<div class="card">
|
||||||
<canvas id="top_products" class="col-md-12"></canvas>
|
<div class="body">
|
||||||
</div>
|
<h4><i class="material-icons md-24">dashboard</i><%= (t :top) + " " + (t :products) %></h4>
|
||||||
|
<!-- <canvas id="top_products" class="col-md-12"></canvas> -->
|
||||||
|
<%= pie_chart @top_products %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<h4><i class="material-icons md-24">store</i><%= t :inventory %></h4>
|
<h4><i class="material-icons md-24">store</i><%= t :inventory %></h4>
|
||||||
@@ -72,221 +77,38 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
<br />
|
<br />
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<h4><i class="material-icons md-24">av_timer</i><%= (t :hourly) + " " + (t :sale) %></h4>
|
<h4><i class="material-icons md-24">av_timer</i><%= (t :hourly) + " " + (t :sale) %></h4>
|
||||||
<canvas id="hourly_sales" class="col-md-12"></canvas>
|
<!-- <canvas id="hourly_sales" class="col-md-12"></canvas> -->
|
||||||
</div>
|
<%= column_chart @hourly_sales %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">
|
|
||||||
<div class="card">
|
|
||||||
<div class="body">
|
|
||||||
<h4><i class="material-icons md-24">assignment_ind</i><%= (t :staff) + " " + (t :sale) %></h4>
|
|
||||||
<canvas id="employee_sales" class="col-md-12"></canvas>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
</div>
|
||||||
</div>
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||||
|
<div class="card">
|
||||||
|
<div class="body">
|
||||||
|
<h4><i class="material-icons md-24">assignment_ind</i><%= (t :staff) + " " + (t :sale) %></h4>
|
||||||
|
<!-- <canvas id="employee_sales" class="col-md-12"></canvas> -->
|
||||||
|
<%= column_chart @employee_sales %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
|
||||||
|
<div class="card">
|
||||||
|
<div class="body">
|
||||||
|
|
||||||
<script>
|
</div>
|
||||||
$(document).ready(function(){
|
</div>
|
||||||
var top_products = JSON.parse('<%= @top_products.to_json.html_safe %>');
|
</div> -->
|
||||||
var hourly_sales = JSON.parse('<%= @hourly_sales.to_json.html_safe %>');
|
</div>
|
||||||
var employee_sales = JSON.parse('<%= @employee_sales.to_json.html_safe %>');
|
<% end %>
|
||||||
var inventories = JSON.parse('<%= @inventories.to_json.html_safe %>');
|
</div>
|
||||||
showTopProductsChartData(top_products);
|
|
||||||
showHourlySalesChartData(hourly_sales);
|
|
||||||
showEmployeeSalesChartData(employee_sales);
|
|
||||||
showInventoryChartData(inventories);
|
|
||||||
});
|
|
||||||
|
|
||||||
function randomColorGenerator () {
|
|
||||||
return '#' + (Math.random().toString(16) + '0000000').slice(2, 8);
|
|
||||||
};
|
|
||||||
|
|
||||||
function showTopProductsChartData(top_products) {
|
|
||||||
var labels = [];
|
|
||||||
var datasets = [];
|
|
||||||
var backgroundColor = [];
|
|
||||||
|
|
||||||
if(top_products!=undefined && top_products!=''){
|
|
||||||
if(top_products.length>0){
|
|
||||||
$.each(top_products,function(k,val){
|
|
||||||
labels.push(val.product_name);
|
|
||||||
datasets.push(val.total_item);
|
|
||||||
backgroundColor.push(randomColorGenerator());
|
|
||||||
});
|
|
||||||
|
|
||||||
var ctx = $("#top_products").get(0).getContext("2d");
|
|
||||||
|
|
||||||
var chart = new Chart(ctx, {
|
|
||||||
type: 'pie',
|
|
||||||
data: {
|
|
||||||
labels: labels,
|
|
||||||
datasets: [{
|
|
||||||
data: datasets,
|
|
||||||
backgroundColor: backgroundColor
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
legend: {
|
|
||||||
labels: {
|
|
||||||
fontColor: 'black'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showHourlySalesChartData(hourly_sales) {
|
|
||||||
var labels = [];
|
|
||||||
var datasets = [];
|
|
||||||
var backgroundColor = [];
|
|
||||||
|
|
||||||
if(hourly_sales!=undefined && hourly_sales!=''){
|
|
||||||
if(Object.keys(hourly_sales).length > 0){
|
|
||||||
$.each(hourly_sales,function(k,val){
|
|
||||||
labels.push(k.toString());
|
|
||||||
datasets.push(val);
|
|
||||||
backgroundColor.push(randomColorGenerator());
|
|
||||||
});
|
|
||||||
|
|
||||||
var ctx = $("#hourly_sales").get(0).getContext("2d");
|
|
||||||
|
|
||||||
var myChart = new Chart(ctx, {
|
|
||||||
type: 'bar',
|
|
||||||
data: {
|
|
||||||
labels: labels,
|
|
||||||
datasets: [{
|
|
||||||
label: '',
|
|
||||||
data: datasets,
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderWidth: 1
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
legend: {
|
|
||||||
display:false
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
xAxes: [{
|
|
||||||
stacked: true,
|
|
||||||
categorySpacing: 0,
|
|
||||||
barPercentage: 0.5
|
|
||||||
}],
|
|
||||||
yAxes: [{
|
|
||||||
stacked: true,
|
|
||||||
ticks: {
|
|
||||||
beginAtZero:true
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showEmployeeSalesChartData(employee_sales) {
|
|
||||||
var labels = [];
|
|
||||||
var datasets = [];
|
|
||||||
var backgroundColor = [];
|
|
||||||
|
|
||||||
if(employee_sales!=undefined && employee_sales!=''){
|
|
||||||
if(Object.keys(employee_sales).length > 0){
|
|
||||||
$.each(employee_sales,function(k,val){
|
|
||||||
labels.push(k.toString());
|
|
||||||
datasets.push(val);
|
|
||||||
backgroundColor.push(randomColorGenerator());
|
|
||||||
});
|
|
||||||
var ctx = $("#employee_sales").get(0).getContext("2d");
|
|
||||||
|
|
||||||
var myChart = new Chart(ctx, {
|
|
||||||
type: 'bar',
|
|
||||||
data: {
|
|
||||||
labels: labels,
|
|
||||||
datasets: [{
|
|
||||||
label: '',
|
|
||||||
data: datasets,
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderWidth: 1
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
legend: {
|
|
||||||
display:false
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
xAxes: [{
|
|
||||||
stacked: true,
|
|
||||||
categorySpacing: 0,
|
|
||||||
barPercentage: 0.5
|
|
||||||
}],
|
|
||||||
yAxes: [{
|
|
||||||
stacked: true,
|
|
||||||
ticks: {
|
|
||||||
beginAtZero:true
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showInventoryChartData(inventories) {
|
|
||||||
var labels = [];
|
|
||||||
var datasets = [];
|
|
||||||
var borderColor = [];
|
|
||||||
|
|
||||||
if(inventories!=undefined && inventories!=''){
|
|
||||||
if(Object.keys(inventories).length > 0){
|
|
||||||
$.each(inventories,function(k,val){
|
|
||||||
labels.push(k.toString());
|
|
||||||
datasets.push(val);
|
|
||||||
borderColor.push(randomColorGenerator());
|
|
||||||
});
|
|
||||||
|
|
||||||
var ctx = $("#inventory").get(0).getContext("2d");
|
|
||||||
|
|
||||||
var myChart = new Chart(ctx, {
|
|
||||||
type: 'line',
|
|
||||||
data: {
|
|
||||||
labels: labels,
|
|
||||||
datasets: [{
|
|
||||||
fill: false,
|
|
||||||
data: datasets,
|
|
||||||
borderColor: borderColor
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
legend: {
|
|
||||||
display:false
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
xAxes: [{
|
|
||||||
stacked: true
|
|
||||||
}],
|
|
||||||
yAxes: [{
|
|
||||||
stacked: false,
|
|
||||||
ticks: {
|
|
||||||
beginAtZero:true
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@@ -3,6 +3,7 @@ class CreateAssignedOrderItems < ActiveRecord::Migration[5.1]
|
|||||||
create_table :assigned_order_items, :id => false do |t|
|
create_table :assigned_order_items, :id => false do |t|
|
||||||
t.string :assigned_order_item_id, :limit => 16, :primary_key => true #custom primary key - to ensure consistence for cloud syncing
|
t.string :assigned_order_item_id, :limit => 16, :primary_key => true #custom primary key - to ensure consistence for cloud syncing
|
||||||
t.string :item_code, :null => false, :index => true
|
t.string :item_code, :null => false, :index => true
|
||||||
|
t.string :instance_code, :null => false, :index => true
|
||||||
t.references :order_queue_station, foreign_key: true
|
t.references :order_queue_station, foreign_key: true
|
||||||
t.string :order_id, foreign_key: true, :limit => 16
|
t.string :order_id, foreign_key: true, :limit => 16
|
||||||
t.boolean :print_status
|
t.boolean :print_status
|
||||||
|
|||||||
Reference in New Issue
Block a user