orders.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. require_once __DIR__ . "/../config.php";
  3. require_once __DIR__ . "/../includes/functions.php";
  4. if (empty($_SESSION['admin_logged_in'])) {
  5. header("Location: login.php");
  6. exit();
  7. }
  8. if (isset($_GET['details']) && trim((string) $_GET['details']) !== "") {
  9. header(
  10. "Location: order.php?id=" .
  11. urlencode(trim((string) $_GET['details'])),
  12. );
  13. exit();
  14. }
  15. $pageTitle = "Bestellungen";
  16. $orders = getOrders();
  17. usort($orders, function ($left, $right) {
  18. return strcmp($right["created_at"], $left["created_at"]);
  19. });
  20. $filter = trim((string) ($_GET['filter'] ?? "all"));
  21. $searchOrderId = trim((string) ($_GET['order_id'] ?? ""));
  22. if ($searchOrderId !== "") {
  23. $orders = array_values(
  24. array_filter($orders, function ($order) use ($searchOrderId) {
  25. return stripos($order["id"], $searchOrderId) !== false;
  26. }),
  27. );
  28. }
  29. if ($filter !== "all") {
  30. $orders = array_values(
  31. array_filter($orders, function ($order) use ($filter) {
  32. switch ($filter) {
  33. case "open":
  34. return $order["status"] === "open";
  35. case "partial":
  36. return $order["status"] === "partial";
  37. case "processed":
  38. return $order["status"] === "processed";
  39. case "cancelled":
  40. return $order["status"] === "cancelled";
  41. }
  42. return true;
  43. }),
  44. );
  45. }
  46. $bodyClass = "admin-page";
  47. include __DIR__ . "/../includes/header.php";
  48. ?>
  49. <div class="admin-header">
  50. <h2>Bestellungen</h2>
  51. <div>
  52. <a href="index.php" class="btn btn-secondary">Zurück zum Dashboard</a>
  53. </div>
  54. </div>
  55. <div class="panel">
  56. <form method="GET" class="admin-filter-form">
  57. <div class="admin-filter-field admin-filter-field-wide">
  58. <label for="order_id">Bestellnummer suchen</label>
  59. <input type="text" id="order_id" name="order_id" value="<?php echo escape(
  60. $searchOrderId,
  61. ); ?>" placeholder="z. B. FWFS-2026-001">
  62. </div>
  63. <div>
  64. <label for="filter">Filter</label>
  65. <select id="filter" name="filter">
  66. <option value="all" <?php echo $filter === "all"
  67. ? "selected"
  68. : ""; ?>>Alle</option>
  69. <option value="open" <?php echo $filter === "open"
  70. ? "selected"
  71. : ""; ?>>Offen</option>
  72. <option value="partial" <?php echo $filter === "partial"
  73. ? "selected"
  74. : ""; ?>>Teilweise bearbeitet</option>
  75. <option value="processed" <?php echo $filter === "processed"
  76. ? "selected"
  77. : ""; ?>>Bearbeitet</option>
  78. <option value="cancelled" <?php echo $filter === "cancelled"
  79. ? "selected"
  80. : ""; ?>>Storniert</option>
  81. </select>
  82. </div>
  83. <div class="admin-filter-actions">
  84. <button type="submit" class="btn">Filtern</button>
  85. <a href="orders.php" class="btn btn-secondary">Zurücksetzen</a>
  86. </div>
  87. </form>
  88. </div>
  89. <?php if (empty($orders)): ?>
  90. <div class="alert alert-info">
  91. <p>Keine Bestellungen gefunden.</p>
  92. </div>
  93. <?php else: ?>
  94. <div class="table-responsive">
  95. <table class="responsive-table">
  96. <thead>
  97. <tr>
  98. <th>Bestellnummer</th>
  99. <th>Name</th>
  100. <th>Organisation</th>
  101. <th>Artikel</th>
  102. <th>Erstellt</th>
  103. <th>Status</th>
  104. <th>Aktionen</th>
  105. </tr>
  106. </thead>
  107. <tbody>
  108. <?php foreach ($orders as $order): ?>
  109. <tr>
  110. <td data-label="Bestellnummer"><strong><?php echo escape(
  111. $order["id"],
  112. ); ?></strong></td>
  113. <td data-label="Name"><?php echo escape(
  114. $order["customer_name"],
  115. ); ?></td>
  116. <td data-label="Organisation"><?php echo escape(
  117. $order["organization_label"],
  118. ); ?></td>
  119. <td data-label="Artikel"><?php echo count(
  120. $order["items"],
  121. ); ?></td>
  122. <td data-label="Erstellt"><?php echo escape(
  123. formatDate($order["created_at"]),
  124. ); ?></td>
  125. <td data-label="Status"><span class="status <?php echo escape(
  126. getOrderStatusClass($order),
  127. ); ?>"><?php echo escape(
  128. getOrderStatusLabel($order),
  129. ); ?></span></td>
  130. <td data-label="Aktionen">
  131. <a href="order.php?id=<?php echo urlencode(
  132. $order["id"],
  133. ); ?>" class="btn btn-small">Details</a>
  134. </td>
  135. </tr>
  136. <?php endforeach; ?>
  137. </tbody>
  138. </table>
  139. </div>
  140. <?php endif; ?>
  141. <?php include __DIR__ . "/../includes/footer.php"; ?>