Spaces:
Sleeping
Sleeping
File size: 2,300 Bytes
10dc6f2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <?php
namespace App\Http\Controllers\Organizer;
use App\Http\Controllers\Controller;
use App\Models\Attendee;
use App\Models\Event;
use App\Models\Order;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\StreamedResponse;
class OrderController extends Controller
{
public function index(Event $event)
{
$this->authorizeOrganizer($event);
$orders = Order::where('event_id', $event->id)
->with('user', 'items.ticketTier')
->latest()
->paginate(20);
return view('organizer.orders.index', compact('event', 'orders'));
}
public function show(Event $event, Order $order)
{
$this->authorizeOrganizer($event);
abort_unless($order->event_id === $event->id, 404);
$order->load('user', 'items.ticketTier', 'attendees');
return view('organizer.orders.show', compact('event', 'order'));
}
public function exportCsv(Event $event): StreamedResponse
{
$this->authorizeOrganizer($event);
$attendees = Attendee::whereHas('orderItem.order', function ($q) use ($event) {
$q->where('event_id', $event->id)->where('status', 'paid');
})->with('orderItem.ticketTier', 'orderItem.order')->get();
$filename = 'attendees-' . $event->slug . '-' . now()->format('Ymd') . '.csv';
return response()->streamDownload(function () use ($attendees) {
$handle = fopen('php://output', 'w');
fputcsv($handle, ['No', 'Nama', 'Email', 'Telepon', 'Ticket Tier', 'Ticket Code', 'Checked In']);
foreach ($attendees as $i => $att) {
fputcsv($handle, [
$i + 1,
$att->full_name,
$att->email,
$att->phone ?? '-',
$att->orderItem->ticketTier->name,
$att->ticket_code,
$att->checkin_at ? $att->checkin_at->format('d/m/Y H:i') : 'Belum',
]);
}
fclose($handle);
}, $filename, ['Content-Type' => 'text/csv']);
}
private function authorizeOrganizer(Event $event): void
{
if ($event->organizer_id !== auth()->id() && !auth()->user()->isAdmin()) {
abort(403);
}
}
}
|