Files
shopdb/charts/warrantychart.asp
cproudlock 1f1bd8ee02 Remove legacy pc tables, fix ASP issues, update dashboard APIs
Database changes (run sql/migration_drop_pc_tables.sql on prod):
- Drop pc, pc_backup_phase2, pc_to_machine_id_mapping tables
- Rename pcid columns to machineid in machineoverrides, dualpathassignments, networkinterfaces
- Recreate 9 views to use machines.machineid instead of pcid
- Clean orphaned records and add FK constraints to machines table

ASP fixes:
- editprinter.asp: Fix CLng type mismatch when no printerid provided
- includes/sql.asp: Remove AutoDeactivateExpiredNotifications (endtime handles expiry)
- includes/leftsidebar.asp: Update fiscal week banner styling, remove dead Information link
- charts/warrantychart.asp: Use vw_warranty_status instead of pc table

Dashboard API renames (naming convention):
- shopfloor-dashboard: Update to use apishopfloor.asp, apibusinessunits.asp
- tv-dashboard: Rename api_slides.asp to apislides.asp

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 09:05:06 -05:00

108 lines
4.4 KiB
Plaintext

<%
' Use vw_warranty_status view which joins machines with warranties table
strSQL2 = "SELECT " & _
"COALESCE(SUM(CASE WHEN warrantystatus = 'Active' AND warrantydaysremaining > 90 THEN 1 ELSE 0 END), 0) as active_good, " & _
"COALESCE(SUM(CASE WHEN warrantystatus = 'Active' AND warrantydaysremaining BETWEEN 31 AND 90 THEN 1 ELSE 0 END), 0) as active_warning, " & _
"COALESCE(SUM(CASE WHEN warrantystatus = 'Active' AND warrantydaysremaining <= 30 AND warrantydaysremaining >= 0 THEN 1 ELSE 0 END), 0) as expiring_soon, " & _
"COALESCE(SUM(CASE WHEN warrantystatus = 'Expired' OR warrantydaysremaining < 0 THEN 1 ELSE 0 END), 0) as expired, " & _
"COALESCE(SUM(CASE WHEN warrantystatus IS NULL OR warrantystatus = '' OR warrantystatus = 'Unknown' THEN 1 ELSE 0 END), 0) as unknown, " & _
"COUNT(*) as total " & _
"FROM vw_warranty_status"
set rswarranty = objconn.Execute(strSQL2)
activeGood = CLng(rswarranty("active_good"))
activeWarning = CLng(rswarranty("active_warning"))
expiringSoon = CLng(rswarranty("expiring_soon"))
expired = CLng(rswarranty("expired"))
unknown = CLng(rswarranty("unknown"))
total = CLng(rswarranty("total"))
If total = 0 Then total = 1
activeGoodPct = FormatNumber(CDbl(activeGood)/CDbl(total)*100,1)
activeWarningPct = FormatNumber(CDbl(activeWarning)/CDbl(total)*100,1)
expiringSoonPct = FormatNumber(CDbl(expiringSoon)/CDbl(total)*100,1)
expiredPct = FormatNumber(CDbl(expired)/CDbl(total)*100,1)
unknownPct = FormatNumber(CDbl(unknown)/CDbl(total)*100,1)
%>
<script>
$(function() {
var ctx = document.getElementById("warrantyChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'doughnut',
data: {
labels: ["Active (>90 days)", "Active (31-90 days)", "Expiring Soon (<=30 days)", "Expired", "Unknown"],
datasets: [{
backgroundColor: [
"#ffffff",
"rgba(255, 255, 255, 0.80)",
"rgba(255, 255, 255, 0.60)",
"rgba(255, 255, 255, 0.40)",
"rgba(255, 255, 255, 0.20)"
],
data: [<%=activeGood%>, <%=activeWarning%>, <%=expiringSoon%>, <%=expired%>, <%=unknown%>],
borderWidth: [1, 1, 1, 1, 1]
}]
},
options: {
maintainAspectRatio: false,
legend: {
position: "bottom",
display: false,
labels: {
fontColor: '#ddd',
boxWidth: 15
}
},
tooltips: {
displayColors: false
}
}
});
});
</script>
<div class="col-lg-4">
<div class="card">
<div class="card-header">Warranty Status
<div class="card-action">
</div>
</div>
<div class="card-body">
<div class="chart-container-1">
<canvas id="warrantyChart"></canvas>
</div>
</div>
<div class="table-responsive">
<table class="table align-items-center">
<tbody>
<tr>
<td><i class="fa fa-circle text-white mr-2"></i>Active (>90 days)</td>
<td><%=activeGood%></td>
<td><%=activeGoodPct%>%</td>
</tr>
<tr>
<td><i class="fa fa-circle text-light-1 mr-2"></i>Active (31-90 days)</td>
<td><%=activeWarning%></td>
<td><%=activeWarningPct%>%</td>
</tr>
<tr>
<td><i class="fa fa-circle text-light-2 mr-2"></i>Expiring Soon (<=30 days)</td>
<td><%=expiringSoon%></td>
<td><%=expiringSoonPct%>%</td>
</tr>
<tr>
<td><i class="fa fa-circle text-light-3 mr-2"></i>Expired</td>
<td><%=expired%></td>
<td><%=expiredPct%>%</td>
</tr>
<% If unknown > 0 Then %>
<tr>
<td><i class="fa fa-circle text-light-4 mr-2"></i>Unknown</td>
<td><%=unknown%></td>
<td><%=unknownPct%>%</td>
</tr>
<% End If %>
</tbody>
</table>
</div>
</div>
</div>