Spaces:
Sleeping
Sleeping
{% extends "base.html" %} | |
{% block title %}Orders Management - Chef Dashboard{% endblock %} | |
{% block content %} | |
<div class="container mt-4"> | |
<div class="row"> | |
<div class="col-12"> | |
<div class="d-flex justify-content-between align-items-center mb-4"> | |
<h2> | |
<i class="fas fa-clipboard-list me-2"></i> | |
Orders Management | |
</h2> | |
<div class="d-flex gap-2"> | |
<a href="/chef" class="btn btn-outline-secondary"> | |
<i class="fas fa-arrow-left me-1"></i>Back to Dashboard | |
</a> | |
<button class="btn btn-primary" onclick="refreshAllOrders()"> | |
<i class="fas fa-sync-alt me-1"></i>Refresh | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Order Filters --> | |
<div class="row mb-4"> | |
<div class="col-12"> | |
<div class="card"> | |
<div class="card-body"> | |
<div class="row align-items-center"> | |
<div class="col-md-3"> | |
<label class="form-label">Filter by Status:</label> | |
<select class="form-select" id="statusFilter" onchange="filterOrders()"> | |
<option value="">All Orders</option> | |
<option value="pending">Pending</option> | |
<option value="accepted">Accepted</option> | |
<option value="cooking">Cooking</option> | |
<option value="ready">Ready</option> | |
<option value="completed">Completed</option> | |
</select> | |
</div> | |
<div class="col-md-3"> | |
<label class="form-label">Table Number:</label> | |
<input type="number" class="form-control" id="tableFilter" placeholder="Enter table number" onchange="filterOrders()"> | |
</div> | |
<div class="col-md-3"> | |
<label class="form-label">Date:</label> | |
<input type="date" class="form-control" id="dateFilter" onchange="filterOrders()"> | |
</div> | |
<div class="col-md-3 d-flex align-items-end"> | |
<button class="btn btn-outline-secondary w-100" onclick="clearFilters()"> | |
<i class="fas fa-times me-1"></i>Clear Filters | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Orders List --> | |
<div class="row"> | |
<div class="col-12"> | |
<div id="orders-list"> | |
<!-- Sample Order Card --> | |
<div class="card mb-3 order-card" data-status="pending" data-table="5"> | |
<div class="card-header d-flex justify-content-between align-items-center"> | |
<div> | |
<h6 class="mb-0">Order #1001 - Table 5</h6> | |
<small class="text-muted">2 minutes ago</small> | |
</div> | |
<span class="badge bg-warning">Pending</span> | |
</div> | |
<div class="card-body"> | |
<div class="row"> | |
<div class="col-md-8"> | |
<h6>Order Items:</h6> | |
<ul class="list-unstyled"> | |
<li>• 2x Chicken Biryani</li> | |
<li>• 1x Vegetable Curry</li> | |
<li>• 3x Naan Bread</li> | |
</ul> | |
<p class="mb-0"><strong>Special Instructions:</strong> Extra spicy, no onions</p> | |
</div> | |
<div class="col-md-4 text-end"> | |
<p class="mb-2"><strong>Total: ₹450</strong></p> | |
<div class="btn-group-vertical w-100"> | |
<button class="btn btn-success btn-sm" onclick="acceptOrder(1001)"> | |
<i class="fas fa-check me-1"></i>Accept | |
</button> | |
<button class="btn btn-primary btn-sm" onclick="startCooking(1001)"> | |
<i class="fas fa-fire me-1"></i>Start Cooking | |
</button> | |
<button class="btn btn-warning btn-sm" onclick="markReady(1001)"> | |
<i class="fas fa-bell me-1"></i>Mark Ready | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Another Sample Order --> | |
<div class="card mb-3 order-card" data-status="cooking" data-table="3"> | |
<div class="card-header d-flex justify-content-between align-items-center"> | |
<div> | |
<h6 class="mb-0">Order #1000 - Table 3</h6> | |
<small class="text-muted">15 minutes ago</small> | |
</div> | |
<span class="badge bg-info">Cooking</span> | |
</div> | |
<div class="card-body"> | |
<div class="row"> | |
<div class="col-md-8"> | |
<h6>Order Items:</h6> | |
<ul class="list-unstyled"> | |
<li>• 1x Fish Curry</li> | |
<li>• 2x Rice</li> | |
<li>• 1x Mango Lassi</li> | |
</ul> | |
<p class="mb-0"><strong>Special Instructions:</strong> Medium spice level</p> | |
</div> | |
<div class="col-md-4 text-end"> | |
<p class="mb-2"><strong>Total: ₹320</strong></p> | |
<div class="btn-group-vertical w-100"> | |
<button class="btn btn-warning btn-sm" onclick="markReady(1000)"> | |
<i class="fas fa-bell me-1"></i>Mark Ready | |
</button> | |
<button class="btn btn-success btn-sm" onclick="completeOrder(1000)"> | |
<i class="fas fa-check-double me-1"></i>Complete | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Empty State --> | |
<div id="no-orders" class="text-center text-muted py-5" style="display: none;"> | |
<i class="fas fa-clipboard-list fa-3x mb-3"></i> | |
<p>No orders match your filters</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
{% endblock %} | |
{% block extra_js %} | |
<script> | |
function refreshAllOrders() { | |
const btn = event.target; | |
const originalText = btn.innerHTML; | |
btn.innerHTML = '<i class="fas fa-spinner fa-spin me-1"></i>Loading...'; | |
btn.disabled = true; | |
setTimeout(() => { | |
btn.innerHTML = originalText; | |
btn.disabled = false; | |
alert('Orders refreshed! (In production, this would fetch from the API)'); | |
}, 1000); | |
} | |
function filterOrders() { | |
const statusFilter = document.getElementById('statusFilter').value; | |
const tableFilter = document.getElementById('tableFilter').value; | |
const dateFilter = document.getElementById('dateFilter').value; | |
const orders = document.querySelectorAll('.order-card'); | |
let visibleCount = 0; | |
orders.forEach(order => { | |
let show = true; | |
if (statusFilter && order.dataset.status !== statusFilter) { | |
show = false; | |
} | |
if (tableFilter && order.dataset.table !== tableFilter) { | |
show = false; | |
} | |
// Date filtering would be implemented with real data | |
order.style.display = show ? 'block' : 'none'; | |
if (show) visibleCount++; | |
}); | |
document.getElementById('no-orders').style.display = visibleCount === 0 ? 'block' : 'none'; | |
} | |
function clearFilters() { | |
document.getElementById('statusFilter').value = ''; | |
document.getElementById('tableFilter').value = ''; | |
document.getElementById('dateFilter').value = ''; | |
filterOrders(); | |
} | |
function acceptOrder(orderId) { | |
if (confirm(`Accept order #${orderId}?`)) { | |
alert(`Order #${orderId} accepted! (In production, this would call the API)`); | |
} | |
} | |
function startCooking(orderId) { | |
if (confirm(`Start cooking order #${orderId}?`)) { | |
alert(`Cooking started for order #${orderId}! (In production, this would call the API)`); | |
} | |
} | |
function markReady(orderId) { | |
if (confirm(`Mark order #${orderId} as ready?`)) { | |
alert(`Order #${orderId} marked as ready! (In production, this would call the API)`); | |
} | |
} | |
function completeOrder(orderId) { | |
if (confirm(`Complete order #${orderId}?`)) { | |
alert(`Order #${orderId} completed! (In production, this would call the API)`); | |
} | |
} | |
// Set today's date as default | |
document.addEventListener('DOMContentLoaded', function() { | |
const today = new Date().toISOString().split('T')[0]; | |
document.getElementById('dateFilter').value = today; | |
}); | |
</script> | |
{% endblock %} |