<cfcomponent displayname="schedules Functions" hint="schedules" output="false">

	 <cffunction name="init" displayname="Initialize Component" access="public" returntype="schedules" hint="I initialize and return the schedules object.">
		<cfreturn this>
	</cffunction>

	<cffunction name="GetVisits" returntype="any" access="public" output="false">
		<cfargument name="eventpayer" required="no" default=""  hint="eventpayer" >
		<cfargument name="eventemployee" required="no" default=""  hint="eventemployee" >
		<cfargument name="from_date" required="no" default=""  hint="from_date" >
		<cfargument name="to_date" required="no" default=""  hint="to_date" >
		<cfargument name="sort_employee" required="no" default="0"  hint="sort_employee" >
		<cfargument name="sort_patient" required="no" default="0"  hint="sort_patient" >
		<cfargument name="start" required="no" default="0"  hint="" >
		<cfargument name="end" required="no" default="0"  hint="" >
		<cfargument name="visittype" required="no" default="0"  hint="" >

		<cfquery  datasource="#Application.DataSrc#" name="GetVisits" cachedwithin="#CreateTimeSpan(0,0,10,0)#">
			SELECT pEmployee.Status, pPatients.Pt_Last, pPatients.Pt_First,pEmployee.Emp_Last, pEmployee.Emp_First,
			pSchedules.Schedule_ID,  pSchedules.Skill as Visit_Type, pSchedules.patient_sign, pSchedules.Missed,pSchedules.pgnotesdraft,
			pSchedules.Followup_visit,IFNULL(asseval.F25,0) AS assessmentcompletion,  
			CASE WHEN pSchedules.Visit_Type !=  ''  
				THEN pSchedules.Visit_Type
				ELSE 'Routine Visit' 
			END  AS VisitType,
			pSchedules.Progress_Note,pSchedules.Rev_ID,pSchedules.Notes as Visit_Notes,IFNULL(pSchedules.Assmt_ID,0) AS Assmt_ID,pSchedules.Pay_ID, pSchedules.StartTime, pSchedules.EndTime,pSchedules.Total_Units, pSchedules.Visit_Date,pSchedules.Patient_ID, Date_format(pAssessments.F177, '%m/%d/%Y') as Certification_Start, Date_format(pAssessments.F178, '%m/%d/%Y') as Certification_END, pSchedules.Schedules_Dup,pSchedules.pgnotesdraft, pSchedules.prn_visit 
			FROM #Request.prefix_db_agency#.pSchedules
			LEFT OUTER JOIN  #Request.prefix_db_agency#.pAuths  ON pAuths.Auth_ID = pSchedules.Auth_ID 
				AND pAuths.Status = 0 
			JOIN  #Request.prefix_db_agency#.pPatients on pSchedules.Patient_ID = pPatients.Patient_ID
			JOIN #Request.prefix_db_agency#.pAssessments on (pSchedules.Assmt_ID = pAssessments.Assmt_ID)
			LEFT OUTER JOIN #Request.prefix_db_agency#.pPtPayer pPtPayer on pPtPayer.PtPayer_ID = pSchedules.PtPayer_ID AND pPtPayer.status = 0
			LEFT OUTER JOIN  #Request.prefix_db_agency#.pPayer pp on pPtPayer.Payer_ID = pp.Pay_ID  
				AND pp.status = 0
				
			
			<cfif structKeyExists(arguments, 'eventpayer') AND arguments.eventpayer neq ''>
				AND pp.Pay_id IN (#arguments.eventpayer#)
			</cfif>

			<cfif isdefined('Session.eventpayerview') AND Session.eventpayerview neq '' AND Session.eventpayerview neq -1>
						AND pp.Pay_id IN (#Session.eventpayerview#)
			</cfif>  

			LEFT OUTER JOIN   #Request.prefix_db_lookup#.pEmployee on pSchedules.Emp_ID = pEmployee.Emp_ID

			<cfif structKeyExists(arguments, 'eventemployee') AND arguments.eventemployee neq '' >
				AND pSchedules.Emp_ID IN (#arguments.eventemployee#)
			</cfif> 

			LEFT OUTER JOIN   #Request.prefix_db_agency#.assessment_assign ON assessment_assign.Assmt_ID =  pSchedules.Schedule_ID
			LEFT OUTER JOIN   #Request.prefix_db_agency#.pAssessments as asseval ON assessment_assign.Assmt_ID =  asseval.Assmt_ID


			<cfif structKeyExists(arguments, 'from_date') and arguments.from_date neq '' and structKeyExists(arguments, 'to_date') and arguments.to_date neq ''>
		     	WHERE pSchedules.Visit_Date between '#DateFormat(arguments.from_date, "yyyy-mm-dd")#' and  '#DateFormat(arguments.to_date, "yyyy-mm-dd")#'
			<cfelse>
			 	WHERE (pSchedules.Visit_Date >= #CreateODBCDate(arguments.start)# AND pSchedules.Visit_Date <= #CreateODBCDate(arguments.end)#) 
			</cfif>

			AND pPatients.Status < <cfqueryparam cfsqltype="cf_sql_integer" value="2">
			AND pSchedules.Status IN (0) 			
			<cfif session.eaType neq 1 OR session.iSAgencyLogin EQ 1 >

				<cfif isdefined('Session.eventpatientview') AND Session.eventpatientview neq '' AND Session.eventpatientview neq -1>
					AND pSchedules.patient_ID IN (#Session.eventpatientview#)
				</cfif>
				
				<cfif isdefined('Session.eventemployeeview') AND Session.eventemployeeview neq '' AND Session.eventemployeeview neq -1 AND Session.isagencylogin NEQ '1'>
					AND pSchedules.Emp_ID IN (#Session.eventemployeeview#)
				</cfif>

				 <cfif isdefined('Session.eventskillview') AND Session.eventskillview neq '' AND Session.eventskillview neq -1>
					AND 
					(((pSchedules.Skill IN (#PreserveSingleQuotes(arguments.visittype)#) )
							<cfif Session.eventskillview contains "Assessment">
							 or (pSchedules.Skill like '1%' or pSchedules.Skill like '3%' or pSchedules.Skill like '4%' or 
							 pSchedules.Skill like '5%' or pSchedules.Skill like '6%' or pSchedules.Skill like '7%' or 
							 pSchedules.Skill like '7%' or pSchedules.Skill like '8%' or pSchedules.Skill like '9%' or 
							 pSchedules.Skill like 'Hospice%' )
							</cfif>
							<cfif Session.eventskillview contains "Evaluation">
							or (pSchedules.Skill like '%Evaluation' )
							</cfif>
					) OR pSchedules.Skill = '')
				</cfif>			
			<cfelse>
				<cfif session.isagencylogin NEQ 1>
			  		 AND pEmployee.Emp_ID = #Session.EmployeeID#
			  	</cfif>
			</cfif>

			AND pAssessments.Status = <cfqueryparam cfsqltype="cf_sql_integer" value="0">

			<cfif structKeyExists(arguments, 'sort_employee') and arguments.sort_employee eq 1>
				ORDER BY  Emp_First 
			<cfelseif structKeyExists(arguments, 'sort_patient') and arguments.sort_patient eq 1>
				ORDER BY   Pt_First
			<cfelse>
		        ORDER BY StartTime, Pt_Last, Pt_First, Emp_Last, Emp_First
			</cfif>

		</cfquery>
	</cffunction>

	<cffunction name="GetSearch" returntype="any" access="public" output="false">

		<cfargument name="eventpayer" required="no" default=""  hint="eventpayer" >
		<cfargument name="eventemployee" required="no" default=""  hint="eventemployee" >
		<cfargument name="from_date" required="no" default=""  hint="from_date" >
		<cfargument name="to_date" required="no" default=""  hint="to_date" >
		<cfargument name="sort_employee" required="no" default="0"  hint="sort_employee" >
		<cfargument name="sort_patient" required="no" default="0"  hint="sort_patient" >
		<cfargument name="start" required="no" default="0"  hint="" >
		<cfargument name="end" required="no" default="0"  hint="" >
		<cfargument name="visittype" required="no" default="0"  hint="" >

		<cfquery  datasource="#Application.DataSrc#" name="GetSearch" cachedwithin="#CreateTimeSpan(0,0,10,0)#">
			SELECT pEmployee.Status, pPatients.Pt_Last, pPatients.Pt_First,pPatients.Pt_Agy_ID,
			pPatients.Pt_Street,pPatients.Pt_City,pPatients.Pt_State,pPatients.Pt_Zip,pPatients.Pt_Phone,
			pPtContacts.Pt_Realtionship,CONCAT(pPtContacts.First_Name, " ", pPtContacts.Last_Name) AS Contact_Name,pPtContacts.Telephone1,pEmployee.Emp_Last, pEmployee.Emp_First, pSchedules.Skill as Visit_Type, pSchedules.patient_sign, pSchedules.Missed,pSchedules.pgnotesdraft,
			pSchedules.Followup_visit,IFNULL(asseval.F25,0) AS assessmentcompletion,  
			CASE WHEN pSchedules.Visit_Type !=  ''  
				 THEN pSchedules.Visit_Type
			ELSE 'Routine Visit' 
		 	END  AS VisitType,
			pSchedules.Emp_ID, pSchedules.Schedule_ID, pSchedules.Progress_Note,pSchedules.Rev_ID,pSchedules.Notes as Visit_Notes,pSchedules.Notes, IFNULL(pSchedules.Assmt_ID,0) AS Assmt_ID,pSchedules.Pay_ID, pSchedules.StartTime, pSchedules.EndTime,pSchedules.Total_Units, pSchedules.Visit_Date,pSchedules.Patient_ID, Date_format(pAssessments.F177, '%m/%d/%Y') as Certification_Start, Date_format(pAssessments.F178, '%m/%d/%Y') as Certification_END,pSchedules.Schedules_Dup,pSchedules.pgnotesdraft, pSchedules.prn_visit  
			FROM #Request.prefix_db_agency#.pSchedules
			JOIN  #Request.prefix_db_agency#.pPatients on pSchedules.Patient_ID = pPatients.Patient_ID
			JOIN #Request.prefix_db_agency#.pAssessments on (pSchedules.Assmt_ID = pAssessments.Assmt_ID)
			LEFT OUTER JOIN #Request.prefix_db_agency#.pPtPayer pPtPayer on pPtPayer.PtPayer_ID = pSchedules.PtPayer_ID AND pPtPayer.status = 0
			LEFT OUTER JOIN #Request.prefix_db_agency#.pPayer pp on pPtPayer.Payer_ID = pp.Pay_ID  AND pp.status = 0
			<cfif structKeyExists(arguments, 'eventpayer') AND arguments.eventpayer neq ''>
				AND pp.Pay_id IN (#arguments.eventpayer#)
			</cfif> 
			<cfif isdefined('Session.eventpayerview') AND Session.eventpayerview neq '' AND Session.eventpayerview neq -1>
				AND pp.Pay_id IN (#Session.eventpayerview#)
			</cfif>
			LEFT OUTER JOIN #Request.prefix_db_agency#.pAuths  ON pAuths.Auth_ID = pSchedules.Auth_ID AND pAuths.Status = 0
			LEFT OUTER JOIN  #Request.prefix_db_lookup#.pEmployee on pSchedules.Emp_ID = pEmployee.Emp_ID
			<cfif structKeyExists(arguments, 'eventemployee') AND arguments.eventemployee neq '' >
				AND pSchedules.Emp_ID IN (#arguments.eventemployee#)
			</cfif>

			LEFT OUTER JOIN   #Request.prefix_db_agency#.assessment_assign ON assessment_assign.Assmt_ID =  pSchedules.Schedule_ID
			LEFT OUTER JOIN   #Request.prefix_db_agency#.pAssessments as asseval ON pSchedules.Assmt_ID =  asseval.Assmt_ID

			LEFT OUTER JOIN #Request.prefix_db_agency#.pPtContacts  on pPtContacts.Patient_ID = pPatients.Patient_ID  AND pPtContacts.status = 0
			AND pPtContacts.Emergency = 1


			<cfif structKeyExists(arguments, 'from_date') and arguments.from_date neq '' and structKeyExists(arguments, 'to_date') and arguments.to_date neq '' AND NOT isDefined('url.WeekChange')>
		     	WHERE pSchedules.Visit_Date between '#DateFormat(arguments.from_date, "yyyy-mm-dd")#' and  '#DateFormat(arguments.to_date, "yyyy-mm-dd")#'
			 <cfelse>
			 	WHERE (pSchedules.Visit_Date >= #CreateODBCDate(arguments.start)# AND pSchedules.Visit_Date <= #CreateODBCDate(arguments.end)#) 
			 </cfif>
			<cfif Session.isagencylogin NEQ '1'>
				AND pSchedules.Emp_ID = pEmployee.Emp_ID
			</cfif>
			AND pEmployee.Status < 2
			AND pSchedules.status = 0		      
			
			<cfif  session.eaType neq 1 OR session.iSAgencyLogin EQ 1>
				<cfif isdefined('Session.eventpatientview') AND Session.eventpatientview neq '' AND Session.eventpatientview neq -1>
					AND pSchedules.patient_ID IN (#Session.eventpatientview#)
				</cfif>
				<cfif isdefined('Session.eventemployeeview') AND Session.eventemployeeview neq '' AND Session.eventemployeeview neq -1  AND Session.eventemployeeview neq -1 AND Session.isagencylogin NEQ '1'>
					AND pSchedules.Emp_ID IN (#Session.eventemployeeview#)
				</cfif>
				
				<cfif isdefined('Session.eventskillview') AND Session.eventskillview neq '' AND Session.eventskillview neq -1>
					AND 
					(   (
						( pSchedules.Skill IN (#PreserveSingleQuotes(arguments.visittype)#))
							<cfif Session.eventskillview contains "Assessment">
							 or (pSchedules.Skill like '1%' or pSchedules.Skill like '3%' or pSchedules.Skill like '4%' or 
							 pSchedules.Skill like '5%' or pSchedules.Skill like '6%' or pSchedules.Skill like '7%' or 
							 pSchedules.Skill like '7%' or pSchedules.Skill like '8%' or pSchedules.Skill like '9%' or 
							 pSchedules.Skill like 'Hospice%' )
							</cfif>
							<cfif Session.eventskillview contains "Evaluation">
							or (pSchedules.Skill like '%Evaluation' )
							</cfif>
					    ) OR pSchedules.Skill = '')
				</cfif>		
			<cfelse>
				<cfif session.isagencylogin NEQ 1>
					AND pEmployee.Emp_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#Session.EmployeeID#"> 
				</cfif>
			</cfif> 
			AND pAssessments.Status = 0
			AND pPatients.Status < <cfqueryparam cfsqltype="cf_sql_integer" value="2">
			Group by pSchedules.Schedule_ID

			<cfif structKeyExists(arguments, 'sort_employee') and arguments.sort_employee eq 1>
				ORDER BY  Emp_First 
			<cfelseif structKeyExists(arguments, 'sort_patient') and arguments.sort_patient eq 1>
				ORDER BY   Pt_First
			<cfelse>
		        ORDER BY StartTime, Pt_Last, Pt_First, Emp_Last, Emp_First
			</cfif>

		</cfquery>
	</cffunction>
	<cffunction name="DeletePatientSign"  access="remote" output="Yes" returnFormat= "plain">
		<cfargument name="Schedule_ID" required="yes" default="0">
		 <cfscript>
       		 pgcfc = CreateObject("Component", "components.general.progressnotes");
       		 retiredschedules = pgcfc.retire_schedules('#arguments.Schedule_ID#'); 
        </cfscript>
		<cfquery name="update_schduedules" datasource="#Application.DataSrc#">
			UPDATE #Request.prefix_db_agency#.pSchedules
			SET patient_sign = <cfqueryparam value="" cfsqltype="cf_sql_varchar" null="yes"  />,
			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="show_clin_fix_edit"  access="remote" output="Yes" returnFormat= "plain">   
        <cfargument name="Schedule_ID" required="yes" default="0">
        <cfquery name="getSchedules" datasource="#Application.DataSrc#">
            SELECT * FROM  #Request.prefix_db_agency#.pSchedules 
            WHERE  Schedule_ID = <cfqueryparam value="#arguments.Schedule_ID#" cfsqltype="CF_SQL_INTEGER">
            AND Status = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER">
        </cfquery>
        <cfsavecontent  variable = "html_diagnosis">           
            <cfoutput>
                <form name="editDiag_form" id="editDiag_form_id" action="" method="post">                     
                    <input type="hidden" name="Schedule_ID" id="Schedule_ID"  value="#getSchedules.Schedule_ID#"/>            
                    <div class="form-body">
                        <div class="form-group">
                            <label>Comment</label>
                            <cfoutput>
                            <textarea name="clin_fix" id="clin_fix" class="form-control" cols="50" rows="5">#getSchedules.clin_fix#</textarea>
                            </cfoutput>
                        </div>                      
                    </div>
                </form>     
            </cfoutput> 
        </cfsavecontent>    
        <cfreturn html_diagnosis />    
    </cffunction>


     <cffunction name="updateclin_fix"  access="remote" output="Yes" returnFormat= "plain"> 
        <cfargument name="Schedule_ID" required="yes" default="" />
        <cfargument name="clin_fix" required="yes" default="" />
        <cfquery name="updateProbs" datasource="#Application.DataSrc#">
           UPDATE #Request.prefix_db_agency#.pSchedules 
           SET clin_fix = <cfqueryparam value="#arguments.clin_fix#" cfsqltype="cf_sql_varchar">
           WHERE  Schedule_ID = <cfqueryparam value="#arguments.Schedule_ID#" cfsqltype="CF_SQL_INTEGER">
            AND Status = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER">
        </cfquery>
       <cfreturn "Success" />
    </cffunction>



</cfcomponent>
