You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2346 lines
96 KiB

function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
var statistics = (function() {
'use strict';
/* Initialize attributes */
var STAT = {
page_loader: app.get_loader2('Loading...'),
/*graphs to be loaded initially upon first load*/
date_range: {
'start_date': '30daysAgo',
'end_date': 'yesterday',
'filter_input_id': '#ga_date_range',
},
base_url: app.get_vars().baseurl,
/*actual container of graphs when generated*/
graphs: {}, //originally => the_chart
/*graphs to be loaded initially upon first load*/
graph_list_per_set: {
'first': [ //1st tab
'visitors_graph',
'sessions_graph',
'session_duration_graph',
'pageviews_graph',
'unique_pageviews_graph',
'event_views_graph',
'bounce_rate_graph',
'users_and_browsers',
'users_and_device_category',
'source_mediums_graph'
],
'second': [ //3rd tab
]
},
graph_configs: {
'general': {
'utypes': '1_2_3',
'data_url': app.get_vars().baseurl + 'get_ga_data/',
},
/* 1st tab */
'visitors_graph': {
data_name: 'visitors',
tbl_abbrev: 'vis',
color_Nouveaux: ['#f5a9a9'],
color_Connus: ['#9cbce6'],
color_Connectés: ['#97caa7'],
fill: false,
container_name: 'visitors-chart',
graph_type: 'line',
options: {
legend: {
position: 'right',
onClick: (e) => e.stopPropagation()
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label;
var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y;
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
userCallback: function(value, index, values) {
// Convert the number to a string and splite the string every 3 charaters from the end
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return value;
}
}}],xAxes: [{ticks: {}}]
},
},
},
/* 1st tab */
'sessions_graph': {
data_name: 'sessions',
tbl_abbrev: 'sess',
color_Nouveaux: ['#f5a9a9'],
color_Connus: ['#9cbce6'],
color_Connectés: ['#97caa7'],
fill: false,
container_name: 'sessions-chart',
graph_type: 'line',
options: {
legend: {
position: 'right',
onClick: (e) => e.stopPropagation()
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label;
var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y;
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
userCallback: function(value, index, values) {
// Convert the number to a string and splite the string every 3 charaters from the end
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return value;
}
}}],xAxes: [{ticks: {}}]
},
},
},
/* 1st tab */
'session_duration_graph': {
data_name: 'session_duration',
tbl_abbrev: 'sess',
color_Nouveaux: ['#f5a9a9'],
color_Connus: ['#9cbce6'],
color_Connectés: ['#97caa7'],
fill: false,
container_name: 'session_duration-chart',
graph_type: 'line',
options: {
legend: {
position: 'right',
onClick: (e) => e.stopPropagation()
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label;
var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y;
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
userCallback: function(value, index, values) {
// Convert the number to a string and splite the string every 3 charaters from the end
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return value;
}
}}],xAxes: [{ticks: {}}]
},
},
},
/* 1st tab */
'pageviews_graph': {
data_name: 'pageviews',
tbl_abbrev: 'pv',
color_Nouveaux: ['#f5a9a9'],
color_Connus: ['#9cbce6'],
color_Connectés: ['#97caa7'],
fill: false,
container_name: 'pageviews-chart',
graph_type: 'line',
options: {
legend: {
position: 'right',
onClick: (e) => e.stopPropagation()
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label;
var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y;
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
userCallback: function(value, index, values) {
// Convert the number to a string and splite the string every 3 charaters from the end
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return value;
}
}}],xAxes: [{ticks: {}}]
},
},
},
/* 1st tab */
'unique_pageviews_graph': {
data_name: 'unique_pageviews',
tbl_abbrev: 'pv',
color_Nouveaux: ['#f5a9a9'],
color_Connus: ['#9cbce6'],
color_Connectés: ['#97caa7'],
fill: false,
container_name: 'unique_pageviews-chart',
graph_type: 'line',
options: {
legend: {
position: 'right',
onClick: (e) => e.stopPropagation()
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label;
var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y;
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
userCallback: function(value, index, values) {
// Convert the number to a string and splite the string every 3 charaters from the end
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return value;
}
}}],xAxes: [{ticks: {}}]
},
},
},
/* 1st tab */
'event_views_graph': {
data_name: 'event_views',
tbl_abbrev: 'ev',
color_Nouveaux: ['#f5a9a9'],
color_Connus: ['#9cbce6'],
color_Connectés: ['#97caa7'],
fill: false,
container_name: 'event_views-chart',
graph_type: 'line',
options: {
legend: {
position: 'right',
onClick: (e) => e.stopPropagation()
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label;
var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y;
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
userCallback: function(value, index, values) {
// Convert the number to a string and splite the string every 3 charaters from the end
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return value;
}
}}],xAxes: [{ticks: {}}]
},
},
},
/* 1st tab */
'bounce_rate_graph': {
data_name: 'bounceRate',
tbl_abbrev: 'bcr',
color_Nouveaux: ['#f5a9a9'],
color_Connus: ['#9cbce6'],
color_Connectés: ['#97caa7'],
fill: false,
container_name: 'bounceRate-chart',
graph_type: 'line',
options: {
legend: {
position: 'right',
onClick: (e) => e.stopPropagation()
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label;
var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y;
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
userCallback: function(value, index, values) {
// Convert the number to a string and splite the string every 3 charaters from the end
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return value;
}
}}],xAxes: [{ticks: {}}]
},
},
},
/* 1st tab */
'users_and_browsers': {
data_name: 'users_browsers',
tbl_abbrev: 'br',
container_name: 'browsers-chart',
graph_type: 'pie',
options: {
legend: {
display: false,
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.labels[tooltipItem.index];
var value = data.datasets[0].data[tooltipItem.index];
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
},
colors: [
'rgb(255, 139, 3)',
'rgb(255, 230, 3)',
'rgb(167, 255, 3)',
'rgb(27, 163, 0)',
'rgb(3, 255, 187)',
'rgb(3, 217, 255)',
'rgb(3, 126, 255)',
'rgb(4, 48, 161)',
'rgb(114, 3, 255)',
'rgb(255, 3, 33)',
'rgb(220, 3, 255)',
'rgb(125, 0, 0)',
]
},
/* 1st tab */
'users_and_device_category': {
data_name: 'users_and_device_category',
tbl_abbrev: 'dv',
container_name: 'device-categories-chart',
graph_type: 'pie',
options: {
legend: {
display: false,
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.labels[tooltipItem.index];
var value = data.datasets[0].data[tooltipItem.index];
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
},
colors: [
'rgb(255, 139, 3)',
'rgb(255, 230, 3)',
'rgb(167, 255, 3)',
'rgb(27, 163, 0)',
'rgb(3, 255, 187)',
'rgb(3, 217, 255)',
'rgb(3, 126, 255)',
'rgb(4, 48, 161)',
'rgb(114, 3, 255)',
'rgb(255, 3, 33)',
'rgb(220, 3, 255)',
'rgb(125, 0, 0)',
]
},
/* 3rd tab */
'source_mediums_graph': {
data_name: 'source_mediums_graph',
tbl_abbrev: 'gsm',
container_name: 'source_mediums_graph-chart',
graph_type: 'pie',
options: {
legend: {
display: false,
},
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.labels[tooltipItem.index];
var value = data.datasets[0].data[tooltipItem.index];
value = value.toString();
value = value.split(/(?=(?:...)*$)/);
value = value.join(' ');
return `${label}: `+value;
}
} // end callbacks:
}, //end tooltips
},
colors: [
'rgb(255, 139, 3)',
'rgb(255, 230, 3)',
'rgb(167, 255, 3)',
'rgb(27, 163, 0)',
'rgb(3, 255, 187)',
'rgb(3, 217, 255)',
'rgb(3, 126, 255)',
'rgb(4, 48, 161)',
'rgb(114, 3, 255)',
'rgb(255, 3, 33)',
'rgb(220, 3, 255)',
'rgb(125, 0, 0)',
]
},
},
/*
* TABLES
*/
table_list_per_set: {
'first': [ //first tab
'f_url_clicks_table',
'f_contact_email_category_table',
'y_contact_emails_table',
],
'second': [ //second tab
'y_registrations_table',
'f_subscribers_table',
'y_events_table',
'f30days_events_table',
'f_events_per_status_table',
'y_reservations_per_subs_table',
'f30days_reservations_per_subs_table',
'y_reservations_table',
'f30days_reservations_table',
'y_cancellations_table',
'f30days_cancellations_table',
'faq_stat_table'
],
'third': [ //third tab
'f_searches_table',
'faq_searches_table',
// 'source_mediums_table',
]
},
table_configs: {
'general': {
/* Where the data is fetched from*/
'data_url': app.get_vars().baseurl + 'get_dashboard_table_data/',
},
/*
* general tab - liens cliques
* url clicks
*/
'f_url_clicks_table': {
data_name: 'url_clicks',
data_cat: 'filtered',
data_containers: [],
},
/*
* general tab - liens cliques
* contact email category data
*/
'f_contact_email_category_table': {
data_name: 'contact_cat',
data_cat: 'filtered',
data_containers: [],
},
/*
* general tab - liens cliques
* yearly contact emails
*/
'y_contact_emails_table': {
data_name: 'y_contact',
data_cat: 'yearly',
data_containers: ['y_contact_cur_year', 'y_contact_prev_year'],
},
/*
* abonnes tab first row - Nombre d'inscriptions (Nouveau qui a confirmé son formulaire de première inscription)
* yearly registrations
*/
'y_registrations_table': {
data_name: 'y0',
data_cat: 'yearly',
data_containers: ['y0_cur_year', 'y0_prev_year'],
},
/*
* abonnes tab first row - Nombre d'inscriptions (Nouveau qui a confirmé son formulaire de première inscription)
* subscribers per interval based on filter
*/
'f_subscribers_table': {
data_name: 'fsubs',
data_cat: 'filtered',
data_containers: ['fsubs_interval'],
},
/*
* abonnes tab 2nd row - Nombre d'événements par statuts (prochainement, en cours, complets, terminés, passés, archivés) total + /année
* yearly event count
*/
'y_events_table': {
data_name: 'y1',
data_cat: 'yearly',
data_containers: ['y1_cur_year', 'y1_prev_year'],
},
/*
* abonnes tab 2nd row - events last 30 days
*/
'f30days_events_table': {
data_name: 'f_y1',
data_cat: 'filtered',
data_containers: ['f_y1_interval'],
},
/*
* abonnes tab 2nd row - Nombre d'événements par statuts (prochainement, en cours, complets, terminés, passés, archivés) total + /année
* number of events per backoffice status
*/
'f_events_per_status_table': {
data_name: 'fevents',
data_cat: 'filtered',
data_containers: ['fevents_proc', 'fevents_en', 'fevents_com', 'fevents_ter', 'fevents_pas', 'fevents_arc'],
},
/*
* abonnes tab 3rd row - Nombre de réservations effectuées (par abonnés)
* yearly reservations per subscriber
*/
'y_reservations_per_subs_table': {
data_name: 'y2',
data_cat: 'yearly',
data_containers: ['y2_cur_year', 'y2_prev_year'],
},
/*
* abonnes tab 2nd row - subscribers last 30 days
*/
'f30days_reservations_per_subs_table': {
data_name: 'f_y2',
data_cat: 'filtered',
data_containers: ['f_y2_interval'],
},
/*
* abonnes tab 4th row - Nombre de places réservées
* yearly reservations
*/
'y_reservations_table': {
data_name: 'y3',
data_cat: 'yearly',
data_containers: ['y3_cur_year', 'y3_prev_year'],
},
/*
* reservations last 30 days
*/
'f30days_reservations_table': {
data_name: 'f_y3',
data_cat: 'filtered',
data_containers: ['f_y3_interval'],
},
/*
* abonnes tab 5th row - Nombre d'annulations effectuées (annulation totale de réservation)
* yearly cancellations
*/
'y_cancellations_table': {
data_name: 'y4',
data_cat: 'yearly',
data_containers: ['y4_cur_year', 'y4_prev_year'],
},
'f30days_cancellations_table': {
data_name: 'f_y4',
data_cat: 'filtered',
data_containers: ['f_y4_interval'],
},
/*
* recherches tab
* faq searches
*/
'f_searches_table': {
data_name: 's',
data_cat: 'filtered',
data_containers: [],
},
'faq_searches_table': {
data_name: 'faq_search',
data_cat: 'filtered',
data_containers: [],
},
'source_mediums_table': {
data_name: 'source_mediums',
data_cat: 'filtered',
data_containers: [],
},
'faq_stat_table': {
data_name: 'faq_stat',
data_cat: 'filtered',
data_containers: [],
},
},
total_search: 0,
}
/*****************************************************************************
*
* Event listeners for UI elements
*
****************************************************************************/
$('button#filter_dashboard_data').on('click', function(event) {
event.preventDefault();
STAT.toggleLoader('tab', 'show');
STAT.toggleLoader('filter', 'show');
setTimeout(function(){
STAT.generateGraphs(STAT.graph_list_per_set['first'])
statistics.generateTables(statistics.table_list_per_set['first'])
statistics.generateTables(statistics.table_list_per_set['second'])
statistics.generateTables(statistics.table_list_per_set['third'])
}, 100);
});
// set data triggers for each graph
$('.chart-btn-holder').on('click', 'button:not(.total_u_data)', function() {
// remove users to get chart data name
var chart_data_name = ((this.id).split('___'))[0];
var chart_user_type = ((this.id).split('___'))[1];
$(this).toggleClass('disable-btn');
// do not disable all, at least 1 trigger should remain active
var len = ($('#'+chart_data_name+'_triggers .disable-btn').toArray()).length;
if (len == 3) {
$(this).removeClass('disable-btn');
} else {
STAT.graphs[chart_data_name+'-chart'].data.datasets.forEach(function(ds) {
if(ds.label == chart_user_type){
ds.hidden = !ds.hidden;
}
});
STAT.graphs[chart_data_name+'-chart'].update();
}
});
/* Load tab data on click */
$('.statistics-tabs').on('click', function(event) {
event.preventDefault();
if (!$(this).hasClass('tab_data_loaded')) {
/* Load tab data */
// switch (this.id) {
// case 'general-tabb':
// STAT.generateGraphs(STAT.graph_list_per_set['first'])
// break;
// case 'abonnes-tabb':
// break;
// case 'recherches-tabb':
// STAT.generateGraphs(STAT.graph_list_per_set['second'])
// break;
// default:
// }
/* Indicate that the tab data has been loaded*/
$(this).addClass('tab_data_loaded');
} else {
}
});
$('a#export_dashboard_data').on('click', function(event) {
STAT.toggleLoader('tab', 'show');
app.btn_loader('#export_dashboard_data');
STAT.exportDashboardData();
setTimeout(function(){
app.rmbtn_loader('#export_dashboard_data');
STAT.toggleLoader('export', 'remove');
}, 1000);
});
/*****************************************************************************
*
* Methods for dealing with statistics page
*
****************************************************************************/
/**
* @method
* initializes the status of buttons (onload) base on the main buttons
*/
STAT.initConfigs = function() {
Chart.defaults.global.animation.duration = 900;
Chart.defaults.global.responsive = true;
Chart.defaults.global.maintainAspectRatio = false;
// load a locale for numbers
numeral.register('locale', 'fr', {
delimiters: {
thousands: ' ',
decimal: ','
},
abbreviations: {
thousand: 'k',
million: 'm',
billion: 'b',
trillion: 't'
},
ordinal : function (number) {
return number === 1 ? 'er' : 'ème';
},
currency: {
symbol: 'MGA'
}
});
numeral.locale('fr');
/*
* initialize the daterangepicker, set the default date range to 30 days ago from current date
*/
$('.datetimepicker').daterangepicker({
autoApply: true,
locale: {
format: 'DD/MM/YYYY',
// cancelLabel : dashboard_data.cancel,
// applyLabel : 'Appliquer le filtre',
"daysOfWeek": 'di_lu_ma_me_je_ce_sa'.split('_'),
"monthNames": 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_')
},
defaultDate : moment().subtract(30, 'days'),
startDate: moment().subtract(30, 'days'),
endDate: moment().subtract(1, 'days'),
maxDate: moment().subtract(1, 'days'),
});
};
/**
** @method formats number to french
*/
STAT.formatNumToFr = function(number){
return (number - Math.floor(number))? numeral(number).format('0,0.00') : numeral(number).format('0,0');
};
STAT.formatNumToFrNoDec = function(number){
return numeral(number).format('0,0');
};
/**
** @method sets the start and end date when filtering graph
** @param string date range : from date filter input
*/
STAT.setDateFilter = function(){
var date_range = $('#ga_date_range').val();
if (date_range) {
date_range = date_range.split(' - ');
STAT.date_range.start_date = date_range[0].replace(/\//g, '-');;
STAT.date_range.end_date = date_range[1].replace(/\//g, '-');;
}
};
/**
** @method sets user filter, depends on what is checked in the filter
*/
STAT.setUserFilter = function(){
var checked_utypes = $('.user-filter:checked').toArray();
if (0 != checked_utypes.length || checked_utypes.length < 3) {
var utypes = [];
for (var i = 0; i < checked_utypes.length; i++) {
utypes.push(checked_utypes[i].value);
}
STAT.graph_configs.general.utypes = utypes.join('_');
}
};
/**
** @method reset box values to zero for the active tab
*/
STAT.resetGraphBoxValues = function(){
$('li.active>a.statistics-tabs span.box_values').html(0);
$('span.box_values_total').html(0);
};
/**
** @method reset box values to zero
*/
STAT.disableEmptyBoxValues = function(graph_category){
var stat_btn = ($('#'+graph_category+'_triggers .stat_btn').toArray());
for (var i = 0; i < stat_btn.length; i++) {
var box_val = parseInt($('#'+stat_btn[i].id + ' .box_values').html());
if (box_val == 0) {
$('#'+stat_btn[i].id).attr('disabled', 'disabled');
$('#'+stat_btn[i].id).addClass('disable-btn');
} else {
$('#'+stat_btn[i].id).removeAttr('disabled');
$('#'+stat_btn[i].id).removeClass('disable-btn');
}
}
};
/**
** @method set loader
*/
STAT.toggleLoader = function(item, action){
switch (item) {
case 'tab':
if (action == 'remove') {
app.remove_loader();
return;
}
/* Set tab loader */
$('.tab-pane.active').prepend(STAT.page_loader);
break;
case 'export':
if (action == 'remove') {
app.remove_loader();
return;
}
/* Set tab loader */
$('.tab-pane.active').prepend(app.get_loader2('Exporting...'));
break;
case 'filter':
if (action == 'remove') {
app.rmbtn_loader('#filter_dashboard_data');
return;
}
app.btn_loader('#filter_dashboard_data');
break;
default:
}
};
/**
** @method plot graph data, per graph type have specific ways of data manipulation
*/
STAT.prepAndPlot = {
/* GRAPHS */
'prepare_visitors_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* x axis: the labels per value */
},
datasets_data = {
'Nouveaux' : [],
'Connus' : [],
'Connectés' : [],
}, /* contains the x and y values for each dataset (per user type) */
// tbl_abbrev = g_info['tbl_abbrev'],
accu_box_values = {
'Total' : 0,
'Nouveaux' : 0,
'Connus' : 0,
'Connectés' : 0,
}, /* box values, accumulated*/
days_count = data.length/(STAT.graph_configs.general.utypes.split('_').length); /*number of days covered by the fetched data*/
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row[g_info['tbl_abbrev']+'_rdate']);
}
/* Sum up all values for each users => accu box values*/
accu_box_values[row['user_type']] += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Sum up all values for all users => accu box values total*/
accu_box_values.Total += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Collect dataset data per user */
datasets_data[row['user_type']].push({
t : row[g_info['tbl_abbrev']+'_rdate'],
y : parseInt((row[g_info['tbl_abbrev']+'_rdata'])?(row[g_info['tbl_abbrev']+'_rdata']):0)
});;
});
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['color_'+key],
backgroundColor: g_info['color_'+key]
});
/* SET THE BOX VALUES */
$('#'+g_info['data_name']+'___'+key+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values[key]/days_count));
$('#'+g_info['data_name']+'___'+key+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values[key]));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values.Total/days_count));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values.Total));
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_sessions_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* x axis: the labels per value */
},
datasets_data = {
'Nouveaux' : [],
'Connus' : [],
'Connectés' : [],
}, /* contains the x and y values for each dataset (per user type) */
// tbl_abbrev = g_info['tbl_abbrev'],
accu_box_values = {
'Total' : 0,
'Nouveaux' : 0,
'Connus' : 0,
'Connectés' : 0,
}, /* box values, accumulated*/
days_count = data.length/(STAT.graph_configs.general.utypes.split('_').length); /*number of days covered by the fetched data*/
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row[g_info['tbl_abbrev']+'_rdate']);
}
/* Sum up all values for each users => accu box values*/
accu_box_values[row['user_type']] += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Sum up all values for all users => accu box values total*/
accu_box_values.Total += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Collect dataset data per user */
datasets_data[row['user_type']].push({
t : row[g_info['tbl_abbrev']+'_rdate'],
y : parseInt((row[g_info['tbl_abbrev']+'_rdata'])?(row[g_info['tbl_abbrev']+'_rdata']):0)
});;
});
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['color_'+key],
backgroundColor: g_info['color_'+key]
});
/* SET THE BOX VALUES */
$('#'+g_info['data_name']+'___'+key+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values[key]/days_count));
$('#'+g_info['data_name']+'___'+key+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values[key]));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values.Total/days_count));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values.Total));
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_session_duration_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* x axis: the labels per value */
},
datasets_data = {
'Nouveaux' : [],
'Connus' : [],
'Connectés' : [],
}, /* contains the x and y values for each dataset (per user type) */
// tbl_abbrev = g_info['tbl_abbrev'],
accu_box_values = {
'Total' : 0,
'Nouveaux' : 0,
'Connus' : 0,
'Connectés' : 0,
}, /* box values, accumulated*/
days_count = data.length/(STAT.graph_configs.general.utypes.split('_').length); /*number of days covered by the fetched data*/
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row[g_info['tbl_abbrev']+'_rdate']);
}
/* Sum up all values for each users => accu box values*/
accu_box_values[row['user_type']] += parseInt(row[g_info['tbl_abbrev']+'_rdata']?row[g_info['tbl_abbrev']+'_rdata']:0);
/* Sum up all values for all users => accu box values total*/
accu_box_values.Total += parseInt(row[g_info['tbl_abbrev']+'_rdata']?row[g_info['tbl_abbrev']+'_rdata']:0);
/* Collect dataset data per user */
datasets_data[row['user_type']].push({
t : row[g_info['tbl_abbrev']+'_rdate'],
y : parseInt((row[g_info['tbl_abbrev']+'_rdata'])?(row[g_info['tbl_abbrev']+'_rdata']):0)
});;
});
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['color_'+key],
backgroundColor: g_info['color_'+key]
});
/* SET THE BOX VALUES */
$('#'+g_info['data_name']+'___'+key+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values[key]/days_count));
$('#'+g_info['data_name']+'___'+key+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values[key]));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values.Total/days_count));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values.Total));
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_pageviews_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* x axis: the labels per value */
},
datasets_data = {
'Nouveaux' : [],
'Connus' : [],
'Connectés' : [],
}, /* contains the x and y values for each dataset (per user type) */
// tbl_abbrev = g_info['tbl_abbrev'],
accu_box_values = {
'Total' : 0,
'Nouveaux' : 0,
'Connus' : 0,
'Connectés' : 0,
}, /* box values, accumulated*/
days_count = data.length/(STAT.graph_configs.general.utypes.split('_').length); /*number of days covered by the fetched data*/
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row[g_info['tbl_abbrev']+'_rdate']);
}
/* Sum up all values for each users => accu box values*/
accu_box_values[row['user_type']] += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Sum up all values for all users => accu box values total*/
accu_box_values.Total += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Collect dataset data per user */
datasets_data[row['user_type']].push({
t : row[g_info['tbl_abbrev']+'_rdate'],
y : parseInt((row[g_info['tbl_abbrev']+'_rdata'])?(row[g_info['tbl_abbrev']+'_rdata']):0)
});;
});
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['color_'+key],
backgroundColor: g_info['color_'+key]
});
/* SET THE BOX VALUES */
$('#'+g_info['data_name']+'___'+key+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values[key]/days_count));
$('#'+g_info['data_name']+'___'+key+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values[key]));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values.Total/days_count));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values.Total));
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_unique_pageviews_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* x axis: the labels per value */
},
datasets_data = {
'Nouveaux' : [],
'Connus' : [],
'Connectés' : [],
}, /* contains the x and y values for each dataset (per user type) */
// tbl_abbrev = g_info['tbl_abbrev'],
accu_box_values = {
'Total' : 0,
'Nouveaux' : 0,
'Connus' : 0,
'Connectés' : 0,
}, /* box values, accumulated*/
days_count = data.length/(STAT.graph_configs.general.utypes.split('_').length); /*number of days covered by the fetched data*/
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row[g_info['tbl_abbrev']+'_rdate']);
}
/* Sum up all values for each users => accu box values*/
accu_box_values[row['user_type']] += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Sum up all values for all users => accu box values total*/
accu_box_values.Total += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Collect dataset data per user */
datasets_data[row['user_type']].push({
t : row[g_info['tbl_abbrev']+'_rdate'],
y : parseInt((row[g_info['tbl_abbrev']+'_rdata'])?(row[g_info['tbl_abbrev']+'_rdata']):0)
});;
});
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['color_'+key],
backgroundColor: g_info['color_'+key]
});
/* SET THE BOX VALUES */
$('#'+g_info['data_name']+'___'+key+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values[key]/days_count));
$('#'+g_info['data_name']+'___'+key+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values[key]));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values.Total/days_count));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values.Total));
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_event_views_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* x axis: the labels per value */
},
datasets_data = {
'Nouveaux' : [],
'Connus' : [],
'Connectés' : [],
}, /* contains the x and y values for each dataset (per user type) */
// tbl_abbrev = g_info['tbl_abbrev'],
accu_box_values = {
'Total' : 0,
'Nouveaux' : 0,
'Connus' : 0,
'Connectés' : 0,
}, /* box values, accumulated*/
days_count = data.length/(STAT.graph_configs.general.utypes.split('_').length); /*number of days covered by the fetched data*/
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row[g_info['tbl_abbrev']+'_rdate']);
}
/* Sum up all values for each users => accu box values*/
accu_box_values[row['user_type']] += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Sum up all values for all users => accu box values total*/
accu_box_values.Total += parseInt(row[g_info['tbl_abbrev']+'_rdata']);
/* Collect dataset data per user */
datasets_data[row['user_type']].push({
t : row[g_info['tbl_abbrev']+'_rdate'],
y : parseInt((row[g_info['tbl_abbrev']+'_rdata'])?(row[g_info['tbl_abbrev']+'_rdata']):0)
});;
});
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['color_'+key],
backgroundColor: g_info['color_'+key]
});
/* SET THE BOX VALUES */
$('#'+g_info['data_name']+'___'+key+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values[key]/days_count));
$('#'+g_info['data_name']+'___'+key+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values[key]));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values').html(STAT.formatNumToFrNoDec(accu_box_values.Total/days_count));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values_total').html(STAT.formatNumToFrNoDec(accu_box_values.Total));
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_bounce_rate_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* x axis: the labels per value */
},
datasets_data = {
'Nouveaux' : [],
'Connus' : [],
'Connectés' : [],
}, /* contains the x and y values for each dataset (per user type) */
// tbl_abbrev = g_info['tbl_abbrev'],
accu_box_values = {
'Total_sess_rdata' : 0,
'Total_sess_br' : 0,
'Nouveaux_sess_rdata' : 0,
'Nouveaux_sess_br' : 0,
'Connus_sess_rdata' : 0,
'Connus_sess_br' : 0,
'Connectés_sess_rdata' : 0,
'Connectés_sess_br' : 0,
}, /* box values, accumulated*/
days_count = data.length/(STAT.graph_configs.general.utypes.split('_').length); /*number of days covered by the fetched data*/
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row[g_info['tbl_abbrev']+'_rdate']);
}
/* Sum up all values for each users => accu box values*/
accu_box_values[row['user_type'] + '_sess_rdata'] += parseInt(row['sess_rdata']);
accu_box_values[row['user_type'] + '_sess_br'] += parseInt(row['sess_br']);
if (row['user_type'] != 'Connectés') {
/* Sum up all values for all users => accu box values total (except connected user)*/
// total sessions
accu_box_values.Total_sess_rdata += parseInt(row['sess_rdata']);
// total bounce rate per session
accu_box_values.Total_sess_br += parseInt(row['sess_br']);
}
/* Collect dataset data per user */
datasets_data[row['user_type']].push({
t : row[g_info['tbl_abbrev']+'_rdate'],
y : parseInt((row[g_info['tbl_abbrev']+'_rdata'])?(row[g_info['tbl_abbrev']+'_rdata']):0)
});;
});
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['color_'+key],
backgroundColor: g_info['color_'+key]
});
/* SET THE BOX VALUES */
$('#'+g_info['data_name']+'___'+key+' span.box_values').html(
STAT.formatNumToFr(
Math.round(
(accu_box_values[key + '_sess_br']/accu_box_values[key + '_sess_rdata']) * 100
)
));
$('#'+g_info['data_name']+'___Total_u_data'+' span.box_values').html(
STAT.formatNumToFr(
Math.round(
(accu_box_values.Total_sess_br/accu_box_values.Total_sess_rdata) * 100
)
));
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_users_and_browsers': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* labels of each slice */
},
datasets_data = {
'all' : [],
}, /* all data for the pie graph */
table_data = '';
var color_index = 0;
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row['rtype']);
}
/* Collect dataset data per slice */
datasets_data['all'].push(row['vis_rdata']);;
/* Set table data */
table_data += `<tr>`
+ `<td style="background-color:${g_info['colors'][color_index++]}"> </td>`
+ `<td>${row['rtype']}</td>`
+ `<td>`
+ STAT.formatNumToFr(row['vis_rdata'])
+ `<small class="text_color_blue"> (`
+ parseFloat(row['percentage']).toFixed(2)
+ `%)</small>`
+`</td>`
+ '</tr>'
});
/* Plot the table */
$('.nav_web tbody').html(table_data);
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
/* Prepare the pie graph data*/
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['colors'],
backgroundColor: g_info['colors']
});
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_users_and_device_category': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* labels of each slice */
},
datasets_data = {
'all' : [],
}, /* all data for the pie graph */
table_data = '';
var color_index = 0;
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row['rtype']);
}
/* Collect dataset data per slice */
datasets_data['all'].push(row['vis_rdata']);;
/* Set table data */
table_data += `<tr>`
+ `<td style="background-color:${g_info['colors'][color_index++]}"> </td>`
+ `<td>${row['rtype']}</td>`
+ `<td>`
+ STAT.formatNumToFr(row['vis_rdata'])
+ `<small class="text_color_blue"> (`
+ parseFloat(row['percentage']).toFixed(2)
+ `%)</small>`
+`</td>`
+ '</tr>'
});
/* Plot the table */
$('.type_dev tbody').html(table_data);
// $('.source_meds tbody').html(table_data);
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
/* Prepare the pie graph data*/
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['colors'],
backgroundColor: g_info['colors']
});
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
'prepare_source_mediums_graph': function (g_info, data){
/* Initialize variables */
var dataset_graph_data = {
'datasets': [], /* dataset to be plotted including the configuration */
'labels':[] /* labels of each slice */
},
datasets_data = {
'all' : [],
}, /* all data for the pie graph */
table_data = '';
var color_index = 0;
data.forEach(function(row){
/* 3 datasets = one date, avoid duplicating date ranges*/
if (!inArray(row[g_info['tbl_abbrev']+'_rdate'], dataset_graph_data.labels)) {
dataset_graph_data.labels.push(row['rtype']);
}
/* Collect dataset data per slice */
datasets_data['all'].push(row['vis_rdata']);;
/* Set table data */
table_data += `<tr>`
+ `<td style="background-color:${g_info['colors'][color_index++]}"> </td>`
+ `<td>${row['rtype']}</td>`
+ `<td>`
+ STAT.formatNumToFr(row['vis_rdata'])
+ `<small class="text_color_blue"> (`
+ parseFloat(row['percentage']).toFixed(2)
+ `%)</small>`
+`</td>`
+ '</tr>';
});
/* Plot the table */
$('.source_meds tbody').html(table_data);
/* Prepare the dataset data per user */
for (var key in datasets_data) {
if (datasets_data.hasOwnProperty(key)) {
/* Prepare the pie graph data*/
dataset_graph_data.datasets.push({
label: key,
fill: g_info['fill'],
data: datasets_data[key],
borderColor: g_info['colors'],
backgroundColor: g_info['colors']
});
}
}
/* Disable click on empty box value */
STAT.disableEmptyBoxValues(g_info['data_name']);
STAT.plotGraph(g_info, dataset_graph_data);
},
/* TABLES */
'prepare_f_url_clicks_table': function (t_info, data){
/* Initialize variables */
var table_data = '', total_data = 0, url = '';
data.forEach(function(row){
url = (row.gev_raction).replace('https://preprod.wylog.com/lemonde-res', '');
url = url.replace('https://preprod.wylog.com/lemonde-dev/', '');
url = url.replace('https://preprod.wylog.com/lemonde-client/', '');
url = url.replace('localhost/', '');
url = url.replace('https://evenements-abonnes.lemonde.fr/', '');
total_data += parseInt(row['gev_rdata']);
/* Set table data */
table_data += '<tr>'
+'<td>'+url+'</td>'
+'<td class="text-center">'+ STAT.formatNumToFr(row.gev_rdata)+'</td>'
+'</tr>';
});
$('.url-clicks-body').html(table_data);
$('.url-clicks-body').append(
'<tr>'
+'<td class="text-center">Total</td>'
+'<td class="text-center">'+ STAT.formatNumToFr(total_data) + '</td>'
+'</tr>'
);
},
'prepare_f_contact_email_category_table': function (t_info, data){
/* Initialize variables */
var table_data = '', total_data = 0;
data.forEach(function(row){
total_data += parseInt(row['value']);
/* Set table data */
table_data += `<tr>`
+ `<td colspan="2" class="current_year_data">`
+ `<span class="data_label">${row['c_category']}</span>`
+ `</td>`
+ `<td colspan="2" class="current_year_data">`
+ `<span class="value">` + STAT.formatNumToFr(row['value']) + `</span>`
+ `</td>`
+ '</tr>';
});
$('.total_cat_filtered .value').html(STAT.formatNumToFr(total_data));
$('.formulai_table tbody').html(table_data);
},
'prepare_y_contact_emails_table': function (t_info, data){
/* Initialize variables */
var yearly_data = {
'current_year': parseInt($('.'+t_info['data_containers'][0]+' .data_year').html()),
'previous_year': parseInt($('.'+t_info['data_containers'][1]+' .data_year').html()),
'current_year_data': 0,
'previous_year_data': 0,
};
data.forEach(function(row){
// console.log(yearly_data.current_year);
// console.log(row.data_year);
if (yearly_data.current_year == row.data_year) {
yearly_data.current_year_data = parseFloat(row.value? row.value : 0);
$('.'+t_info['data_containers'][0]+' .value').html(
STAT.formatNumToFr(yearly_data.current_year_data)
);
}
if (yearly_data.previous_year == row.data_year) {
yearly_data.previous_year_data = parseFloat(row.value ? row.value : 0);
$('.'+t_info['data_containers'][1]+' .value').html(
STAT.formatNumToFr(yearly_data.previous_year_data)
);
}
});
/* Calculate the percentage increase*/
var percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.current_year_data - yearly_data.previous_year_data)/yearly_data.previous_year_data)*100
)
: 0;
var stats_class = "year_value_zero";
if (percent_inc_dec) {
/* Set the increased/decreased indicator */
stats_class = "year_value_up";
var arrow_type = "fa fa-arrow-up";
}
if (
yearly_data.current_year_data < yearly_data.previous_year_data
) {
/* Calculate the percentage decrease */
percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.previous_year_data - yearly_data.current_year_data)/yearly_data.previous_year_data)*100
)
: 0;
if (percent_inc_dec) {
stats_class = "year_value_down";
arrow_type = "fa fa-arrow-down";
}
}
if (!$('.'+t_info['data_containers'][0]+' span.value span').hasClass('stats')) {
$('.'+t_info['data_containers'][0]+' .value').append(
`<br />`
+`<span class="stats ${stats_class}">(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)</span>`
);
} else {
$('.'+t_info['data_containers'][0]+' .value span').html(
`(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)`
);
}
},
/* Nombre d'inscription */
'prepare_y_registrations_table': function (t_info, data){
/* Initialize variables */
var yearly_data = {
'current_year': parseInt($('.'+t_info['data_containers'][0]+' .data_year').html()),
'previous_year': parseInt($('.'+t_info['data_containers'][1]+' .data_year').html()),
'current_year_data': 0,
'previous_year_data': 0,
};
data.forEach(function(row){
if (row.value != null) {
if (yearly_data.current_year == row.data_year) {
yearly_data.current_year_data = parseFloat(row.value? row.value : 0);
$('.'+t_info['data_containers'][0]+' .value').html(
STAT.formatNumToFr(yearly_data.current_year_data)
);
}
if (yearly_data.previous_year == row.data_year) {
yearly_data.previous_year_data = parseFloat(row.value ? row.value : 0);
$('.'+t_info['data_containers'][1]+' .value').html(
STAT.formatNumToFr(yearly_data.previous_year_data)
);
}
}
});
/* Calculate the percentage increase*/
var percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.current_year_data - yearly_data.previous_year_data)/yearly_data.previous_year_data)*100
)
: 0;
var stats_class = "year_value_zero";
if (percent_inc_dec) {
/* Set the increased/decreased indicator */
stats_class = "year_value_up";
var arrow_type = "fa fa-arrow-up";
}
if (
yearly_data.current_year_data < yearly_data.previous_year_data
) {
/* Calculate the percentage decrease */
percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.previous_year_data - yearly_data.current_year_data)/yearly_data.previous_year_data)*100
)
: 0;
if (percent_inc_dec) {
stats_class = "year_value_down";
arrow_type = "fa fa-arrow-down";
}
}
if (!$('.'+t_info['data_containers'][0]+' span.value span').hasClass('stats')) {
$('.'+t_info['data_containers'][0]+' .value').append(
`<br />`
+`<span class="stats ${stats_class}">(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)</span>`
);
} else {
$('.'+t_info['data_containers'][0]+' .value span').html(
`(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)`
);
}
},
'prepare_f_subscribers_table': function (t_info, data){
/* Initialize variables */
var total_data;
data.forEach(function(row){
if (row.value != null) {
$('.' + t_info['data_containers'][0] + ' .value').html(STAT.formatNumToFr(row.value));
}
});
},
/* /Nombre d'inscription */
/* Nombre d'événements par statuts */
'prepare_y_events_table': function (t_info, data){
/* Initialize variables */
var yearly_data = {
'current_year': parseInt($('.'+t_info['data_containers'][0]+' .data_year').html()),
'previous_year': parseInt($('.'+t_info['data_containers'][1]+' .data_year').html()),
'current_year_data': 0,
'previous_year_data': 0,
};
data.forEach(function(row){
if (row.value != null) {
if (yearly_data.current_year == row.data_year) {
yearly_data.current_year_data = parseFloat(row.value? row.value : 0);
$('.'+t_info['data_containers'][0]+' .value').html(
STAT.formatNumToFr(yearly_data.current_year_data)
);
}
if (yearly_data.previous_year == row.data_year) {
yearly_data.previous_year_data = parseFloat(row.value ? row.value : 0);
$('.'+t_info['data_containers'][1]+' .value').html(
STAT.formatNumToFr(yearly_data.previous_year_data)
);
}
}
});
/* Calculate the percentage increase*/
var percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.current_year_data - yearly_data.previous_year_data)/yearly_data.previous_year_data)*100
)
: 0;
var stats_class = "year_value_zero";
if (percent_inc_dec) {
/* Set the increased/decreased indicator */
stats_class = "year_value_up";
var arrow_type = "fa fa-arrow-up";
}
if (
yearly_data.current_year_data < yearly_data.previous_year_data
) {
/* Calculate the percentage decrease */
percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.previous_year_data - yearly_data.current_year_data)/yearly_data.previous_year_data)*100
)
: 0;
if (percent_inc_dec) {
stats_class = "year_value_down";
arrow_type = "fa fa-arrow-down";
}
}
if (!$('.'+t_info['data_containers'][0]+' span.value span').hasClass('stats')) {
$('.'+t_info['data_containers'][0]+' .value').append(
`<br />`
+`<span class="stats ${stats_class}">(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)</span>`
);
} else {
$('.'+t_info['data_containers'][0]+' .value span').html(
`(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)`
);
}
},
'prepare_f30days_events_table': function (t_info, data){
/* Initialize variables */
var total_data;
data.forEach(function(row){
if (row.value != null) {
$('.' + t_info['data_containers'][0] + ' .value').html(STAT.formatNumToFr(parseInt(row.value)));
}
});
},
'prepare_f_events_per_status_table': function (t_info, data){
/* Initialize variables */
var total_data;
data.forEach(function(row){
if (row.value != null) {
$('.fevents_'+ row.bostat +' .value').html(STAT.formatNumToFr(parseInt(row.value)));
}
});
},
/* /Nombre d'événements par statuts */
/* Nombre de réservations effectuées */
'prepare_y_reservations_per_subs_table': function (t_info, data){
/* Initialize variables */
var yearly_data = {
'current_year': parseInt($('.'+t_info['data_containers'][0]+' .data_year').html()),
'previous_year': parseInt($('.'+t_info['data_containers'][1]+' .data_year').html()),
'current_year_data': 0,
'previous_year_data': 0,
};
data.forEach(function(row){
if (row.value != null) {
if (yearly_data.current_year == row.data_year) {
yearly_data.current_year_data = parseFloat(row.value? row.value : 0);
$('.'+t_info['data_containers'][0]+' .value').html(
STAT.formatNumToFr(yearly_data.current_year_data)
);
}
if (yearly_data.previous_year == row.data_year) {
yearly_data.previous_year_data = parseFloat(row.value ? row.value : 0);
$('.'+t_info['data_containers'][1]+' .value').html(
STAT.formatNumToFr(yearly_data.previous_year_data)
);
}
}
});
/* Calculate the percentage increase*/
var percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.current_year_data - yearly_data.previous_year_data)/yearly_data.previous_year_data)*100
)
: 0;
var stats_class = "year_value_zero";
if (percent_inc_dec) {
/* Set the increased/decreased indicator */
stats_class = "year_value_up";
var arrow_type = "fa fa-arrow-up";
}
if (
yearly_data.current_year_data < yearly_data.previous_year_data
) {
/* Calculate the percentage decrease */
percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.previous_year_data - yearly_data.current_year_data)/yearly_data.previous_year_data)*100
)
: 0;
if (percent_inc_dec) {
stats_class = "year_value_down";
arrow_type = "fa fa-arrow-down";
}
}
if (!$('.'+t_info['data_containers'][0]+' span.value span').hasClass('stats')) {
$('.'+t_info['data_containers'][0]+' .value').append(
`<br />`
+`<span class="stats ${stats_class}">(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)</span>`
);
} else {
$('.'+t_info['data_containers'][0]+' .value span').html(
`(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)`
);
}
},
'prepare_f30days_reservations_per_subs_table': function (t_info, data){
/* Initialize variables */
var total_data;
data.forEach(function(row){
if (row.value != null) {
$('.' + t_info['data_containers'][0] + ' .value').html(STAT.formatNumToFr(parseFloat(row.value)));
}
});
},
/* /Nombre de réservations effectuées */
/* Nombre de places réservées */
'prepare_y_reservations_table': function (t_info, data){
/* Initialize variables */
var yearly_data = {
'current_year': parseInt($('.'+t_info['data_containers'][0]+' .data_year').html()),
'previous_year': parseInt($('.'+t_info['data_containers'][1]+' .data_year').html()),
'current_year_data': 0,
'previous_year_data': 0,
};
data.forEach(function(row){
if (row.value != null) {
if (yearly_data.current_year == row.data_year) {
yearly_data.current_year_data = parseFloat(row.value? row.value : 0);
$('.'+t_info['data_containers'][0]+' .value').html(
STAT.formatNumToFr(yearly_data.current_year_data)
);
}
if (yearly_data.previous_year == row.data_year) {
yearly_data.previous_year_data = parseFloat(row.value ? row.value : 0);
$('.'+t_info['data_containers'][1]+' .value').html(
STAT.formatNumToFr(yearly_data.previous_year_data)
);
}
}
});
/* Calculate the percentage increase*/
var percent_inc_dec = yearly_data.previous_year_data != 0 ?
Math.abs(
((yearly_data.current_year_data - yearly_data.previous_year_data)/yearly_data.previous_year_data)*100
)
: 0;
var stats_class = "year_value_zero";
if (percent_inc_dec) {
/* Set the increased/decreased indicator */
stats_class = "year_value_up";
var arrow_type = "fa fa-arrow-up";
}
if (
yearly_data.current_year_data < yearly_data.previous_year_data
) {
/* Calculate the percentage decrease */
percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.previous_year_data - yearly_data.current_year_data)/yearly_data.previous_year_data)*100
)
: 0;
if (percent_inc_dec) {
stats_class = "year_value_down";
arrow_type = "fa fa-arrow-down";
}
}
if (!$('.'+t_info['data_containers'][0]+' span.value span').hasClass('stats')) {
$('.'+t_info['data_containers'][0]+' .value').append(
`<br />`
+`<span class="stats ${stats_class}">(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)</span>`
);
} else {
$('.'+t_info['data_containers'][0]+' .value span').html(
`(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)`
);
}
},
'prepare_f30days_reservations_table': function (t_info, data){
/* Initialize variables */
var total_data;
data.forEach(function(row){
if (row.value != null) {
$('.' + t_info['data_containers'][0] + ' .value').html(STAT.formatNumToFr(parseFloat(row.value)));
}
});
},
/* /Nombre de places réservées */
/* Nombre d'annulations effectuées */
'prepare_y_cancellations_table': function (t_info, data){
/* Initialize variables */
var yearly_data = {
'current_year': parseInt($('.'+t_info['data_containers'][0]+' .data_year').html()),
'previous_year': parseInt($('.'+t_info['data_containers'][1]+' .data_year').html()),
'current_year_data': 0,
'previous_year_data': 0,
};
data.forEach(function(row){
if (row.value != null) {
if (yearly_data.current_year == row.data_year) {
yearly_data.current_year_data = parseFloat(row.value? row.value : 0);
$('.'+t_info['data_containers'][0]+' .value').html(
STAT.formatNumToFr(yearly_data.current_year_data)
);
}
if (yearly_data.previous_year == row.data_year) {
yearly_data.previous_year_data = parseFloat(row.value ? row.value : 0);
$('.'+t_info['data_containers'][1]+' .value').html(
STAT.formatNumToFr(yearly_data.previous_year_data)
);
}
}
});
/* Calculate the percentage increase*/
var percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.current_year_data - yearly_data.previous_year_data)/yearly_data.previous_year_data)*100
)
: 0;
var stats_class = "year_value_zero";
if (percent_inc_dec) {
/* Set the increased/decreased indicator */
stats_class = "year_value_up";
var arrow_type = "fa fa-arrow-up";
}
if (
yearly_data.current_year_data < yearly_data.previous_year_data
) {
/* Calculate the percentage decrease */
percent_inc_dec = yearly_data.previous_year_data != 0?
Math.abs(
((yearly_data.previous_year_data - yearly_data.current_year_data)/yearly_data.previous_year_data)*100
)
: 0;
if (percent_inc_dec) {
stats_class = "year_value_down";
arrow_type = "fa fa-arrow-down";
}
}
if (!$('.'+t_info['data_containers'][0]+' span.value span').hasClass('stats')) {
$('.'+t_info['data_containers'][0]+' .value').append(
`<br />`
+`<span class="stats ${stats_class}">(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)</span>`
);
} else {
$('.'+t_info['data_containers'][0]+' .value span').html(
`(`
+`<b class="${arrow_type} "></b> `
+ STAT.formatNumToFr(percent_inc_dec) + `%`
+`)`
);
}
},
'prepare_f30days_cancellations_table': function (t_info, data){
/* Initialize variables */
var total_data;
data.forEach(function(row){
if (row.value != null) {
$('.' + t_info['data_containers'][0] + ' .value').html(STAT.formatNumToFr(parseFloat(row.value)));
}
});
},
/* /Nombre d'annulations effectuées */
'prepare_f_searches_table': function (t_info, data){
/* Initialize variables */
var months = [
'Tous les mois', 'Janvier', 'Février', 'Mars',
'Avril', 'Mai', 'Juin', 'Juillet', 'Août',
'Septembre', 'Octobre', 'Novembre', 'Décembre'
],
filter_data = {
'monthly' : '',
'type' : '',
'city' : '',
}, month_index;
STAT.total_search = 0;
data.forEach(function(row){
switch (row.gev_rdatalabel) {
case 'filter-month':
month_index = parseInt(row.gev_raction);
if (month_index > 0 && month_index < months.length) {
filter_data.monthly += '<tr>'
+'<td>' + months[month_index] + '</td>'
+'<td class="text-center">' + row.gev_rdata + '</td>'
+'</tr>';
STAT.total_search += parseInt(row.gev_rdata);
}
break;
case 'filter-type':
filter_data.type += '<tr>'
+'<td>'+ row.label +'</td>'
+'<td class="text-center">'+row.gev_rdata+'</td>'
+'</tr>';
STAT.total_search += parseInt(row.gev_rdata);
break;
case 'filter-city':
filter_data.city += '<tr>'
+'<td>'+ row.label +'</td>'
+'<td class="text-center">'+row.gev_rdata+'</td>'
+'</tr>';
STAT.total_search += parseInt(row.gev_rdata);
break;
}
});
if (!filter_data.monthly) {
filter_data.monthly = '<td colspan="2">Pas de données</td>';
}
if (!filter_data.type) {
filter_data.type = '<td colspan="2">Pas de données</td>';
}
if (!filter_data.city) {
filter_data.city = '<td colspan="2">Pas de données</td>';
}
$('.filter-month tbody').html(filter_data.monthly);
$('.filter-type tbody').html(filter_data.type);
$('.filter-city tbody').html(filter_data.city);
$('.total-search .value').html(STAT.total_search? STAT.total_search : 0);
},
'prepare_faq_searches_table': function (t_info, data){
/* Initialize variables */
var faq_search_data = '';
data.forEach(function(row){
faq_search_data += '<tr>'
+ '<td class="text-center">'+row.gev_rdata+'</td>'
+ '<td>'+row.gev_raction+'</td>'
+ '</tr>';
STAT.total_search += parseInt(row.gev_rdata);
});
if (!faq_search_data) {
faq_search_data = '<td colspan="2">Pas de données</td>';;
}
$('.faq_search tbody').html(faq_search_data);
},
'prepare_faq_stat_table': function (t_info, data){
console.log(data);
/* Initialize variables */
let faq_stat_data = '';
let subject = [];
let subject_counter = STAT.groupQuestionBySubject(data);
let counter = 0, rowspan = 0;
data.forEach(function(row, key){
// Checks if subject is already taken
let subject_name = '';
if (!subject.includes(row.subject_id)) {
rowspan = subject_counter[counter];
subject_name = row.subject;
subject.push(row.subject_id);
++counter;
}
faq_stat_data += '<tr>';
if(subject_name) {
faq_stat_data += '<td style="vertical-align: middle;" rowspan="'+rowspan+'" class="text-center">'+subject_name+'</td>';
}
faq_stat_data += '<td>'+row.question+'</td>'
+ '<td>'+row.helpful+'</td>'
+ '<td>'+((row.vol_helpful)?row.vol_helpful:0)+'%</td>'
+ '<td>'+row.not_helpful+'</td>'
+ '<td>'+((row.vol_not_helpful)?row.vol_not_helpful:0)+'%</td>'
+ '</tr>';
});
if (!faq_stat_data) {
faq_stat_data = '<td colspan="2">Pas de données</td>';;
}
$('.faq_stat tbody').append(faq_stat_data);
},
};
/**
* @method Count the number of question by subject
* @param object data subjects with questions
* @return object counted questions per subject
*/
STAT.groupQuestionBySubject = function(data) {
let subject = [];
let subject_counter = [];
let question_counter = 0;
data.forEach(function(row, key){
// Checks if subject is already taken
let subject_name = '';
if (!subject.includes(row.subject_id)) {
if(key > 0 && (key+1) != data.length) {
subject_counter.push(question_counter);
}
question_counter = 0;
subject.push(row.subject_id);
}
question_counter++;
if ((key+1) == data.length) {
subject_counter.push(question_counter);
}
});
return subject_counter;
}
/**
** @method generate graphs per set
** @param array graphs to be generated
*/
STAT.plotGraph = function(g_info, graph_data){
// reset the graph container
$('#'+g_info['container_name']).remove();
$('#'+g_info['container_name']+'-container').html('<canvas id="'+g_info['container_name']+'"></canvas>');
// prepare graph details
var ctx = document.getElementById(g_info['container_name']).getContext('2d');
// graph it!
STAT.graphs[g_info['container_name']] = new Chart(ctx,{
type: g_info['graph_type'],
options: g_info['options'],
data: graph_data,
});
};
/**
** @method generate graphs per set
** @param array graphs to be generated
*/
STAT.generateGraphs = function(graph_category_list){
STAT.setDateFilter();
STAT.setUserFilter();
STAT.resetGraphBoxValues();
STAT.toggleLoader('tab', 'show');
graph_category_list.forEach(function(graph_category){
var g_info = '', utypes;
/* Set graph info defined in graph configs*/
g_info = STAT.graph_configs[graph_category];
utypes = g_info.graph_type == 'pie'? 'none' : STAT.graph_configs.general.utypes;
$.ajax({
type: 'GET',
url: STAT.graph_configs.general.data_url +g_info['data_name']+'/'+g_info['tbl_abbrev']+'/'+utypes+'/'+ STAT.date_range.start_date +'/'+STAT.date_range.end_date,
async: false,
dataType : 'json',
data : {type : "statistics"},
})
.done(function(data) {
/*Plot data*/
try {
STAT.prepAndPlot[`prepare_${graph_category}`](g_info, data);
} catch (e) {
$('#'+g_info['container_name']).remove();
$('#'+g_info['container_name']+'-container').append('<h1 class="text-center vertical-align-gtext">Pas de données</h1>');
} finally {
}
})
.fail(function() {
$('#'+g_info['container_name']).remove();
$('#'+g_info['container_name']+'-container').append('<h1 class="text-center vertical-align-gtext">Pas de données</h1>');
})
.always(function() {
});
});
};
/**
** @method generate tables per set
** @param array graphs to be generated
*/
STAT.generateTables = function(table_category_list){
STAT.setDateFilter();
STAT.toggleLoader('tab', 'show');
table_category_list.forEach(function(table_category){
var t_info = '', utypes;
/* Set table info defined in table configs*/
t_info = STAT.table_configs[table_category];
$.ajax({
type: 'GET',
url: STAT.table_configs.general.data_url + t_info['data_name'] + '/' + STAT.date_range.start_date +'/'+STAT.date_range.end_date,
async: false,
dataType : 'json',
data : {type : "statistics"},
})
.done(function(data) {
/*Plot data*/
try {
STAT.prepAndPlot[`prepare_${table_category}`](t_info, data);
} catch (e) {
} finally {
}
})
.fail(function() {
})
.always(function() {
});
if (table_category == 'faq_searches_table') {
STAT.toggleLoader('tab', 'remove');
STAT.toggleLoader('filter', 'remove');
}
});
};
/**
** @method export dashboard data to excel
** @param array graphs to be generated
*/
STAT.exportDashboardData = function(){
STAT.setDateFilter();
$('a#export_dashboard_data').attr('href', STAT.base_url + 'export_dashboard/'+ STAT.date_range['start_date'] +'/'+ STAT.date_range['end_date']);
};
return STAT;
})(jQuery, this);;
/*****************************************************************************
*
* Main execution
*
****************************************************************************/
statistics.initConfigs();
statistics.generateGraphs(statistics.graph_list_per_set['first']);
statistics.generateTables(statistics.table_list_per_set['first']);
statistics.generateTables(statistics.table_list_per_set['second']);
statistics.generateTables(statistics.table_list_per_set['third']);