<!--- Debug: Check what form data we received --->
<cfoutput>
	<div class="alert alert-info">
		<strong>Debug Form Data:</strong><br>
		hdnempdata = "#Form.hdnempdata#"<br>
		Form keys = "#StructKeyList(Form)#"<br>
		Form.hdnempdata type = "#GetMetadata(Form.hdnempdata).getName()#"
	</div>
</cfoutput> 
<cfset ErrorFlag = ""> 
<cfparam name="RevenueCode" default="">
<cfparam name="Session.Patient.Type" default="">
<cfparam name="form.Nonbillable" default="0">
<cfparam name="form.Missed" default="0">
<cfparam name="form.Progress_Note" default="0">
<cfparam name="form.Mileage" default="0">
<cfparam name="form.Travel" default="0">
<cfparam name="form.Paperwork" default="0">
<cfparam name="form.HCPCS_ID" default="0">
<cfset auditEmployeeId = 0>
<cfif isDefined("session.employeeid") AND Trim(session.employeeid) NEQ "">
	<cfset auditEmployeeId = Val(ListFirst(session.employeeid))>
</cfif>
<cfif isDefined("form.HCPCS_ID") AND Trim(form.HCPCS_ID) NEQ "">
	<cfset form.HCPCS_ID = Val(ListFirst(form.HCPCS_ID))>
<cfelse>
	<cfset form.HCPCS_ID = 0>
</cfif>

<cfif Not isDefined('form.Pay_ID') or form.Pay_ID eq ''>
	<cfset form.Pay_ID = 0>
</cfif>
<cfif isDefined('form.EmpPay_ID')>
	<cfset form.Pay_ID = form.EmpPay_ID>
</cfif>
<cfif isdefined('Form.hdnempdata') and Form.hdnempdata IS ""> 
	<cfset ErrorFlag = "No Dates"> 
<cfelse> 
	<cfif Session.Patient.Type eq "assement">
		<cfloop index="x" list="#Form.hdnempdata#" delimiters="*">
			<cfset increment="0">
			<cfset edate="0">
			<cfset eid="0">
			<cfset authid ="">
			<cfloop index="y" list="#x#" delimiters=",">	
				<cfset increment=increment+1>
				<cfif #increment# eq 1>
					<cfset edate=#y#>
						<cfif edate contains "|">
							<cfset inc="0">
							<cfloop index="z" list="#y#" delimiters="|">
								<cfset inc =inc +1>
								<cfif inc eq 1>
									<cfset edate =#z#>
								</cfif>
								<cfif inc eq 2>
									<cfset authid=#z#>
								</cfif>
							</cfloop>
				</cfif>					
			</cfif>
			<cfif #increment# eq 2>
				<cfset eid =#y# >
			</cfif> 
		</cfloop>
		
		<!--- Validate that edate is a valid date before processing --->
		<cfif edate NEQ "0" AND edate NEQ "" AND IsDate(edate)>
			<cfset validDate = true>
			<cfif DateCompare(edate, Form.Certification_Start) IS -1 AND DateCompare(edate, Form.Certification_End) IS 1>
				<cfset ErrorFlag = "Out of Range"> 
			</cfif>
		<cfelse>
			<cfset validDate = false>
			<cfset ErrorFlag = "Invalid Date">
		</cfif>
		</cfloop>
	</cfif>

<cfset form.Total_EPay = 00.00>
<cfset form.Total_Units = 0>
<cfset form.Total_EClaim = 0>
<cfset form.Total_QB = 0>

<!--- Initialize validDate variable outside the loop --->
<cfset validDate = false>

<!--- #10329/#10330: Auto-populate pSchedules.homebound from SOC assessment.
     - If LEFT(SOC.F81,1) > 1 (Ambulation/Locomotion) -> include F81 contents
     - If LEFT(SOC.F34,1) > 1 (Cognitive Functioning) -> include F34 contents
     Computed once outside the loop; same Admit_ID applies to all visits in this batch. --->
<cfparam name="form.homebound" default="">
<cfquery name="GetSOCForHomebound" datasource="#Application.DataSrc#">
	SELECT soc.F81, soc.F34
	FROM #Request.prefix_db_agency#.pAssessments soc
	INNER JOIN #Request.prefix_db_agency#.pAssessments curr
		ON curr.Admit_ID = soc.Admit_ID
		AND curr.Status = 0
	WHERE curr.Assmt_ID = <cfqueryparam VALUE="#Form.Assmt_ID_Temp#" cfsqltype="cf_sql_integer">
		AND soc.Status = 0
		AND soc.F26 LIKE '1%'
	ORDER BY soc.Assmt_ID ASC
	LIMIT 1
</cfquery>
<cfset socHomeboundText = "">
<cfif GetSOCForHomebound.recordcount GT 0>
	<cfset socF81 = Trim(GetSOCForHomebound.F81 & "")>
	<cfset socF34 = Trim(GetSOCForHomebound.F34 & "")>
	<cfif Len(socF81) GT 0 AND IsNumeric(Left(socF81,1)) AND Val(Left(socF81,1)) GT 1>
		<cfset socHomeboundText = socF81>
	</cfif>
	<cfif Len(socF34) GT 0 AND IsNumeric(Left(socF34,1)) AND Val(Left(socF34,1)) GT 1>
		<cfif Len(socHomeboundText) GT 0>
			<cfset socHomeboundText = socHomeboundText & Chr(13) & Chr(10) & Chr(13) & Chr(10)>
		</cfif>
		<cfset socHomeboundText = socHomeboundText & socF34>
	</cfif>
</cfif>
<cfset newHomebound = Trim(form.homebound)>
<cfif Len(socHomeboundText) GT 0>
	<cfif Len(newHomebound) GT 0>
		<cfset newHomebound = newHomebound & Chr(13) & Chr(10) & Chr(13) & Chr(10) & socHomeboundText>
	<cfelse>
		<cfset newHomebound = socHomeboundText>
	</cfif>
</cfif>

<!--- 
	Process each selected date from the calendar checkboxes
	Format: "date,employeeID*" for each selected date
	This loop creates a separate pSchedules record for each selected date
--->
<cfoutput>
<cfloop index="x" list="#Form.hdnempdata#" delimiters="*">
		<cfset increment="0">
		<cfset edate="0">
		<cfset eid="0">
		<cfset authid ="">
		<cfloop index="y" list="#x#" delimiters=",">	
			<cfset increment=increment+1>
			<cfif #increment# eq 1>
				<cfset edate=#y#>
				<cfif edate contains "|">
					<cfset inc="0">
					<cfloop index="z" list="#y#" delimiters="|">
						<cfset inc =inc +1>
						<cfif inc eq 1>
							<cfset edate =#z#>
						</cfif>
						<cfif inc eq 2>
							<cfset authid=#z#>
						</cfif>
					</cfloop>
				</cfif>					
			</cfif>
			<cfif #increment# eq 2>
				<cfset eid=#y#>
			</cfif> 
		</cfloop>
		
		<!--- Debug: Show what we received (only if debugging is needed) --->
		<!--- <cfoutput>
			<div class="alert alert-info">
				<strong>Debug Info:</strong> Raw data = "#x#", edate = "#edate#", eid = "#eid#"
			</div>
		</cfoutput> --->
		
		<!--- Validate that edate is a valid date before processing --->
		<!--- Try to parse the date in mm/dd/yyyy format --->
		<cfset dateParsed = false>
		<cfif edate NEQ "0" AND edate NEQ "">
			<!--- Try different date parsing methods --->
			<cfif IsDate(edate)>
				<cfset dateParsed = true>
			<cfelse>
				<!--- Try parsing as mm/dd/yyyy specifically --->
				<cfset dateParts = ListToArray(edate, "/")>
				<cfif ArrayLen(dateParts) EQ 3>
					<cfset month = dateParts[1]>
					<cfset day = dateParts[2]>
					<cfset year = dateParts[3]>
					<cfif IsNumeric(month) AND IsNumeric(day) AND IsNumeric(year) AND 
						  month GTE 1 AND month LTE 12 AND 
						  day GTE 1 AND day LTE 31 AND 
						  year GTE 1900 AND year LTE 2100>
						<cfset dateParsed = true>
					</cfif>
				</cfif>
			</cfif>
		</cfif>
		
		<cfif dateParsed>
			<cfset validDate = true>
		<cfelse>
			<cfset validDate = false>
			<cfset ErrorFlag = "Invalid Date">
			<!--- Debug: Show what edate value we received (only if debugging is needed) --->
			<!--- <cfoutput>
				<div class="alert alert-warning">
					<strong>Debug Info:</strong> edate = "#edate#", eid = "#eid#", IsDate result = "#IsDate(edate)#", dateParsed = "#dateParsed#"
				</div>
			</cfoutput> --->
		</cfif>
		
		<cfif eid neq '' AND validDate>

			<!--- CRITICAL: Check for over-scheduling for this specific date BEFORE database insertion --->
			<cfif Form.Auth_ID NEQ 0>
				<cfscript>
					request.authorization = CreateObject("component","components.general.authorization").init()
					authorizations = request.authorization.getauthorizationslist(#Form.Assmt_ID_Temp#);
				</cfscript>

				<cfquery  name="getauthorizations" dbtype="query">
					SELECT * FROM authorizations 
					WHERE status = <cfqueryparam cfsqltype="cf_sql_integer" value="0"> 
					AND  Auth_ID = <cfqueryparam VALUE="#Form.Auth_ID#"  cfsqltype="cf_sql_integer">
				</cfquery>

				<!--- Check if authorization record exists and has auth_measure field --->
				<cfif getauthorizations.recordcount GT 0 AND StructKeyExists(getauthorizations, "auth_measure")>
					<!--- Get certification dates from assessment --->
					<cfquery name="GetCertDates" datasource="#Application.DataSrc#">
						SELECT F177 AS Cert_Start, F178 AS Cert_End
						FROM #Request.prefix_db_agency#.pAssessments
						WHERE Assmt_ID = <cfqueryparam value="#Form.Assmt_ID_Temp#" cfsqltype="cf_sql_integer">
						AND Status = 0
					</cfquery>
					
					<!--- Check if visit date is outside certification period --->
					<cfif GetCertDates.recordcount GT 0 AND GetCertDates.Cert_Start NEQ '' AND GetCertDates.Cert_End NEQ '' AND edate NEQ ''>
						<!--- Validate that dates are valid before processing --->
						<cfif IsDate(edate) AND IsDate(GetCertDates.Cert_Start) AND IsDate(GetCertDates.Cert_End)>
							<cfset visitDateParsed = CreateDate(Year(edate), Month(edate), Day(edate))>
							<cfset certStartParsed = CreateDate(Year(GetCertDates.Cert_Start), Month(GetCertDates.Cert_Start), Day(GetCertDates.Cert_Start))>
							<cfset certEndParsed = CreateDate(Year(GetCertDates.Cert_End), Month(GetCertDates.Cert_End), Day(GetCertDates.Cert_End))>
							
							<cfif visitDateParsed LT certStartParsed OR visitDateParsed GT certEndParsed>
							<div class="portlet box red">
								<div class="portlet-title">
									<div class="caption">
										<i class="fa fa-gear"></i> Certification Period Violation
									</div>
								</div>
								<div class="portlet-body">
									<h4>Visit date <cfoutput>#DateFormat(edate, "mm/dd/yyyy")#</cfoutput> must fall within the certification period (<cfoutput>#DateFormat(GetCertDates.Cert_Start, "mm/dd/yyyy")# - #DateFormat(GetCertDates.Cert_End, "mm/dd/yyyy")#</cfoutput>)</h4>
									<input class="btn blue" type="button" value="Go Back" onClick="history.back()">
								</div>
							</div>
							<cfabort>
						</cfif>
						</cfif>
					</cfif>

					<cfset overSchedulingResult = 'Success' />
					<cfif getauthorizations.bypass_compliance EQ 0 AND getauthorizations.Admit_Type NEQ 'Non-Medical'>
						<cfif request.authorization.isAuthLimitReached(Form.Auth_ID, form.Patient_ID, Form.Assmt_ID_Temp, getauthorizations.auth_measure)>
							<cfset overSchedulingResult = request.authorization.getAuthLimitMessage(Form.Auth_ID, form.Patient_ID, Form.Assmt_ID_Temp, getauthorizations.auth_measure) />
						<cfelseif getauthorizations.auth_measure EQ 'units' OR getauthorizations.auth_measure EQ '' OR getauthorizations.auth_measure EQ 'hours'>
							<cfif validDate>
								<cfset overSchedulingResult = request.authorization.checkOverScheduling(
									Auth_ID = Form.Auth_ID,
									Patient_ID = form.Patient_ID,
									Assmt_ID = Form.Assmt_ID_Temp,
									StartTime = Form.StartTime,
									EndTime = Form.EndTime,
									Visit_Date = edate
								) />
							<cfelse>
								<cfset overSchedulingResult = "Invalid Date">
							</cfif>
						<cfelseif getauthorizations.auth_measure EQ 'visits'>
							<cfset overSchedulingResult = request.authorization.Checktotalvisits(
								Auth_ID = Form.Auth_ID,
								Patient_ID = form.Patient_ID,
								Assmt_ID = Form.Assmt_ID_Temp,
								selectedvisit = 1
							) />
						</cfif>
					</cfif>

					<cfif overSchedulingResult NEQ 'Success' AND overSchedulingResult NEQ 'Authorization not found'>
						<div class="portlet box red">
							<div class="portlet-title">
								<div class="caption">
									<i class="fa fa-gear"></i> Over-Scheduling Detected
								</div>
							</div>
							<div class="portlet-body">
								<h4><cfoutput>#overSchedulingResult#</cfoutput></h4>
								<p>Please adjust the visit duration or select a different authorization.</p>
								<input class="btn blue" type="button" value="Go Back" onClick="history.back()">
							</div>
						</div>
						<cfabort>
					</cfif>
				<cfelse>
					<!--- No authorization record found or auth_measure field missing --->
					<cfset overSchedulingResult = 'Authorization not found' />
				</cfif>

			<cfif ErrorFlag neq "Out of Range">
			    <!--- Get Rev_Code information: prefer selected HCPCS from Add Schedule (#10480) --->
			    <cfset form.Auth_ID = listRemoveDuplicates(form.Auth_ID) />
				<cfif Val(form.HCPCS_ID) GT 0>
					<cfquery  name="GetRev" datasource="#Application.DataSrc#">
						SELECT * FROM   #Request.prefix_db_agency#.pRevenue_Code 
						WHERE  Rev_CodeID = <cfqueryparam cfsqltype="cf_sql_integer" value="#Val(form.HCPCS_ID)#">
						AND Status = 0
						LIMIT 1
					</cfquery>
				</cfif>
				<cfif NOT isDefined("GetRev") OR GetRev.recordcount EQ 0>
					<cfquery  name="GetRev" datasource="#Application.DataSrc#">
						SELECT * FROM   #Request.prefix_db_agency#.pRevenue_Code 
						WHERE  Rev_CodeID IN (SELECT Rev_ID FROM #Request.prefix_db_agency#.pAuths WHERE Auth_ID IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#form.Auth_ID#" list="yes">) AND Status = 0 GROUP BY Auth_ID )
					</cfquery>
				</cfif>
				<cfquery  name="GetAuth" datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_agency#.pAuths WHERE Auth_ID IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#form.Auth_ID#" list="yes">) AND Status = 0 
					GROUP BY Auth_ID 
				</cfquery>

		      	<!--- Assign Rev_Code / Skill from selected HCPCS when available --->
				<cfset scheduleSkill = Trim(GetRev.Visit_Type)>
				<cfset revDescUpper = UCase(Trim(GetRev.Description))>
				<cfset revHcpcsUpper = UCase(Trim(GetRev.HCPCS))>
				<cfif revHcpcsUpper EQ "G0300" OR Left(revDescUpper, 3) EQ "LPN" OR Left(revDescUpper, 3) EQ "LVN"
					OR UCase(scheduleSkill) EQ "LPN" OR UCase(scheduleSkill) EQ "LVN" OR UCase(scheduleSkill) EQ "LVN/LPN">
					<cfset scheduleSkill = "LPN">
				<cfelseif UCase(scheduleSkill) EQ "SKILLED NURSING" OR revHcpcsUpper EQ "G0299">
					<cfset scheduleSkill = "SN">
				</cfif>
		      	<cfset Form.Visit_Type = scheduleSkill> 			   	 
			   	<!--- <cfset form.Pay_ID = #form.Pay_ID#> --->
				<cfset form.PtPayer_ID = #GetAuth.PtPayer_ID# />
				<cfset form.Rev_ID = #GetAuth.Rev_ID# />
			  
			  	<cfset Rev_ID = Trim(Form.Rev_ID)>
			  	<cfset Form.Bill_Type = scheduleSkill> 
		      	<cfset Temp_EClaim_Price = GetRev.EClaim_Price> 
		      	<cfset Temp_Quick_Books_Price = GetRev.Quick_Books_Price> 
		      	<cfset Temp_Measure = GetRev.Measure> 
		      	<cfset Form.EClaimed = 0> 

				<!--- <cfif form.Emp_ID EQ 0 >
					<cfset form.StartTime = "">
					<cfset form.EndTime = "" >
				</cfif>--->
	
		      	<!--- Calculate the Units, Total_EClaim and Total_QB values based on items selected ---> 
				<!--- For units/hours auth_measure, skip time-based calculations --->
				<cfif getauthorizations.auth_measure EQ 'units' OR getauthorizations.auth_measure EQ 'hours'>
					<!--- Set default values for units/hours - no time calculation required --->
					<cfset Form.Total_Units = 0>
					<cfset Form.Total_Hours = 0>
				<cfelseif #form.StartTime# IS NOT "" AND #form.EndTime# IS NOT "">
					<cfset diff = #DateDiff("n",Form.StartTime,Form.EndTime)#> 
					<cfset Form.Total_Units = (#diff#/60)*100/25>

					<cfif Form.Total_Units lt 0>
						<cfset Form.Total_Units=Form.Total_Units+96>
					</cfif>

					<cfset Form.Total_Hours = (#diff#/15)*25/100>
					<cfif Form.Total_Hours lt 0>
						<cfset Form.Total_Hours = Form.Total_Hours + 24 />
					</cfif>
					<!--- <cfif Form.Rev_CodeID NEQ '' or Form.Rev_CodeID NEQ 0>
						<cfif #GetRev.Measure# IS "1">
							<cfset Form.Total_EClaim = #Total_Hours# * #GetRev.EClaim_Price#>
							<cfset Form.Total_QB = #Total_Hours# * #GetRev.Quick_Books_Price#>
						</cfif>
						<cfif #GetRev.Measure# IS ".25">
							<cfset Form.Total_EClaim = #Total_Units# * #GetRev.EClaim_Price#>
							<cfset Form.Total_QB = #Total_Units# * #GetRev.Quick_Books_Price#>
						</cfif>
						<cfif #GetRev.Measure# IS "visit">
							<cfset Form.Total_EClaim = 1 * #GetRev.EClaim_Price#>
							<cfset Form.Total_QB = 1 * #GetRev.Quick_Books_Price#>

						</cfif>
					</cfif>
					<cfif isDefined("Form.Pay_ID")>
						<cfquery  name="GetEPay" datasource="#Application.DataSrc#">
							SELECT Pay_Rate, Measure 
							FROM   #Request.prefix_db_agency#.Employee_Payroll 
							WHERE  Agency_ID = '#session.AgencyID#' 
							AND    EmpPay_ID = '#Form.Pay_ID#'
						</cfquery>
					</cfif>
					<cfif isDefined("Form.Pay_ID") and #Form.Pay_ID# IS NOT 0>
						<cfif #GetEPay.Measure# IS "visit">
							<cfset Form.Total_EPay = 1 * #GetEPay.Pay_Rate#>
						</cfif>
						<cfif #GetEPay.Measure# IS "hourly">
							<cfset Form.Total_EPay = #Total_Hours# * #GetEPay.Pay_Rate#>
						</cfif>
						<cfif #GetEPay.Measure# IS "salary">
							<cfset Form.Total_EPay = 00.00>
						</cfif>
					</cfif> --->
				<cfelse>
					<cfset Form.Total_EPay = 00.00>
					<cfset Form.Total_Units = 0>
					<cfset Form.Total_EClaim = 0>
					<cfset Form.Total_QB = 0>
				</cfif>
				<cfset Form.Total_Units = #round(Form.Total_Units)# />
				

				<!--- <cfif isdefined("Form.Paperwork") and #Form.Paperwork# IS NOT "">
					<cfset Paperwork = (#Form.Paperwork#/15)*25/100>
					<cfset Form.Paperwork = Paperwork>
				<cfelse>
					<cfset Paperwork = 0>
					<cfset Form.Paperwork = Paperwork>
				</cfif>
				<cfif isdefined("Form.Travel") and  #form.Travel# IS NOT "">
					<cfset Travel = (#Form.Travel#/15)*25/100>
					<cfset Form.Travel = Travel>
				<cfelse>
					<cfset Travel = 0>
					<cfset Form.Travel = Travel>
				</cfif> --->

				<cfif #parameterexists(Form.Mi_Pay)# >
					<cfset Form.Mi_Pay = #Form.Mi_Pay#>
				<cfelse>
					<cfset Form.Mi_Pay = 0>
				</cfif>
				

				<cfset form.Record_Creation_Date = "#Now()#" />
				<cfset form.Record_Created_By = auditEmployeeId />
				<cfset form.Record_Mod_Date = #Now()# />
				<cfset form.Record_Mod_By = auditEmployeeId />
				<cfset DoCommit = 1>
				<cftransaction>
			       <cftry>
				        <cfquery  name="getschedule" datasource="#Application.DataSrc#">
				                   SELECT IFNULL(MAX(Schedule_ID),0)+1 As pSchedule_ID FROM #Request.prefix_db_agency#.pSchedules 
				        </cfquery>
				        <cfset pSchedule_ID =  #getschedule.pSchedule_ID# />
				       <cfcatch>
				            <cfset DoCommit = 0>
				            <cftransaction action="rollback" />
				        </cfcatch>
				    </cftry>
				    <cfif DoCommit EQ 1>
				        <cftransaction action="commit" />
				    </cfif>            
					</cftransaction>
					<cfif form.Auth_ID EQ '' OR form.Auth_ID EQ  0>
						<cfset form.Auth_ID  = 0 />
						<cfset form.PtPayer_ID = 0 >
						<cfset form.Rev_ID = 0 >
					</cfif>
					<cfquery  name="getvisitno" datasource="#Application.DataSrc#">
				          SELECT IFNULL(MAX(Visit_no),0)+1 As pVisit_no FROM #Request.prefix_db_agency#.pSchedules 
				          WHERE Patient_ID = <cfqueryparam VALUE="#Form.Patient_ID#"  cfsqltype="cf_sql_integer">
				          AND Assmt_ID = <cfqueryparam VALUE="#Form.AID#"  cfsqltype="cf_sql_integer">
				          <!--- <cfif authid neq ''>
				          	 AND Auth_ID = <cfqueryparam VALUE="#authid#"  cfsqltype="cf_sql_integer">
				          </cfif> --->
				          AND Skill = <cfqueryparam VALUE="#scheduleSkill#"  cfsqltype="cf_sql_varchar">
				          AND status = <cfqueryparam VALUE="0"  cfsqltype="cf_sql_integer">
				  </cfquery>
				  <cfset pVisit_no = getvisitno.pVisit_no />


		 		<!--- Validate and format the visit date before database insert --->
		 		<cfif edate NEQ "0" AND edate NEQ "" AND IsDate(edate)>
		 			<cfset formattedVisitDate = CreateDate(Year(edate), Month(edate), Day(edate))>
		 			<cfset shouldInsert = true>
		 		<cfelse>
		 			<cfset shouldInsert = false>
		 			<cfset ErrorFlag = "Invalid Date - Skipping Insert">
		 		</cfif>
		 		
		 		<cfif shouldInsert>
		 		<cfquery  name="PatientShedule" datasource="#Application.DataSrc#">	
						<cfsetting requesttimeout="5000">
						INSERT INTO #Request.prefix_db_agency#.pSchedules(
							Schedule_ID, Patient_ID, Assmt_ID, Auth_ID, PtPayer_ID, Rev_ID,HCPCS_ID, Emp_ID, Pay_ID,
							 Skill, Visit_no, Status, Nonbillable, Missed, Visit_Date, StartTime, EndTime, 
							 Total_Units, Mi_Pay, Mileage, Travel, Paperwork, Progress_Note, Notes,Schedule_Notes, homebound,
							<cfif form.latitude NEQ ''>Sch_Latitude,Sch_Longitude,</cfif>
							Date_Create, Created_by, Date_Change, Change_by
							  ) 
						VALUES (
						   <cfqueryparam VALUE="#pSchedule_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.Patient_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#Form.Assmt_ID_Temp#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#Form.Auth_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.PtPayer_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.Rev_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.HCPCS_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.Emp_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.Pay_ID#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#scheduleSkill#"  cfsqltype="cf_sql_varchar">,
				      	<cfqueryparam VALUE="#pVisit_no#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="0"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.Nonbillable#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.Missed#"  cfsqltype="cf_sql_integer">,
								<cfqueryparam VALUE="#formattedVisitDate#"  cfsqltype="cf_sql_date">,
								<cfqueryparam VALUE="#form.StartTime#"  cfsqltype="cf_sql_varchar">,
								<cfqueryparam VALUE="#form.EndTime#"  cfsqltype="cf_sql_varchar">,
								<cfqueryparam VALUE="#form.Total_Units#"  cfsqltype="cf_sql_integer">,
								<cfqueryparam VALUE="#form.Mi_Pay#"  cfsqltype="cf_sql_integer">,
								<cfqueryparam VALUE="#form.Mileage#"  cfsqltype="cf_sql_integer">,
								<cfqueryparam VALUE="#form.Travel#"  cfsqltype="cf_sql_varchar">,
								<cfqueryparam VALUE="#form.Paperwork#"  cfsqltype="cf_sql_varchar">,
								<cfqueryparam VALUE="#form.Progress_Note#"  cfsqltype="cf_sql_integer">,
								<cfqueryparam VALUE="#form.Notes#"  cfsqltype="cf_sql_longvarchar">,
								<cfqueryparam VALUE="#form.Schedule_Notes#"  cfsqltype="cf_sql_longvarchar">,
								<cfqueryparam VALUE="#newHomebound#"  cfsqltype="cf_sql_longvarchar">,
								<cfif form.latitude NEQ ''>
									<cfqueryparam VALUE="#form.latitude#"  cfsqltype="CF_SQL_FLOAT">, 
									<cfqueryparam VALUE="#form.longitude#"  cfsqltype="CF_SQL_FLOAT">,
								</cfif>
				      	<cfqueryparam VALUE="#form.Record_Creation_Date#"  cfsqltype="cf_sql_timestamp">,
				      	<cfqueryparam VALUE="#form.Record_Created_By#"  cfsqltype="cf_sql_integer">,
				      	<cfqueryparam VALUE="#form.Record_Creation_Date#"  cfsqltype="cf_sql_timestamp">,
				      	<cfqueryparam VALUE="#form.Record_Created_By#"  cfsqltype="cf_sql_integer">
				       )
				</cfquery> 
					<cfset Request.Visit_Date  = #formattedVisitDate# >
		 		</cfif>
					<cfset Request.StartTime  = #form.StartTime# >
					<cfset Request.EndTime  = #form.EndTime# >
					<cfset Request.Patient_ID  = #form.Patient_ID# >
					<cfset Request.Emp_ID  = #form.Emp_ID# >
					<cfset Request.Schedule_ID  = pSchedule_ID />
					<cfinclude template="/schedules/duplicate_visitupdate.cfm" />
		</cfif>
	</cfif>
</cfif>
			
</cfloop>

	<cfscript>
    	request.authorization = CreateObject("component","components.general.authorization").init()
    	authorizations = request.authorization.getauthorizationslist(#form.Assmt_ID_Temp#);
	</cfscript>

	<cfquery  name="getauthorizations" dbtype="query">
		SELECT * FROM authorizations 
		WHERE status = <cfqueryparam cfsqltype="cf_sql_integer" value="0"> 
		AND  Auth_ID = <cfqueryparam VALUE="#form.Auth_ID#"  cfsqltype="cf_sql_integer">
	</cfquery>

	<cfset auth_totalvisit = getauthorizations.Total_Visits />

	<cfquery  name="getschedule" datasource="#Application.DataSrc#">
     SELECT * FROM #Request.prefix_db_agency#.pSchedules 
     WHERE status = <cfqueryparam cfsqltype="cf_sql_integer" value="0"> 
		 AND  Auth_ID = <cfqueryparam VALUE="#form.Auth_ID#"  cfsqltype="cf_sql_integer">
		  AND Missed = 0
  </cfquery>
  <cfset sched_totalvisit = getschedule.Recordcount />

  <!--- Get admit_type to check if we should ignore PRN visit updates --->
  <cfquery name="GetAdmitType" datasource="#Application.DataSrc#">
  	SELECT pAdmit.Admit_Type
  	FROM #Request.prefix_db_agency#.pAssessments
  	LEFT JOIN #Request.prefix_db_agency#.pAdmit ON pAssessments.Admit_ID = pAdmit.Admit_ID AND pAdmit.Status = 0
  	WHERE pAssessments.Assmt_ID = <cfqueryparam VALUE="#form.Assmt_ID_Temp#" cfsqltype="cf_sql_integer">
  	AND pAssessments.Status = 0
  </cfquery>
  
  <cfset admit_type = GetAdmitType.Admit_Type />

  <cfif sched_totalvisit GT auth_totalvisit >
  	<!--- Check if we should skip PRN visit updates based on multiple conditions --->
  	<cfset skip_prn_update = false />
  	
  	<!--- Check bypass_compliance --->
  	<cfif isDefined('form.bypass_compliance') AND form.bypass_compliance EQ '1'>
  		<cfset skip_prn_update = true />
  	</cfif>
  	
  	<!--- Check admit_type --->
  	<cfif admit_type EQ 'Non-Medical'>
  		<cfset skip_prn_update = true />
  	</cfif>
  	
  	<!--- Check auth_measure --->
  	<cfif isDefined('form.auth_measure')>
  		<cfset auth_measure_lower = LCase(form.auth_measure) />
  		<cfif auth_measure_lower EQ 'units' OR auth_measure_lower EQ 'hours'>
  			<cfset skip_prn_update = true />
  		</cfif>
  	</cfif>
  	
  	<cfif NOT skip_prn_update>
  		<cfset diff_vists =  sched_totalvisit - auth_totalvisit />
  		<cfquery  name="UPDATE_Schdule" datasource="#Application.DataSrc#">
			     UPDATE #Request.prefix_db_agency#.pSchedules  SET
			     	prn_visit =  1
			     WHERE Auth_ID = <cfqueryparam VALUE="#form.Auth_ID#"  cfsqltype="cf_sql_integer">
			     AND Status = 0
			      AND Assmt_ID = <cfqueryparam VALUE="#form.Assmt_ID#"  cfsqltype="cf_sql_integer">
			     ORDER BY Visit_no DESC LIMIT #diff_vists#
		  </cfquery>
  	</cfif>
  </cfif>

</cfoutput>

	<cfset Assmt_ID    = #form.Assmt_ID# >
	<cfset Auth_ID     = #form.Auth_ID# >
	<cfset Patient_ID  = #form.Patient_ID# >
	<cfinclude template="/schedules/update_visitcompliance.cfm" />
	<cfscript>
	    request.ass = CreateObject("component","components.general.assessments").init();
	    getassment = request.ass.get_assessments(#Patient_ID#,#Assmt_ID#);
	</cfscript>
	<cfset Request.Admit_ID =  getassment.Admit_ID />
	<cfinclude template="/schedules/visit_no_update.cfm" />

	<!--- <cfif isdefined('form.frm') and form.frm eq 'schedules' and isdefined('form.view') and form.view eq 'day'>
			<cflocation url="/schedules/index.cfm?view=day&mmid=3" addtoken="no">
	<cfelseif isdefined('form.frm') and form.frm eq 'schedules' and isdefined('form.view') and form.view eq 'week'>
			<cflocation url="/schedules/index.cfm?page=schedules&cat=&rpt=&view=week" addtoken="no">
	<cfelseif isdefined('form.frm') and form.frm eq 'schedules' and isdefined('form.view') and form.view eq 'month'>
			<cflocation url="/schedules/index.cfm?page=schedules&cat=&rpt=&view=month" addtoken="no">
	<cfelse>
		<cfif not isdefined("url.from")> 
			<cfif isdefined('session.schedhomeurl') and session.schedhomeurl neq ''>
			   <cfif isdefined('session.schedhomeurl') and session.schedhomeurl neq ''>
			   	   	<cfif isdefined('form.view') and form.view eq 'month'>
						  	<cflocation url="/schedules/index.cfm?page=schedules&cat=&rpt=&view=month" addtoken="no">
						  <cfelse>							  	 
							<cflocation url='#form.previous#' addtoken="no">
					</cfif>
					
				</cfif>
			<cfelse>
			
				<cfif isdefined('session.schwizard') and  session.schwizard eq "True">
					<cfif isdefined('session.addschduleassessurl') and session.addschduleassessurl neq ''>
						<cflocation url ="#session.addschduleassessurl#" addtoken="no">	
					</cfif>		
				<cfelse>
					<cfif isdefined('session.add_schdule_assessurl') and session.add_schdule_assessurl neq ''>
						<cflocation url ="#session.add_schdule_assessurl#" addtoken="no">
					</cfif>
				</cfif>
			 </cfif>
		</cfif>
	</cfif> --->

	<cfquery name="Getass" datasource="#Application.DataSrc#">
            SELECT *
            FROM  #Request.prefix_db_agency#.pAssessments
            WHERE Assmt_ID = <cfqueryparam value = "#form.Assmt_ID_Temp#" CFSQLType ="CF_SQL_INTEGER"> 
            AND Status = 0
            ORDER BY AutoAssmt_ID DESC 
    </cfquery>
    <cfparam name="encautoass_id" default="0">
	<cfparam name="encadmit_id" default="0">
	<cfparam name="encass_id" default="0">

	<cfif Getass.recordcount gt 0>
	  <cfset encautoass_id= encrypt(#Getass.AutoAssmt_ID#,#Application.enckey#,"AES","Hex") />   
	  <cfset encadmit_id= encrypt(#Getass.Admit_ID#,#Application.enckey#,"AES","Hex") />
	  <cfset encass_id= encrypt(#form.Assmt_ID_Temp#,#Application.enckey#,"AES","Hex") />  
	</cfif>
	  <cfset session.cs.enc_patientid = encrypt(#form.Patient_ID#,#application.enckey#,"AES","Hex") />

	<cfif isdefined('form.frm') and form.frm eq 'patient'>
	   <cflocation url="/patientadmin_new/index.cfm?a=1&page=patient&px=y&ID=#session.cs.enc_patientid#&cat=Patient&autoassid=#encautoass_id#&admitid=#encadmit_id###authorization_#Getass.AutoAssmt_ID#" addtoken="no">
	  <cfelseif isdefined('form.frm') and form.frm eq 'bill'> 
	   	<cflocation url="#form.previous#" addtoken="no">
	  <cfelseif isdefined('form.frm') and form.frm eq 'authorizations'>
	   <cflocation url="/patientadmin_new/index.cfm?a=1&page=patient&px=y&ID=#session.cs.enc_patientid#&cat=authorizations&autoassid=#encautoass_id#" addtoken="no"> 
	 <cfelse>
	<cflocation url="/schedules/index.cfm?view=day&mmid=3" addtoken="no">
	</cfif>
	
</cfif>
	
<cfif ErrorFlag IS ""> 
    <cfelse> 
    <cfswitch expression="#ErrorFlag#"> 
      <cfcase value="No Dates"> 
      <h3>Scheduling Problem</h3> 
      <p><strong>You must select at least one date to schedule.</strong></p> 
      <p><strong>Please click the Back button in your browser to correct the problem.</strong></p> 
      </cfcase> 
      <cfcase value="Too Many"> 
      <h3>Scheduling Problem</h3> 
      <p><strong>For an Admission Visit, you can only specify one visit date.</strong></p> 
      <p><strong>Please click the Back button in your browser to correct the problem.</strong></p> 
      </cfcase> 
      <cfcase value="Out of Range"> 
      <h3>Scheduling Problem</h3> 
      <p><strong>One of the dates you specified is outside the Certification Period.</strong></p> 
      <p><strong>Please click the Back button in your browser to correct the problem.</strong></p> 
      </cfcase> 
    </cfswitch> 
 </cfif>