/**
* This object will handle the episode Timeline chart
* @class lexisnexis.component.patientprofileTimelineChart
*/
jQuery.namespace('lexisnexis.component');
jQuery.extend( jQuery.fn.dataTableExt.oSort,
{
"length-of-stay-asc" : function(a,b) {
b = b.match('N/A') ? "-999" : b;
a = a.match('N/A') ? "-999" : a;
a = parseInt(a);
b = parseInt(b);
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"length-of-stay-desc" : function(a,b) {
b = b.match('N/A') ? "-999" : b;
a = a.match('N/A') ? "-999" : a;
a = parseInt(a);
b = parseInt(b);
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
lexisnexis.component.patientprofileTimelineChart = lexisnexis.component.Component.extend( {
data : {
chartDiv : '#patienttimeline',
AJAX_URL : "getPatientTimelineChart",
tableId : '#timelinetable',
dataSetId : '#dataSet'
},
config:{canvasWidth :'80%', canvasHeight :'50%', style : 'box', showNavigation:true},
/**
* @method ready
*/
ready : function() {
// Parse out the relative U
var cs=this;
cs.data.isPatientProfile = $("#ln_isPatientProfileScreenFlag").val() ;
cs.getChartData();
},
prepareProcedureCodeData: function(cs,data){
if (data != null)
{
var filterArray = data.split('^');
var moreAnchor = '<a class="moreClickClass" href="#" onclick="return false;">...more</a>';
var lessAnchor = '<a class="lessClickClass" href="#" onclick="return false;">...less</a>';
if (filterArray.length > 1)
{
// Need More /Less code here, put back in once I have it properly working in datatable
var concatenatedString1 = "";
var concatenatedString2 = "";
concatenatedString1 += filterArray[0] + ' ' + moreAnchor ;
concatenatedString2 += filterArray[0] + ' ' + lessAnchor ;
for (var i = 1; i < filterArray.length; i++) {
concatenatedString2 += "</BR>" + filterArray[i];
}
return '<div class="ln-procedureCodeList_moreLess"><span class="moreClass">'+concatenatedString1+' </span> <span class="lessClass" style="display: none;">'+concatenatedString2+'</span></div>';
}
else
{
return '<div class="ln-procedureCodeList">'+data+'</div>';
}
}
else
{
return '<div class="ln-procedureCodeList"></div>';
}
},
getTimeLineData: function(data){
var cs=this;
var tData= data.aaData;
cs.data.filteredCount= data.filteredCount;
if(parseInt(cs.data.filteredCount) > 0){
$('#errordiv').hide();
$('#ln_patientProfile').show();
LN.getPage().pushEvent(EVENT_TYPES.UPDATE_TABLE_DATA);
}else {
$('#ln_patientProfile').hide();
$('#errordiv').show();
}
if(tData.length>0){
var timelineData=[];
var minDate= new Date(tData[tData.length-1][0]);
minDate.setMonth(minDate.getMonth()-3);
minDate.setDate(01);
var maxDate=new Date(tData[0][0]);
maxDate.setDate(01);
maxDate.setMonth(maxDate.getMonth()+4);
maxDate.setDate(maxDate.getDate()-1);
cs.data.minDate=minDate;
cs.data.maxDate=maxDate;
tData.forEach(function(d){
var date= new Date(d[0]);
var day= date.getDate();
var month= date.getMonth();
var year= date.getFullYear();
var image='';
switch(d[5].toLowerCase()){
case "pharmacy":
image= "Pharmacy";
break;
case "officevisit":
image="Office_visit";
break;
case "emergency":
image="Emergency";
break;
case "inpatient":
image="InPatient";
break;
case "outpatient":
image="Outpatient_Surgery";
break;
case "labs":
image="Lab";
break;
case "radiology":
image="Radiology";
break;
}
var count=1;
var timelineEntry={"startyear":year,"startmonth":month,"startdate":day,"image":image,"count":parseInt(count),"eventDate":date,"provider":d[4],"service":d[1],"diagCode":d[2],"code":d[3],"los":d[6],"eventCount":d[7], "diagDesc":d[8], "procedureCodes":d[9], "procedureDescriptions":d[10]};
timelineData.push(timelineEntry);
});
cs.data.actualData= timelineData;
}
},
getChartData : function(){
var cs=this;
//var dataSet = $(cs.data.dataSetId).val();
var dataSet = $("#ln_topmenu_dataset").attr('datasetkey');
var queryString = window.location.search;
var url = LN.getContextPath()+"/getPatientTimelineChart";
var serviceType = $('#serviceType').val();
if(! (queryString.indexOf("&dataSet=") > -1)){
url = url + queryString+"&dataSet="+ dataSet+"&serviceType="+serviceType;
}else{
var query = queryString.substring(0,queryString.indexOf("&dataSet="));
url = url + "?" + query+"&dataSet="+ dataSet+"&serviceType="+serviceType;
}
var params=[];
LN.ajaxPostJSON(cs.data.chartDiv,url,params,cs.callWebservice,cs);
},
/**
* @method loadChart
*/
loadChart: function() {
var cs=this;
cs.getChartData();
},
/**
* @method callWebservice
*/
callWebservice: function(cs,data,status){
cs.getTimeLineData(data);
cs.ajaxDisplayChartCallBack(cs, cs.data.actualData, '');
},
/**
* function to display the chart
*/
ajaxDisplayChartCallBack:function(cs,data,status) {
cs.drawTimelineChart(cs.data.chartDiv, data);
},
/**
* @method drawTimelineChart
*/
drawTimelineChart: function(divId, data) {
var cs=this;
cs.drawVisualization(divId, data,cs.config, cs);
},
drawVisualization:function (divId, data, defaultConfig) {
/*
* [START] DECLARE NESTED FUNCTIONS
* */
function getVisTimelineChartData(data, isActualDate){
var chartData=[];
data.forEach(function(d){
//var rowData=[];
var chartDate= new Date(d.startyear, d.startmonth, '01');
if(isActualDate){
chartDate.setDate(d.startdate);
}
var content='<img src="'+LN.getContextPath()+'/resources/default/images/'+d.image+'.png"> '+d.sum_count;
var item={'start':chartDate,'content':content,'className':'ln-mousepointer'};
chartData.push( item);
});
return chartData;
};
//event listener function for range change event: zoom-in, zoom-out, right & left navigation
function getVisibleChartRange(){
var range = timeline.getWindow();
var timeDiff= Math.abs((range.end).getTime()-(range.start).getTime());
var dayDiff = Math.ceil(timeDiff/(1000*3600*24));
var chartData=[];
var options = {
"width": '100%',
"autoResize":true,
"minHeight":"25em",
"min" : cs.data.minDate,
"max" : cs.data.maxDate,
"timeAxis":{scale:'month',step:1},
"margin": {axis:5 ,item:{horizontal:5 ,vertical:5}},
"zoomMin":604800000,
"stack":true,
"showMinorLabels":true,
"editable":false,
"type":"box"
};
if($('#serviceType').val() != '' && $('#serviceType').val()!="All" ){
image=[];
image.push(getServiceType($('#serviceType').val()));
}
//group data by event type, mont & date
if(dayDiff<110){
var result= SQLike.q({
Select: ['startyear','startmonth','startdate','end','image','|sum|','count'],
From: actualdata,
Where: function(){return image.indexOf(this.image)> -1 && new Date(this.startyear, this.startmonth, this.startdate).getTime()>=(range.start).getTime() && new Date(this.startyear, this.startmonth, this.startdate).getTime()<=(range.end).getTime();},
GroupBy:['image','startmonth','startdate'],
OrderBy:['image','|asc|']
});
if(dayDiff>30){
options = {
"width": '100%',
"autoResize":true,
"minHeight":"25em",
"min" : cs.data.minDate,
"max" : cs.data.maxDate,
"timeAxis":{scale:'day',step:5},
"margin": {axis:5 ,item:{horizontal:5 ,vertical:5}},
"zoomMin":604800000,
"stack":true,
"showMinorLabels":true,
"editable":false,
"type":"box"
};
}else{
options = {
"width": '100%',
"autoResize":true,
"minHeight":"25em",
"min" : cs.data.minDate,
"max" : cs.data.maxDate,
"timeAxis":{scale:'day',step:1},
"margin": {axis:5 ,item:{horizontal:5 ,vertical:5}},
"zoomMin":604800000,
"stack":true,
"showMinorLabels":true,
"editable":false,
"type":"box"
};
}
var chartData=getVisTimelineChartData(result, true);
}else{
//group data by event type and month
var result= SQLike.q({
Select: ['startyear','startmonth','startdate','end','image','|sum|','count'],
From: actualdata,
Where: function(){return image.indexOf(this.image)> -1 && new Date(this.startyear, this.startmonth, this.startdate).getTime()>=(range.start).getTime() && new Date(this.startyear, this.startmonth, this.startdate).getTime()<=(range.end).getTime();},
GroupBy:['image','startmonth','startyear'],
OrderBy:['image','|asc|']
});
var chartData=getVisTimelineChartData(result, false);
}
var items=new vis.DataSet(chartData);
timeline.setItems(items);
timeline.setOptions(options);
// Draw our timeline with the created data and options
timeline.redraw();
};
function getSelectedItem(properties){
var data= timeline.itemsData.get(properties.item);
var selectedItemDate= new Date(data.start);
var selectedItemContent= data.content.split('/');
var image=selectedItemContent[selectedItemContent.length-1].split('>')[0];
image= image.split(".")[0];
var range = timeline.getWindow();
var timeDiff= Math.abs((range.end).getTime()-(range.start).getTime());
var dayDiff = Math.ceil(timeDiff/(1000*3600*24));
var result;
var options = {
"width": '100%',
"autoResize":true,
"minHeight":"25em",
"min" : cs.data.minDate,
"max" : cs.data.maxDate,
"timeAxis":{scale:'month',step:1},
"margin": {axis:5 ,item:{horizontal:5 ,vertical:5}},
"zoomMin":604800000,
"stack":true,
"showMinorLabels":true,
"editable":false,
"type":"box"
};
//if the visible range is less than 110 days split the events to day level and display the timeline chart.
if(dayDiff<110){
result = SQLike.q({
Select: ['startyear','startmonth','startdate','end','image','eventDate','provider','service','diagCode','code','los','eventCount','diagDesc', 'procedureCodes','procedureDescriptions'],
From: actualdata,
Where: function(){return image.indexOf(this.image)> -1 && new Date(this.startyear, this.startmonth, this.startdate).getTime()>=selectedItemDate.getTime() && new Date(this.startyear, this.startmonth, this.startdate).getTime()<=selectedItemDate.getTime();},
OrderBy:['image','|asc|']
});
options = {
"width": '100%',
"autoResize":true,
"minHeight":"25em",
"min" : cs.data.minDate,
"max" : cs.data.maxDate,
"timeAxis":{scale:'day',step:1},
"margin": {axis:5 ,item:{horizontal:5 ,vertical:5}},
"zoomMin":604800000,
"stack":true,
"showMinorLabels":true,
"editable":false,
"type":"box"
};
}else{
var startDate= new Date(selectedItemDate.getFullYear(), selectedItemDate.getMonth(),'01');
var endDate= new Date(selectedItemDate.getFullYear(), selectedItemDate.getMonth(),'01');
endDate.setMonth(endDate.getMonth()+1);
endDate.setDate(endDate.getDate()-1);
result= SQLike.q({
Select: ['startyear','startmonth','startdate','end','image','eventDate','provider','service','diagCode','code','los','eventCount','diagDesc', 'procedureCodes','procedureDescriptions'],
From: actualdata,
Where: function(){return image.indexOf(this.image)> -1 && new Date(this.startyear, this.startmonth, this.startdate).getTime()>=startDate.getTime() && new Date(this.startyear, this.startmonth, this.startdate).getTime()<=endDate.getTime();}
});
}
var viewwidth = $(window).width();
switch (image){
case "Pharmacy":
viewwidth < 1025 ? $("#pharmacy").removeClass("w60").addClass("w90") : $("#pharmacy").removeClass("w90").addClass("w60");
showPharmacyModal(result);
break;
case "Office_visit":
viewwidth < 1250 ? $("#officeVisit").removeClass("w70").addClass("w90") : $("#officeVisit").removeClass("w90").addClass("w70");
showOfficeVisitModal(result);
break;
case "Emergency":
viewwidth < 1250 ? $("#emergency").removeClass("w80").addClass("w90") : $("#emergency").removeClass("w90").addClass("w80");
showEmergencyModal(result);
break;
case "InPatient":
viewwidth < 1250 ? $("#inpatient").removeClass("w80").addClass("w90") : $("#inpatient").removeClass("w90").addClass("w80");
showInpatientModal(result);
break;
case "Outpatient_Surgery":
console.log(viewwidth);
viewwidth < 1750 ? $("#outpatient").removeClass("w80").addClass("w90") : $("#outpatient").removeClass("w90").addClass("w80");
showOutpatientModal(result);
break;
case "Lab":
viewwidth < 1100 ? $("#lab").removeClass("w60").addClass("w80") : $("#lab").removeClass("w80").addClass("w60");
showLabModal(result);
break;
case "Radiology":
viewwidth < 1300 ? $("#radiology").removeClass("w70").addClass("w90") : $("#radiology").removeClass("w90").addClass("w70");
showRadiologyModal(result);
break;
}
};
function move (percentage) {
var range = timeline.getWindow();
var interval = range.end - range.start;
timeline.setWindow({
start: range.start.valueOf() - interval * percentage,
end: range.end.valueOf() - interval * percentage
});
};
function zoom (percentage) {
var range = timeline.getWindow();
var interval = range.end - range.start;
timeline.setWindow({
start: range.start.valueOf() - interval * percentage,
end: range.end.valueOf() + interval * percentage
});
};
function formatedDate(date){
var monthPad = ((date.getMonth() + 1) < 10 ) ? '0' : '';
var datePad = ((date.getDate()) < 10 ) ? '0' : '';
return [monthPad,(date.getMonth() + 1),"/",
datePad,date.getDate(),"/",
date.getFullYear()].join('');
};
/* added for patient profile screen */
function startClickEvent(){
$(".moreClickClass").on('click', function(e){
$(this).closest('.ln-procedureCodeList_moreLess').find('.moreClass').hide();
$(this).closest('.ln-procedureCodeList_moreLess').find('.lessClass').show();
});
$(".lessClickClass").on('click', function(e){
$(this).closest('.ln-procedureCodeList_moreLess').find('.lessClass').hide();
$(this).closest('.ln-procedureCodeList_moreLess').find('.moreClass').show();
});
};
function populateDatatable(id,dataSet,options,orderBy,columnDefs){
setTimeout(function(){
$(id).dataTable({
"data":dataSet,
"ordering": true,
"searching": false,
"paging":false,
'scrollY' : '200px',
"sScrollX" : "100%",
"sScrollXInner" : "100%",
'scrollCollapse' : true,
'dom' : 'rt',
"bLengthChange" : false,
"autoWidth" : true,
"processing" : false,
'responsive' : true,
"bAutoWidth" : false,
"columns": options,
"order":orderBy,
"columnDefs" : columnDefs,
"fnDrawCallback" : function(oSettings) {
startClickEvent();
}
});
},200);
};
function displayModal(divId, tblId, dataSet, options, orderBy, columnDefs){
$(divId).modal('show');
$(tblId).dataTable().fnDestroy();
populateDatatable(tblId, dataSet,options,orderBy,columnDefs);
};
function showPharmacyModal(data){
var dataSet=[];
var classOptions=[{'className':'ln-nowrap'},null,null];
var orderBy =[[0,"desc"]];
var columnDefs =[{"targets" : [0], "orderSequence" : ['desc','asc']}];
data.forEach(function(d){
var entry=[formatedDate(d.eventDate), d.service, d.provider];
dataSet.push(entry);
});
displayModal('#pharmacy','#pharmacytbl', dataSet,classOptions,orderBy,columnDefs);
};
function showOfficeVisitModal(data){
var dataSet=[];
var classOptions=[{'className':'ln-nowrap'},null,{'className':'text-center'},{'className':'text-center ln-nowrap'},null];
var orderBy =[[0,"desc"]];
var columnDefs =[{"targets" : [0], "orderSequence" : ['desc','asc']}];
data.forEach(function(d){
var entry=[formatedDate(d.eventDate), d.service,d.diagCode, d.code, d.provider];
dataSet.push(entry);
});
displayModal('#officeVisit','#officeVisittbl', dataSet,classOptions,orderBy,columnDefs);
};
function showEmergencyModal(data){
var dataSet=[];
var classOptions=[null,null,{'className':'text-center'},{'className':'text-center ln-nowrap'},null];
var orderBy =[[0,"desc"]];
var columnDefs =[
{"targets" : [0], "orderSequence" : ['desc','asc'], "width":"15%"},
{"targets" : [1], "width":"33%"},
{"targets" : [2], "width":"15%"},
{"targets" : [3], "width":"10%"},
{"targets" : [4], "width":"27%"}
];
data.forEach(function(d){
var entry=[formatedDate(d.eventDate), d.service,d.diagCode, d.code, d.provider];
dataSet.push(entry);
});
displayModal('#emergency','#emergencytbl', dataSet,classOptions,orderBy,columnDefs);
};
function showInpatientModal(data){
var dataSet=[];
var classOptions=[null,{'className':'text-center'},{'className':'text-center'},null,null,{'className':'text-center'},null];
var orderBy =[[3,"desc"]];
var columnDefs =[{"targets" : [3,4,5], "orderSequence" : ['desc','asc']}];
data.forEach(function(d){
var admitDate= new Date(d.eventDate);
admitDate.setDate(admitDate.getDate()-parseInt(d.los));
var entry=[d.service, d.diagCode, d.code, formatedDate(admitDate), formatedDate(d.eventDate), d.los, d.provider];
dataSet.push(entry);
});
displayModal('#inpatient','#inpatienttbl', dataSet,classOptions,orderBy,columnDefs);
};
function showOutpatientModal(data){
var dataSet=[];
var classOptions=[null,null,null,null,null,null];
var orderBy =[[0,"desc"]];
var columnDefs =[{"targets" : [0], "orderSequence" : ['desc','asc'], "width": "1%" },
{"render" : function(data, type, row) {
return cs.prepareProcedureCodeData(cs,data);
},
"width": "4%",
"targets" : [ 1 ]
},
{"width": "3%", "targets" : 2},
{"width": "1%", "targets" : [ 3, 4 ], "className": "text-center"},
{'width': '2%', "targets" : 5 }
];
data.forEach(function(d){
var entry=[formatedDate(d.eventDate), d.procedureDescriptions, d.diagDesc, d.diagCode, d.code, d.provider];
dataSet.push(entry);
});
displayModal('#outpatient','#outpatienttbl', dataSet,classOptions,orderBy,columnDefs);
};
function showLabModal(data){
var dataSet=[];
var classOptions=[{'className':'ln-nowrap'},null,null];
var orderBy =[[0,"desc"]];
var columnDefs =[{"targets" : [0], "orderSequence" : ['desc','asc']}];
data.forEach(function(d){
var entry=[formatedDate(d.eventDate), d.service, d.provider];
dataSet.push(entry);
});
displayModal('#lab','#labtbl', dataSet,classOptions,orderBy,columnDefs);
};
function showRadiologyModal(data){
var dataSet=[];
var classOptions=[null,{'className':'ln-nowrap'},null,{'className':'text-center'}];
var orderBy =[[1,"desc"]];
var columnDefs =[{"targets" : [1,3], "orderSequence" : ['desc','asc']}];
data.forEach(function(d){
var entry=[d.provider, formatedDate(d.eventDate), d.service, d.eventCount];
dataSet.push(entry);
});
displayModal('#radiology','#radiologytbl', dataSet,classOptions,orderBy,columnDefs);
};
function getTimelineChartData(data, isActualDate){
var chartData=[];
data.forEach(function(d){
var rowData=[];
var chartDate= new Date(d.startyear, d.startmonth, '01');
if(isActualDate){
chartDate.setDate(d.startdate);
}
rowData.push(chartDate);
rowData.push('<img src="'+LN.getContextPath()+'/resources/default/images/'+d.image+'.png"> '+d.sum_count);
rowData.push('ln-mousepointer');
chartData.push( rowData);
});
return chartData;
};
function getServiceType(data){
var image='false';
switch(data.toLowerCase()){
case "pharmacy":
image= "Pharmacy";
break;
case "office":
image="Office_visit";
break;
case "emergency":
image="Emergency";
break;
case "inpatient":
image="InPatient";
break;
case "outpatient":
image="Outpatient_Surgery";
break;
case "lab":
image="Lab";
break;
case "radiology":
image="Radiology";
break;
}
return image;
};
/*
* [END] DECLARE NESTED FUNCTIONS
*
* BELOW HERE IS THE "REAL CODE"
*
*/
// Create and populate a data table.
var cs= this;
cs.data.actualdata=data;
var actualdata =data;
var timelineData= cs.data.timelineData;
var serviceType='';
if(typeof $('#serviceType').val() != 'undefined'){
serviceType=$('#serviceType').val();
}
if(typeof actualdata == 'undefined'){
$('#errorBlock').show();
$('#patienttimelinelegend').hide();
$('#navigation').hide();
$(".vis").remove();
}else{
$('#errorBlock').hide();
//var image = ["Pharmacy", "Office_visit", "Emergency", "InPatient", "Outpatient_Surgery", "Lab", "Radiology"];
var image = new Array("Pharmacy", "Office_visit", "Emergency", "InPatient", "Outpatient_Surgery", "Lab", "Radiology");
if(serviceType.length>0 && serviceType !="All"){
image=[];
image.push(getServiceType(serviceType));
}
var result= SQLike.q({
Select: ['startyear','startmonth','|min|','startdate','image','|sum|','count'],
From: actualdata,
Where: function(){return image.indexOf(this.image)> -1 ;},
GroupBy:['image','startmonth','startyear'],
OrderBy:['image','|asc|','min_startdate','|asc|','startmonth','|asc|']
});
var chartData= getVisTimelineChartData(result, false);
//setting the options for the time line chart
var options = {
"width": '100%',
"autoResize":true,
"minHeight":"25em",
"min" : cs.data.minDate,
"max" : cs.data.maxDate,
"timeAxis":{scale:'month',step:1},
"margin": {axis:5 ,item:{horizontal:5 ,vertical:5}},
"zoomMin":604800000,
"stack":true,
"showMinorLabels":true,
"editable":false,
"type":"box"
};
// Instantiate our timeline object.
$(".vis").remove();
if(chartData[0] == undefined){
$('#errorBlock').show();
$('#patienttimelinelegend').hide();
$('#navigation').hide();
} else {
$('#errorBlock').hide();
$('#patienttimelinelegend').show();
$('#navigation').show();
var container= document.getElementById('patienttimeline');
var items=new vis.DataSet(chartData);
// Draw our timeline with the created data and options
var timeline = new vis.Timeline(container, items, options);
//setting the visible range on load
timeline.setWindow(cs.data.minDate, cs.data.maxDate);
//adding event listener for range change event.
timeline.on('rangechange',getVisibleChartRange);
timeline.on('click',getSelectedItem);
}
// attach events to the navigation buttons
document.getElementById('zoomIn').onclick = function () { zoom(-0.2); };
document.getElementById('zoomOut').onclick = function () { zoom( 0.2); };
document.getElementById('moveLeft').onclick = function () { move( 0.2); };
document.getElementById('moveRight').onclick = function () { move(-0.2); };
}
}
});
lexisnexis.component.patientprofileTimelineTable = lexisnexis.component.Table.extend({
data : {
defaultOrder : [ 0, 1, 2, 3, 4, 5,6],
isPdf : false,
ajaxComplete : false
},
ready : function() {
var cs = this;
cs.checkPatientMemberId(cs, cs.onReadyFn);
LN.getPage().registerEvent(EVENT_TYPES.APPLY_BUTTON_CLICK,cs,cs.onDataSetChange);
},
onReadyFn: function(cs){
cs.setDefaultColumnsPref();
cs.onServiceChange();
$('#errordiv').hide();
$('#errorBlock').hide();
var patienttimeline = cs.getPatientTimeline();
try {
cs.initializeTable();
//DE1438
if($('#serviceType').val() != '' && $('#serviceType').val() !='All'){
$('#timelinetable').DataTable().column(5).search( $('#serviceType').val() ).draw();
}else{
$('#timelinetable').DataTable().draw();
}
if (patienttimeline != null) {
patienttimeline.loadChart();
}
} catch (err) {
LN.debug("error in datatable" + err);
}
},
onDateSetChangeFn: function(cs){
var patienttimeline = cs.getPatientTimeline();
if (patienttimeline != null) {
patienttimeline.loadChart();
}
var dataSet = $(cs.data.dataSetId).val();
var queryString = window.location.search;
if(queryString.indexOf("&dataSet=") > -1){
queryString = ["?",queryString.substring(0,queryString.indexOf("&dataSet="))].join('');
}
var url = [LN.getContextPath(),"/getPatientTimelineTable",queryString,"&dataSet=",dataSet].join('');
cs.initializeTable();
if($('#serviceType').val() != '' && $('#serviceType').val() !='All'){
$('#timelinetable').DataTable().column(5).search( $('#serviceType').val() ).draw();
}else{
$('#timelinetable').DataTable().draw();
}
},
getClientParameters: function(cs){
$.ajax({
url: LN.getContextPath()+'/getOverallefficiencyParameters',
method: 'POST',
async: true,
cache:true,
dataType : "json",
success: function(response){
if(response){
_.each(response, function(resp) {
if(resp.name==='PPM_OVERALL_EFFICIENCY_HIGH'){
cs.data.overallEfficiencyHigh=resp.value;
}else if(resp.name==='PPM_OVERALL_EFFICIENCY_LOW'){
cs.data.overallEfficiencyLow=resp.value;
}
});
}
},
error: function(data){
cs.data.overallEfficiencyHigh='0';
cs.data.overallEfficiencyLow='0';
},
complete: function(){
cs.populatPatientPCPInfo(cs);
}
});
},
populatPatientPCPInfo: function(cs) {
$.ajax({
beforeSend: function() {
LN.showAjaxIndicator("#patient_profile_pcp");
},
url: LN.getContextPath()+"/getPatientProfilePCPInfo",
data: {
getPatientProviderKey: true
},
method: 'POST',
dataType: 'json',
success: function(response) {
cs.colorCodeTotalsTable(cs, response);
var summaryTotalsTemplate = $("#patient_profile_pcp_template").html();
var summaryTotalsHtml = Mustache.to_html(summaryTotalsTemplate, response);
$("#patient_profile_pcp").html(summaryTotalsHtml);
},
error : function(err){
$('#patient_profile_pcp').html('<span style="color:red">Error: Data is currently unavailable.</span>');
},
complete: function(data){
LN.hideAjaxIndicator("#patient_profile_pcp");
}
});
},
checkPatientMemberId: function(cs, callBackFn){
var ajaxURL = [LN.getContextPath()+"/patientProfileMemberKey?selDataSet=" +$('#ln_topmenu_dataset').attr('datasetkey')];
$.ajax({
'url': ajaxURL,
'contentType': 'application/json',
'dataType': 'json',
'method': 'post',
'data': JSON.stringify({
"selDataSet":$('#ln_topmenu_dataset').attr('datasetkey')
}),
'success': function(data, textStatus, jqXHR) {
try {
var patientProfileJson = JSON.stringify(data);
var patientMemberMemberCount = data.patientProfileMemberKeyResponseDTO.patientMemberCount;
var patientName = data.patientProfileMemberKeyResponseDTO.patientName;
var policyHolderId = data.patientProfileMemberKeyResponseDTO.policyHolderId;
$('#ln_patientName').html(patientName);
$('#ln_patientProfileTimelineDiv').removeClass("ln-display-none");
if(parseInt(patientMemberMemberCount) > 0){
LN.hideAjaxIndicator($('#ln_patientProfileTimelineDiv'));
$('#ln_patientProfileTimelineDiv').show();
$('#patientProfileTimelineErrordiv').hide();
callBackFn(cs);
cs.getClientParameters(cs);
}else {
$('#ln_patientProfileTimelineDiv').hide();
$('#patientProfileTimelineErrordiv').show();
}
} catch(err) {
LN.debug("error ="+err);
}
},
'beforeSend' : function() {
LN.showAjaxIndicator("#ln_patientProfileTimelineDiv");
LN.showAjaxIndicator("#patientProfileTimelineErrordiv");
},
'complete':function() {
LN.hideAjaxIndicator("#ln_patientProfileTimelineDiv");
LN.hideAjaxIndicator("#patientProfileTimelineErrordiv");
},
'error': function(jqXHR, textStatus, errorThrown) {
}
});
},
getPatientTimeline : function() {
var cs = this;
if (!cs.data.isPdf) {
return patienttimeline = new lexisnexis.component.patientprofileTimelineChart({
data : {
dataSetId : '#dataSet',
chartDiv : '#patienttimeline',
tableId : '#timelinetable'
}
});
}
return null;
},
onDataSetChange : function(cs) {
cs.checkPatientMemberId(cs, cs.onDateSetChangeFn);
},
onServiceChange:function(){
var cs=this;
$('#serviceType').on('change', function(event){
cs.initializeTable();
if($('#serviceType').val() != '' && $('#serviceType').val() !='All'){
$('#timelinetable').DataTable().column(5).search( $('#serviceType').val() ).draw();
}else{
$('#timelinetable').DataTable().draw();
}
var patienttimeline = cs.getPatientTimeline();
if (patienttimeline != null) {
patienttimeline.loadChart();
}
});
},
/* added for patient profile screen */
startClickEvent2 : function(){
$(".moreClickClass").on('click', function(e){
$(this).closest('.ln-procedureCodeList_moreLess').find('.moreClass').hide();
$(this).closest('.ln-procedureCodeList_moreLess').find('.lessClass').show();
});
$(".lessClickClass").on('click', function(e){
$(this).closest('.ln-procedureCodeList_moreLess').find('.lessClass').hide();
$(this).closest('.ln-procedureCodeList_moreLess').find('.moreClass').show();
});
},
initializeTable : function() {
var cs = this;
cs.data.ajaxComplete = false;
var queryString = window.location.search;
var dataSet = $(cs.data.dataSetId).val();
var url = [LN.getContextPath(),"/getPatientTimelineTable",queryString,"&dataSet=",dataSet].join('');
//var prevColumnNamesArray=cs.getCurrentColumnNamesArray();
LN.debug("initializeTable called");
$(cs.data.tableId).dataTable().fnDestroy();
cs.data.table = $(cs.data.tableId).dataTable({
'scrollY' : '200px',
"sScrollX" : "100%",
"sScrollXInner" : "100%",
'scrollCollapse' : true,
"iDisplayLength" : 100,
'dom' : 'rt',
"bLengthChange" : false,
"autoWidth" : true,
"processing" : false,
'responsive' : true,
'paging' : false,
"bAutoWidth" : true,
"ajax" : {
"url" : url,
"method" : "POST",
"dataType" : "json",
'beforeSend': function(xhr) {
xhr.setRequestHeader('X-TransactionID', LN.TRANSACTION_ID);
cs.handleBeforeAjax(cs);
},
'complete' : function() {
cs.handleAfterComplete(cs);
cs.data.ajaxComplete = true;
cs.startClickEvent2();
},
"data" : function(d) {
//var columnNamesArray=cs.getCurrentColumnNamesArray();
return $.extend({}, d, {
// "columnNames":columnNamesArray.length>0?columnNamesArray:prevColumnNamesArray
});
}
},
"order" : [[0, "desc"]],
"aoColumns" : [ {
sWidth : '8%'
},{
sWidth : '11%'
},{
sWidth : '25%'
},{
sWidth : '11%'
},{
sWidth : '25%'
},{
sWidth : '12%'
},{
sWidth : '8%',
sType : 'length-of-stay'
}],
'columnDefs' : [
{
"targets" : [0],
"orderSequence" : ['desc','asc']
}, {
"render" : function(data) {
return data;
},
"targets" : [1,3],
"className": "text-center"
}, {
"render" : function(data) {
if (data != null)
{
var filterArray = data.split('^');
var moreAnchor = '<a class="moreClickClass" href="#" onclick="return false;">...more</a>';
var lessAnchor = '<a class="lessClickClass" href="#" onclick="return false;">...less</a>';
if (filterArray.length > 1)
{
// Need More /Less code here, put back in once I have it properly working in datatable
var concatenatedString1 = "";
var concatenatedString2 = "";
concatenatedString1 += filterArray[0] + ' ' + moreAnchor ;
concatenatedString2 += filterArray[0] + ' ' + lessAnchor ;
for (var i = 1; i < filterArray.length; i++) {
concatenatedString2 += "</BR>" + filterArray[i];
}
return '<div class="ln-procedureCodeList_moreLess"><span class="moreClass">'+concatenatedString1+' </span> <span class="lessClass" style="display: none;">'+concatenatedString2+'</span></div>';
}
else
{
return '<div class="ln-procedureCodeList">'+data+'</div>';
}
}
else
{
return '<div class="ln-procedureCodeList"></div>';
}
},
"targets" : [2]
}, {
"render" : function(data) {
if(data == "Officevisit"){
return "Office Visit";
} else if(data == "Outpatient"){
return "Outpatient Surgery";
} else if(data == "Labs"){
return "Lab Services";
}
return data;
},
"targets" : [5],
"searchable": true,
"sortable": true
}
],
"fnDrawCallback" : function(oSettings) {
cs.handleDrawCallback(oSettings, cs);
}
});
}
});
$(window).bind("load", function() {
// LN.setupHelpDialog('#patientHistHelp', 'PATIENT_TIMELINE_HISTORY_HLP', 'Patient History');
});