<cfcomponent displayname="ProgressNotes"   hint="ColdFusion Component for  ProgressNotes">
	<cffunction name="insert_goals_visit"  access="remote" output="Yes" 
	 returnformat="JSON" >   
		 <cfargument name="Assmt_ID" required="yes" default="0">
		 <cfargument name="Skill" required="yes" default="0">
		 <cfargument name="Schedule_ID" required="no" default="0">
		 <cfargument name="debugging" required="no" default="0">
		 <cfargument name="AdmitID" required="no" default="0">

		 <cfset Request.Assmt_ID = arguments.Assmt_ID />
		 <cfset skilltype = arguments.Skill />
		 <cfset Request.Schedule_ID = arguments.Schedule_ID />
		 <cfset Request.AdmitID = arguments.AdmitID />
		 <cfparam name ="answer_1" default="0">
		 <cfparam name ="answer_2" default="0">
		 <cfparam name ="answer_3" default="0">
		 <cfparam name ="answer_4" default="0">
		 <cfparam name ="Visitno" default="0">
		 <cfparam name ="request.increment_goal_this_visit" default="0">
		 	<cfquery  name="get_ass" datasource="#Application.DataSrc#">
				SELECT * FROM #Request.prefix_db_agency#.pAssessments
				WHERE  Assmt_ID = <cfqueryparam value="#Val(arguments.Assmt_ID)#"  cfsqltype="CF_SQL_INTEGER">  
				AND Status = 0
			</cfquery>
			<cfset Request.Admit_ID = 0 />
			<cfif Val(arguments.AdmitID) GT 0>
				<cfset Request.Admit_ID = Val(arguments.AdmitID) />
			<cfelseif get_ass.recordcount GT 0 AND Val(get_ass.Admit_ID) GT 0>
				<cfset Request.Admit_ID = Val(get_ass.Admit_ID) />
			</cfif>
			<cfif Request.Admit_ID GT 0>
				<cfquery  name="getass" datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_agency#.pAssessments
					WHERE  Admit_ID = <cfqueryparam value="#Request.Admit_ID#"  cfsqltype="CF_SQL_INTEGER">  
					AND Status = 0
				</cfquery>
				<cfset assmt_ids = ValueList(getass.Assmt_ID) />
			<cfelse>
				<cfset assmt_ids = Val(arguments.Assmt_ID) />
			</cfif>
			<cfif NOT Len(Trim(assmt_ids))>
				<cfset assmt_ids = Val(arguments.Assmt_ID) />
			</cfif>

			<cfquery  name="getactive_auths" datasource="#Application.DataSrc#">
				SELECT IFNULL(SUM(Total_Visits),0) AS tot_visits, Skill FROM #Request.prefix_db_agency#.pAuths
				WHERE  Assmt_ID  IN (<cfqueryparam value="#assmt_ids#"  cfsqltype="CF_SQL_INTEGER" list="yes">) 
				AND  Skill  = '#skilltype#'
               	AND Status = 0
			</cfquery>
			
			
			<cfparam name="request.total_visits" default="0">
                
			<cfquery  name="getallschedule" datasource="#Application.DataSrc#">
			   SELECT * FROM #Request.prefix_db_agency#.pSchedules  		 
			   WHERE Assmt_ID  IN (<cfqueryparam value="#assmt_ids#"  cfsqltype="CF_SQL_INTEGER" list="yes">) 
			   AND Status = <cfqueryparam value="0"  cfsqltype="CF_SQL_INTEGER">
			   AND Skill = '#skilltype#'
			   AND Auth_ID > 0
			</cfquery>
			<cfquery  name="get_schedules"  dbtype="query">
			   SELECT * FROM getallschedule	 
			</cfquery>
			<cfset request.total_visits = get_schedules.recordcount />
			<cfparam name="request.severity_problem" default="0">
			<cfquery  name="getvitalscount" datasource="#Application.DataSrc#">
				 SELECT * FROM #Request.prefix_db_agency#.pWoundsVitals 
				WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  AND status = 0
				AND VitalOrWound = 'vital'
				AND Status = 0
			</cfquery>
			<cfif getvitalscount.recordcount gt 0 >
				<cfset request.severity_problem =  getvitalscount.recordcount * 0 />
			</cfif>

			<cfquery  name="getskillprobcount" datasource="#Application.DataSrc#">
				 SELECT SUM(CASE  WHEN LEFT(Answer,2) > 2 THEN  LEFT(Answer,2)
			     	ELSE '2'
			     	END ) as sev ,
			     Answer,Severity,
				pProblem.* FROM #Request.prefix_db_agency#.pProblem 
				WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  AND status = 0
				AND skill = '#skilltype#' 
				AND M0_No NOT LIKE 'M102%'
				<cfif skilltype NEQ 'SN'>
					AND Description like 'GG%'
				</cfif>
				<!---AND  DATE_FORMAT(Date_Create, '%Y-%m-%d') <= '#DateFormat(GetSched.Visit_Date,"yyyy-mm-dd")#'--->
			</cfquery>
			<cfif getskillprobcount.sev gt 0 >
				<cfset request.severity_problem = request.severity_problem +  getskillprobcount.sev />
			</cfif>
			<cfquery  name="getallcareplans" datasource="#Application.DataSrc#">
				 SELECT * FROM #Request.prefix_db_agency#.pCareplan
				WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  
				AND Type like '%goal%'
				AND Status = 0
			</cfquery>
			<cfparam name="request.total_goal" default="0">
			 <cfif skilltype EQ 'SN'>	
					 <cfquery  name="get_skillgoals" dbtype="query">
						SELECT * FROM getallcareplans
						WHERE Skill =  '#skilltype#' AND Type = 'goal'
						<!---AND (Date_Resolve IS NOT NULL OR goal_met = 1)--->
                         AND (Status = 0)
					</cfquery>
					<cfset request.total_goal_count = get_skillgoals.recordcount />
					<cfset request.total_goal = get_skillgoals.recordcount />
			<cfelse>
				<cfquery  name="getskillgoals" datasource="#Application.DataSrc#">
							SELECT IFNULL(SUM(Left(IFNULL(Severity,0),2)),0) AS total_goals, pProblem.*  FROM  
							   #Request.prefix_db_agency#.pProblem
							  WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#" cfsqltype="CF_SQL_INTEGER">
					          AND Skill = '#skilltype#'  
					       AND  Status = 0 
					       AND Description like 'GG%'
		 		</cfquery>
				<cfset request.total_goal_count = getskillgoals.total_goals >
				 <cfquery  name="get_skillgoals" dbtype="query">
					SELECT * FROM getallcareplans
					WHERE Skill =  '#skilltype#' AND Type = 'goal'
					AND Status = 0
				</cfquery>
					<cfset request.total_goal = get_skillgoals.recordcount />
			</cfif> 
			
			<cfparam name="request.unresolvedgoals" default="0">
			<cfif skilltype EQ 'SN'>		
			    <cfquery  name="getSNskillgoals" dbtype="query">
							SELECT * FROM getallcareplans
							WHERE Skill =  '#skilltype#' AND Type = 'goal'
							<!--- AND (Date_Resolve IS NULL OR Date_Resolve >= '#DateFormat(GetSched.Visit_Date,"yyyy-mm-dd")#') ---> 
					</cfquery>
			      <cfset request.severity_goal =  #getSNskillgoals.recordcount# * 4/>   
			<cfelse>
				<cfquery  name="getallcareplans" datasource="#Application.DataSrc#">
						 SELECT
						    SUM(CASE  WHEN Description  like '%- 01.%' THEN   1
						    WHEN Description  like '%- 02.%' THEN   2
						    WHEN Description  like '%- 03.%' THEN   3
						    WHEN Description  like '%- 04.%' THEN   4
						    WHEN Description  like '%- 05.%' THEN   5
						    WHEN Description  like '%- 06.%' THEN   6
						    <!---WHEN (Type  = 'patient_goal' OR  Type  = 'discharge_plan') THEN   4 --->
				             ELSE '4'
					     	END ) as goals, pCareplan.* FROM #Request.prefix_db_agency#.pCareplan 
							WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  AND status = 0
							AND skill = '#skilltype#'
							AND Type IN ('goal' <!---,'patient_goal','discharge_plan'--->)
							AND Status = 0
							<!--- AND (Date_Resolve IS NULL OR goal_met = 1) --->
		     </cfquery>
				<cfset request.severity_goal =  #getallcareplans.goals# />
			</cfif>

			
			<cfquery  name="getallschedule" datasource="#Application.DataSrc#">
			   SELECT * FROM #Request.prefix_db_agency#.pSchedules  		 
			   WHERE Assmt_ID =  <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">
			   AND Status = <cfqueryparam value="0"  cfsqltype="CF_SQL_INTEGER">
			</cfquery>
			<cfquery  name="getschedule" dbtype="query">
			   SELECT * FROM getallschedule 
			   WHERE Schedule_ID = '#Request.Schedule_ID#'
			</cfquery>
			
			
			<cfquery  name="getskill_schedules" datasource="#Application.DataSrc#">
			   SELECT * FROM #Request.prefix_db_agency#.pSchedules 
			   WHERE  Assmt_ID   IN (<cfqueryparam value="#assmt_ids#"  cfsqltype="CF_SQL_INTEGER" list="yes">) 
			   AND Status = <cfqueryparam value="0"  cfsqltype="CF_SQL_INTEGER">
			   AND Skill = '#skilltype#' 
			   AND (Visit_Type not like '%9%' OR Visit_Type IS NULL)
			</cfquery>

			<cfquery  name="getsnotcompleted"  dbtype="query">
			   SELECT * FROM getallschedule	 
			   WHERE Auth_ID =  '#getallschedule.Auth_ID#'
			   AND pgnotesdraft != 2
			</cfquery>
			<cfset request.remaining_visit = getsnotcompleted.recordcount />
            <cfparam name="request.increment_goal_this_visit" default="0">
			<cfparam name="request.goal_result_this_visit" default="0">
			
			<cfquery  name="getassess" datasource="#Application.DataSrc#">
					SELECT  pAssessments.*,IFNULL(pAssessments.F305,0) AS answer_1 FROM #Request.prefix_db_agency#.pAssessments 
					WHERE  Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER"> 
					 AND status = 0 
			</cfquery>

			<cfif skilltype EQ 'SN'>
					<cfset goal_value =  #request.total_goal# * 4 />
					<cfset answer_1 =  #getassess.answer_1# />
					<!--- Visit_No already excludes SOC, ROC, Adult Eval, and Missed visits, so use it directly --->
					<cfset Visitno = (isDefined("getschedule.Visit_No") AND isNumeric(getschedule.Visit_No) AND getschedule.Visit_No GT 0) ? getschedule.Visit_No : 0 >
					
					<!--- Add division by zero protection --->
					<cfif getactive_auths.tot_visits GT 1>
						<cfset goal_per = goal_value / (getactive_auths.tot_visits - 1)>
					<cfelse>
						<cfset goal_per = 0>
					</cfif>
					
					<cfset request.increment_goal_this_visit = goal_per * Visitno >      
					<cfif (session.Display EQ 'Melissa Cott' OR CGI.REMOTE_ADDR EQ '103.143.7.161')
					 	AND arguments.debugging EQ '1'>
					   Total #getactive_auths.skill# Visits for Admit - #getactive_auths.tot_visits# (minus 1 for SOC/Eval) #getschedule.Schedule_ID#<br>
						This Visit - <cfdump var="#Visitno#"><br>
						Total goal value - <cfdump var="#goal_value#"><br>
                        Per Visit - <cfdump var="#NumberFormat(goal_per, "()0.0")#"> <br>
                        Expected this visit - <cfdump var="#NumberFormat(request.increment_goal_this_visit, "()0.0")#"> <br>
					</cfif>
			<cfelse>
					<cfquery  name="getass" datasource="#Application.DataSrc#">
					   	SELECT  p1.*,IFNULL(p1.F305,0) AS answer_1 
					   			FROM #Request.prefix_db_agency#.pAssessments  p1
							WHERE p1.status = 0 
							AND p1.Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER"> 
							AND p1.Admit_ID = <cfqueryparam value="#Val(getassess.Admit_ID)#" cfsqltype="CF_SQL_INTEGER">
					</cfquery>
					
			</cfif>
			<!--- <cfif skilltype EQ 'SN'>
			    <cfquery  name="updateSchedulescount" datasource="#Application.DataSrc#">
							UPDATE #Request.prefix_db_agency#.pSchedules  SET 
							  increment_goal_this_visit   		= #increment_goal_this_visit#
							WHERE Assmt_ID =  <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">
							AND Schedule_ID =  <cfqueryparam value="#Request.Schedule_ID#"  cfsqltype="CF_SQL_INTEGER">
							AND Status = <cfqueryparam value="0"  cfsqltype="CF_SQL_INTEGER">
						</cfquery>
			    </cfif> --->

			<cfparam name="request.increment_problem" default="0">
			<cfparam name="request.increment_goal" default="0">
			<cfparam name="request.goals_pervisits" default="0">
			<cfparam name="total_increament" default="0">
			<cfif skilltype EQ 'SN'>
		    	<cfif getschedule.severity_goal gt 0 AND request.remaining_visit gt 0>
						<cfset  request.increment_goal  = (getschedule.severity_goal / request.remaining_visit) />
				<cfelse>
					<cfset request.increment_goal = 0>
				</cfif>
		    <cfelse>
				<cfif getskill_schedules.recordcount gt 0 >
					<cfquery  name="getscare" datasource="#Application.DataSrc#">
							SELECT  COALESCE(SUM(CASE WHEN Description like '%- 0%' THEN Incrmt1
							ELSE 4 END),0) as careplan_incrmt 
							FROM #Request.prefix_db_agency#.pCareplan
						WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  
						AND Type like 'goal%' AND skill = '#skilltype#'
						AND Status = 0
					</cfquery>
					<cfset total_increament =   getscare.careplan_incrmt >
 					<!--- <cfset request.increment_goal = getscare.careplan_incrmt / (getskill_schedules.recordcount)>
					<cfset request.increment_goal_this_visit  = (request.increment_goal * getschedule.Visit_No) >--->
					<cfset request.increment_goal = (getactive_auths.tot_visits LT 2 OR NOT isNumeric(getscare.careplan_incrmt) OR NOT isNumeric(getskill_schedules.recordcount)) ? 0 : getscare.careplan_incrmt / (getactive_auths.tot_visits - 1)>
					<cfset request.increment_goal_this_visit = (NOT isNumeric(request.increment_goal) OR NOT isNumeric(getschedule.Visit_No)) ? 0 : (request.increment_goal * getschedule.Visit_No)>
				</cfif>			
			</cfif>
            <!---NEED THIS --->   
			<cfquery  name="getpgcount" datasource="#Application.DataSrc#">
				SELECT   IFNULL(SUM(severity),0) as sev FROM #Request.prefix_db_agency#.pProgress 
				WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  AND status = 0
				AND Schedule_ID =  <cfqueryparam value="#Request.Schedule_ID#"  cfsqltype="CF_SQL_INTEGER">
				AND Type IN ('problem','symptom')
			</cfquery>
			<cfset  request.result_this_visit = #getpgcount.sev# />
            <cfquery  name="getpgcount2" datasource="#Application.DataSrc#">
				SELECT   IFNULL(SUM(Incrmt1),0) as incrmt1 FROM #Request.prefix_db_agency#.pProgress 
				WHERE Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  AND status = 0
				AND Schedule_ID =  <cfqueryparam value="#Request.Schedule_ID#"  cfsqltype="CF_SQL_INTEGER">
				
			</cfquery>
			<cfset  request.incrmt_this_visit = #getpgcount2.incrmt1# />

			<!--- <cfif skilltype NEQ 'SN'> --->
				<cfquery  name="getpggoals" datasource="#Application.DataSrc#">
					SELECT <!--- IFNULL(SUM(pProgress.severity),0) as sev_old,---> 
							COALESCE(SUM( 
							CASE WHEN pProgress.severity > pProgress.Incrmt1 THEN pProgress.Incrmt1
							ELSE pProgress.severity 
							END ), 0) as sev 
					FROM #Request.prefix_db_agency#.pProgress 
					JOIN #Request.prefix_db_agency#.pProblem ON pProblem.Problem_ID = pProgress.Careplan_ID
					AND pProblem.Status = 0
					JOIN #Request.prefix_db_lookup#.pPathway ON pPathway.Pathway_ID = pProblem.Path_ID 
	                    AND pPathway.type = 'goal' 
	                    AND pPathway.Header IS NOT NULL
	                    AND pPathway.Description like '% - 0%' 	
	                JOIN #Request.prefix_db_agency#.pCareplan ON pPathway.Item_ID = pCareplan.Item_ID
					AND pCareplan.Status = 0 AND pCareplan.Assmt_ID = pProgress.Assmt_ID AND  pCareplan.Skill = pProblem.Skill
					AND pCareplan.Type ='goal'
					WHERE pProgress.Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  AND pProgress.status = 0
					AND pProgress.Schedule_ID =  <cfqueryparam value="#Request.Schedule_ID#"  cfsqltype="CF_SQL_INTEGER">
					AND pProgress.Type  like '%problem%' AND pProgress.Description like 'GG%%'
				</cfquery>
				


				<cfquery  name="getpggoals2" datasource="#Application.DataSrc#">
					SELECT IFNULL(SUM(pProgress.YesOrNo),0) as sev FROM #Request.prefix_db_agency#.pProgress 
					JOIN #Request.prefix_db_agency#.pCareplan ON pCareplan.Careplan_ID = pProgress.Careplan_ID
					AND pCareplan.Status = 0  AND pCareplan.Assmt_ID = pProgress.Assmt_ID 
					AND pCareplan.Skill = '#getschedule.Skill#'
					WHERE pProgress.Assmt_ID = <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">  AND pProgress.status = 0
					AND pProgress.Schedule_ID =  <cfqueryparam value="#Request.Schedule_ID#"  cfsqltype="CF_SQL_INTEGER">
					AND pProgress.Type  like 'goal%'
				</cfquery>
				<cfif getpggoals.recordcount gt 0 >
					<cfset  request.goal_result_this_visit =  request.goal_result_this_visit + #getpggoals.sev# />
				</cfif>
				<cfif getpggoals2.recordcount gt 0 >
					<cfset  request.goal_result_this_visit =  request.goal_result_this_visit + #getpggoals2.sev# />
				</cfif>
			<!--- </cfif> --->
			


			<cfset request.total_increment  = request.increment_goal + request.increment_goal_this_visit >  
			<cfset request.total_result     = request.result_this_visit + request.goal_result_this_visit >
            

			<cfquery  name="updateSchedulescount" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.pSchedules  SET 
				  increment_goal_this_visit   		= #request.increment_goal_this_visit#, 
				  goal_result_this_visit            = #request.goal_result_this_visit#
				  
				WHERE Assmt_ID =  <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">
				AND Schedule_ID =  <cfqueryparam value="#Request.Schedule_ID#"  cfsqltype="CF_SQL_INTEGER">
				AND Status = <cfqueryparam value="0"  cfsqltype="CF_SQL_INTEGER">
			</cfquery>

			<cfquery  name="getschedulelist" datasource="#Application.DataSrc#">
				SELECT * FROM #Request.prefix_db_agency#.pSchedules   
				WHERE Assmt_ID =  <cfqueryparam value="#Request.Assmt_ID#"  cfsqltype="CF_SQL_INTEGER">
				AND Schedule_ID =  <cfqueryparam value="#Request.Schedule_ID#"  cfsqltype="CF_SQL_INTEGER">
				AND Status = <cfqueryparam value="0"  cfsqltype="CF_SQL_INTEGER">
			</cfquery>
                
                      
			<cfif (session.Display EQ 'Melissa Cott' OR CGI.REMOTE_ADDR EQ '103.143.7.161')
				 AND arguments.debugging EQ '1'>
               		 <cfif skilltype NEQ 'SN'>
                       Total #getactive_auths.skill# Visits for Admit - #getactive_auths.tot_visits# (minus 1 for SOC/Eval) #getschedule.Schedule_ID#<br>
                        This Visit - #getschedulelist.Visit_no# <br>
                        Total goal values - A - <cfdump var="#total_increament#"><br>
						Divide Visits into goal - B - <cfdump var="#request.increment_goal#"><br>
                     <!---Per visit -<cfdump var="#request.increment_per#"><br>--->
                     Expected this visit - C-<cfdump var="#request.increment_goal_this_visit#"><br></cfif>
				     Result this visit - F - <cfdump var="#request.goal_result_this_visit#"> <br></cfif>
                
						<cfreturn getschedulelist>

	</cffunction>

</cfcomponent>