president/public/js/manager/inventory.js

364 lines
10 KiB
JavaScript
Executable File

var inventoryStatus = {
loading: false
};
$(document).on('change', '.statistic_display', function() {
var s = $(this);
var app = s.closest('.appointment').attr('app');
var val = s.val();
settingSetter({ 'app': app, 'setting': 's_display', 'value': val });
inventoryDetails(app);
});
$(document).on('change', '.statistic_calc', function() {
var s = $(this);
var app = s.closest('.appointment').attr('app');
var val = s.val();
settingSetter({ 'app': app, 'setting': 's_calc', 'value': val });
inventoryDetails(app);
});
$(document).on('click', '.statistic_lock', function() {
var s = $(this);
var app = s.attr('app');
var lock = s.attr('locked');
if (lock == 'on') {
lock = 'off';
s.removeClass('selected');
}
else {
lock = 'on';
s.addClass('selected');
}
s.attr('locked', lock);
if (app == 'budget') {
budgetInit({ new_settings: { 's_lock': lock } });
}
else {
settingSetter({ 'app': app, 'setting': 's_lock', 'value': lock });
inventoryDetails(app);
}
});
$(document).on('change', '.statistic_visual', function() {
var s = $(this);
var app = s.closest('.appointment').attr('app');
var val = s.val();
settingSetter({ 'app': app, 'setting': 's_visual', 'value': val });
inventoryDetails(app);
});
$(document).on('change','.statistic_scope_count', function() {
var s = $(this);
var val = s.val();
var app = s.closest('.appointment').attr('app');
settingSetter({ 'app': app, 'setting': 's_scope_count', 'value': val });
inventoryDetails(app);
});
$(document).on('change','.statistic_movement', function() {
var s = $(this);
var app = s.closest('.appointment').attr('app');
var sval = s.val();
var val = JSON.stringify(sval);
settingSetter({ 'app': app, 'setting': 's_movement', 'value': val });
inventoryDetails(app);
});
function inventoryDetails(app) {
var ir = $('.appointment[app="' + app + '"]');
var iq = ir.find('.inventory_details');
if (!iq.is(':visible')) {
iq.html('<h1>Loading</h1>');
}
if (inventoryStatus.loading == true) {
// return;
}
inventoryStatus.loading = true;
var sscv = ir.find('.statistic_scope_count').val();
var sm = ir.find('.statistic_movement');
var sdv = ir.find('.statistic_display').val();
var sv = ir.find('.statistic_visual').val();
var sc = ir.find('.statistic_calc').val();
var sdl = ir.find('.statistic_lock').attr('locked');
var smv = sm.val();
var jsmv = JSON.stringify(smv);
var smsT = sm.scrollTop();
var s_scroll = iq.find('.statistic_graphs').scrollTop();
$.ajax({
url: '/manager/inventory/details',
type: 'GET',
data: { timestamp: timestamp, app: app, scope_count: sscv, calc: sc, lock: sdl, display: sdv, visual: sv, movement: jsmv, s_scroll: s_scroll },
success: function(response) {
if (iq.is(':visible')) {
var new_s_scroll = iq.find('.statistic_graphs').scrollTop();
iq.html(response.content);
appointment_chron();
ir.find('.statistic_scope_count').val(sscv || response.settings.s_scope_count);
ir.find('.statistic_display').val(sdv || response.settings.s_display);
ir.find('.statistic_lock').attr('locked', response.settings.s_lock);
if (response.settings.s_lock == 'on') {
ir.find('.statistic_lock').addClass('selected');
}
else {
ir.find('.statistic_lock').removeClass('selected');
}
ir.find('.statistic_movement').scrollTop(smsT);
ir.find('.statistic_movement').val(smv || response.settings.s_movement);
ir.find('.statistic_calc').val(sc || response.settings.s_calc);
statisticGrapher(response);
if (new_s_scroll != 0 && new_s_scroll != response.settings.s_scroll) {
new_s_scroll = response.settings.s_scroll;
}
iq.find('.statistic_graphs').scrollTop(new_s_scroll);
appointment_chron();
inventoryStatus.loading = false;
}
}
});
}
function inventoryDetailsUpdater() {
$('.inventory_details').each(function(i,v) {
var id = $(v);
if (id.is(':visible')) {
var app = id.closest('.appointment').attr('app');
inventoryDetails(app);
}
});
}
var ctx;
function statisticGrapher(data,canvasId) {
console.log(canvasId);
console.log(data);
var wind = $('.wind[app="' + data.app + '"]');
var wind_id = wind.attr('id');
var win = document.getElementById(wind_id);
$.each(data.time_lengths, function(itl, tl) {
console.log(itl);
var time_widths = data.scopes.length;
if (data.time_widths.length > 0) {
console.log(data.time_widths);
time_widths = data.time_widths[itl] + 2;
}
console.log(time_widths);
var id = canvasId || data.app + '_' + tl + '_statistic_graph';
var g = document.getElementById(id);
g.width = wind.width();
ctx = g.getContext('2d');
ctx.beginPath();
ctx.fillStyle = data.settings.colour || 'black';
ctx.strokeStyle = 'black';
ctx.globalAlpha = 1;
ctx.font = "400 10px Arial";
var threshold;
if (data.highest[tl]) {
var lowest = numeral(data.lowest[tl][data.settings.s_display]).value();
var highest = numeral(data.highest[tl][data.settings.s_display]).value();
var max = highest * 1.1;
if (lowest < 0) {
max = highest + Math.abs(lowest);
}
var min = g.height * .9;
var colWidth = g.width / time_widths + 1;
$.each(data.scopes, function(n,ts) {
if (data[ts] && (ts != 'average' && ts != 'total')) {
if (typeof data[ts][tl] == 'object') {
if (data[ts][tl][data.settings.s_display]) {
var point = numeral(data[ts][tl][data.settings.s_display]).value();
if (lowest < 0) {
point = point + Math.abs(lowest);
}
var x = g.width * (n / time_widths);
var y = min - (min * point / max);
ctx.lineTo(x, y);
var text = data[ts][tl][data.settings.s_display];
if (data.settings.s_display == 'duration') {
text = data[ts][tl]['formatted_duration'];
}
var text_x = (x - ctx.measureText(text).width);
if (text_x < 0) {
text_x = x;
}
ctx.fillText(text,text_x, y);
ctx.save('a');
ctx.fillStyle = 'black';
ctx.strokeStyle = 'black';
ctx.font = "400 10px Arial";
if (data.settings.s_visual == 'historical') {
if (data[ts][tl]['start_timestamp']) {
var ft = new Date(data[ts][tl]['start_timestamp']);
var text = ts.substr(0,3)
if (tl == 'hour') {
ft.getHours()
} else if (tl == 'day') {
text = dayProcessor(ft.getDay())
}
}
ctx.fillText(text, x - 5, g.height);
}
else {
ctx.fillText(ts, x - 5, g.height);
}
ctx.restore('a');
if (data[ts][tl]['budget']) {
threshold = data[ts][tl]['budget']['threshold'];
}
}
}
}
});
ctx.stroke();
ctx.beginPath();
ctx.save('b');
if (data.autocalc && data['budget_status'][tl]) {
ctx.fillStyle = 'blue';
ctx.strokeStyle = data['budget_status'][tl][data.settings.s_display]['colour'] || 'blue';
ctx.lineWidth = 4;
ctx.moveTo(0, min - (min * data.autocalc[tl]['result'] / max));
ctx.lineTo(g.width, min - (min * data.autocalc[tl]['result'] / max));
ctx.stroke();
}
ctx.beginPath();
ctx.lineWidth = 2;
ctx.strokeStyle = 'black';
ctx.moveTo(0, min - (min * threshold / max));
ctx.lineTo(g.width, min - (min * threshold / max));
ctx.stroke();
ctx.restore('b');
ctx.beginPath();
// ctx.fill();
}
else {
//$('#' + id + '_span').remove();
}
});
}
$(document).on('click', '.statistic_entry', function() {
var s = $(this);
var ir = s.closest('.appointment');
var app = ir.attr('app');
var timestamp = s.attr('timestamp');
var scope = s.attr('scope');
var zone = s.attr('zone');
var mouse = mouse_position();
var start_timestamp = s.attr('start_timestamp');
var end_timestamp = s.attr('end_timestamp');
$.ajax({
url: '/manager/inventory/information',
type: 'GET',
data: {
app: app,
timestamp: timestamp,
scope: scope,
zone: zone,
x: mouse['x'],
y: mouse['y'],
start_timestamp: start_timestamp,
end_timestamp: end_timestamp,
},
success: function(response) {
console.log(response);
var id = $(response.html).attr('id');
console.log(id);
$('.statistic_information_container[app="' + app + '"]').append(response.html);
var info = $('#' + id);
if ((numeral(info.css('left')).value() + info.width()) > $(window).width()) {
console.log('too far right');
var new_left = ($(window).width() - info.width() - 5);
console.log(new_left);
info.css({'left': new_left + 'px'});
}
else if (numeral(info.css('left')).value() < 0) {
info.css({'left': '5px'});
}
if ((numeral(info.css('top')).value() + info.height()) > $(window).height()) {
var new_top = ($(window).height() - info.height() - 5);
info.css({'top': new_top + 'px' });
}
statisticGrapher(response.details,id + '_canvas');
appointment_chron();
}
});
});
$(document).on('click', '.close_statistic_info', function() {
$(this).closest('.statistic_info').remove();
});
$(document).on('click', '.statistic_appointments', function() {
var s = $(this);
var ir = s.closest('.appointment');
var app = ir.attr('app');
var timestamp = s.attr('timestamp');
var scope = s.attr('scope');
var container = ir.find('.re_details');
var sscv = ir.find('.statistic_scope_count').val();
var sm = ir.find('.statistic_movement');
var sdv = ir.find('.statistic_display').val();
var sdl = ir.find('.statistic_lock').attr('locked');
var smv = sm.val();
var jsmv = JSON.stringify(smv);
var sorts = localStorage.getItem('sorts');
var variables = { app: app, filter: 'all', sorts: sorts, timeshift: '0d', time_machine: '', timestamp: timestamp, scope: scope };
$.ajax({
url: '/manager/appointment_details',
type: 'GET',
data: variables,
success: function(response) {
container.html(response);
container.show();
appointment_chron();
$('.appointment_contents[app="' + app + '"]').scrollTop(0);
}
});
});
$(document).on('click', '.system_evaluation', function() {
var b = $(this);
evaluationStation(b);
});
function evaluationStation(b) {
var timestamp = Date.now();
var app = b.attr('app');
var text = b.text();
b.text('* ' + text);
clearInterval(configIntervals['sysEvaluateInterval']);
clearTimeout(configIntervals['sysEvaluateTimeout']);
configIntervals['sysEvaluateInterval'] = setInterval(function() {
b.text('* * ' + text + ' * *');
configIntervals['sysEvaluateTimeout'] = setTimeout(function() {
b.text('* ' + text + ' *');
},250);
},500);
$.ajax({
url: '/manager/inventory/evaluate',
type: 'POST',
data: { timestamp: timestamp, app: app },
success: function(response) {
clearInterval(configIntervals['sysEvaluateInterval']);
clearTimeout(configIntervals['sysEvaluateTimeout']);
b.text(text);
}
});
}