286 lines
8.7 KiB
Plaintext
Executable File
286 lines
8.7 KiB
Plaintext
Executable File
<div class="container-fluid">
|
|
<div class="block-header">
|
|
<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-pink hover-expand-effect">
|
|
<div class="icon">
|
|
<i class="material-icons">playlist_add_check</i>
|
|
</div>
|
|
<div class="content">
|
|
<div class="text">NEW TASKS</div>
|
|
<div class="number count-to" data-from="0" data-to="125" 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-cyan hover-expand-effect">
|
|
<div class="icon">
|
|
<i class="material-icons">help</i>
|
|
</div>
|
|
<div class="content">
|
|
<div class="text">NEW TICKETS</div>
|
|
<div class="number count-to" data-from="0" data-to="257" 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-light-green hover-expand-effect">
|
|
<div class="icon">
|
|
<i class="material-icons">forum</i>
|
|
</div>
|
|
<div class="content">
|
|
<div class="text">NEW COMMENTS</div>
|
|
<div class="number count-to" data-from="0" data-to="243" 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">person_add</i>
|
|
</div>
|
|
<div class="content">
|
|
<div class="text">NEW VISITORS</div>
|
|
<div class="number count-to" data-from="0" data-to="1225" 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' %>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="panel">
|
|
<div class="panel-heading"><h4><%= (t :top) + " " + (t :products) %></h4></div>
|
|
<div class="panel-body">
|
|
<canvas id="top_products" class="col-md-12"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="panel">
|
|
<div class="panel-heading"><h4><%= t :inventory %></h4></div>
|
|
<div class="panel-body">
|
|
<canvas id="inventory" class="col-md-12"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br><br>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="panel">
|
|
<div class="panel-heading"><h4><%= (t :hourly) + " " + (t :sale) %></h4></div>
|
|
<div class="panel-body">
|
|
<canvas id="hourly_sales" class="col-md-12"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="panel">
|
|
<div class="panel-heading"><h4><%= (t :staff) + " " + (t :sale) %></h4></div>
|
|
<div class="panel-body">
|
|
<canvas id="employee_sales" class="col-md-12"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
</div>
|
|
|
|
<!-- <script src="js/Chart.js"></script> -->
|
|
<script>
|
|
$(document).ready(function(){
|
|
var top_products = JSON.parse('<%= @top_products.to_json.html_safe %>');
|
|
var hourly_sales = JSON.parse('<%= @hourly_sales.to_json.html_safe %>');
|
|
var employee_sales = JSON.parse('<%= @employee_sales.to_json.html_safe %>');
|
|
var inventories = JSON.parse('<%= @inventories.to_json.html_safe %>');
|
|
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 chart = new Chart("top_products", {
|
|
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 myChart = new Chart("hourly_sales", {
|
|
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 myChart = new Chart("employee_sales", {
|
|
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 myChart = new Chart("inventory", {
|
|
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> |