/**
* This Method will register the drill downs for all of the Drill Downs based on the CSS
*/
jQuery.namespace('lexisnexis.component');
lexisnexis.component.DrillDownFilter = lexisnexis.component.Component.extend({
data : {
targetUrlMap: {
"PL" : "patientList" ,
"PLW" : "patientList" ,
"PLWO" : "patientList" ,
"EL" : "episodelist" ,
"ELW" : "episodelist" ,
"ELWO" : "episodelist" ,
"ETG" : "etgList" ,
"ETGW" : "etgList" ,
"ETGWO": "etgList" ,
"CC" : "compareCostList" ,
"OS" : "overallscores" ,
"OSW" : "overallscores" ,
"OSWO" : "overallscores" ,
"OE" : "overallefficiency" ,
"RP" : "referralpatterns",
"SI" : "surgicalintervention",
"ED" : "episodedetail",
"MC" : "measurecompliance",
"PC" : "patientcompliance",
"PP" : "providerProfile"
},
profileTargetUrlMap :{
"PC" : "providerPatientcompliance"
}
},
ready: function () {
var cs = this ;
LN.getPage().registerEvent(EVENT_TYPES.PAGE_LOAD_COMPLETE,
cs, cs.registerDrillDowns);
} ,
registerDrillDowns: function (cs) {
if(!cs){
cs=this;
}
//OverAll Efficiency Drill Down Classes
//Class naming convention
// ln-<<from SCreen Name>>_<<To Screen Name>>_<<Group By/Filter>>
LN.debug("registerDrillDowns ..1 " ) ;
// Overall Efficiency (Compare Efficiency)
var drilldownCss = ".ln-OE_PL_PR,.ln-OE_EL_PR,.ln-OE_ETG_PR,.ln-OE_OS_PR,.ln-OE_SI_PR" ; //Group By Provider
drilldownCss += ",.ln-OE_PL_NW,.ln-OE_EL_NW,.ln-OE_ETG_NW,.ln-OE_OS_NW,.ln-OE_SI_NW" ; //Network
drilldownCss += ",.ln-OE_PL_PG,.ln-OE_EL_PG,.ln-OE_ETG_PG,.ln-OE_OS_PG,.ln-OE_SI_PG" ; //Peer Group
drilldownCss += ",.ln-OE_PL_SP,.ln-OE_EL_SP,.ln-OE_ETG_SP,.ln-OE_OS_SP,.ln-OE_SI_SP" ; //Specialty
drilldownCss += ",.ln-OE_PL_GR,.ln-OE_EL_GR,.ln-OE_ETG_GR,.ln-OE_OS_GR,.ln-OE_SI_GR" ; //Group
//Overall Scores (Compare Provider)
drilldownCss += ",.ln-OS_PL_PR,.ln-OS_EL_PR,.ln-OS_ETG_PR,.ln-OS_SI_PR" ; //Group By Provider
drilldownCss += ",.ln-OS_PL_NW,.ln-OS_EL_NW,.ln-OS_ETG_NW,.ln-OS_SI_NW" ; //Group By Network
drilldownCss += ",.ln-OS_PL_SP,.ln-OS_EL_SP,.ln-OS_ETG_SP,.ln-OS_SI_SP" ; //Group By Specialty
drilldownCss += ",.ln-OS_PL_PG,.ln-OS_EL_PG,.ln-OS_ETG_PG,.ln-OS_SI_PG" ; // Group By Peer Group
drilldownCss += ",.ln-OS_PL_ETG,.ln-OS_EL_ETG,.ln-OS_ETG_ETG,.ln-OS_SI_ETG" ; // Group By ETG
drilldownCss += ",.ln-OS_PL_MPC,.ln-OS_EL_MPC,.ln-OS_ETG_MPC,.ln-OS_SI_MPC" ; // Group By ETG
drilldownCss += ",.ln-OS_PL_GR,.ln-OS_EL_GR,.ln-OS_ETG_GR,.ln-OS_SI_GR" ; //Group By Group
//etg List
drilldownCss += ",.ln-ETG_PL_ETG,.ln-ETG_EL_ETG,.ln-ETG_OS_ETG" ; //Group By Provider
drilldownCss += ",.ln-ETG_PL_FLETG,.ln-ETG_EL_FLETG,.ln-ETG_OS_FLETG" ; //Group By Provider
//Compare Cost
drilldownCss += ",.ln-CC_PL_PR,.ln-CC_EL_PR,.ln-CC_ETG_PR,.ln-CC_OS_PR,.ln-CC_SI_PR" ; //Group By Provider
drilldownCss += ",.ln-CC_PL_NW,.ln-CC_EL_NW,.ln-CC_ETG_NW,.ln-CC_OS_NW,.ln-CC_SI_NW" ; //Network
drilldownCss += ",.ln-CC_PL_PG,.ln-CC_EL_PG,.ln-CC_ETG_PG,.ln-CC_OS_PG,.ln-CC_SI_PG" ; //Peer Group
drilldownCss += ",.ln-CC_PL_SP,.ln-CC_EL_SP,.ln-CC_ETG_SP,.ln-CC_OS_SP,.ln-CC_SI_SP" ; //Specialty
drilldownCss += ",.ln-CC_PL_GR,.ln-CC_EL_GR,.ln-CC_ETG_GR,.ln-CC_OS_GR,.ln-CC_SI_GR" ; //Group
//Surgical Intervention
drilldownCss += ",.ln-SI_PL_PR,.ln-SI_PLW_PR,.ln-SI_PLWO_PR,.ln-SI_EL_PR,.ln-SI_ELW_PR,.ln-SI_ELWO_PR,.ln-SI_ETG_PR,.ln-SI_ETGW_PR,.ln-SI_ETGWO_PR,.ln-SI_SI_PR,.ln-SI_OS_PR,.ln-SI_OSW_PR,.ln-SI_OSWO_PR" ; //Group By Provider
drilldownCss += ",.ln-SI_PL_NW,.ln-SI_PLW_NW,.ln-SI_PLWO_NW,.ln-SI_EL_NW,.ln-SI_ELW_NW,.ln-SI_ELWO_NW,.ln-SI_ETG_NW,.ln-SI_ETGW_NW,.ln-SI_ETGWO_NW,.ln-SI_SI_NW,.ln-SI_OS_NW,.ln-SI_OSW_NW,.ln-SI_OSWO_NW" ; //Group By Network
drilldownCss += ",.ln-SI_PL_SP,.ln-SI_PLW_SP,.ln-SI_PLWO_SP,.ln-SI_EL_SP,.ln-SI_ELW_SP,.ln-SI_ELWO_SP,.ln-SI_ETG_SP,.ln-SI_ETGW_SP,.ln-SI_ETGWO_SP,.ln-SI_SI_SP,.ln-SI_OS_SP,.ln-SI_OSW_SP,.ln-SI_OSWO_SP" ; //Group By Specialty
drilldownCss += ",.ln-SI_PL_PG,.ln-SI_PLW_PG,.ln-SI_PLWO_PG,.ln-SI_EL_PG,.ln-SI_ELW_PG,.ln-SI_ELWO_PG,.ln-SI_ETG_PG,.ln-SI_ETGW_PG,.ln-SI_ETGWO_PG,.ln-SI_SI_PG,.ln-SI_OS_PG,.ln-SI_OSW_PG,.ln-SI_OSWO_PG" ; // Group By Peer Group
drilldownCss += ",.ln-SI_PL_ETG,.ln-SI_PLW_ETG,.ln-SI_PLWO_ETG,.ln-SI_EL_ETG,.ln-SI_ELW_ETG,.ln-SI_ELWO_ETG,.ln-SI_ETG_ETG,.ln-SI_ETGW_ETG,.ln-SI_ETGWO_ETG,.ln-SI_SI_ETG,.ln-SI_OS_ETG,.ln-SI_OSW_ETG,.ln-SI_OSWO_ETG" ; // Group By ETG
drilldownCss += ",.ln-SI_PL_MPC,.ln-SI_PLW_MPC,.ln-SI_PLWO_MPC,.ln-SI_EL_MPC,.ln-SI_ELW_MPC,.ln-SI_ELWO_MPC,.ln-SI_ETG_MPC,.ln-SI_ETGW_MPC,.ln-SI_ETGWO_MPC,.ln-SI_SI_MPC,.ln-SI_OS_MPC,.ln-SI_OSW_MPC,.ln-SI_OSWO_MPC" ; // Group By ETG
drilldownCss += ",.ln-SI_PL_GR,.ln-SI_PLW_GR,.ln-SI_PLWO_GR,.ln-SI_EL_GR,.ln-SI_ELW_GR,.ln-SI_ELWO_GR,.ln-SI_ETG_GR,.ln-SI_ETGW_GR,.ln-SI_ETGWO_GR,.ln-SI_SI_GR,.ln-SI_OS_GR,.ln-SI_OSW_GR,.ln-SI_OSWO_GR" ; //Group By Group
//Compare Peer Group Page drill down
drilldownCss += ",.ln-CPG_PL_PR,.ln-CPG_EL_PR,.ln-CPG_ETG_PR";
//drilldown for cost breakdown episodes
drilldownCss += ",.ln-MC_PC_PC,.ln-MC_PC_PNC,.ln-MC_PC_PRC,.ln-MC_PC_PRNC,.ln-MC_PC_MDC,.ln-MC_PC_MDNC" ;
// drilldown for episode details
drilldownCss += ",.ln-EL_ED_EL";
// drilldown for provider profile
drilldownCss += ",.ln-OE_PP_PD,.ln-EL_PP_PD,.ln-OS_PP_PD,.ln-CC_PP_PD";
// drilldown for provider profile - Jon
drilldownCss += ",.ln-OE_PP_PR,.ln-CC_PP_PR,.ln-OS_PP_PR,.ln-MC_PP_PR,.ln-PL_PP_PR,.ln-EL_PP_PR";
//UnBind the event to prevent the multiple event register
$(drilldownCss).off('click') ;
$(drilldownCss).on('click' , function(event){
cs.drillDown(event) ;
}) ;
/**
* Graph Drill Downs
* Graph Drill Down Classes are starts with the ln-graph
*/
LN.debug("register graph DrillDowns ..1 " ) ;
var graphDrilldownCss = ".ln-graph-OE_ETG_MPC,.ln-graph-OE_ETG_MPC_PUU,.ln-graph-OE_ETG_MPC_PEU,.ln-graph-OE_ETG_MPC_POU" ;
graphDrilldownCss += ",.ln-graph-OE_ETG_SP,.ln-graph-OE_ETG_SP_PUU,.ln-graph-OE_ETG_SP_PEU,.ln-graph-OE_ETG_SP_POU" ;
graphDrilldownCss += ",.ln-graph-CC_EL_MGT,.ln-graph-CC_EL_PHR,.ln-graph-CC_EL_FAC,.ln-graph-CC_EL_SUR,.ln-graph-CC_EL_ANC,.ln-graph-CC_EL_TOT";
graphDrilldownCss += ",.ln-graph-CC_PL_MGT,.ln-graph-CC_PL_PHR,.ln-graph-CC_PL_FAC,.ln-graph-CC_PL_SUR,.ln-graph-CC_PL_ANC,.ln-graph-CC_PL_TOT";
graphDrilldownCss += ",.ln-graph-MC_PC_MCC,.ln-graph-MC_PC_MCNC" ;
graphDrilldownCss += ",.ln-graph-SI_SI_SP,.ln-graph-SI_SI_MPC" ;
$(graphDrilldownCss).off('click') ;
$(graphDrilldownCss).on('click' , function(event){
cs.graphDrilldown(event) ;
}) ;
} ,
/**
*
*/
drillDown: function (event ) {
var cs=this;
//Split added to handle sorting filter issue
var className = $.trim(event.currentTarget.className).split(/\s+/)[0] ;
var drillDownFilter = className.split("-")[1] ;
var groupByOptions = drillDownFilter.split("_") ;
var fromScreen = groupByOptions[0] ;
var targetScreen = groupByOptions[1] ;
var groupBy = groupByOptions[2] ;
var isHeader = event.currentTarget.getAttribute("isHeader") ;
var keyColumn = "";//Don't change this value here
LN.debug("drillDown ..isHeader " + isHeader ) ;
if ( ! isHeader ) {
//From the Current Event get the current tr (row)
var currentTr = $(event.target).closest('tr');
var activeFilterSummary = "" ;
if(fromScreen === 'ETG'){
//For ETG get the filterKey value from the last TD in the row
// Get the filter Description from the 0th position in tr
keyColumn = $(currentTr).find('td:last').text() ;
var severityColIndex = cs.getColumnIndex('.Severity') ;
var treatmentColIndex = cs.getColumnIndex('.TreatmentGroup') ;
var severity = $($(currentTr).find('td')[severityColIndex]).text() ;
var treatment = $($(currentTr).find('td')[treatmentColIndex]).text() ;
keyColumn = keyColumn + '|' + treatment + '|' + severity ;
}else{
//Other than the ETG get the filterKey value from the first TD, input value in the row
keyColumn = $(currentTr).find('td >input').attr('value');
/*Check to add speciality text to key column only for Groupby Speciality*/
if($(currentTr).find('td >input').attr('specialty_text')){
keyColumn=keyColumn+','+$(currentTr).find('td >input').attr('specialty_text');
}
}
var activeFilterSummaryColIndex = cs.activeFilterSummaryColumnIndex(groupBy , cs);
if(groupBy === 'EL'){
activeFilterSummary = $(event.target).attr('filtertext')+ '|' +$($(currentTr).find('td')[1]).text() ;;
}else{
activeFilterSummary = $($(currentTr).find('td')[activeFilterSummaryColIndex]).text();
}
//Measure Compliance Drill Downs
if( drillDownFilter === 'MC_PC_PC') {
keyColumn = "Y" ;
activeFilterSummary = "Compliance" ;
}else if(drillDownFilter === 'MC_PC_PNC') {
keyColumn = "N" ;
activeFilterSummary = "Non-Compliance" ;
}else if ( drillDownFilter === "MC_PC_PRC" || drillDownFilter ==="MC_PC_PRNC") {
keyColumn = $(currentTr).find('td >input').attr('value') ;
}
//Measure Compliance Drill Downs
if( drillDownFilter === 'PL_PP_PR' || drillDownFilter === 'EL_PP_PR') {
keyColumn = $(currentTr).find('td:last').text() ;
}
//From the CSS get the element from the 2n position in the array
}
else
{
if( drillDownFilter.match("^SI_.*")) {
activeFilterSummary = "Dont Care - Avoid Crash!" ;
}
}
cs.updateDrillDownCriteriaRedirectUrl( drillDownFilter , keyColumn , activeFilterSummary, cs, false) ;
} ,
graphDrilldown: function (event ) {
LN.debug("graphDrilldown ..2 ") ;
var cs=this;
var className = $.trim(event.currentTarget.className).split(/\s+/)[0] ;
var drillDownFilter = className.split("-")[2] ;
var groupByOptions = drillDownFilter.split("_") ;
var fromScreen = groupByOptions[0] ;
var targetScreen = groupByOptions[1] ;
var groupBy = groupByOptions[2] ;
var utilization ;
var samePageReDirect = false;
if(groupByOptions[3]){
utilization = groupByOptions[3] ;
}
var keyColumn ;
var filterVal = $(event.currentTarget).attr("filter_val") ;
var providerType = $(event.currentTarget).attr("prov_type") ;
var filterText = $(event.currentTarget).attr("filterText");
if (providerType) {
keyColumn = providerType+ "," +filterVal + "," +filterText ;
} else{
keyColumn = filterVal ;
}
if(groupBy==="MGT"|| groupBy==="PHR" || groupBy==="FAC" || groupBy==="SUR" || groupBy==="ANC" || groupBy==="TOT" ){
keyColumn = "0";
filterText = "filterText_NA";
}
if(drillDownFilter=== 'SI_SI_SP' || drillDownFilter==='SI_SI_MPC'){
samePageReDirect = true;
}
cs.updateDrillDownCriteriaRedirectUrl( drillDownFilter , keyColumn , filterText, cs, samePageReDirect) ;
},
/**
* This method will take the
* @param drillDownFilter
* @param keyColumn
* @param activeFilterSummary
* @param cs (this)
* As parameters and update the Criteria to PPMFilterDTO by calling the AJax URL
* and redirect the control based on the target URL
*
*/
updateDrillDownCriteriaRedirectUrl :function(drillDownFilter, keyColumn, activeFilterSummary , cs, samePageRedirect){
LN.debug("drillDown ..[drillDownFilter] " + drillDownFilter + "[drillDownFilterValue]" + keyColumn +"[drillDownFilterDesc]" + activeFilterSummary ) ;
var targetScreen = drillDownFilter.split("_")[1] ;
var targetUrl = cs.deriveTargetUrl(targetScreen ,cs ) ;
var dataVal=JSON.stringify({'drillDownFilter': drillDownFilter ,
'drillDownFilterValue':keyColumn ,
'drillDownFilterDesc':activeFilterSummary
});
var updateDrillDownUrl = 'updateDrillDownCriteria';
var idToken = '';
if (!samePageRedirect) {
idToken = '?id='+ cs.generateToken() ;
updateDrillDownUrl += idToken;
}
$.ajax({
'url' : updateDrillDownUrl,
'contentType' : 'application/json',
'dataType' : 'json',
'method' : 'post',
// This parameter will override the global
'global' : false,
'beforeSend' : function(xhr) {
// hide all the children and display background
xhr.setRequestHeader('X-TransactionID', LN.TRANSACTION_ID);
// LN.showAjaxIndicator(targetDiv);
},
'data' : dataVal,
'success' : function(data, textStatus, jqXHR) {
if (samePageRedirect == false) {
cs.forwardToLocation(targetUrl + idToken ) ;
} else {
LN.getPage().updateProviderCounts(true);
}
},
'error' : function(jqXHR, textStatus, errorThrown) {
// LN.showError(targetDiv);
},
'complete' : function(jqXHR, textStatus) {
// Show all the children when either a success or an error.
// LN.hideAjaxIndicator(targetDiv);
}
});
} ,
forwardToLocation : function (targetUrl){
$(location).attr('href' , targetUrl ) ;
} ,
/**
* This Method will Generate the Dynamic Token
* Get the current Date Time in milliseconds
* Apply Random function on the
* get the btoa of random value
* @returns
*/
generateToken : function() {
var d = new Date();
var n = d.getTime();
var token = "" ;
if ( window.btoa) {
token = btoa(Math.random(n).toString() ) ;
}else {
token = Base64.encode(Math.random(n).toString() ) ;
}
return token ;
} ,
/**
* This Method will derive the target URL based on the CSS class
* @param target
* @returns {String}
*/
deriveTargetUrl : function (target , cs) {
var url= "javascript:void(0);"; //Default value
var isProviderProfile = $("#ln_isProfileScreenFlag").val() ;
if( isProviderProfile !== 'true' ){
url = cs.data.targetUrlMap[target] ;
}else{
url = cs.data.profileTargetUrlMap[target] ;
}
return url ;
} ,
/**
* This method will return the Active Filter Summary Column Index
* @param group By
* @returns {String} Column Index
*/
activeFilterSummaryColumnIndex : function (groupBy ,cs) {
var columnIndex = 2 ;
if(groupBy ==="PR"){
columnIndex = cs.getColumnIndex("#Provider_ID") ;
}else if (groupBy==="SP"){
columnIndex=cs.getColumnIndex("#Specialty");
}else if( groupBy ==="NW"){
columnIndex=cs.getColumnIndex("#Network_Name");
}else if (groupBy ==="PG" ){
columnIndex=cs.getColumnIndex("#Peer_Group_Name");
}else if (groupBy ==="ETG" ){
columnIndex = 1;
}else if (groupBy ==="MPC" ){
columnIndex = 1;
}
return columnIndex ;
}
}) ;