Spaces:
Sleeping
Sleeping
File size: 2,477 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 73 74 75 | <?php
namespace App\Http\Controllers\Organizer;
use App\Http\Controllers\Controller;
use App\Models\Event;
use App\Models\TicketTier;
use Illuminate\Http\Request;
class TicketTierController extends Controller
{
public function store(Request $request, Event $event)
{
$this->authorizeOrganizer($event);
$validated = $request->validate([
'name' => 'required|string|max:255',
'price' => 'required|numeric|min:0',
'quota' => 'required|integer|min:1',
'max_per_order' => 'required|integer|min:1|max:50',
'is_refundable' => 'boolean',
'sales_start' => 'nullable|date',
'sales_end' => 'nullable|date|after:sales_start',
]);
$validated['is_refundable'] = $request->boolean('is_refundable');
$validated['event_id'] = $event->id;
TicketTier::create($validated);
return back()->with('success', 'Ticket tier berhasil ditambahkan!');
}
public function update(Request $request, Event $event, TicketTier $tier)
{
$this->authorizeOrganizer($event);
abort_unless($tier->event_id === $event->id, 404);
$validated = $request->validate([
'name' => 'required|string|max:255',
'price' => 'required|numeric|min:0',
'quota' => 'required|integer|min:' . $tier->sold_count,
'max_per_order' => 'required|integer|min:1|max:50',
'is_refundable' => 'boolean',
'sales_start' => 'nullable|date',
'sales_end' => 'nullable|date|after:sales_start',
]);
$validated['is_refundable'] = $request->boolean('is_refundable');
$tier->update($validated);
return back()->with('success', 'Ticket tier berhasil diperbarui!');
}
public function destroy(Event $event, TicketTier $tier)
{
$this->authorizeOrganizer($event);
abort_unless($tier->event_id === $event->id, 404);
if ($tier->sold_count > 0) {
return back()->with('error', 'Tidak bisa menghapus tier yang sudah terjual.');
}
$tier->delete();
return back()->with('success', 'Ticket tier berhasil dihapus.');
}
private function authorizeOrganizer(Event $event): void
{
if ($event->organizer_id !== auth()->id() && !auth()->user()->isAdmin()) {
abort(403);
}
}
}
|