redirect('/login'); } $sessionId = (int)$request->post('session_id'); $userId = (int)Auth::id(); $generalNotes = trim((string)$request->post('notes', '')); $rawItems = $request->post('items', []); $session = DailySession::find($sessionId); if (!$session) { return $this->redirect('/', null, 'Session not found.'); } if ($session['status'] === 'closed' || $session['status'] === 'completed') { return $this->redirect("/sessions/{$sessionId}", null, 'Order placement is currently closed for this session.'); } if (empty($rawItems) || !is_array($rawItems)) { return $this->redirect("/sessions/{$sessionId}", null, 'Please select at least one menu item.'); } // If user already had an order in this session, remove old order first to update $existingOrder = EmployeeOrder::findUserOrderBySession($sessionId, $userId); if ($existingOrder) { EmployeeOrder::delete((int)$existingOrder['id']); } $itemsToSave = []; foreach ($rawItems as $item) { $name = trim((string)($item['item_name'] ?? '')); $qty = max(1, (int)($item['quantity'] ?? 1)); $notes = trim((string)($item['notes'] ?? '')); $menuId = !empty($item['session_menu_id']) ? (int)$item['session_menu_id'] : null; if (empty($name)) { continue; } $unitPrice = 0.0; if ($menuId && !empty($session['menus'])) { foreach ($session['menus'] as $m) { if ((int)$m['id'] === $menuId) { $unitPrice = (float)$m['final_price']; break; } } } $itemsToSave[] = [ 'session_menu_id' => $menuId, 'item_name' => $name, 'quantity' => $qty, 'unit_price' => $unitPrice, 'notes' => $notes, ]; } if (empty($itemsToSave)) { return $this->redirect("/sessions/{$sessionId}", null, 'No valid menu items selected.'); } try { EmployeeOrder::createOrder($sessionId, $userId, $generalNotes, $itemsToSave); return $this->redirect("/sessions/{$sessionId}", 'Your lunch order has been submitted successfully!'); } catch (\Throwable $e) { return $this->redirect("/sessions/{$sessionId}", null, 'Failed to submit order: ' . $e->getMessage()); } } public function togglePaid(Request $request, Response $response, array $params): Response { if (!Auth::check()) { return $this->redirect('/login'); } $orderId = (int)($params['id'] ?? 0); $sessionId = (int)$request->post('session_id'); EmployeeOrder::togglePaid($orderId); return $this->redirect("/sessions/{$sessionId}", 'Payment status updated.'); } public function delete(Request $request, Response $response, array $params): Response { if (!Auth::check()) { return $this->redirect('/login'); } $orderId = (int)($params['id'] ?? 0); $sessionId = (int)$request->post('session_id'); EmployeeOrder::delete($orderId); return $this->redirect("/sessions/{$sessionId}", 'Order cancelled.'); } }