<cfcomponent displayname="Assessments Functions" hint="I Return Assessments Information" output="false">

	<cfif structKeyExists(application, "clientEnabled") AND application.clientEnabled>
	    <cfset client.Loc_ID = "0">
	</cfif>
	<cffunction name="update_orphansQA"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Assmt_ID" required="yes" hint="Assmt_ID" >
	    <cfargument name="QA_View" required="yes" hint="QA_View" >
	   
	    <cfquery name="update_pAssessments" datasource="#Application.DataSrc#"  result="result">
		       UPDATE #Request.prefix_db_agency#.pAssessments SET 
		       F320   = <cfqueryparam VALUE="#arguments.QA_View#"  cfsqltype="cf_sql_integer">, 
		       Orphan_Field   = <cfqueryparam VALUE="#arguments.QA_View#"  cfsqltype="cf_sql_integer">,      
		       Record_Mod_Date = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
		       Record_Mod_By = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
		       WHERE Assmt_ID = <cfqueryparam VALUE="#arguments.Assmt_ID#"  cfsqltype="cf_sql_integer">
		       ANd Status = 0
		</cfquery>
		<cfreturn  'Success'>
	</cffunction>

	<cffunction name="update_orphansField"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Assmt_ID" required="yes" hint="Assmt_ID" >
	    <cfargument name="Patient_ID" required="no" hint="Patient_ID" default="0">
	    <cfargument name="Orphan_Field" required="yes" hint="Orphan_Field" >
	   
	    <cfquery name="update_pAssessments" datasource="#Application.DataSrc#"  result="result">
		       UPDATE #Request.prefix_db_agency#.pAssessments SET 
		       Orphan_Field   = <cfqueryparam VALUE="#arguments.Orphan_Field#"  cfsqltype="cf_sql_integer">,      
		       Record_Mod_Date = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
		       Record_Mod_By = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
		       WHERE Assmt_ID = <cfqueryparam VALUE="#arguments.Assmt_ID#"  cfsqltype="cf_sql_integer">
		       <cfif arguments.Patient_ID NEQ 0>
		       AND Patient_ID = <cfqueryparam VALUE="#arguments.Patient_ID#"  cfsqltype="cf_sql_integer">
		       </cfif>
		       ANd Status = 0
		</cfquery>
		<cfreturn  'Success'>
	</cffunction>
	


	<cffunction name="update_hirisk"   access="remote" output="Yes" returnFormat= "plain" >
		    <cfargument name="Schedule_ID" required="yes" hint="Schedule_ID" >
		    <cfargument name="hi_risk" required="yes" hint="hi_risk" >
		    	   
		    <cfquery name="update_pAssessments" datasource="#Application.DataSrc#"  result="result">
			       UPDATE #Request.prefix_db_agency#.pSchedules SET 
			       hi_risk   = <cfqueryparam VALUE="#arguments.hi_risk#"  cfsqltype="cf_sql_integer">, 
			       <cfif  arguments.hi_risk EQ 2 >  
			       		QA_View   = <cfqueryparam VALUE="0"  cfsqltype="cf_sql_integer">, 
			       </cfif>  
			       Date_Change = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
			       Change_by = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
			       WHERE Schedule_ID = <cfqueryparam VALUE="#arguments.Schedule_ID#"  cfsqltype="cf_sql_integer">
			       ANd Status = 0
			</cfquery>
			<cfreturn  'Success'>
	</cffunction>



	<cffunction name="update_GPS"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Schedule_ID" required="yes" hint="Schedule_ID" >
	    <cfargument name="record_type" required="yes" hint="record_type" >
	    <cfargument name="visit_latitude" required="yes" hint="visit_latitude" >
	    <cfargument name="visit_longitude" required="yes" hint="visit_longitude" >

	    	<cfset rtn_message = "Success">

	    	<cfquery name="getschedules" datasource="#Application.DataSrc#">
				SELECT pSchedules.*,pAssessments.Admit_ID  FROM #Request.prefix_db_agency#.pSchedules 
				LEFT OUTER JOIN  #Request.prefix_db_agency#.pAssessments ON  pAssessments.Assmt_ID = pSchedules.Assmt_ID 
				AND pAssessments.Status = 0
				WHERE pSchedules.Schedule_ID = '#Schedule_ID#' AND pSchedules.Status =0 
			</cfquery>
			<cfset request.ass = CreateObject("component","components.general.assessments").init() />
			<cfset getParentEval = request.ass.getParentOASIS('#getschedules.Admit_ID#') />

			<!--- <cfif left(getschedules.Visit_Type,1) EQ '1' OR getParentEval.enable_eval EQ getschedules.Visit_Type> 
				<cfquery name="updatepatient_GPS" datasource="#Application.DataSrc#">
					 UPDATE IGNORE #Request.prefix_db_agency#.pPatients
					 SET Pt_Latitude = '#arguments.visit_latitude#',
					 Pt_Longitude = '#arguments.visit_longitude#'
					WHERE Patient_ID = #getschedules.Patient_ID#
					AND status In (0,1,4)
				</cfquery>
			</cfif> --->

	    	<cfquery name="getpatient" datasource="#Application.DataSrc#">
				SELECT * FROM #Request.prefix_db_agency#.pPatients
				WHERE Patient_ID = '#getschedules.Patient_ID#'
				AND status IN (0,1,4)
			</cfquery>

	    	<!--- <cfscript>
				function calculateDistance(lat1, lon1, lat2, lon2) {
				    // Convert degrees to radians
				    lat1 = deg2rad(lat1);
				    lon1 = deg2rad(lon1);
				    lat2 = deg2rad(lat2);
				    lon2 = deg2rad(lon2);

				    // Differences in coordinates
				    dLat = lat2 - lat1;
				    dLon = lon2 - lon1;

				    // Haversine formula
				    a = sin(dLat / 2) * sin(dLat / 2) + cos(lat1) * cos(lat2) * sin(dLon / 2) * sin(dLon / 2);
				    c = 2 * createObject("java", "java.lang.Math").atan2(createObject("java", "java.lang.Math").sqrt(a), createObject("java", "java.lang.Math").sqrt(1 - a)); 

				    // Earth radius in kilometers (mean radius)
				    R = 6371;

				    // Calculate the distance
				    distance = R * c;

				    return distance;
				}

				function deg2rad(deg) {
				    return deg * (pi() / 180);
				}

				// Test with two GPS coordinates (lat1, lon1) and (lat2, lon2)
				lat2 = #arguments.visit_latitude#;
				lon2 = #arguments.visit_longitude#;
				lat1 = #getpatient.Pt_Latitude#;
				lon1 = #getpatient.Pt_Longitude#;
				distance = calculateDistance(lat1, lon1, lat2, lon2);
			</cfscript> --->

			<cfset diff_latitude = abs(getpatient.Pt_Latitude - arguments.visit_latitude)> 
            <cfset diff_longitude = abs(getpatient.Pt_Longitude - arguments.visit_longitude)> 
            <cfset threshold = 2>
			<cfif diff_latitude GT threshold  AND  diff_longitude GT threshold >
				<cfset rtn_message = "Your current GPS location is not the same as the patient address. We are unable to initiate EVV." >
				<!--- <cfif session.Display EQ 'Melissa Cott'> --->
					<cfset rtn_message = rtn_message & "<br>visit_latitude: " & #visit_latitude# & "<br> visit_longitude: "
					& #visit_longitude# & "<br>Pt_Latitude: " & #getpatient.Pt_Latitude# & "<br> Pt_Longitude: "
					& #getpatient.Pt_Longitude#  >
				<!--- </cfif> --->
			</cfif>
			<cfset rtn_message = "Success">
	   		<cfif rtn_message EQ 'Success'>
	   			<cfset myTime = #now()#>
	   			<cfquery  name='getTimeZone' datasource='#Application.DataSrc#'>
	                SELECT *, '' as CODING_WIZARD   FROM #Request.prefix_db_lookup#.Agency WHERE Agency_Id = '#session.AgencyId#'
	            </cfquery>
                <cfif getTimeZone.TimeZone EQ 'CST'>
                    <cfset myTime = #TimeFormat(DateAdd('h', -1, myTime), 'HH:mm:ss')#>
                <cfelseif getTimeZone.TimeZone EQ 'MST'>
                    <cfset myTime = #TimeFormat(DateAdd('h', -2, myTime), 'HH:mm:ss')#>
                <cfelseif  getTimeZone.TimeZone EQ 'PST'>
                    <cfset myTime = #TimeFormat(DateAdd('h', -3, myTime), 'HH:mm:ss')#>
                <cfelseif  getTimeZone.TimeZone EQ 'AKST'>
                    <cfset myTime = #TimeFormat(DateAdd('h', -4, myTime), 'HH:mm:ss')#>
                <cfelseif  getTimeZone.TimeZone EQ 'HST'>
                    <cfset myTime = #TimeFormat(DateAdd('h', -7, myTime), 'HH:mm:ss')#>
                <cfelse>
                    <cfset myTime = #TimeFormat(myTime, 'HH:mm:ss')#>
                </cfif>
               <cfset myDateTime = DateFormat(Now(), 'yyyy-mm-dd') & " " & myTime />
               <cfset Request.my_Time = DateFormat(Now(), 'yyyy-mm-dd') & " " & myTime />
			    <cfquery name="update_pSchedules" datasource="#Application.DataSrc#"  result="result">
				      	UPDATE #Request.prefix_db_agency#.pSchedules SET 
					       <cfif record_type EQ 'start_visit'>
					     	  EVV_start      = <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#Request.my_Time#">,
					     	  GPS_start_date  = <cfqueryparam VALUE="#DateFormat(Now(), 'yyyy-mm-dd')#"  cfsqltype="cf_sql_date">,
					     	  StartTime      = <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#Request.my_Time#">,
					     	  GPS_start_time      = <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#Request.my_Time#">,
					     	  GPS_start_latitude  = <cfqueryparam cfsqltype="CF_SQL_FLOAT" value="#arguments.visit_latitude#">, 
					     	  GPS_start_longitude = <cfqueryparam cfsqltype="CF_SQL_FLOAT" value="#arguments.visit_longitude#">,
					     	<cfelse>
					     	   EVV_end 	 = <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#Request.my_Time#">,
					     	   GPS_end_date  = <cfqueryparam VALUE="#DateFormat(Now(), 'yyyy-mm-dd')#"  cfsqltype="cf_sql_date">,
					     	   EndTime      = <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#Request.my_Time#">,
					     	   GPS_end_time 	 = <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#Request.my_Time#">,
					     	   GPS_end_latitude  = <cfqueryparam cfsqltype="CF_SQL_FLOAT" value="#arguments.visit_latitude#">, 
					     	   GPS_end_longitude = <cfqueryparam cfsqltype="CF_SQL_FLOAT" value="#arguments.visit_longitude#">,
					     	</cfif>     
					       Date_Change = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
					       Change_by = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
					       WHERE Schedule_ID = <cfqueryparam VALUE="#arguments.Schedule_ID#"  cfsqltype="cf_sql_integer">
				           ANd Status = 0
				</cfquery>
				<cfset sandata_response = 'Success' >
				<!--- <cfif record_type NEQ 'start_visit' AND session.AgencyID EQ '1183'>
					<cfquery name="getlatest_Sch" datasource="#Application.DataSrc#">
						SELECT *  FROM #Request.prefix_db_agency#.pSchedules 
						WHERE Schedule_ID = '#Schedule_ID#' AND Status =0 
					</cfquery>
					<cfset today_date = #DateFormat(now(),"yyyy-mm-dd")# />
					<cfset encrypted_empkey   = encrypt(#getlatest_Sch.Emp_ID#,#application.enckey#,"AES","Hex") />
					<cfset request.API = CreateObject("component","components.API.API") />
					<cfset sandata_response  = call_SAN('#getlatest_Sch.Emp_ID#','#encrypted_empkey#',
					'#session.AgencyID#','#getlatest_Sch.Schedule_ID#','#today_date#',
					'#getlatest_Sch.GPS_end_time#','#getlatest_Sch.GPS_end_latitude#','#getlatest_Sch.GPS_end_longitude#') />
					<cfdump var="#sandata_response#">
					<cfif sandata_response NEQ 'Success'>
                         <cfset rtn_message =  "We did not able to send data into SAN.So please contact your admin." >
                    </cfif>
				</cfif> ---> 
				<cfif sandata_response EQ 'Success'>
				    <cfif record_type EQ 'start_visit'>
				  		<cfset rtn_message = "Started Visit Time at " & Request.my_Time />
				    <cfelse>
				  		<cfset rtn_message = "Ended Visit Time at " & Request.my_Time />
				    </cfif>
				 </cfif>
			</cfif>
			<cfreturn  rtn_message>
	</cffunction>


	<cffunction name="update_LUPAQA"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Assmt_ID" required="yes" hint="Assmt_ID" >
	    <cfargument name="QA_View" required="yes" hint="QA_View" >
	   
	    <cfquery name="update_pAssessments" datasource="#Application.DataSrc#"  result="result">
		       UPDATE #Request.prefix_db_agency#.pAssessments SET 
		       F321   = <cfqueryparam VALUE="#arguments.QA_View#"  cfsqltype="cf_sql_integer">,      
		       Record_Mod_Date = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
		       Record_Mod_By = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
		       WHERE Assmt_ID = <cfqueryparam VALUE="#arguments.Assmt_ID#"  cfsqltype="cf_sql_integer">
		       ANd Status = 0
		</cfquery>
		<cfreturn  'Success'>
	</cffunction>


	<cffunction name="update_careplan_goals"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Careplan_ID" required="yes" hint="Careplan_ID" >
	    <cfargument name="answer_value" required="yes" hint="answer_value" >
	   
	    <cfquery name="update_pCareplan" datasource="#Application.DataSrc#"  result="result">
		       UPDATE #Request.prefix_db_agency#.pCareplan SET 
		       	<cfif arguments.answer_value EQ '0' OR arguments.answer_value EQ '1'>
		     		QA_Approve         = <cfqueryparam VALUE="#arguments.answer_value#"  cfsqltype="cf_sql_integer">,   
		        <cfelseif arguments.answer_value EQ 'Resolved'>
		        	QA_Approve         = <cfqueryparam VALUE="2"  cfsqltype="cf_sql_integer">,   
		        	Date_Resolve   = <cfqueryparam VALUE="#DateFormat(now(),'yyyy-mm-dd')#"  cfsqltype="cf_sql_date">,  
		        </cfif>
		       Date_Change = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
		       Change_by = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
		       WHERE Careplan_ID = <cfqueryparam VALUE="#arguments.Careplan_ID#"  cfsqltype="cf_sql_integer">
		       ANd Status < 2
		</cfquery>
		<cfreturn  'Success'>
	</cffunction>





	<cffunction name="update_orphansmedsQA"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Assmt_ID" required="no" hint="Assmt_ID" default="0">
	    <cfargument name="Patient_ID" required="yes" hint="Patient_ID" >
	    <cfargument name="Med_Approve" required="yes" hint="Med_Approve" >
	   
	    <cfquery name="update_pPatients" datasource="#Application.DataSrc#"  result="result">
		       UPDATE #Request.prefix_db_agency#.pPatients SET 
		       Med_Approve   = <cfqueryparam VALUE="#arguments.Med_Approve#"  cfsqltype="cf_sql_integer">,      
		       Record_Mod_Date = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
		       Record_Mod_By = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
		       WHERE Patient_ID = <cfqueryparam VALUE="#arguments.Patient_ID#"  cfsqltype="cf_sql_integer">
		       ANd Status IN (0,1)
		</cfquery>
		<cfreturn  'Success'>
	</cffunction>


	<cffunction name="update_orphansmedsField"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Assmt_ID" required="no" hint="Assmt_ID" default="0">
	    <cfargument name="Patient_ID" required="yes" hint="Patient_ID" >
	    <cfargument name="Med_Recon_Field" required="yes" hint="Med_Approve" >
	   
	    <cfquery name="update_pPatients" datasource="#Application.DataSrc#"  result="result">
		       UPDATE #Request.prefix_db_agency#.pPatients SET 
		       Med_Recon_Field   = <cfqueryparam VALUE="#arguments.Med_Recon_Field#"  cfsqltype="cf_sql_integer">,      
		       Record_Mod_Date = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
		       Record_Mod_By = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
		       WHERE Patient_ID = <cfqueryparam VALUE="#arguments.Patient_ID#"  cfsqltype="cf_sql_integer">
		       ANd Status IN (0,1)
		</cfquery>
		<cfreturn  'Success'>
	</cffunction>

	<cffunction name="updateomitvitals"  access="remote" output="Yes" returnformat="plain" returntype="string">   
   		<cfargument name="Skill" required="yes" default="0">
		<cfargument name="Assmt_ID" required="yes" default="0">
		<cfargument name="F310"	 required="yes" default="0">
		
		<cfquery  name="updatepAssessments" datasource="#Application.DataSrc#">
		    UPDATE #Request.prefix_db_agency#.pAssessments SET 
		    	<cfif arguments.Skill EQ 'HHA' OR arguments.Skill EQ 'ST' OR arguments.Skill EQ 'MSW' OR arguments.Skill EQ 'SC' OR arguments.Skill EQ 'BV'>
		    		F310 = <cfqueryparam value="#arguments.F310#"  cfsqltype="CF_SQL_VARCHAR">,
		    	</cfif>
		    	Record_Mod_Date = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
				Record_Mod_By =  <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
			WHERE Assmt_ID =  <cfqueryparam CFSQLType="CF_SQL_INTEGER" value="#arguments.Assmt_ID#">
			AND Status = 0
		</cfquery>
		<cfreturn 'success' />	     
	</cffunction>

	<cffunction name="call_SAN" access="remote" returnFormat= "plain">
        <cfargument name="Emp_ID" required="yes" hint="Emp_ID">
        <cfargument name="Emp_key" required="yes" hint="Emp_key">
        <cfargument name="Agency_ID" required="yes" hint="Agency_ID">
        <cfargument name="Schedule_ID" required="yes" default="0" hint="Schedule_ID">
        <cfargument name="today_date" required="yes" default="0" hint="today_date">
        <cfargument name="GPS_end_time" required="yes" default="0" hint="GPS_end_time">
        <cfargument name="GPS_end_latitude" required="yes" default="0" hint="GPS_end_latitude">
        <cfargument name="GPS_end_longitude" required="yes" default="0" hint="GPS_end_longitude">


        <cfset LOCAL.username = "2n9xzzfv">
        <cfset LOCAL.password = "@$48jnh6{0}G">
        <cfset LOCAL.authString = toBase64(LOCAL.username & ":" & LOCAL.password)>
        <cfset LOCAL.account  = '215035'>
        <cfset LOCAL.AuthorizationEndpoint = "https://uat-api.sandata.com/interfaces/intake/visits/rest/api/v1.1">
        <cfset LOCAL.ProviderID = '2279160425' >
        <cfquery name="getagency" datasource="#Application.DataSrc#">
            SELECT * FROM  #Request.prefix_db_lookup#.Agency
            WHERE Agency_ID = '#arguments.Agency_ID#'  
        </cfquery>
        <cfif len(getagency.EVV_username) gt 0>
        	<cfset LOCAL.username = getagency.EVV_username>
        </cfif>
        <cfif len(getagency.EVV_password) gt 0>
        	<cfset LOCAL.password = getagency.EVV_password>
        	<cfset LOCAL.authString = toBase64(LOCAL.username & ":" & LOCAL.password)>
        </cfif>
        <cfif len(getagency.EVV_account) gt 0>
        	<cfset  LOCAL.account = getagency.EVV_account>
        </cfif>
        <cfif len(getagency.EVV_link) gt 0>
        	<cfset  LOCAL.AuthorizationEndpoint = getagency.EVV_link>
        </cfif>
        <cfif len(getagency.EVV_ProviderID) gt 0>
        	<cfset  LOCAL.ProviderID = getagency.EVV_ProviderID>
        </cfif>

        <cftry>
        <cfquery name="getemployee" datasource="#Application.DataSrc#">
            SELECT * FROM  #Request.prefix_db_lookup#.pEmployee
            WHERE Emp_ID = '#arguments.Emp_ID#'  
        </cfquery>
        <cfset employee_custom_id = "#getemployee.Emp_Custom_1#" >

        <cfquery  name="GtSched"  datasource="#Application.DataSrc#">
            SELECT pPatients.Patient_ID, pPatients.Pt_Last AS PatientLast,pPatients.Pt_Middle, pPatients.Pt_First AS PatientFirst,
            pPatients.Pt_Agy_ID,pPatients.Status AS clientStatus,pPatients.Pt_SSN,pPatients.Pt_Street,
            pPatients.Pt_City,pPatients.Pt_State,pPatients.Pt_Zip,pPatients.Pt_Longitude,pPatients.Pt_Latitude,pPatients.Pt_Phone,
            pSchedules.Schedule_ID, pSchedules.Visit_Date, pSchedules.Skill AS Type, pSchedules.Visit_Type,
            pSchedules.Total_Units, pSchedules.Mi_Pay,pSchedules.GPS_start_time,pSchedules.GPS_end_time,
            CASE WHEN length(pSchedules.patient_sign) > 0 THEN true
            ELSE false
            END AS patient_sign_indicator,
            CONCAT(RIGHT(pEmployee.Emp_SSN, 5), LEFT(Emp_Last,4)) AS EmployeeIdentifier,
            CONCAT(DATE_FORMAT(CONVERT_TZ(pSchedules.Date_Create, @@session.time_zone, '+00:00'),'%Y-%m-%dT%H:%i:%s'), 'Z') AS CallDateTime,
            pSchedules.Progress_Note, pSchedules.pgnotesdraft,pSchedules.GPS_start_latitude,
            pSchedules.GPS_start_longitude,
             pSchedules.Pay_ID, 0 AS No_Days_Progress,  "" AS  Note_QA , pSchedules.Notes AS Memo,
            IFNULL(pSchedules.Sch_Latitude,40.34455) AS Sch_Latitude,
            IFNULL(pSchedules.Sch_Longitude,-21.99383) AS Sch_Longitude,
            pSchedules.GPS_start_date,pSchedules.GPS_end_date,
            pSchedules.StartTime,pSchedules.EndTime,pSchedules.Date_Create AS CallDateTime_old,
            IFNULL(pPtPayer.Sub_HIC,pSchedules.Schedule_ID) AS Sub_HICs, 
            pEmployee.*, pAssessments.Assmt_ID,pAuths.*,pPayer.*,pPtPayer.*,Agency.*,pRevenue_Code.HCPCS,pPhysicians.Phys_NPI,pRevenue_Code.HCPCS
            FROM #Request.prefix_db_agency#.pSchedules
            LEFT OUTER JOIN #Request.prefix_db_agency#.pAssessments ON pAssessments.Assmt_ID = pSchedules.Assmt_ID AND pAssessments.status = 0
            LEFT OUTER JOIN #Request.prefix_db_agency#.pAdmit ON pAdmit.Admit_ID = pAssessments.Admit_ID
            JOIN #Request.prefix_db_agency#.pPatients ON pPatients.Patient_ID = pSchedules.Patient_ID AND   pPatients.Status  IN (0,1,4)
            JOIN #Request.prefix_db_lookup#.pEmployee ON pSchedules.Emp_ID = pEmployee.Emp_ID AND pEmployee.Status < 2
            LEFT OUTER JOIN #Request.prefix_db_agency#.pAuths ON pAuths.Patient_ID = pSchedules.Patient_ID AND  pAuths.Status  =0
            LEFT OUTER JOIN #Request.prefix_db_agency#.pPtPayer ON pPtPayer.Patient_ID = pPatients.Patient_ID 
            AND pPtPayer.PtPayer_ID = pAuths.PtPayer_ID  AND pPtPayer.Status = 0
            LEFT OUTER JOIN #Request.prefix_db_agency#.pPayer ON pPayer.Pay_ID = pPtPayer.Payer_ID AND pPayer.Status = 0
            LEFT OUTER JOIN #Request.prefix_db_lookup#.Agency ON Agency.Agency_ID = pPatients.Loc_ID AND Agency.Status = 'active'
            LEFT OUTER JOIN #Request.prefix_db_agency#.pRevenue_Code ON pRevenue_Code.Rev_CodeID = pSchedules.Rev_ID AND pRevenue_Code.Status = 0
            LEFT OUTER JOIN #Request.prefix_db_lookup#.pPhysicians ON pPhysicians.Emp_ID = pEmployee.Emp_ID AND pPhysicians.Status = 0
            WHERE pSchedules.status= 0
            AND pSchedules.Emp_ID != 0
            AND pSchedules.Missed = '0'
            AND pSchedules.Visit_Date >= '2024-07-31'
            AND pSchedules.EVV_Export = 0
            AND pSchedules.Schedule_ID IN  (<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.Schedule_ID#" list="yes">)   
            GROUP BY pSchedules.Schedule_ID
            ORDER BY pPatients.Pt_Last ASC, pPatients.Pt_First ASC, pEmployee.Emp_Last ASC, pEmployee.Emp_First ASC,
                 pSchedules.Skill ASC, pSchedules.Visit_Date ASC 
        </cfquery>
        <cfset currentDate = Now()>
        <cfset formattedDateTime = DateFormat(currentDate, "yyyy-mm-dd") & "T" & TimeFormat(currentDate, "HH:mm:ss") & "Z">
        <cfset Start_Time = DateFormat(GtSched.Visit_Date, "yyyy-mm-dd") & "T" & GtSched.StartTime  & "Z">
        <cfset End_Time = DateFormat(GtSched.Visit_Date, "yyyy-mm-dd") & "T" & GtSched.EndTime  & "Z">
        <cfset Previous_Day = DateAdd("d", -1, Now())>
        <cfset Adjust_Start_Time = "">
        <cfset Adjust_End_Time = "">
        <cfif GtSched.GPS_start_time NEQ ''>
          <cfset Adjust_Start_Time = DateFormat(GtSched.GPS_start_date, "yyyy-mm-dd") & "T" & GtSched.GPS_start_time  & "Z">
        </cfif>
        <cfif arguments.GPS_end_time NEQ ''>
            <cfset Adjust_End_Time = DateFormat(arguments.today_date, "yyyy-mm-dd") & "T" & arguments.GPS_end_time  & "Z">
        </cfif>
        <cfif getemployee.Username EQ 'MTe7753m'>
            <cfset Adjust_Start_Time = DateFormat(Previous_Day, "yyyy-mm-dd") & "T" & GtSched.GPS_start_time  & "Z">
            <cfset Adjust_End_Time = DateFormat(Previous_Day, "yyyy-mm-dd") & "T" & GtSched.GPS_start_time  & "Z">     
        </cfif>
        <cfset Total_Hours = 0 >
        <cfif GtSched.Total_Units gt 0 >
            <cfset Total_Hours = (#GtSched.Total_Units#)*(25/100)>
        </cfif>
        <cfset VisitTimeZone = "US/Eastern">
        <!--- <cfset VisitTimeZone = "US/Mountain"> --->
        <cfif application.TimeZone  EQ 'CST'>
            <cfset VisitTimeZone = "US/Central">
        <cfelseif application.TimeZone  EQ 'MST'>
            <cfset VisitTimeZone = "US/Mountain">
        <cfelseif application.TimeZone  EQ 'PST'>
            <cfset VisitTimeZone = "US/Pacific">
        <cfelseif application.TimeZone  EQ 'AKST'>
            <cfset VisitTimeZone = "US/Alaska">
        <cfelseif application.TimeZone  EQ 'HST'>
            <cfset VisitTimeZone = "US/Hawaii">
        </cfif>


        <!--- 
        <cfset VisitTimeZone = "US/Mountain">
        <cfif CGI.REMOTE_ADDR EQ '103.143.7.161'>
              <cfset VisitTimeZone = "America/Chicago">   
        </cfif>--->

        <cfset PayerID = 'COHCPF'>
        <cfset PayerProgram = 'HCPF'>
        <cfset ProcedureCode = 'BHSVC'>

        <cfset Request.stFields =[{
                "ProviderIdentification": {
                    "ProviderID": "#LOCAL.ProviderID#",
                    "ProviderQualifier": "MedicaidID"
                },
                "VisitOtherID": "1233",
                "SequenceID": "#GtSched.Emp_ID#",
                "EmployeeQualifier": "EmployeeCustomID",
                "EmployeeCustomID": "#GtSched.Loc_ID#",
                "EmployeeOtherID": "#GtSched.EmployeeIdentifier#",
                "EmployeeIdentifier": "#GtSched.EmployeeIdentifier#",
                "EmployeeLastName": "#GtSched.Emp_Last#",
                "EmployeeFirstName": "#GtSched.Emp_First#",
                "GroupCode": "",
                "ClientIDQualifier": "ClientMedicaidID",
                "ClientID": "#GtSched.Sub_HICs#",
                "ClientOtherID": "#GtSched.Sub_HICs#",
                "VisitCancelledIndicator": false,
                "PayerID": "#PayerID#",
                "PayerProgram": "#PayerProgram#",
                "ProcedureCode": "#ProcedureCode#",
                "Modifier1": "", 
                "Modifier2": "",
                "Modifier3": "", 
                "Modifier4": "",
                "VisitTimeZone": "#VisitTimeZone#",
                "ScheduleStartTime": "#Start_Time#",
                "ScheduleEndTime": "#End_Time#",
                "AdjInDateTime": "#Adjust_Start_Time#", 
                "AdjOutDateTime": "#Adjust_End_Time#",
                 "BillVisit": true,
                "HoursToBill": "#Total_Hours#",
                "HoursToPay": "#GtSched.Mi_Pay#",
                "Memo": "#Trim(GtSched.Memo)#",
                "ClientVerifiedTimes": true,
                "ClientVerifiedTasks": true,
                "ClientVerifiedService": true,
                "ClientSignatureAvailable": true,
                "ClientVoiceRecording": true, 
                "Calls": [{
                "CallExternalID": "#GtSched.Schedule_ID#", 
                "CallDateTime": "#Adjust_Start_Time#",
                "CallAssignment": "Time In", 
                "GroupCode": "", 
                "CallType": "Other",
                "ProcedureCode": "#ProcedureCode#", 
                "ClientIdentifierOnCall": "#LEFT(GtSched.Sub_HICs,9)#",
                "MobileLogin": "",
                "CallLatitude": "#GtSched.GPS_start_latitude#",
                "CallLongitude": "#GtSched.GPS_start_longitude#",
                "Location": "123",
                "TelephonyPIN": 999999999,
                "OriginatingPhoneNumber": "9997779999"
                },
                {
                "CallExternalID": "#GtSched.Schedule_ID#", 
                "CallDateTime": "#Adjust_End_Time#",
                "CallAssignment": "Time Out", 
                "GroupCode": "null", 
                "CallType": "Other",
                "ProcedureCode": "#ProcedureCode#", 
                "ClientIdentifierOnCall": "#LEFT(GtSched.Sub_HICs,9)#",
                "MobileLogin": "",
                "CallLatitude": '#arguments.GPS_end_latitude#',
                "CallLongitude": '#arguments.GPS_end_longitude#',
                "Location": "123",
                "TelephonyPIN": 999999999,
                "OriginatingPhoneNumber": "9997779999"
                }],
                "VisitChanges": [{
                    "SequenceID": "110",
                    "ChangeMadeBy": "#GtSched.Emp_Email#",
                    "ChangeDateTime": "#formattedDateTime#",
                    "GroupCode": "",
                    "ReasonCode": "11",
                    "ChangeReasonMemo": "EVV Visit Start",
                    "ResolutionCode": "A"
                }]
                
            }]
        >
        <!--- <cfdump var="#Request.stFields#">
        <cfdump var="#serializeJSON(Request.stFields)#">--->
        <cfset LOCAL.RestStartTime  = GetTickCount()>
        <cfhttp 
            url         = #LOCAL.AuthorizationEndpoint#
            method      = "POST" 
            timeout     =  "100"
            result      = "httpEVVResponse">
            <cfhttpparam name="Content-Type"  type="HEADER" value="application/json">
            <cfhttpparam name="Authorization" type="HEADER" value="Basic #LOCAL.authString#">
            <cfhttpparam name="account" type="HEADER" value="#LOCAL.account#">
            <cfhttpparam type="body" value="#serializeJSON(Request.stFields)#">
        </cfhttp>
        <cfset LOCAL.RestEndTime = GetTickCount()>
        <cfset LOCAL.returnFaxSendResult.FaxProcessTime = NumberFormat((LOCAL.RestEndTime - LOCAL.RestStartTime)/1000,'__.___')>
        <cfset return_status =  "failure">
         <!--- <cfif CGI.REMOTE_ADDR EQ '103.143.7.161'>
            <cfdump var="#serializeJSON(Request.stFields)#">
            <cfdump var = "#httpEVVResponse#"><cfabort>
        </cfif>--->  
        <cfif httpEVVResponse.responseHeader.Status_Code eq 200>  
            <cfset structureData  = DeserializeJSON(httpEVVResponse.Filecontent)>
           <!---  <cfdump var="#structureData.status#"><cfabort> --->
            <cfset return_status = structureData.status >
            <cfif return_status EQ 'SUCCESS'>
                <cfset title = "Powerpath EVV API  Successfuly send to SAN">
                <cfset fromaddress = "info@myhomecarebiz.com">
            <cfelse>
                <cfset title = "Powerpath EVV API Failed due to SAN data return">
                 <cfset fromaddress = "error@myhomecarebiz.com">
            </cfif>           
            <cfmail to="melissa@myhomecarebiz.com,velmurugan@myhomecarebiz.com" from="#fromaddress#" subject="#title#" type="html">
                    REQUEST: <cfdump var="#serializeJSON(Request.stFields)#"><br>
                    RESPONSE: <cfdump var="#httpEVVResponse#">
            </cfmail> 
        <cfelse>
            <cfmail to="melissa@myhomecarebiz.com,velmurugan@myhomecarebiz.com" from="error@myhomecarebiz.com" subject="Powerpath EVV API  Error" type="html">
                    REQUEST: <cfdump var="#serializeJSON(Request.stFields)#"><br>
                    RESPONSE: <cfdump var="#httpEVVResponse#">
            </cfmail>            
        </cfif>
        <cfreturn return_status>

        <cfcatch>
                 <cfmail to="velmurugan@myhomecarebiz.com" from="error@myhomecarebiz.com" subject="Powerpath EVV API  Error" type="html">
                    <cfdump var="#cfcatch#">
                </cfmail> 
        </cfcatch>
    </cftry>

    </cffunction>

    <cffunction name="check_careplans"   access="remote" output="Yes" returnFormat= "plain" >
	    <cfargument name="Assmt_ID" required="yes" hint="Assmt_ID" >
	    <cfargument name="AutoProblem_ID" required="yes" hint="AutoProblem_ID" >
	    <cfargument name="Answer" required="yes" hint="Answer" >
	    <cfargument name="Skill" required="yes" hint="Skill" >
	    <cfargument name="Path_ID" required="yes" hint="Path_ID" deafault="0">

	    <cfset return_message = 'Success' />

	    <cfquery name="getproblem" datasource="#Application.DataSrc#">
				SELECT * FROM #Request.prefix_db_agency#.pProblem 
				WHERE Status = <cfqueryparam value = "0" CFSQLType ="CF_SQL_INTEGER">	
				AND Assmt_ID = "#arguments.Assmt_ID#" 
				AND AutoProblem_ID =  '#arguments.AutoProblem_ID#'
		</cfquery>
		<cfset problem_description = LEFT(getproblem.Description,2) />
		<cfquery name="pCareplan_list" datasource="#Application.DataSrc#">
				SELECT * FROM #Request.prefix_db_agency#.pCareplan 
				WHERE Status = <cfqueryparam value = "0" CFSQLType ="CF_SQL_INTEGER">	
				AND Assmt_ID = "#Assmt_ID#" 
				<cfif problem_description EQ 'GG'> 
					AND Type = 'goal'
					<!--- AND Skill = '#Skill#' --->
					AND Item_ID IN (SELECT Item_ID FROm #Request.prefix_db_lookup#.pPathway 
					WHERE Pathway_ID = <cfqueryparam value = "#arguments.Path_ID#" CFSQLType ="CF_SQL_INTEGER">	
					AND type IN ('goal'))
				<cfelseif problem_description NEQ 'GG' AND arguments.Path_ID GT 0 >
					AND Type IN ('goal','procedure')
					AND Item_ID IN (SELECT Item_ID FROm #Request.prefix_db_lookup#.pPathway 
					WHERE Pathway_ID = <cfqueryparam value = "#arguments.Path_ID#" CFSQLType ="CF_SQL_INTEGER">	
					AND type IN ('goal','procedure')) 
				</cfif>
				ORDER BY Careplan_ID ASC 
		</cfquery>
		<cfquery name="getresolved_goals" dbtype="query">
				SELECT * FROM pCareplan_list
				WHERE  Date_Resolve IS NOT NULL 
				AND Skill = '#arguments.Skill#'
		</cfquery>
		<!--- <cfif CGI.REMOTE_ADDR EQ '103.143.7.161'>
            <cfdump var="#getresolved_goals#">
            <cfdump var="#pCareplan_list#">    
        </cfif> --->
		<cfset get_goals = Valuelist(pCareplan_list.Careplan_ID) />
		<cfif problem_description EQ 'GG' OR (problem_description NEQ 'GG' AND arguments.Path_ID GT 0) >
			<cfif getresolved_goals.recordcount gt 0 >
				<cfset return_message =  "The related goals have already been resolved, so you were not able to change the skill." />
			<cfelse>
				<cfif (<!--- problem_description NEQ 'GG' AND---> arguments.Path_ID GT 0)>
					<cfquery  name="getpat_problems" datasource="#Application.DataSrc#">
						SELECT * FROM #Request.prefix_db_agency#.pProblem
						WHERE Path_ID = '#arguments.Path_ID#'
						AND Assmt_ID = '#arguments.Assmt_ID#'
						AND status = 0 
					</cfquery>	
					<cfset AutoProblem_IDs = #ValueList(getpat_problems.AutoProblem_ID)# />
					<cfset Problem_IDs = #ValueList(getpat_problems.Problem_ID)# />
					<cfquery  datasource="#Application.DataSrc#" name="getcolumns">
						SELECT   COLUMN_NAME  FROM INFORMATION_SCHEMA.COLUMNS
						WHERE COLUMN_NAME NOT IN ('AutoProblem_ID','record_timestamp','manual')
						AND TABLE_SCHEMA='#Request.prefix_db_agency#' AND TABLE_NAME  = 'pProblem';
					</cfquery>
					<cfset myList = ValueList(getcolumns.COLUMN_NAME)>
					<cfquery  datasource="#Application.DataSrc#" name="Insert_careplans">
						INSERT INTO #Request.prefix_db_agency#.pProblem
						(#myList#)
						SELECT   #myList#  FROM  #Request.prefix_db_agency#.pProblem
						WHERE AutoProblem_ID IN (<cfqueryparam value = "#AutoProblem_IDs#" CFSQLType ="cf_sql_integer" list="yes">)
						AND Assmt_ID = '#arguments.Assmt_ID#'
						AND Status = 0 
						GROUP BY Problem_ID 
					</cfquery>
					<cfquery  name="update_problems" datasource="#Application.DataSrc#">
						UPDATE  #Request.prefix_db_agency#.pProblem
						SET Skill =  '#arguments.Skill#',
						Date_Change = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
					    Change_by = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
						WHERE Problem_ID IN (<cfqueryparam value = "#Problem_IDs#" CFSQLType ="cf_sql_integer" list="yes">)
						AND Assmt_ID = '#arguments.Assmt_ID#'
						AND status = 0 
					</cfquery>	
				</cfif>

				<cfquery  name="update_Careplans" datasource="#Application.DataSrc#">
					UPDATE  #Request.prefix_db_agency#.pCareplan  
					SET Status =  2,
					Date_Change = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
				    Change_by = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
					WHERE Careplan_ID IN (<cfqueryparam value="#get_goals#"  cfsqltype="cf_sql_integer" list="yes">)
					AND status = 0 
				</cfquery>	
 				 <cfset return_message = 'Success' />
			</cfif>
		<cfelse>
			<cfquery  name="update_problems" datasource="#Application.DataSrc#">
				UPDATE  #Request.prefix_db_agency#.pProblem
				SET Skill =  '#arguments.Skill#',
				Date_Change = <cfqueryparam VALUE="#now()#"  cfsqltype="cf_sql_timestamp">,
			    Change_by = <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
				WHERE AutoProblem_ID IN (<cfqueryparam value = "#arguments.AutoProblem_ID#" CFSQLType ="cf_sql_integer" list="yes">)
				AND Assmt_ID = '#arguments.Assmt_ID#'
				AND status = 0 
			</cfquery>	
		</cfif>
		<cfreturn  return_message>
	</cffunction>


	<cffunction name="show_schedproc_edit"  access="remote" output="Yes" returnFormat= "plain">   
		<cfargument name="AgencyID" required="no" hint="AgencyID" default="#session.agencyid#"> 	
		<cfargument name="Schedule_ID" required="no" default="0">
		<cfargument name="Assmt_ID" required="yes" default="0">
		<cfargument name="Auth_ID" required="yes" default="0">
		<cfargument name="careplantype" required="yes">
		<cfargument name="Admit_ID" required="no" default="0">

		<cfset assmtids = arguments.Assmt_ID />
		<cfif arguments.Admit_ID GT 0 >
			<cfquery  name="gets_Assess" datasource="#Application.DataSrc#">
	           SELECT * FROM #Request.prefix_db_agency#.pAssessments
	           WHERE Admit_ID =  <cfqueryparam value = "#arguments.Admit_ID#" CFSQLType ="cf_sql_integer">
	           AND status = 0
			</cfquery>
			<cfif gets_Assess.recordcount gt 0 >
				<cfset assmtids = ValueList(gets_Assess.Assmt_ID) />
			</cfif>
		</cfif>
		<cfquery  name="gets_auth" datasource="#Application.DataSrc#">
	           SELECT * FROM #Request.prefix_db_agency#.pAuths
	           WHERE Auth_ID =  <cfqueryparam value = "#arguments.Auth_ID#" CFSQLType ="cf_sql_integer">
	           AND status = 0
		</cfquery>
		<cfset Skill = gets_auth.Skill />
		<cfquery name="getcareplanlist" datasource="#Application.DataSrc#">
			SELECT * FROM #Request.prefix_db_agency#.pCareplan 
			WHERE Assmt_ID    IN (<cfqueryparam value = "#arguments.Assmt_ID#" list="yes" CFSQLType ="CF_SQL_INTEGER">)	
			AND Skill 			= <cfqueryparam value = "#Skill#" CFSQLType ="CF_SQL_VARCHAR">
			AND type  = <cfqueryparam value = "#arguments.careplantype#" CFSQLType ="CF_SQL_VARCHAR">	
			AND status = 0
			AND Date_Resolve IS NULL
		</cfquery>
		<cfquery name="getschedules" datasource="#Application.DataSrc#">
			SELECT * FROM #Request.prefix_db_agency#.pSchedules 
			WHERE Assmt_ID  IN (<cfqueryparam value = "#assmtids#" list="yes" CFSQLType ="CF_SQL_INTEGER">)		
			AND Skill = <cfqueryparam value = "#Skill#" CFSQLType ="CF_SQL_VARCHAR">
			AND Auth_ID =  <cfqueryparam value = "#arguments.Auth_ID#" CFSQLType ="cf_sql_integer">
			AND status = 0
			ORDER BY Visit_Date ASC
		</cfquery>
		<cfquery name="getschprocedures" datasource="#Application.DataSrc#">
			SELECT * FROM #Request.prefix_db_agency#.pSched_Procedure 
			WHERE Assmt_ID IN (<cfqueryparam value = "#assmtids#" list="yes" CFSQLType ="CF_SQL_INTEGER">)	
			<cfif arguments.Schedule_ID NEQ 0 >	
				AND Schedule_ID   = <cfqueryparam value = "#arguments.Schedule_ID#" CFSQLType ="CF_SQL_INTEGER">
			</cfif>	
			AND status = 0
		</cfquery>
		<cfset procedurelist = #ValueList(getschprocedures.Careplan_ID)# />

		<cfsavecontent	variable = "html_careplan_list"> 	
			<table class="table table-bordered table-striped table-condensed flip-content">
				<thead class="flip-content">
					<tr>
						<th width="15%">Description</th>
						<cfoutput query ="getschedules">
							<th>#DateFormat(Visit_Date,"mm/dd/yyyy")#</th>
						</cfoutput>
					</tr>
				</thead>
				<tbody>
					<cfoutput>
						<input type="hidden" name="sch_ids" id="sch_ids" value="#ValueList(getschedules.Schedule_ID)#">
						<input type="hidden" name="careplan_ids" id="careplan_ids" value="#ValueList(getcareplanlist.Careplan_ID)#">
					</cfoutput>
					<cfoutput query = "getcareplanlist" >
						<cfset Careplan_ID = getcareplanlist.Careplan_ID >
						<tr>
							<td>#Description#</td>										
							<cfloop query ="getschedules">
								<cfset Sch_ID = getschedules.Schedule_ID >
								<cfquery name="getschpro" dbtype="query">
									SELECT * FROM getschprocedures 
									WHERE  Careplan_ID = <cfqueryparam value="#Careplan_ID#"  cfsqltype="CF_SQL_INTEGER">
									AND Schedule_ID =  <cfqueryparam value="#Sch_ID#"  cfsqltype="CF_SQL_INTEGER">
								</cfquery>
								<input type="hidden" name="procedecription" id="procedecription_#Sch_ID#_#Careplan_ID#" value="#getcareplanlist.Description#">
								<td><input type="checkbox"  name="procedures_#Sch_ID#" id="proc_#Sch_ID#_#Careplan_ID#" value="#Careplan_ID#" <cfif getschpro.recordcount gt 0> checked </cfif>>
								  <input type="text"  name="Notes" id="Notes_#Sch_ID#_#Careplan_ID#"   value="#getschpro.Notes#" class="form-control">
								   </td>
							</cfloop>
						</tr>
					</cfoutput>
				</tbody>
			</table>
		</cfsavecontent>
		<cfreturn html_careplan_list />	
	</cffunction>



</cfcomponent>
