<!--- Collapse duplicate active pAssessments rows (same Assmt_ID, Status=0).
     Keeps highest AutoAssmt_ID active; sets older duplicates to Status=2.
     Preview: open this page. Apply: ?doUpdate=1 --->
<cfquery name="GetTable" datasource="#Application.DataSrc#">
	SELECT TABLE_SCHEMA
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_SCHEMA LIKE '%agency_%'
	GROUP BY TABLE_SCHEMA
</cfquery>

<cfset database = arrayNew(1)>
<cfloop query="GetTable">
	<cfset database[CurrentRow] = TABLE_SCHEMA>
</cfloop>

<cfset updateMode = (isDefined("url.doUpdate") AND url.doUpdate EQ "1") />

<h1>Duplicate active assessments (same Assmt_ID, Status = 0)</h1>
<cfif updateMode>
	<p style="color:red;"><b>UPDATE mode</b> — older duplicates will be set to Status = 2.</p>
<cfelse>
	<p>Preview only. Append <code>?doUpdate=1</code> to apply.</p>
</cfif>

<cfloop from="1" to="#ArrayLen(database)#" index="ind">
	<cfset Request.prefix_db_agency = database[ind] />

	<cfquery name="getdups" datasource="#Application.DataSrc#">
		SELECT Assmt_ID, COUNT(*) AS tot_count, MAX(AutoAssmt_ID) AS keep_AutoAssmt_ID
		FROM #Request.prefix_db_agency#.pAssessments
		WHERE Status = 0
		GROUP BY Assmt_ID
		HAVING COUNT(*) > 1
		ORDER BY tot_count DESC, Assmt_ID
	</cfquery>

	<cfif getdups.recordcount GT 0>
		<h3><cfoutput>#Request.prefix_db_agency# — #getdups.recordcount# Assmt_ID(s) with duplicates</cfoutput></h3>
		<table border="1" cellpadding="4" cellspacing="0">
			<thead>
				<tr>
					<th>Assmt_ID</th>
					<th>Active count</th>
					<th>Keep AutoAssmt_ID</th>
					<th>Agency</th>
				</tr>
			</thead>
			<tbody>
				<cfoutput query="getdups">
					<tr>
						<td>#Assmt_ID#</td>
						<td>#tot_count#</td>
						<td>#keep_AutoAssmt_ID#</td>
						<td>#Request.prefix_db_agency#</td>
					</tr>
				</cfoutput>
			</tbody>
		</table>

		<cfif updateMode>
			<cfset totalUpdated = 0 />
			<cfset cleanupModBy = 0 />
			<cfif isDefined("session.employeeid") AND isNumeric(session.employeeid)>
				<cfset cleanupModBy = Val(session.employeeid) />
			</cfif>
			<cfloop query="getdups">
				<cfquery name="fixDups" result="fixDupsResult" datasource="#Application.DataSrc#">
					UPDATE #Request.prefix_db_agency#.pAssessments
					SET Status = 2,
						Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
						Record_Mod_By = <cfqueryparam value="#cleanupModBy#" cfsqltype="cf_sql_integer">
					WHERE Assmt_ID = <cfqueryparam value="#getdups.Assmt_ID#" cfsqltype="cf_sql_integer">
					AND Status = 0
					AND AutoAssmt_ID < <cfqueryparam value="#getdups.keep_AutoAssmt_ID#" cfsqltype="cf_sql_integer">
				</cfquery>
				<cfif structKeyExists(fixDupsResult, "RecordCount")>
					<cfset totalUpdated = totalUpdated + Val(fixDupsResult.RecordCount) />
				</cfif>
			</cfloop>
			<cfoutput>
				<p style="color:green;font-weight:bold;">
					Done — #totalUpdated# duplicate row(s) set to Status=2 for #Request.prefix_db_agency#. Highest AutoAssmt_ID kept active.
				</p>
			</cfoutput>
		</cfif>
	</cfif>
</cfloop>
