gerd
11/8/2016 - 1:05 PM

drillDownFilter.js


/**
 * 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 ;
	
	}

}) ;