latest(); if ($request->filled('status')) { $query->where('status', $request->status); } if ($request->filled('payment')) { $query->where('payment_method', $request->payment); } if ($request->filled('q')) { $query->where('order_number', 'like', '%'.$request->q.'%'); } $orders = $query->paginate(25); return view('admin.orders.index', compact('orders')); } public function show(Order $order) { $order->load('items', 'addresses', 'user'); return view('admin.orders.show', compact('order')); } public function updateStatus(Request $request, Order $order) { $data = $request->validate([ 'status' => 'required|in:' . implode(',', array_keys(Order::$statusLabels)), 'tracking_code' => 'nullable|string|max:255', ]); $this->orderService->updateStatus($order, $data['status'], $data['tracking_code'] ?? null); // Bei Zahlungseingang: Rechnung per Mail senden if ($data['status'] === 'payment_received') { $pdf = $this->invoiceService->generate($order); $email = $order->guest_email ?? $order->user?->email; if ($email) { Mail::to($email)->send(new PaymentReceivedMail($order, $pdf->output(), $this->invoiceService->filename($order))); } } return back()->with('success', 'Status aktualisiert.'); } public function sendInvoice(Order $order) { $pdf = $this->invoiceService->generate($order); $email = $order->guest_email ?? $order->user?->email; if ($email) { Mail::to($email)->send(new PaymentReceivedMail($order, $pdf->output(), $this->invoiceService->filename($order))); } return back()->with('success', 'Rechnung erneut gesendet.'); } public function downloadInvoice(Order $order) { return $this->invoiceService->generate($order)->download($this->invoiceService->filename($order)); } }