HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
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">&nbsp;</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
%>