Spaces:
Sleeping
Sleeping
| {% extends "base.html" %} | |
| {% block title %}Chef Dashboard - Tabble-v3{% 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-hat-chef me-2 text-success"></i> | |
| Chef Dashboard | |
| </h2> | |
| <div class="badge bg-success fs-6"> | |
| <i class="fas fa-circle me-1"></i>Kitchen Online | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row g-4"> | |
| <!-- Quick Stats --> | |
| <div class="col-md-3"> | |
| <div class="card bg-warning text-dark"> | |
| <div class="card-body text-center"> | |
| <i class="fas fa-clock fa-2x mb-2"></i> | |
| <h5 id="pending-orders">0</h5> | |
| <small>Pending Orders</small> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-3"> | |
| <div class="card bg-info text-white"> | |
| <div class="card-body text-center"> | |
| <i class="fas fa-fire fa-2x mb-2"></i> | |
| <h5 id="cooking-orders">0</h5> | |
| <small>Cooking</small> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-3"> | |
| <div class="card bg-success text-white"> | |
| <div class="card-body text-center"> | |
| <i class="fas fa-check fa-2x mb-2"></i> | |
| <h5 id="completed-orders">0</h5> | |
| <small>Completed Today</small> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-3"> | |
| <div class="card bg-primary text-white"> | |
| <div class="card-body text-center"> | |
| <i class="fas fa-utensils fa-2x mb-2"></i> | |
| <h5 id="total-dishes">0</h5> | |
| <small>Total Dishes</small> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row mt-4"> | |
| <div class="col-12"> | |
| <div class="card"> | |
| <div class="card-header d-flex justify-content-between align-items-center"> | |
| <h5 class="mb-0"> | |
| <i class="fas fa-list me-2"></i> | |
| Live Orders | |
| </h5> | |
| <button class="btn btn-sm btn-outline-primary" onclick="refreshOrders()"> | |
| <i class="fas fa-sync-alt me-1"></i>Refresh | |
| </button> | |
| </div> | |
| <div class="card-body"> | |
| <div id="orders-container"> | |
| <div class="text-center text-muted py-4"> | |
| <i class="fas fa-utensils fa-3x mb-3"></i> | |
| <p>No orders at the moment</p> | |
| <small>Orders will appear here automatically</small> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Quick Actions --> | |
| <div class="row mt-4"> | |
| <div class="col-12"> | |
| <div class="card"> | |
| <div class="card-header"> | |
| <h5 class="mb-0"> | |
| <i class="fas fa-bolt me-2"></i> | |
| Quick Actions | |
| </h5> | |
| </div> | |
| <div class="card-body"> | |
| <div class="row g-3"> | |
| <div class="col-md-3"> | |
| <a href="/chef/orders" class="btn btn-outline-primary w-100"> | |
| <i class="fas fa-list me-2"></i>View All Orders | |
| </a> | |
| </div> | |
| <div class="col-md-3"> | |
| <button class="btn btn-outline-success w-100" onclick="markAllReady()"> | |
| <i class="fas fa-check-double me-2"></i>Mark All Ready | |
| </button> | |
| </div> | |
| <div class="col-md-3"> | |
| <a href="/admin" class="btn btn-outline-warning w-100"> | |
| <i class="fas fa-cog me-2"></i>Admin Panel | |
| </a> | |
| </div> | |
| <div class="col-md-3"> | |
| <a href="/docs" target="_blank" class="btn btn-outline-info w-100"> | |
| <i class="fas fa-book me-2"></i>API Docs | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| {% endblock %} | |
| {% block extra_js %} | |
| <script> | |
| // Chef dashboard functionality | |
| let ordersData = []; | |
| function loadChefStats() { | |
| // This would normally fetch from the API | |
| // For demo purposes, using placeholder data | |
| document.getElementById('pending-orders').textContent = '3'; | |
| document.getElementById('cooking-orders').textContent = '2'; | |
| document.getElementById('completed-orders').textContent = '15'; | |
| document.getElementById('total-dishes').textContent = '45'; | |
| } | |
| function refreshOrders() { | |
| const btn = event.target; | |
| const originalText = btn.innerHTML; | |
| btn.innerHTML = '<i class="fas fa-spinner fa-spin me-1"></i>Loading...'; | |
| btn.disabled = true; | |
| // Simulate API call | |
| setTimeout(() => { | |
| btn.innerHTML = originalText; | |
| btn.disabled = false; | |
| loadOrders(); | |
| }, 1000); | |
| } | |
| function loadOrders() { | |
| const container = document.getElementById('orders-container'); | |
| // This would normally fetch real orders from the API | |
| container.innerHTML = ` | |
| <div class="alert alert-info"> | |
| <i class="fas fa-info-circle me-2"></i> | |
| Connect to the database to see live orders. Use the API endpoints at <a href="/docs" target="_blank">/docs</a> | |
| </div> | |
| `; | |
| } | |
| function markAllReady() { | |
| if (confirm('Mark all cooking orders as ready?')) { | |
| alert('Feature will be available when connected to database'); | |
| } | |
| } | |
| // Load data on page load | |
| document.addEventListener('DOMContentLoaded', function() { | |
| loadChefStats(); | |
| loadOrders(); | |
| // Auto-refresh every 30 seconds | |
| setInterval(loadOrders, 30000); | |
| }); | |
| </script> | |
| {% endblock %} |