From e41f94bb3e9f144d3b77e187b13e4634905c456f Mon Sep 17 00:00:00 2001 From: shieldss Date: Tue, 7 Apr 2026 12:33:25 -0400 Subject: [PATCH] Update billing.php refactor billing to eliminate log errors and increase performance. --- public/billing.php | 889 +++++++++++++++++---------------------------- 1 file changed, 327 insertions(+), 562 deletions(-) diff --git a/public/billing.php b/public/billing.php index 828a028..ebd7f1c 100644 --- a/public/billing.php +++ b/public/billing.php @@ -1,613 +1,378 @@ $_SESSION['expire']) { - session_destroy(); - header("Location: login.php"); - } - - -} else { - // Redirect them to the login page - header("Location: login.php"); +if (!isset($_SESSION['user_id'], $_SESSION['expire'])) { + header('Location: login.php'); + exit; } -?> - (int) $_SESSION['expire']) { + session_destroy(); + header('Location: login.php'); + exit; } -else { -$daterange =''; -} - -?> - - - - - - - -
-
-



-
-
-
-
-
    -
  • -
    date_rangebusinessFILTER
    -
    - - -
    -
    date_range - - - type="text" class="validate"> - -
    - -
    date_range - - - - - - type="text" class="validate"> - -
    - - - - -
    -
    business - - -
    -
    - - - - - -
    - - - - Clear clear'; - - } - - echo ' '; - - ?> - - - -
    -
    -
    - - -
    -
    - -
- - +include 'header.php'; // assumes $conn is created here -
+if (!isset($conn) || !($conn instanceof mysqli)) { + throw new RuntimeException('Database connection is not available.'); +} -SCF Billing Counts Report -'.$selectedlibrary.''; +$beginInput = trim((string) filter_input(INPUT_GET, 'begin', FILTER_DEFAULT)); +$endInput = trim((string) filter_input(INPUT_GET, 'end', FILTER_DEFAULT)); +$selectedLibrary = trim((string) filter_input(INPUT_GET, 'library', FILTER_DEFAULT)); -if((isset($beginurl) AND $beginurl != '') AND (isset($endurl) AND $endurl != '')) { - echo '
'.$beginurl.' - '.$endurl.'
'; -} -?> +$beginFormatted = null; +$endFormatted = null; -
- - - - - - - - -'; - -} - -///// Volumes without special counts /////// - $sqlsum = "SELECT plibrary,SUM(cccount) FROM ProcessingAll WHERE (pcode <>'BX' AND pcode <>'SR' AND pcode <> 'RB' AND pcode <> 'XX' AND pcode <> 'CB' AND pcode <> 'GB' AND pcode <> 'LB' AND pcode <> 'WD') AND (plibrary = '$library') $daterange"; - $querysum = mysqli_query($conn, $sqlsum); -while ($rowsum = mysqli_fetch_array($querysum)) -{ -if($rowsum['SUM(cccount)'] > 0 AND $rowsum['plibrary'] !=='WRLC Books (OUP)') { -echo ''; +$hasDateRange = ($beginFormatted !== null && $endFormatted !== null); + +$rateMap = [ + 'volumes' => 0.75, + 'oversized' => 0.75, + 'boxes' => 2.65, + 'clamshells' => 1.50, + 'flat_boxes' => 2.65, + 'long_boxes' => 2.65, + 'shelf' => 2.00, + 'deaccession' => 1.70, +]; + +$totals = [ + 'volumes' => 0, + 'oversized' => 0, + 'boxes' => 0, + 'clamshells' => 0, + 'flat_boxes' => 0, + 'long_boxes' => 0, + 'shelf' => 0, + 'deaccession' => 0, +]; + +$libraries = []; +$rowsByLibrary = []; + +/** + * Fetch library list + */ +$librarySql = 'SELECT university FROM LibraryLocations'; +$params = []; +$types = ''; + +if ($selectedLibrary !== '') { + $librarySql .= ' WHERE university = ?'; + $params[] = $selectedLibrary; + $types .= 's'; } -else -{ -if($show == 'true') -echo ''; -} -} - - -////// Oversized ///////// - -$sqlXX = "SELECT plibrary, SUM(cccount) FROM ProcessingAll WHERE (pcode ='XX') AND (plibrary = '$library') $daterange"; - $queryXX = mysqli_query($conn, $sqlXX); -while ($rowXX = mysqli_fetch_array($queryXX)) -{ +$librarySql .= ' ORDER BY university ASC'; -if($rowXX['SUM(cccount)'] > 0 AND $rowXX['plibrary'] !=='WRLC Books (OUP)') -echo ''; -else -{ -if($show == 'true') -echo ''; -} +$stmt = $conn->prepare($librarySql); +if (!$stmt) { + throw new RuntimeException('Prepare failed: ' . $conn->error); } -////// Boxes ///////// - -$sqlBX = "SELECT plibrary, SUM(cccount) FROM ProcessingAll WHERE (pcode ='RB' or pcode ='BX') AND (plibrary = '$library') $daterange"; - $queryBX = mysqli_query($conn, $sqlBX); -while ($rowBX = mysqli_fetch_array($queryBX)) - -{ - -if($rowBX['SUM(cccount)'] > 0 AND $rowBX['plibrary'] !=='WRLC Books (OUP)') -echo ''; -else -{ -if($show == 'true') -echo ''; +if ($types !== '') { + $stmt->bind_param($types, ...$params); } -} - - -////// Clamshells ///////// -$sqlCB = "SELECT plibrary, SUM(cccount) FROM ProcessingAll WHERE (pcode ='CB') AND (plibrary = '$library') $daterange"; - $queryCB = mysqli_query($conn, $sqlCB); -while ($rowCB = mysqli_fetch_array($queryCB)) +$stmt->execute(); +$result = $stmt->get_result(); -{ - -if($rowCB['SUM(cccount)'] > 0 AND $rowCB['plibrary'] !=='WRLC Books (OUP)') -echo ''; -else -{ -if($show == 'true') -echo ''; +while ($row = $result->fetch_assoc()) { + $libraries[] = $row['university']; } -} - -////// Flat Boxes ///////// - -$sqlGB = "SELECT plibrary, SUM(cccount) FROM ProcessingAll WHERE (pcode ='GB') AND (plibrary = '$library') $daterange"; - $queryGB = mysqli_query($conn, $sqlGB); -while ($rowGB = mysqli_fetch_array($queryGB)) -{ - -if($rowGB['SUM(cccount)'] > 0 AND $rowGB['plibrary'] !=='WRLC Books (OUP)') -echo ''; -else -{ -if($show == 'true') -echo ''; -} +$stmt->close(); + +/** + * Aggregate all counts in one query + */ +$reportSql = " + SELECT + plibrary, + COALESCE(SUM(CASE WHEN pcode NOT IN ('BX','SR','RB','XX','CB','GB','LB','WD') THEN cccount ELSE 0 END), 0) AS volumes, + COALESCE(SUM(CASE WHEN pcode = 'XX' THEN cccount ELSE 0 END), 0) AS oversized, + COALESCE(SUM(CASE WHEN pcode IN ('RB','BX') THEN cccount ELSE 0 END), 0) AS boxes, + COALESCE(SUM(CASE WHEN pcode = 'CB' THEN cccount ELSE 0 END), 0) AS clamshells, + COALESCE(SUM(CASE WHEN pcode = 'GB' THEN cccount ELSE 0 END), 0) AS flat_boxes, + COALESCE(SUM(CASE WHEN pcode = 'LB' THEN cccount ELSE 0 END), 0) AS long_boxes, + COALESCE(SUM(CASE WHEN pcode = 'SR' THEN cccount ELSE 0 END), 0) AS shelf, + COALESCE(SUM(CASE WHEN pcode = 'WD' THEN cccount ELSE 0 END), 0) AS deaccession + FROM ProcessingAll + WHERE plibrary <> 'WRLC Books (OUP)' +"; + +$reportParams = []; +$reportTypes = ''; + +if ($selectedLibrary !== '') { + $reportSql .= " AND plibrary = ?"; + $reportParams[] = $selectedLibrary; + $reportTypes .= 's'; } -////// Long Boxes ///////// - -$sqlLB = "SELECT plibrary, SUM(cccount) FROM ProcessingAll WHERE (pcode ='LB') AND (plibrary = '$library') $daterange"; - $queryLB = mysqli_query($conn, $sqlLB); -while ($rowLB = mysqli_fetch_array($queryLB)) - -{ - -if($rowLB['SUM(cccount)'] > 0 AND $rowLB['plibrary'] !=='WRLC Books (OUP)') -echo ''; -else -{ -if($show == 'true') -echo ''; -} +if ($hasDateRange) { + $reportSql .= " AND cctimestamp BETWEEN ? AND ?"; + $reportParams[] = $beginFormatted . ' 00:00:00'; + $reportParams[] = $endFormatted . ' 23:59:59'; + $reportTypes .= 'ss'; } -////// Shelf Rentals ///////// +$reportSql .= " GROUP BY plibrary ORDER BY plibrary ASC"; -$sqlLB = "SELECT plibrary, SUM(cccount) FROM ProcessingAll WHERE (pcode ='SR') AND (plibrary = '$library') $daterange"; - $queryLB = mysqli_query($conn, $sqlLB); -while ($rowLB = mysqli_fetch_array($queryLB)) - -{ - -if($rowLB['SUM(cccount)'] > 0 AND $rowLB['SUM(cccount)'] !=='' AND $rowLB['plibrary'] !=='WRLC Books (OUP)') -echo ''; -else -{ -if($show == 'true') -echo ''; +$stmt = $conn->prepare($reportSql); +if (!$stmt) { + throw new RuntimeException('Prepare failed: ' . $conn->error); } + +if ($reportTypes !== '') { + $stmt->bind_param($reportTypes, ...$reportParams); } +$stmt->execute(); +$result = $stmt->get_result(); + +while ($row = $result->fetch_assoc()) { + $library = $row['plibrary']; + + $rowsByLibrary[$library] = [ + 'volumes' => (int) $row['volumes'], + 'oversized' => (int) $row['oversized'], + 'boxes' => (int) $row['boxes'], + 'clamshells' => (int) $row['clamshells'], + 'flat_boxes' => (int) $row['flat_boxes'], + 'long_boxes' => (int) $row['long_boxes'], + 'shelf' => (int) $row['shelf'], + 'deaccession' => (int) $row['deaccession'], + ]; + + foreach ($totals as $key => $value) { + $totals[$key] += $rowsByLibrary[$library][$key]; + } +} -////// Deasseccioned materials ///////// +$stmt->close(); -$sqlWD = "SELECT plibrary, SUM(cccount) FROM ProcessingAll WHERE pcode ='WD' AND (plibrary = '$library') $daterange"; - $queryWD = mysqli_query($conn, $sqlWD); -while ($rowWD = mysqli_fetch_array($queryWD)) +$values = []; +$grandTotal = 0.00; -{ +foreach ($totals as $key => $count) { + $values[$key] = $count * $rateMap[$key]; + $grandTotal += $values[$key]; +} -if($rowWD['SUM(cccount)'] > 0 AND $rowWD['plibrary'] !=='WRLC Books (OUP)') -echo ''; -else +function displayCell(int $value): string { -if($show == 'true') -echo ''; -} + return $value > 0 ? number_format($value) : ''; } +?> + + + + -{ -if($show == 'true') -echo ''; -} +
+
+



+
+ +
+
+
    +
  • +
    + date_range + business + FILTER +
    +
    + +
    +
    + date_range + + +
    + +
    + date_range + + +
    + +
    +
    + business + + +
    +
    + +
    + + + Clear clear + + + + +
    + + +


    +
    +
    +
  • +
+
-} - $show ='false'; -} +
+ SCF Billing Counts Report + + + + + + +
+ - + +
+ + +
+
LibraryVolumesOversized BooksBoxesClamshellsFlat BoxesLong BoxesShelf RentalsDeaccessioned
'.$library.''.number_format($rowsum['SUM(cccount)']).''.number_format($rowXX['SUM(cccount)']).''.number_format($rowBX['SUM(cccount)']).''.number_format($rowCB['SUM(cccount)']).''.number_format($rowGB['SUM(cccount)']).''.number_format($rowLB['SUM(cccount)']).''.number_format($rowLB['SUM(cccount)']).''.number_format($rowWD['SUM(cccount)']).'
+ + + + + + + + + + + + + + + $counts): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LibraryVolumesOversized BooksBoxesClamshellsFlat BoxesLong BoxesShelf RentalsDeaccessioned
Total Count:
Value:$$$$$$$$
+ +

+

Total: $

+
+
+
+
+
+
+ -echo 'Total Count:'; - -/////Volumes Total /////// - -if(isset($selectedlibrary) AND $selectedlibrary !='') - -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode <>'BX' AND pcode <>'SR' AND pcode <>'WD' AND pcode <> 'RB' AND pcode <> 'XX' AND pcode <> 'CB' AND pcode <> 'GB' AND pcode <> 'LB') AND (plibrary = '$selectedlibrary') $daterange"; - -else - -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode <>'BX' AND pcode <>'SR' AND pcode <>'WD' AND pcode <> 'RB' AND pcode <> 'XX' AND pcode <> 'CB' AND pcode <> 'GB' AND pcode <> 'LB') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - - - -//$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (plibrary != 'WRLC Books (OUP)') $daterange"; - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $volumevalue= $row['SUM(cccount)']*.75; - ///echo '
($'; - ///echo number_format($volumevalue,2,".",","); - ///echo ')'; - echo ''; - } - -/////Oversized Total /////// - - -if(isset($selectedlibrary) AND $selectedlibrary !='') -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='XX') AND (plibrary = '$selectedlibrary') $daterange"; -else -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='XX') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $oversizedvalue= $row['SUM(cccount)']*.75; - ///echo '
($'; - ///echo number_format($oversizedvalue,2,".",","); - ///echo ')'; - echo ''; - } - -/////Boxes Total /////// - -if(isset($selectedlibrary) AND $selectedlibrary !='') -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='RB' or pcode ='BX') AND (plibrary = '$selectedlibrary') $daterange"; -else -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='RB' or pcode ='BX') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $boxesvalue= $row['SUM(cccount)']*2.65; -/// echo '
($'; - ///echo number_format($boxesvalue,2,".",","); - ///echo ')'; - ///echo ''; - } - -/////Clamshells Total /////// -if(isset($selectedlibrary) AND $selectedlibrary !='') -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='CB') AND (plibrary = '$selectedlibrary') $daterange"; -else -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='CB') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $clamshellsvalue= $row['SUM(cccount)']*1.50; - ///echo '
($'; - ///echo number_format($clamshellsvalue,2,".",","); - ///echo ')'; - echo ''; - } - -/////Flat Boxes Total /////// -if(isset($selectedlibrary) AND $selectedlibrary !='') -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='GB') AND (plibrary = '$selectedlibrary') $daterange"; -else -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='GB') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $flatboxesvalue= $row['SUM(cccount)']*2.65; - ///echo '
($'; - ///echo number_format($flatboxesvalue,2,".",","); - ///echo ')'; - echo ''; - } - -/////Long Boxes Total /////// -if(isset($selectedlibrary) AND $selectedlibrary !='') -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='LB') AND (plibrary = '$selectedlibrary') $daterange"; -else -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='LB') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $longboxesvalue= $row['SUM(cccount)']*2.65; - //echo '
($'; -// echo number_format($longboxesvalue,2,".",","); -// echo ')'; - echo ''; - } - -/////Shelf Rentals Total /////// -if(isset($selectedlibrary) AND $selectedlibrary !='') -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='SR') AND (plibrary = '$selectedlibrary') $daterange"; -else -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='SR') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $srvalue= $row['SUM(cccount)']*2.00; - //echo '
($'; -// echo number_format($srvalue,2,".",","); -// echo ')'; - echo ''; - } - - - - - - if(isset($selectedlibrary) AND $selectedlibrary !='') -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='WD') AND (plibrary = '$selectedlibrary') $daterange"; -else -$sql = "SELECT SUM(cccount) FROM ProcessingAll WHERE (pcode ='WD') AND (plibrary != 'WRLC Books (OUP)') $daterange"; - $query = mysqli_query($conn, $sql); - while ($row = mysqli_fetch_array($query)) - { - echo ''.number_format($row['SUM(cccount)']); - - $wdvalue= $row['SUM(cccount)']*1.70; -/// echo '
($'; - ///echo number_format($boxesvalue,2,".",","); - ///echo ')'; - ''; - } - - - -//// End Totals -echo ''; - -echo 'Value:$'.number_format($volumevalue,2,".",",").'$'.number_format($oversizedvalue,2,".",",").'$'.number_format($boxesvalue,2,".",",").'$'.number_format($clamshellsvalue,2,".",",").'$'.number_format($flatboxesvalue,2,".",",").'$'.number_format($longboxesvalue,2,".",",").'$'.number_format($srvalue,2,".",",").'$'.number_format($wdvalue,2,".",",").''; - - - - -echo ''; - -echo '

'; -$total = ($volumevalue + $oversizedvalue + $boxesvalue + $clamshellsvalue + $flatboxesvalue + $longboxesvalue + $srvalue + $wdvalue); -echo '

Total: $'.number_format($total,2,".",",").'

'; - -//// Close DB connection //// - echo ' - - - - - -'; - - - - -echo ''; -include('footer.php'); ?> - + $('select').formSelect(); +}); + - + \ No newline at end of file