Rev 16891 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
$routeOverview = $this->url('discovery-contacts/progress-by-day');
$routeDownload = $this->url('discovery-contacts/progress-by-day/download');
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/nprogress/nprogress.css'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/nprogress/nprogress.js'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/jsrender/jsrender.js'));
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/daterangepicker/daterangepicker.css'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/moment/moment.min.js'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/daterangepicker/daterangepicker.js'));
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.css'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net/jquery.dataTables.js'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.js'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/chart.js/chart.js'));
$this->inlineScript()->appendFile($this->basePath('assets/vendors/chartjs-plugin-datalabels/chartjs-plugin-datalabels.js'));
/*
$this->headStyle()->captureStart();
echo <<<CSS
#tableUsers {
display: flex;
flex-flow: column;
width: 100%;
}
#tableUsers thead {
flex: 0 0 auto;
}
#tableUsers tbody {
flex: 1 1 auto;
display: block;
overflow-y: auto;
overflow-x: hidden;
}
#tableUsers tr {
width: 100%;
display: table;
table-layout: fixed;
}
CSS;
$this->headStyle()->captureEnd();*/
$this->inlineScript()->captureStart();
echo <<<JS
jQuery( document ).ready(function( $ ) {
var startDate = moment().format('YYYY-MM-DD');
var endDate = moment().format('YYYY-MM-DD');
var ctxchartProgressByDay = document.getElementById("chartProgressByDay").getContext("2d");
var chartProgressByDay = new Chart(ctxchartProgressByDay, {
type: 'line',
data: {
labels: [],
datasets: [
{
label : 'LABEL_PROGRESS_BY_DAY',
backgroundColor: '#E69090',
borderColor: '#E69090',
borderWidth: 1,
fill: false,
data : []
},
]
},
options: {
tooltips: {
mode: 'index',
intersect: false
},
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
$.fn.reload = function() {
NProgress.start();
$.ajax({
'dataType' : 'json',
'accept' : 'application/json',
'method' : 'get',
'url' : '$routeOverview',
'data' : {
'startDate' : startDate,
'endDate' : endDate
},
}).done(function(response) {
if(response['success']) {
chartProgressByDay.data.labels = response.data.graph.labels;
chartProgressByDay.data.datasets[0].data = response.data.graph.values;
chartProgressByDay.update()
$('#tableUsers').html(
$('#tableTemplate').render(response.data.table)
);
}else{
$.fn.showError(response);
}
}).fail(function( jqXHR, textStatus, errorThrown) {
$.fn.showError(textStatus);
}).always(function() {
NProgress.done();
});
return false;
}
$('#filterdate').daterangepicker({
maxDate: new Date(),
ranges: {
'LABEL_DATE_RANGE_TODAY': [moment(), moment()],
'LABEL_DATE_RANGE_YESTERDAY': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'LABEL_DATE_RANGE_LAST_7_DAYS': [moment().subtract(6, 'days'), moment()],
'LABEL_DATE_RANGE_LAST_30_DAYS': [moment().subtract(29, 'days'), moment()],
'LABEL_DATE_RANGE_THIS_MONTH': [moment().startOf('month'), moment().endOf('month')],
'LABEL_DATE_RANGE_LAST_MONTH': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
locale: {
format: 'DD/MM/YYYY',
applyLabel: 'LABEL_ACCEPT',
cancelLabel: 'LABEL_CANCEL',
customRangeLabel: 'LABEL_DATE_RANGE_CUSTOM',
daysOfWeek: [
'LABEL_SUNDAY_TWO_CHARACTER_CALENDAR',
'LABEL_MONDAY_TWO_CHARACTER_CALENDAR',
'LABEL_TUESDAY_TWO_CHARACTER_CALENDAR',
'LABEL_WEDNESDAY_TWO_CHARACTER_CALENDAR',
'LABEL_THURSDAY_TWO_CHARACTER_CALENDAR',
'LABEL_FRIDAY_TWO_CHARACTER_CALENDAR',
'LABEL_SATURDAY_TWO_CHARACTER_CALENDAR'
],
monthNames: [
'LABEL_MONTH_JANUARY',
'LABEL_MONTH_FEBRUARY',
'LABEL_MONTH_MARCH',
'LABEL_MONTH_APRIL',
'LABEL_MONTH_MAY',
'LABEL_MONTH_JUNE',
'LABEL_MONTH_JULY',
'LABEL_MONTH_AUGUST',
'LABEL_MONTH_SEPTEMBER',
'LABEL_MONTH_OCTOBER',
'LABEL_MONTH_NOVEMBER',
'LABEL_MONTH_DECEMBER',
],
}
});
$('#filterdate').on('apply.daterangepicker', function(ev, picker) {
startDate = picker.startDate.format('YYYY-MM-DD');
endDate =picker.endDate.format('YYYY-MM-DD');
$.fn.reload();
});
$('button.btn-download').click(function(e) {
e.preventDefault();
NProgress.start();
$.ajax({
'dataType' : 'json',
'method' : 'get',
'url' : '$routeDownload',
'data' : {
'startDate' : startDate,
'endDate' : endDate
},
}).done(function(response) {
if(response['success']) {
var anchor = window.document.createElement("a");
anchor.href = 'data:application/octet-stream;charset=utf-8;base64,' + response['data']['content'] ;
anchor.download = response['data']['basename'];
document.body.appendChild(anchor);
anchor.click(); // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access
document.body.removeChild(anchor);
} else {
$.fn.showError(response['data']);
}
}).fail(function( jqXHR, textStatus, errorThrown) {
showError(textStatus);
}).always(function() {
NProgress.done();
});
});
$.fn.reload();
});
JS;
$this->inlineScript()->captureEnd();
?>
<div class="container">
<div class="card">
<div class="card-header">
<h6 class="card-title">LABEL_DAILY_PROGRESS_CHART</h6>
</div>
<div class="card-body">
<div class="row">
<div class="col-12 mt-3">
<label>LABEL_DATE_RANGE</label>
<div class="input-group mb-3">
<span class="input-group-text" id="basic-addon1"><i class="far fa-calendar"></i></span>
<input type="text" class="form-control" name="filterdate" id="filterdate">
</div>
</div>
</div>
<div class="row">
<div class="col-12 mt-3 chart">
<canvas id="chartProgressByDay" style="min-height: 250px; height: 250px; max-height: 250px; max-width: 100%;"></canvas>
</div>
</div>
<div class="row">
<div class="col-12 mt-3" id="row-table">
<div style="height: 300px;overflow: scroll;">
<table id="tableUsers" style="width: 100%" class="table table-bordered"></table>
</div>
</div>
</div>
</div>
<div class="card-footer text-right">
<button class="btn btn-primary btn-download">LABEL_DOWNLOAD</button>
</div>
</div>
</div>
<script id="tableTemplate" type="text/x-jsrender">
<thead>
<tr>
<th>LABEL_FIRST_NAME</th>
<th>LABEL_LAST_NAME</th>
<th>LABEL_EMAIL</th>
{{for labels}}
<th>
{{:date}}
</th>
{{/for}}
</tr>
</thead>
<tbody>
{{for users}}
<tr>
<td>{{:first_name}}</td>
<td>{{:last_name}}</td>
<td>{{:email}}</td>
{{for values}}
<td class="text-right">
{{:value}}
</td>
{{/for}}
</tr>
{{/for}}
</tbody>
</script>