166 lines
8.2 KiB
PHP
166 lines
8.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/../db/config.php';
|
|
require_once __DIR__ . '/../includes/functions.php';
|
|
|
|
$pdo = db();
|
|
require_permission('orders_add');
|
|
|
|
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
|
if (!$id) {
|
|
header("Location: orders.php");
|
|
exit;
|
|
}
|
|
|
|
$message = '';
|
|
|
|
// Handle Form Submission
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$status = $_POST['status'];
|
|
$outlet_id = (int)$_POST['outlet_id'];
|
|
$customer_id = !empty($_POST['customer_id']) ? (int)$_POST['customer_id'] : null;
|
|
$order_type = $_POST['order_type'];
|
|
$table_number = $_POST['table_number'];
|
|
$notes = $_POST['notes'];
|
|
|
|
$stmt = $pdo->prepare("UPDATE orders SET
|
|
status = ?,
|
|
outlet_id = ?,
|
|
customer_id = ?,
|
|
order_type = ?,
|
|
table_number = ?,
|
|
notes = ?,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = ?");
|
|
|
|
if ($stmt->execute([$status, $outlet_id, $customer_id, $order_type, $table_number, $notes, $id])) {
|
|
$message = '<div class="alert alert-success border-0 shadow-sm rounded-3"><i class="bi bi-check-circle-fill me-2"></i>Order updated successfully!</div>';
|
|
// Redirect back after short delay or via header
|
|
header("Refresh: 2; url=order_view.php?id=$id");
|
|
} else {
|
|
$message = '<div class="alert alert-danger border-0 shadow-sm rounded-3"><i class="bi bi-exclamation-triangle-fill me-2"></i>Error updating order.</div>';
|
|
}
|
|
}
|
|
|
|
// Fetch Order Details
|
|
$stmt = $pdo->prepare("SELECT * FROM orders WHERE id = ?");
|
|
$stmt->execute([$id]);
|
|
$order = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$order) {
|
|
die("Order not found.");
|
|
}
|
|
|
|
// Fetch Outlets
|
|
$outlets = $pdo->query("SELECT id, name FROM outlets ORDER BY name")->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
// Fetch Customers
|
|
$customers = $pdo->query("SELECT id, name FROM customers ORDER BY name")->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
include 'includes/header.php';
|
|
?>
|
|
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<h2 class="fw-bold mb-0">Edit Order #<?= $order['id'] ?></h2>
|
|
<div class="d-flex gap-2">
|
|
<a href="order_view.php?id=<?= $id ?>" class="btn btn-outline-secondary">
|
|
<i class="bi bi-arrow-left"></i> Cancel
|
|
</a>
|
|
<a href="orders.php" class="btn btn-light border">
|
|
<i class="bi bi-list"></i> Back to List
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<?= $message ?>
|
|
|
|
<div class="row">
|
|
<div class="col-md-8">
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body">
|
|
<form method="POST">
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-6">
|
|
<label class="form-label small fw-bold text-muted text-uppercase">Order Status</label>
|
|
<select name="status" class="form-select form-select-lg" required>
|
|
<option value="pending" <?= $order['status'] === 'pending' ? 'selected' : '' ?>>Pending</option>
|
|
<option value="preparing" <?= $order['status'] === 'preparing' ? 'selected' : '' ?>>Preparing</option>
|
|
<option value="ready" <?= $order['status'] === 'ready' ? 'selected' : '' ?>>Ready</option>
|
|
<option value="completed" <?= $order['status'] === 'completed' ? 'selected' : '' ?>>Completed</option>
|
|
<option value="cancelled" <?= $order['status'] === 'cancelled' ? 'selected' : '' ?>>Cancelled</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label small fw-bold text-muted text-uppercase">Outlet</label>
|
|
<select name="outlet_id" class="form-select form-select-lg" required>
|
|
<?php foreach ($outlets as $outlet): ?>
|
|
<option value="<?= $outlet['id'] ?>" <?= $order['outlet_id'] == $outlet['id'] ? 'selected' : '' ?>>
|
|
<?= htmlspecialchars($outlet['name']) ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-6">
|
|
<label class="form-label small fw-bold text-muted text-uppercase">Order Type</label>
|
|
<select name="order_type" class="form-select" required>
|
|
<option value="dine-in" <?= $order['order_type'] === 'dine-in' ? 'selected' : '' ?>>Dine-In</option>
|
|
<option value="takeaway" <?= $order['order_type'] === 'takeaway' ? 'selected' : '' ?>>Takeaway</option>
|
|
<option value="delivery" <?= $order['order_type'] === 'delivery' ? 'selected' : '' ?>>Delivery</option>
|
|
<option value="drive-thru" <?= $order['order_type'] === 'drive-thru' ? 'selected' : '' ?>>Drive-Thru</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label small fw-bold text-muted text-uppercase">Table Number</label>
|
|
<input type="text" name="table_number" class="form-control" value="<?= htmlspecialchars((string)($order['table_number'] ?? '')) ?>" placeholder="e.g. 5">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mb-4">
|
|
<label class="form-label small fw-bold text-muted text-uppercase">Customer</label>
|
|
<select name="customer_id" class="form-select">
|
|
<option value="">Guest (None)</option>
|
|
<?php foreach ($customers as $customer): ?>
|
|
<option value="<?= $customer['id'] ?>" <?= $order['customer_id'] == $customer['id'] ? 'selected' : '' ?>>
|
|
<?= htmlspecialchars($customer['name']) ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="mb-4">
|
|
<label class="form-label small fw-bold text-muted text-uppercase">Order Notes</label>
|
|
<textarea name="notes" class="form-control" rows="4" placeholder="Add any special instructions or notes..."><?= htmlspecialchars((string)($order['notes'] ?? '')) ?></textarea>
|
|
</div>
|
|
|
|
<div class="d-flex justify-content-end gap-2 border-top pt-4 mt-4">
|
|
<a href="order_view.php?id=<?= $id ?>" class="btn btn-light rounded-pill px-4">Discard Changes</a>
|
|
<button type="submit" class="btn btn-primary rounded-pill px-4">Update Order Details</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="card border-0 shadow-sm bg-light">
|
|
<div class="card-body">
|
|
<h6 class="fw-bold mb-3"><i class="bi bi-info-circle me-2"></i>Editing Order Information</h6>
|
|
<p class="small text-muted mb-3">Updating the status here will immediately reflect across all systems (Kitchen, POS, Admin).</p>
|
|
<div class="alert alert-warning border-0 small py-2 px-3">
|
|
<i class="bi bi-exclamation-triangle-fill me-1"></i> Changes to items should be handled via the POS system or directly in the database.
|
|
</div>
|
|
<div class="mt-4 pt-4 border-top">
|
|
<p class="small text-muted mb-1 text-uppercase fw-bold">Order Created</p>
|
|
<p class="mb-3"><?= date('M d, Y H:i:s', strtotime($order['created_at'])) ?></p>
|
|
|
|
<p class="small text-muted mb-1 text-uppercase fw-bold">Last Updated</p>
|
|
<p class="mb-0"><?= $order['updated_at'] ? date('M d, Y H:i:s', strtotime($order['updated_at'])) : 'Never' ?></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php include 'includes/footer.php'; ?>
|