|
|
@@ -70,13 +70,20 @@ function getReservations() {
|
|
|
function getReservationByOrderNumber($orderNumber) {
|
|
|
$reservations = getReservations();
|
|
|
foreach ($reservations as $reservation) {
|
|
|
- if (isset($reservation['id']) && $reservation['id'] === $orderNumber) {
|
|
|
+ if (isset($reservation['id']) && $reservation['id'] === $orderNumber && !isReservationHidden($reservation)) {
|
|
|
return $reservation;
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Check if reservation is hidden (spam/deleted)
|
|
|
+ */
|
|
|
+function isReservationHidden($reservation) {
|
|
|
+ return isset($reservation['is_hidden']) && $reservation['is_hidden'] === true;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Save reservations
|
|
|
*/
|
|
|
@@ -260,7 +267,8 @@ function createReservation($customerName, $customerEmail, $items) {
|
|
|
'expires' => $expires->format('Y-m-d H:i:s'),
|
|
|
'status' => 'open',
|
|
|
'picked_up' => false,
|
|
|
- 'type' => 'regular'
|
|
|
+ 'type' => 'regular',
|
|
|
+ 'is_hidden' => false
|
|
|
];
|
|
|
|
|
|
$reservations[] = $reservation;
|
|
|
@@ -290,7 +298,8 @@ function createBackorderReservation($customerName, $customerEmail, $items) {
|
|
|
'status' => 'open',
|
|
|
'picked_up' => false,
|
|
|
'type' => 'backorder',
|
|
|
- 'backorder_status' => 'pending'
|
|
|
+ 'backorder_status' => 'pending',
|
|
|
+ 'is_hidden' => false
|
|
|
];
|
|
|
|
|
|
$reservations[] = $reservation;
|
|
|
@@ -309,6 +318,9 @@ function markReservationPickedUp($reservationId) {
|
|
|
$reservations = getReservations();
|
|
|
foreach ($reservations as &$reservation) {
|
|
|
if ($reservation['id'] === $reservationId) {
|
|
|
+ if (isReservationHidden($reservation)) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
$reservation['picked_up'] = true;
|
|
|
$reservation['status'] = 'picked_up';
|
|
|
break;
|
|
|
@@ -317,6 +329,40 @@ function markReservationPickedUp($reservationId) {
|
|
|
saveReservations($reservations);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Mark reservation/backorder as spam/deleted and hide it from non-admin views.
|
|
|
+ * For open regular reservations we release stock, because the order is discarded.
|
|
|
+ */
|
|
|
+function markReservationHidden($reservationId) {
|
|
|
+ $reservations = getReservations();
|
|
|
+ foreach ($reservations as &$reservation) {
|
|
|
+ if ($reservation['id'] !== $reservationId) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (isReservationHidden($reservation)) {
|
|
|
+ return ['success' => false, 'message' => 'Bestellung ist bereits als Spam/Gelöscht markiert.'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $isBackorder = isset($reservation['type']) && $reservation['type'] === 'backorder';
|
|
|
+ if (!$isBackorder && isset($reservation['status']) && $reservation['status'] === 'open' && empty($reservation['picked_up'])) {
|
|
|
+ foreach ($reservation['items'] as $item) {
|
|
|
+ $size = isset($item['size']) ? $item['size'] : null;
|
|
|
+ releaseStock($item['product_id'], $item['quantity'], $size);
|
|
|
+ }
|
|
|
+ $reservation['status'] = 'deleted';
|
|
|
+ }
|
|
|
+
|
|
|
+ $reservation['is_hidden'] = true;
|
|
|
+ $reservation['hidden_at'] = date('Y-m-d H:i:s');
|
|
|
+ $reservation['hidden_reason'] = 'spam_deleted';
|
|
|
+ saveReservations($reservations);
|
|
|
+
|
|
|
+ return ['success' => true];
|
|
|
+ }
|
|
|
+
|
|
|
+ return ['success' => false, 'message' => 'Bestellung nicht gefunden.'];
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Check and expire old reservations
|
|
|
*/
|
|
|
@@ -326,6 +372,9 @@ function expireOldReservations() {
|
|
|
$changed = false;
|
|
|
|
|
|
foreach ($reservations as &$reservation) {
|
|
|
+ if (isReservationHidden($reservation)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if ($reservation['status'] === 'open' && !$reservation['picked_up']) {
|
|
|
if (isset($reservation['type']) && $reservation['type'] === 'backorder') {
|
|
|
continue;
|
|
|
@@ -371,6 +420,9 @@ function markBackorderAvailable($reservationId) {
|
|
|
$reservations = getReservations();
|
|
|
foreach ($reservations as &$reservation) {
|
|
|
if ($reservation['id'] === $reservationId) {
|
|
|
+ if (isReservationHidden($reservation)) {
|
|
|
+ return ['success' => false, 'message' => 'Diese Vorbestellung ist als Spam/Gelöscht markiert.'];
|
|
|
+ }
|
|
|
if (!isset($reservation['type']) || $reservation['type'] !== 'backorder') {
|
|
|
return ['success' => false, 'message' => 'Diese Vorbestellung wurde bereits in eine Bestellung umgewandelt.'];
|
|
|
}
|