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)); } public function exportCsv() { $orders = Order::with(['items','billingAddress'])->orderByDesc('created_at')->get(); $rows = []; $rows[] = ['Bestellnr.','Datum','Status','Zahlungsart','Kunde','E-Mail','Zwischensumme','Rabatt','Versand','Gesamt','MwSt.']; foreach ($orders as $order) { $addr = $order->billingAddress(); $rows[] = [ $order->order_number, $order->created_at->format('d.m.Y H:i'), Order::$statusLabels[$order->status] ?? $order->status, Order::$paymentLabels[$order->payment_method] ?? $order->payment_method, $addr ? $addr->full_name : ($order->guest_email ?? ''), $order->guest_email ?? $order->user?->email ?? '', number_format($order->subtotal, 2, ',', '.'), number_format($order->discount_amount ?? 0, 2, ',', '.'), number_format($order->shipping_cost, 2, ',', '.'), number_format($order->total, 2, ',', '.'), number_format($order->tax_total, 2, ',', '.'), ]; } $csv = "\xEF\xBB\xBF"; // UTF-8 BOM für Excel foreach ($rows as $row) { $csv .= implode(';', array_map(fn($v) => '"' . str_replace('"', '""', $v) . '"', $row)) . "\n"; } return response($csv, 200, [ 'Content-Type' => 'text/csv; charset=UTF-8', 'Content-Disposition' => 'attachment; filename="bestellungen-' . date('Y-m-d') . '.csv"', ]); } }