<!---
AJAX handler to get revenue codes filtered by visit date
This ensures only the correct HCPCS codes are shown based on contract rate dates
--->
<cfsetting showdebugoutput="false">
<cfparam name="url.visit_date" default="">
<cfparam name="url.payer_id" default="0">
<cfparam name="url.agency_id" default="#Session.AgencyID#">
<cfparam name="url.emp_id" default="0">
<cfparam name="url.skill" default="">
<cfparam name="url.is_agency_login" default="0">
<!--- HCPCS code from the currently selected authorization. When provided, results are restricted to this HCPCS so the visit list matches the authorization (#10323). --->
<cfparam name="url.auth_hcpcs" default="">
<cfparam name="url.saved_hcpcs_id" default="0">

<cftry>
	<cfif url.visit_date NEQ "" AND url.payer_id NEQ 0>
		<!--- Parse the visit date to ensure proper format --->
		<cfset visitDateParsed = CreateODBCDate(url.visit_date)>
		<cfset hcpcs_skill = Trim(url.skill)>
		<cfset hcpcs_skill2 = Trim(url.skill)>
		<cfset hcpcs_skill3 = Trim(url.skill)>
		<!--- Prefer the currently assigned employee skill when available --->
		<cfif val(url.emp_id) GT 0>
			<cfquery name="get_employee_skill_for_hcpcs" datasource="#Application.DataSrc#">
				SELECT Skill_1,Skill_2,Skill_3
				FROM #Request.prefix_db_lookup#.pEmployee
				WHERE Emp_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.emp_id#">
				AND Loc_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.agency_id#">
				LIMIT 1
			</cfquery>
			<cfif get_employee_skill_for_hcpcs.recordcount GT 0 <!--- AND Len(Trim(get_employee_skill_for_hcpcs.Skill_1)) GT 0--->>
				<cfset hcpcs_skill = Trim(get_employee_skill_for_hcpcs.Skill_1)>
				<cfset hcpcs_skill2 = Trim(get_employee_skill_for_hcpcs.Skill_2)>
				<cfset hcpcs_skill3 = Trim(get_employee_skill_for_hcpcs.Skill_3)>
			</cfif>
		</cfif>
		
		<!--- Always keep the visit's already-saved HCPCS in the list (#10480) --->
		<cfset savedHcpcsId = Val(url.saved_hcpcs_id)>
		<cfset skillUpper = UCase(Trim(hcpcs_skill))>

		<cfquery name="getrevenue" datasource="#Application.DataSrc#">
		    SELECT *
		    FROM   #Request.prefix_db_agency#.pRevenue_Code
		    WHERE  Agency_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.agency_id#">  
		    AND Status = <cfqueryparam cfsqltype="cf_sql_integer" value="0">
		    AND Payer_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.payer_id#">
		    AND (
		    	<cfif savedHcpcsId GT 0>
		    		Rev_CodeID = <cfqueryparam cfsqltype="cf_sql_integer" value="#savedHcpcsId#">
		    		OR
		    	</cfif>
		    	(
				    <cfif hcpcs_skill NEQ "">
				    	<cfif val(url.is_agency_login) EQ 1>
				    		( Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hcpcs_skill#">
							  OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hcpcs_skill2#">
							  OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hcpcs_skill3#">)
				    	<cfelse>
				    		<cfif skillUpper EQ "PTA">
				    			(Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="PT">
								OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hcpcs_skill#">
				    			OR Description = <cfqueryparam cfsqltype="cf_sql_varchar" value="PT Assistant Visit">)
				    		<cfelseif skillUpper EQ "PT">
				    			(Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="PT">
								OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hcpcs_skill#">
				    			OR Description <> <cfqueryparam cfsqltype="cf_sql_varchar" value="PT Assistant Visit">)
							<cfelseif skillUpper EQ "SN" OR skillUpper EQ "RN" OR Left(skillUpper, 3) EQ "LPN" OR Left(skillUpper, 3) EQ "LVN">
								(
									Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="SN">
									OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LPN">
									OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LVN">
									OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LVN/LPN">
									OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="Skilled Nursing">
									OR HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0299">
									OR HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0300">
									OR Description LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%LPN%">
									OR Description LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%LVN%">
								)
				    		<cfelse>
				    			Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hcpcs_skill#">
				    		</cfif>
				    	</cfif>
				    	AND
				    </cfif>
				    (
				        Contract_Rate_Effective_Date IS NULL 
				        OR Contract_Rate_Effective_Date <= <cfqueryparam cfsqltype="cf_sql_date" value="#visitDateParsed#">
				    )
				    AND (
				        Contract_Rate_End_Date IS NULL 
				        OR Contract_Rate_End_Date >= <cfqueryparam cfsqltype="cf_sql_date" value="#visitDateParsed#">
				    )
				    <!--- Auth HCPCS restriction applies only to new choices; saved visit HCPCS is kept above --->
				    <cfif Len(Trim(url.auth_hcpcs)) GT 0>
				        AND HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="#Trim(url.auth_hcpcs)#">
				    </cfif>
		    	)
		    )
		    ORDER BY Visit_Type, Rev_Code
		</cfquery> 
		<!--- Return JSON response --->
		<cfset result = ArrayNew(1)>
		<cfloop query="getrevenue">
			<cfset item = StructNew()>
			<cfset item.Rev_CodeID = getrevenue.Rev_CodeID>
			<cfset item.Visit_Type = Trim(getrevenue.Visit_Type)>
			<cfset item.Rev_Code = Trim(getrevenue.Rev_Code)>
			<cfset item.HCPCS = Trim(getrevenue.HCPCS)>
			<cfset item.Description = Trim(getrevenue.Description)>
			<cfset item.Modifier = Trim(getrevenue.Modifier)>
			<cfset item.Contract_Rate = getrevenue.Contract_Rate>
			<cfif IsDate(getrevenue.Contract_Rate_Effective_Date)>
				<cfset item.Contract_Rate_Effective_Date = DateFormat(getrevenue.Contract_Rate_Effective_Date, 'mm/dd/yyyy')>
			<cfelse>
				<cfset item.Contract_Rate_Effective_Date = "">
			</cfif>
			<cfif IsDate(getrevenue.Contract_Rate_End_Date)>
				<cfset item.Contract_Rate_End_Date = DateFormat(getrevenue.Contract_Rate_End_Date, 'mm/dd/yyyy')>
			<cfelse>
				<cfset item.Contract_Rate_End_Date = "">
			</cfif>
			<cfset ArrayAppend(result, item)>
		</cfloop>
		
		<cfcontent type="application/json" reset="true">
		<cfoutput>#SerializeJSON(result)#</cfoutput>
	<cfelse>
		<cfcontent type="application/json" reset="true">
		<cfoutput>[]</cfoutput>
	</cfif>
	
	<cfcatch type="any">
		<cfcontent type="application/json" reset="true">
		<cfoutput>{"error": "#JSStringFormat(cfcatch.message)#"}</cfoutput>
	</cfcatch>
</cftry>
