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.

393 lines
16 KiB

2 months ago
$(document).ready(function () {
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
mapTags();
get_stats();
update_dates();
function update_dates()
{
chData = $('#visits_chart').data('data');
if (chData.length < 2)
return;
chLabels = JSON.parse($('#visits_chart').data('labels').replaceAll('\'', '\"'));
area_Labels = JSON.parse($('#visits_chart').data('areas').replaceAll('\'', '\"'));
console.log(chLabels);
var canvas = document.createElement('canvas');
canvas.setAttribute('id', 'canvas_vc');
$('#visits_chart').empty();
$('#visits_chart').append(canvas);
colors = [
'rgba(250, 100, 100, 1)',
'rgba(100, 250, 100, 1)',
'rgba(100, 100, 250, 1)',
'rgba(100, 250, 250, 1)',
]
datasets = []
for(i in chData)
{
datasets.push({
label: area_Labels[i],
data: chData[i],
backgroundColor: colors[i],
lineTension: 0.4
})
}
var chartData = {
labels: chLabels,
datasets: datasets
};
if (canvas) {
var chart = new Chart(canvas, {
type: 'line',
data: chartData,
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
datalabels: {
textAlign: 'center',
maintainAspectRatio: false,
font: {
lineHeight: 1.6
}
},
legend: {
display: false,
},
title: {
display: false,
}
},
tooltips: {
enabled: false
}
}
});
}
}
$('.nav-link').click(function(){
$('.select_div').hide();
$('#select_div'+$(this).data('profarea_id')).show();
get_stats();
});
$('.show_visits').click(function(){
getVisits($(this).data('visit_ids'));
});
function mapTags(){
var lang = getUrlParameter('lang');
$.each($('.diagnoses_select'), function(e) {
var profarea_id = $(this).data('profarea_id');
console.log(profarea_id);
if(lang == 'en')
$(this).append('<option value=0 selected style="color: #888;">Diagnos</option>');
else
$(this).append('<option value=0 selected style="color: #888;">Диагноз</option>');
$.ajax({
type:'GET',
url: '/get_diagnos_tags/'+profarea_id+'?lang='+lang,
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for(tag_num in data)
{
var tag = data[tag_num]
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
$(this).append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
console.log('appended');
}
}
},
error:function (jqXHR, exception) {
}
});
});
}
$('.diagnoses_select').on('change', function() {get_stats(null)});
$('#pirogov_confirmed').on('change', function() {get_stats(null)});
$('#doctor_select').on('change', function() {get_stats(null)});
$('#start_date').on('change', function() {get_stats(null)});
$('#end_date').on('change', function() {get_stats(null)});
$('#med_visit').on('change', function() {get_stats(null)});
$('#med_exam').on('change', function() {get_stats(null)});
$('#dest_direct').on('change', function() {get_stats(null)});
$('#source_direct').on('change', function() {get_stats(null)});
$('#today').on('click', function() {get_stats('today')});
$('#7days').on('click', function() {get_stats('7days')});
$('#30days').on('click', function() {get_stats('30days')});
function get_stats(time_param)
{
lang = getUrlParameter('lang');
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
var user_id = $('#doctor_select').val();
var pirogov_confirmed = $('#pirogov_confirmed').is(':checked');
var med_exam = $('#med_exam').is(':checked');
var med_visit = $('#med_visit').is(':checked');
var dest_direct = $('#dest_direct').is(':checked');
var source_direct = $('#source_direct').is(':checked');
var profarea_id = $('.tab-pane.active').data('profarea_id');
var diagnos_id = $('#diagnos'+profarea_id).val();
var clinic_id = $('#clinic_id').val();
var url = '/get_stats?lang='+lang+'&start_date='+start_date+'&time_param='+time_param+'&dest_direct='+dest_direct+'&source_direct='+source_direct+'&med_exam='+med_exam+'&med_visit='+med_visit+'&end_date='+end_date+'&user_id='+user_id+'&pirogov_confirmed='+pirogov_confirmed+'&diagnos_id='+diagnos_id+'&profarea_id='+profarea_id+'&clinic_id='+clinic_id;
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#num_surgical'+profarea_id).html(data['surgical']);
$('#num_surgical'+profarea_id).parent().data('visit_ids', data['visits']['surgical']);
$('#num_therapeutic'+profarea_id).html(data['therapeutic']);
$('#num_therapeutic'+profarea_id).parent().data('visit_ids', data['visits']['therapeutic']);
$('#num_waiting'+profarea_id).html(data['waiting']);
$('#num_norma'+profarea_id).html(data['norma']);
$('#num_waiting'+profarea_id).parent().data('visit_ids', data['visits']['waiting']);
$('#num_unsatisfactory'+profarea_id).html(data['unsatisfactory']);
$('#num_unsatisfactory'+profarea_id).parent().data('visit_ids', data['visits']['unsatisfactory']);
var chLabels = [data['translate']['surgical'],data['translate']['therapeutic'],data['translate']['norma'],data['translate']['waiting'],data['translate']['unsatisfactory']];
var chNames = ['surgical','therapeutic','norma','waiting','unsatisfactory'];
var chData = [data['surgical'], data['therapeutic'], data['norma'], data['waiting'], data['unsatisfactory']];
var canvas = document.createElement('canvas');
canvas.setAttribute('id', 'canvas'+profarea_id);
$('#chart'+profarea_id).empty();
$('#chart'+profarea_id).append(canvas);
var chartData = {
labels: chLabels,
datasets: [{
data: chData,
backgroundColor: [
'rgba(250, 100, 100, 1)',
'rgba(100, 190, 100, 1)',
'rgba(0, 250, 0, 1)',
'rgba(200, 200, 200, 1)',
'rgba(100, 100, 200, 1)',
]
}]
};
if (canvas) {
var chart = new Chart(canvas, {
type: 'doughnut',
data: chartData,
options: {
responsive: true,
plugins: {
datalabels: {
color: '#111',
textAlign: 'center',
font: {
lineHeight: 1.6
},
formatter: function(value, ctx) {
return ctx.chart.data.labels[ctx.dataIndex] + '\n' + value + '%';
}
},
legend: {
position: 'top',
},
title: {
display: true,
}
},
tooltips: {
enabled: false
},
onClick: (evt, activeEls, chart) => {
if (activeEls.length === 0 || chart.getElementsAtEventForMode(evt, 'nearest', {
intersect: true
}, true).length === 0) {
return;
}
console.log('Function param: ', activeEls[0].index);
getVisits(data['visits'][chNames[activeEls[0].index]])
// console.log('lookup with the event: ', chart.getElementsAtEventForMode(evt, 'nearest', {
// intersect: true
// }, true)[0].index);
// activeEls.forEach(point => {
// console.log('val: ', chart.data.datasets[point.datasetIndex].data[point.index])
// })
}
}
});
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
$('.excl_dwnld').on('click', function() {getExcel()});
$('.excl_dwnld2_0').on('click', function() {getExcel2_0()});
function getExcel2_0(){
lang = getUrlParameter('lang');
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
var clinic_id = $('#clinic_id').val();
var url = '/routing/report/'+clinic_id+'?lang='+lang+'&start_date='+start_date+'&end_date='+end_date+'&reload='+$('#reload').is(':checked');
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var a = document.createElement('a');
a.href = '/excel/'+ data['file'];
filename = $('#clinic_name').val()+'_report'
a.download = filename + '.xlsx';
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL('/excel/'+ data['file']);
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getExcel(){
lang = getUrlParameter('lang');
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
var user_id = $('#doctor_select').val();
var pirogov_confirmed = $('#pirogov_confirmed').is(':checked');
var med_exam = $('#med_exam').is(':checked');
var med_visit = $('#med_visit').is(':checked');
var dest_direct = $('#dest_direct').is(':checked');
var source_direct = $('#source_direct').is(':checked');
var profarea_id = $('.tab-pane.active').data('profarea_id');
var diagnos_id = $('#diagnos'+profarea_id).val();
var clinic_id = $('#clinic_id').val();
var url = '/get_excel_stats?lang='+lang+'&start_date='+start_date+'&dest_direct='+dest_direct+'&source_direct='+source_direct+'&med_exam='+med_exam+'&med_visit='+med_visit+'&end_date='+end_date+'&user_id='+user_id+'&pirogov_confirmed='+pirogov_confirmed+'&diagnos_id='+diagnos_id+'&profarea_id='+profarea_id+'&clinic_id='+clinic_id;
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var a = document.createElement('a');
a.href = '/excel/'+ data['file'];
filename = $('#clinic_name').val()+'_report'
a.download = filename + '.xlsx';
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL('/excel/'+ data['file']);
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getVisits(ids){
var message = {
visit_ids: ids,
clinic_id: $('#clinic_id').val()
}
$.ajax({
type:'POST',
url: '/prepare_stats_visits',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
$('#visits_table').empty();
$('#visits_modal').modal('toggle');
$('#datatable').DataTable().clear().destroy();
for (visit_num in data)
{
visit = data[visit_num]
if($('#language').val() == 'ru')
$('#visits_table').append('<tr '+getTooltip(visit['confirmed_tags'])+'><td><a href="/medical_report/'+visit['id']+'">'+visit['patient']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['date']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['telephone']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['doctor']+'</a></td><td style="display: none;">'+visit['department']+'</td><td><a href="/medical_report/'+visit['id']+'">'+getDiagnosesText(visit['confirmed_tags'])+'</a></td></tr>');
else
$('#visits_table').append('<tr '+getTooltip(visit['confirmed_tags'])+'><td><a href="/medical_report/'+visit['id']+'?lang=en">'+visit['patient']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['date']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['telephone']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['doctor']+'</a></td><td style="display: none;">'+visit['department']+'</td><td><a href="/medical_report/'+visit['id']+'">'+getDiagnosesText(visit['confirmed_tags'])+'</a></td></tr>');
}
$('tr[data-bs-toggle="tooltip"]').tooltip({
html: true,
});
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
// $('#datatable').DataTable({
// "scrollX": true
// });
}
});
}
function getDiagnosesText(tags)
{
var diagnoses = '';
for(tag in tags)
diagnoses += tags[tag] + '<br>'
return diagnoses
}
function getTooltip(tags)
{
var diagnoses = '';
for(tag in tags)
diagnoses += tags[tag] + '<br>'
return ''
// return 'data-bs-toggle="tooltip" data-bs-placement="bottom" title="'+diagnoses+'"'
}
$('#visits_modal').on('shown.bs.modal', function () {
// $('#datatable_wrapper').hide();
$('#datatable').DataTable( {
"language": {
"url": "https://cdn.datatables.net/plug-ins/1.10.19/i18n/Russian.json"
},
"scrollX": true
});
});
function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
});