File: D:/web/hyperflight/apps/status/index - Copy.asp
<%@ Language=VBScript %>
<% Option Explicit %>
<%
Response.Buffer = True
'==========================================================
' AUTO-REFRESH + REFRESH COUNT (Session-based)
'==========================================================
Dim refreshSeconds
refreshSeconds = 60 ' 1 minute
If IsEmpty(Session("RefreshCount")) Or IsNull(Session("RefreshCount")) Then
Session("RefreshCount") = 0
End If
Session("RefreshCount") = CLng(Session("RefreshCount")) + 1
'==========================================================
' CONNECTION (DSN)
'==========================================================
Dim cn, rs, sql
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "DSN=MySQL_hyperflight;"
'==========================================================
' SQL (MariaDB with ROW_NUMBER())
'==========================================================
sql = ""
sql = sql & "SELECT StatusText, Orders, SortOrder " & vbCrLf
sql = sql & "FROM ( " & vbCrLf
' --- Payment statuses: fixed display order ---
sql = sql & " SELECT " & vbCrLf
sql = sql & " Status AS StatusText, " & vbCrLf
sql = sql & " COUNT(*) AS Orders, " & vbCrLf
sql = sql & " CASE Status " & vbCrLf
sql = sql & " WHEN 'PAYMENT RECEIVED' THEN 10 " & vbCrLf
sql = sql & " WHEN 'PAYMENT ON ACCOUNT' THEN 20 " & vbCrLf
sql = sql & " WHEN 'AWAITING PAYMENT' THEN 30 " & vbCrLf
sql = sql & " ELSE 99 " & vbCrLf
sql = sql & " END AS SortOrder " & vbCrLf
sql = sql & " FROM orders " & vbCrLf
sql = sql & " WHERE Status IN ('PAYMENT RECEIVED','PAYMENT ON ACCOUNT','AWAITING PAYMENT') " & vbCrLf
sql = sql & " GROUP BY Status " & vbCrLf
sql = sql & " UNION ALL " & vbCrLf
' --- Spacer row ---
sql = sql & " SELECT NULL AS StatusText, NULL AS Orders, 1000 AS SortOrder " & vbCrLf
sql = sql & " UNION ALL " & vbCrLf
' --- Sent by courier (today): Courier DESC via ROW_NUMBER ---
sql = sql & " SELECT " & vbCrLf
sql = sql & " CONCAT('Sent ', Courier) AS StatusText, " & vbCrLf
sql = sql & " Orders, " & vbCrLf
sql = sql & " 1100 + rn AS SortOrder " & vbCrLf
sql = sql & " FROM ( " & vbCrLf
sql = sql & " SELECT " & vbCrLf
sql = sql & " Courier, " & vbCrLf
sql = sql & " COUNT(*) AS Orders, " & vbCrLf
sql = sql & " ROW_NUMBER() OVER (ORDER BY Courier DESC) AS rn " & vbCrLf
sql = sql & " FROM orders " & vbCrLf
sql = sql & " WHERE Status='COMPLETED' AND DATE(DateTimeCompleted)=CURDATE() " & vbCrLf
sql = sql & " GROUP BY Courier " & vbCrLf
sql = sql & " ) s " & vbCrLf
sql = sql & " UNION ALL " & vbCrLf
' --- Total sent (today) ---
sql = sql & " SELECT 'Total Sent' AS StatusText, COUNT(*) AS Orders, 1999 AS SortOrder " & vbCrLf
sql = sql & " FROM orders " & vbCrLf
sql = sql & " WHERE Status='COMPLETED' AND DATE(DateTimeCompleted)=CURDATE() " & vbCrLf
sql = sql & ") x " & vbCrLf
sql = sql & "ORDER BY SortOrder; "
'==========================================================
' RUN
'==========================================================
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, cn, 0, 1 ' forward-only, read-only
Dim lastUpdated : lastUpdated = Now()
Function HtmlEncode(ByVal s)
If IsNull(s) Then
HtmlEncode = ""
Else
HtmlEncode = Server.HTMLEncode(CStr(s))
End If
End Function
Function FormatUkDateTime(ByVal dt)
Dim d, m, y, hh, nn, ss
d = Right("0" & Day(dt), 2)
m = Right("0" & Month(dt), 2)
y = Year(dt)
hh = Right("0" & Hour(dt), 2)
nn = Right("0" & Minute(dt), 2)
ss = Right("0" & Second(dt), 2)
FormatUkDateTime = d & "/" & m & "/" & y & " " & hh & ":" & nn & ":" & ss
End Function
%>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="refresh" content="<%= refreshSeconds %>">
<title>Orders Status</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
.status-table td, .status-table th { vertical-align: middle; }
.status-big { font-weight: 800; font-size: clamp(1.05rem, 2.2vw, 1.45rem); }
.count-big { font-weight: 800; font-size: clamp(1.05rem, 2.2vw, 1.45rem); text-align: right; }
.spacer-row td { padding: 0.6rem; background: #fff; }
.total-row td { font-weight: 800; }
</style>
</head>
<body class="bg-light">
<div class="container py-3" style="max-width:900px;">
<div class="card shadow-sm">
<div class="card-body">
<div class="d-flex flex-column flex-sm-row align-items-sm-center justify-content-between gap-2 mb-3">
<form method="get" action="" class="m-0">
<button type="submit" class="btn btn-outline-secondary btn-sm">Refresh</button>
</form>
<div class="text-muted small">
<span class="me-2">Last Updated:</span>
<strong><%= FormatUkDateTime(lastUpdated) %></strong>
<span class="ms-2">(<%= Session("RefreshCount") %>)</span>
<span class="ms-2">Auto refresh: <%= refreshSeconds %>s</span>
</div>
</div>
<div class="table-responsive">
<table class="table table-bordered table-sm status-table mb-0 bg-white">
<thead class="table-light">
<tr>
<th style="width:75%;">Status</th>
<th style="width:25%;" class="text-end">Orders</th>
</tr>
</thead>
<tbody>
<%
If rs.EOF Then
%>
<tr><td colspan="2" class="text-center text-muted py-4">No data returned.</td></tr>
<%
Else
Dim statusText, ordersCount, rowClass
Do While Not rs.EOF
statusText = rs("StatusText")
ordersCount = rs("Orders")
If IsNull(statusText) And IsNull(ordersCount) Then
%>
<tr class="spacer-row"><td colspan="2"> </td></tr>
<%
Else
rowClass = ""
If Not IsNull(statusText) Then
If CStr(statusText) = "Total Sent" Then rowClass = "total-row"
End If
%>
<tr class="<%= rowClass %>">
<td class="status-big"><%= HtmlEncode(statusText) %></td>
<td class="count-big"><%= ordersCount %></td>
</tr>
<%
End If
rs.MoveNext
Loop
End If
%>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<%
'==========================================================
' CLEANUP
'==========================================================
On Error Resume Next
If Not rs Is Nothing Then
If rs.State <> 0 Then rs.Close
End If
Set rs = Nothing
If Not cn Is Nothing Then
If cn.State <> 0 Then cn.Close
End If
Set cn = Nothing
On Error GoTo 0
%>