mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-06-05 22:09:38 +02:00
Miglioramento modulo Statistiche
This commit is contained in:
25
modules/statistiche/js/calendar.js
Normal file
25
modules/statistiche/js/calendar.js
Normal file
@@ -0,0 +1,25 @@
|
||||
class Calendar {
|
||||
constructor(info, id){
|
||||
this.info = info;
|
||||
this.id = id;
|
||||
|
||||
this.elements = new Array();
|
||||
}
|
||||
|
||||
addElement(object){
|
||||
this.elements.push(object);
|
||||
}
|
||||
|
||||
update(start, end) {
|
||||
this.elements.forEach(function (element) {
|
||||
element.update(start, end);
|
||||
});
|
||||
}
|
||||
|
||||
remove() {
|
||||
this.elements.forEach(function (element) {
|
||||
element.remove();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
91
modules/statistiche/js/functions.js
Normal file
91
modules/statistiche/js/functions.js
Normal file
@@ -0,0 +1,91 @@
|
||||
var manager = manager ? manager : undefined;
|
||||
|
||||
function remove_calendar(button) {
|
||||
var name = $(button).parent().find("input").attr("id");
|
||||
|
||||
if (manager.remove(name)) {
|
||||
$("#group-" + name).remove();
|
||||
} else {
|
||||
swal({
|
||||
title: globals.translations.singleCalendar,
|
||||
type: "info",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function add_calendar() {
|
||||
var last = $("#calendars").find("input").last().attr("id");
|
||||
var last_id = last ? last.split("-")[1] : 0;
|
||||
last_id = parseInt(last_id) + 1;
|
||||
|
||||
var name = "calendar-" + last_id;
|
||||
|
||||
$("#calendars").append(`<div class="col-md-4" id="group-` + name + `">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon before">` + last_id + `</span>
|
||||
<input class="form-control calendar-input text-center" type="text" name="` + name + `" id="` + name + `"/>
|
||||
<span class="input-group-addon after clickable btn btn-danger" onclick="remove_calendar(this)">
|
||||
<i class="fa fa-trash-o"></i>
|
||||
</span>
|
||||
</div>
|
||||
<br>
|
||||
</div>`);
|
||||
|
||||
// Calendario principale
|
||||
ranges = {};
|
||||
ranges[globals.translations.today] = [moment(), moment()];
|
||||
ranges[globals.translations.firstThreemester] = [moment("01", "MM"), moment("03", "MM").endOf('month')];
|
||||
ranges[globals.translations.secondThreemester] = [moment("04", "MM"), moment("06", "MM").endOf('month')];
|
||||
ranges[globals.translations.thirdThreemester] = [moment("07", "MM"), moment("09", "MM").endOf('month')];
|
||||
ranges[globals.translations.fourthThreemester] = [moment("10", "MM"), moment("12", "MM").endOf('month')];
|
||||
ranges[globals.translations.firstSemester] = [moment("01", "MM"), moment("06", "MM").endOf('month')];
|
||||
ranges[globals.translations.secondSemester] = [moment("06", "MM"), moment("12", "MM").endOf('month')];
|
||||
ranges[globals.translations.thisMonth] = [moment().startOf('month'), moment().endOf('month')];
|
||||
ranges[globals.translations.lastMonth] = [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')];
|
||||
ranges[globals.translations.thisYear] = [moment().startOf('year'), moment().endOf('year')];
|
||||
ranges[globals.translations.lastYear] = [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year').endOf('year')];
|
||||
|
||||
|
||||
$("#" + name).daterangepicker({
|
||||
locale: {
|
||||
customRangeLabel: globals.translations.custom,
|
||||
applyLabel: globals.translations.apply,
|
||||
cancelLabel: globals.translations.cancel,
|
||||
fromLabel: globals.translations.from,
|
||||
toLabel: globals.translations.to,
|
||||
},
|
||||
startDate: globals.start_date_formatted,
|
||||
endDate: globals.end_date_formatted,
|
||||
applyClass: "btn btn-success btn-sm",
|
||||
cancelClass: "btn btn-danger btn-sm",
|
||||
ranges: ranges,
|
||||
linkedCalendars: false
|
||||
}, function (start, end) {
|
||||
var name = $(this.element).attr("id");
|
||||
var start = start.format("YYYY-MM-DD");
|
||||
var end = end.format("YYYY-MM-DD");
|
||||
|
||||
manager.update(name, start, end);
|
||||
});
|
||||
|
||||
// Inizializzazone calendario
|
||||
var calendar = manager.add(last_id, name);
|
||||
|
||||
init_calendar(calendar);
|
||||
|
||||
manager.init(name);
|
||||
}
|
||||
|
||||
function get_months(start, end) {
|
||||
var months = [];
|
||||
while (start.isSameOrBefore(end, "month")) {
|
||||
string = start.format("MMMM YYYY");
|
||||
|
||||
months.push(string.charAt(0).toUpperCase() + string.slice(1));
|
||||
|
||||
start.add(1, "months");
|
||||
}
|
||||
|
||||
return months;
|
||||
}
|
||||
|
11
modules/statistiche/js/init.js
Normal file
11
modules/statistiche/js/init.js
Normal file
@@ -0,0 +1,11 @@
|
||||
// Inzializzazione manager standard
|
||||
var info = {
|
||||
url: local_url,
|
||||
id_module: globals.id_module,
|
||||
id_record: globals.id_record,
|
||||
start_date: globals.start_date,
|
||||
end_date: globals.end_date,
|
||||
};
|
||||
|
||||
var manager = new Manager(info);
|
||||
add_calendar();
|
38
modules/statistiche/js/manager.js
Normal file
38
modules/statistiche/js/manager.js
Normal file
@@ -0,0 +1,38 @@
|
||||
class Manager {
|
||||
constructor(info) {
|
||||
this.info = info;
|
||||
|
||||
this.calendars = {};
|
||||
}
|
||||
|
||||
remove(name) {
|
||||
if (Object.keys(this.calendars).length > 1) {
|
||||
this.calendars[name].remove();
|
||||
delete this.calendars[name];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
add(id, name) {
|
||||
var calendar = new Calendar(this.info, id);
|
||||
this.calendars[name] = calendar;
|
||||
|
||||
return calendar;
|
||||
}
|
||||
|
||||
init(name) {
|
||||
var calendar = this.calendars[name];
|
||||
|
||||
var start = this.info.start_date;
|
||||
var end = this.info.end_date;
|
||||
|
||||
calendar.update(start, end);
|
||||
}
|
||||
|
||||
update(name, start, end){
|
||||
this.calendars[name].update(start, end);
|
||||
}
|
||||
}
|
36
modules/statistiche/js/stat.js
Normal file
36
modules/statistiche/js/stat.js
Normal file
@@ -0,0 +1,36 @@
|
||||
class Stat {
|
||||
constructor(calendar, file, data = {}){
|
||||
this.calendar = calendar;
|
||||
|
||||
this.file = file;
|
||||
this.data = data;
|
||||
|
||||
this.data.id_module = this.calendar.info.id_module;
|
||||
this.data.id_record = this.calendar.info.id_record;
|
||||
this.data.calendar_id = this.calendar.id;
|
||||
}
|
||||
|
||||
getCalendarID(){
|
||||
return this.calendar.id;
|
||||
}
|
||||
|
||||
getData(start, end, callback) {
|
||||
var data = JSON.parse(JSON.stringify(this.data));
|
||||
|
||||
data.start = start;
|
||||
data.end = end;
|
||||
|
||||
$.ajax({
|
||||
url: this.calendar.info.url + "/" + this.file,
|
||||
type: "get",
|
||||
data: data,
|
||||
success: function(data){
|
||||
callback(data)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
add(start, end){}
|
||||
update(start, end){}
|
||||
remove(){}
|
||||
}
|
95
modules/statistiche/js/stats/line_chart.js
Normal file
95
modules/statistiche/js/stats/line_chart.js
Normal file
@@ -0,0 +1,95 @@
|
||||
class LineChart extends Stat {
|
||||
constructor(calendar, file, data = {}, chart){
|
||||
super(calendar, file, data);
|
||||
|
||||
this.chart = chart;
|
||||
}
|
||||
|
||||
add(start, end, color = null) {
|
||||
var calendar_id = this.calendar.id;
|
||||
var chart = this.chart;
|
||||
|
||||
var color = color ? color : this.getRandomColor();
|
||||
|
||||
this.getData(start, end, function(response) {
|
||||
var data = JSON.parse(response);
|
||||
|
||||
var label = data.label;
|
||||
|
||||
var dataset = [];
|
||||
var labels = [];
|
||||
|
||||
data.results.forEach(function (item) {
|
||||
dataset.push(item.result);
|
||||
|
||||
var date = moment().month(item.month - 1).year(item.year);
|
||||
labels.push(date.format("MMMM YYYY"));
|
||||
});
|
||||
|
||||
while (chart.data.labels.length < data.results.length) {
|
||||
chart.data.labels.push("");
|
||||
}
|
||||
|
||||
chart.data.datasets.push({
|
||||
calendar_id: calendar_id,
|
||||
label: label,
|
||||
backgroundColor: color,
|
||||
borderColor: color,
|
||||
data: dataset,
|
||||
labels: labels,
|
||||
fill: false,
|
||||
});
|
||||
|
||||
chart.update();
|
||||
});
|
||||
}
|
||||
|
||||
update(start, end) {
|
||||
var color = this.remove();
|
||||
|
||||
this.add(start, end, color);
|
||||
}
|
||||
|
||||
getRandomColor() {
|
||||
var letters = '0123456789ABCDEF';
|
||||
var color = '#';
|
||||
for (var i = 0; i < 6; i++) {
|
||||
color += letters[Math.floor(Math.random() * 16)];
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
||||
remove() {
|
||||
var chart = this.chart;
|
||||
var calendar_id = this.calendar.id;
|
||||
|
||||
var max_length = 0;
|
||||
var dataset_index = undefined;
|
||||
|
||||
chart.data.datasets.forEach(function (item, index) {
|
||||
if(item.calendar_id == calendar_id) {
|
||||
dataset_index = index;
|
||||
} else {
|
||||
if (item.data.length > max_length) {
|
||||
max_length = item.data.length;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var color = null;
|
||||
if (dataset_index != undefined) {
|
||||
color = chart.data.datasets[dataset_index].backgroundColor;
|
||||
|
||||
chart.data.datasets.splice(dataset_index, 1);
|
||||
chart.data.labels.splice(dataset_index, 1);
|
||||
}
|
||||
|
||||
while (chart.data.labels.length > max_length) {
|
||||
chart.data.labels.pop("");
|
||||
}
|
||||
|
||||
chart.update();
|
||||
|
||||
return color;
|
||||
}
|
||||
}
|
33
modules/statistiche/js/stats/table.js
Normal file
33
modules/statistiche/js/stats/table.js
Normal file
@@ -0,0 +1,33 @@
|
||||
class Table extends Stat {
|
||||
constructor(calendar, file, data = {}, id){
|
||||
super(calendar, file, data);
|
||||
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
add(start, end) {
|
||||
var id = this.id;
|
||||
var calendar_id = this.calendar.id;
|
||||
|
||||
this.getData(start, end, function(data) {
|
||||
var row = $(id).find("#row-" + calendar_id);
|
||||
|
||||
if (!row.length) {
|
||||
$(id).append(data);
|
||||
} else {
|
||||
row.after(data);
|
||||
row.remove();
|
||||
}
|
||||
|
||||
$(id).find("#row-" + calendar_id).effect("highlight", {}, 3000);
|
||||
});
|
||||
}
|
||||
|
||||
update(start, end) {
|
||||
this.add(start, end)
|
||||
}
|
||||
|
||||
remove() {
|
||||
$(this.id).find("#row-" + this.calendar.id).remove();
|
||||
}
|
||||
}
|
3
modules/statistiche/js/stats/widget.js
Normal file
3
modules/statistiche/js/stats/widget.js
Normal file
@@ -0,0 +1,3 @@
|
||||
class Widget extends Table {
|
||||
|
||||
}
|
Reference in New Issue
Block a user