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.
392 lines
16 KiB
392 lines
16 KiB
$(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)); |
|
} |
|
|
|
});
|
|
|