Skip to content

Commit b6f92c4

Browse files
authored
Merge pull request #34 from t3rminalV/seat-groups
Seat Groups Implementation
2 parents 8a97e76 + 9be5e53 commit b6f92c4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1528
-18
lines changed

_ide_helper_models.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ class IdeHelperRole {}
307307
* @property string $label
308308
* @property string|null $description
309309
* @property string|null $class
310+
* @property int $seat_group_id
310311
* @property int $disabled
311312
* @property \Illuminate\Support\Carbon|null $created_at
312313
* @property \Illuminate\Support\Carbon|null $updated_at

app/Http/Controllers/Admin/EventController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,13 @@ public function index(Request $request)
9494
public function show(Event $event)
9595
{
9696
$seatingPlans = $event->seatingPlans()->withCount('seats')->orderBy('order', 'ASC')->get();
97+
$seatGroups = $event->seatGroups()->withCount('seats')->withCount('assignments')->get();
9798
$ticketTypes = $event->ticketTypes()->withCount('tickets')->get();
9899

99100
return view('admin.events.show', [
100101
'event' => $event,
101102
'seatingPlans' => $seatingPlans,
103+
'seatGroups' => $seatGroups,
102104
'ticketTypes' => $ticketTypes,
103105
]);
104106
}

app/Http/Controllers/Admin/SeatController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ protected function updateObject(Seat $seat, Request $request): void
3939
$seat->label = $request->input('label');
4040
$seat->description = $request->input('description');
4141
$seat->class = $request->input('class');
42+
$seat->seat_group_id = $request->input('seat_group');
4243
$seat->disabled = (bool)$request->input('disabled', false);
4344
$seat->save();
4445
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Admin\DeleteRequest;
7+
use App\Http\Requests\Admin\SeatGroupAssignmentUpdateRequest;
8+
use App\Http\Requests\Admin\SeatGroupUpdateRequest;
9+
use App\Models\Event;
10+
use App\Models\SeatGroup;
11+
use App\Models\SeatGroupAssignment;
12+
use Illuminate\Http\Request;
13+
14+
class SeatGroupAssignmentController extends Controller
15+
{
16+
/**
17+
* Show the form for creating a new resource.
18+
*/
19+
public function create(Event $event, SeatGroup $seatgroup)
20+
{
21+
$assignment = new SeatGroupAssignment();
22+
$assignment->group()->associate($seatgroup);
23+
return view('admin.seatgroupassignments.create', [
24+
'event' => $event,
25+
'group' => $seatgroup
26+
]);
27+
}
28+
29+
/**
30+
* Store a newly created resource in storage.
31+
*/
32+
public function store(SeatGroupAssignmentUpdateRequest $request, Event $event, SeatGroup $seatgroup)
33+
{
34+
$assignment = new SeatGroupAssignment();
35+
$assignment->group()->associate($seatgroup);
36+
$this->updateObject($assignment, $request);
37+
return response()->redirectToRoute('admin.events.seatgroups.show', [$event->code, $seatgroup->id])->with('successMessage', 'The seat group assignment has been created');
38+
}
39+
40+
protected function updateObject(SeatGroupAssignment $assignment, Request $request)
41+
{
42+
$assignment->assignment_type = $request->input('assignment_type');
43+
$assignment->assignment_type_id = $request->input('assignment_type_id');
44+
$assignment->save();
45+
}
46+
47+
/**
48+
* Show the form for editing the specified resource.
49+
*/
50+
public function edit(Event $event, SeatGroup $seatgroup, SeatGroupAssignment $assignment)
51+
{
52+
return view('admin.seatgroupassignments.edit', [
53+
'event' => $event,
54+
'group' => $seatgroup,
55+
'assignment' => $assignment
56+
]);
57+
}
58+
59+
/**
60+
* Update the specified resource in storage.
61+
*/
62+
public function update(SeatGroupAssignmentUpdateRequest $request, Event $event, SeatGroup $seatgroup, SeatGroupAssignment $assignment)
63+
{
64+
$this->updateObject($assignment, $request);
65+
return response()->redirectToRoute('admin.events.seatgroups.show', [$event->code, $seatgroup->id]);
66+
}
67+
68+
public function destroy(DeleteRequest $request, Event $event, SeatGroup $seatgroup, SeatGroupAssignment $assignment)
69+
{
70+
$assignment->delete();
71+
return response()->redirectToRoute('admin.events.seatgroups.show', [$event->code, $seatgroup->id]);
72+
}
73+
74+
public function delete(Event $event, SeatGroup $seatgroup, SeatGroupAssignment $assignment)
75+
{
76+
return view('admin.seatgroupassignments.delete', [
77+
'event' => $event,
78+
'group' => $seatgroup,
79+
'assignment' => $assignment,
80+
]);
81+
}
82+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Admin\DeleteRequest;
7+
use App\Http\Requests\Admin\SeatGroupUpdateRequest;
8+
use App\Models\Event;
9+
use App\Models\Seat;
10+
use App\Models\SeatGroup;
11+
use Illuminate\Http\Request;
12+
13+
class SeatGroupController extends Controller
14+
{
15+
/**
16+
* Show the form for creating a new resource.
17+
*/
18+
public function create(Event $event)
19+
{
20+
$group = new SeatGroup();
21+
$group->event()->associate($event);
22+
return view('admin.seatgroups.create', [
23+
'event' => $event
24+
]);
25+
}
26+
27+
/**
28+
* Store a newly created resource in storage.
29+
*/
30+
public function store(SeatGroupUpdateRequest $request, Event $event)
31+
{
32+
$group = new SeatGroup();
33+
$group->event()->associate($event);
34+
$this->updateObject($group, $request);
35+
return response()->redirectToRoute('admin.events.seatgroups.show', [$event->code, $group->id])->with('successMessage', 'The seat group has been created');
36+
}
37+
38+
protected function updateObject(SeatGroup $group, Request $request)
39+
{
40+
$group->name = $request->input('name');
41+
$group->class = $request->input('class');
42+
$group->save();
43+
}
44+
45+
/**
46+
* Display the specified resource.
47+
*/
48+
public function show(Event $event, SeatGroup $seatgroup)
49+
{
50+
return view('admin.seatgroups.show', [
51+
'event' => $event,
52+
'group' => $seatgroup
53+
]);
54+
}
55+
56+
/**
57+
* Show the form for editing the specified resource.
58+
*/
59+
public function edit(Event $event, SeatGroup $seatgroup)
60+
{
61+
return view('admin.seatgroups.edit', [
62+
'event' => $event,
63+
'group' => $seatgroup
64+
]);
65+
}
66+
67+
/**
68+
* Update the specified resource in storage.
69+
*/
70+
public function update(SeatGroupUpdateRequest $request, Event $event, SeatGroup $seatgroup)
71+
{
72+
$this->updateObject($seatgroup, $request);
73+
return response()->redirectToRoute('admin.events.seatgroups.show', [$event->code, $seatgroup->id]);
74+
}
75+
76+
/**
77+
* Remove the specified resource from storage.
78+
*/
79+
public function destroy(DeleteRequest $request, Event $event, SeatGroup $seatgroup)
80+
{
81+
$seatgroup->delete();
82+
return response()->redirectToRoute('admin.events.show', $event->code);
83+
}
84+
85+
public function delete(Event $event, SeatGroup $seatgroup)
86+
{
87+
return view('admin.seatgroups.delete', [
88+
'event' => $event,
89+
'group' => $seatgroup,
90+
]);
91+
}
92+
}

app/Http/Controllers/Admin/SeatingPlanController.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,11 @@ protected function updateObject(SeatingPlan $plan, Request $request)
3535
{
3636
$plan->name = $request->input('name');
3737
$plan->image_url = $request->input('image_url');
38-
$plan->image_height = getimagesize($request->input('image_url'))[1];
39-
$plan->image_width = getimagesize($request->input('image_url'))[0];
38+
$imageSizeArr = getimagesize($request->input('image_url'));
39+
if($imageSizeArr) {
40+
$plan->image_height = $imageSizeArr[1];
41+
$plan->image_width = $imageSizeArr[0];
42+
}
4043
$plan->scale = $request->input('scale') ? $request->input('scale') : 100;
4144
$plan->save();
4245
}
@@ -99,7 +102,7 @@ public function down(Event $event, SeatingPlan $seatingplan)
99102
public function export(Event $event, SeatingPlan $seatingplan)
100103
{
101104
$csv = [[
102-
'ID', 'X', 'Y', 'Row', 'Number', 'Label', 'Description', 'CSS Class', 'Disabled',
105+
'ID', 'X', 'Y', 'Row', 'Number', 'Label', 'Description', 'CSS Class', 'Seat Group ID', 'Disabled',
103106
]];
104107
$seatingplan->seats()->chunk(100, function ($chunk) use (&$csv) {
105108
foreach ($chunk as $seat) {
@@ -112,6 +115,7 @@ public function export(Event $event, SeatingPlan $seatingplan)
112115
$seat->label,
113116
$seat->description,
114117
$seat->class,
118+
$seat->group ? $seat->group->id : null,
115119
$seat->disabled ? 1 : 0,
116120
];
117121
}

app/Http/Controllers/SeatingPlanController.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,15 @@ public function show(Request $request, Event $event, ?Ticket $ticket = null)
9999
$seats[$plan->id] = $plan->getData();
100100
}
101101

102+
$seatGroups = [];
103+
if ($currentTicket) {
104+
foreach ($event->seatGroups as $seatGroup) {
105+
if ($currentTicket->user->allowedSeatGroup($seatGroup)) {
106+
array_push($seatGroups, $seatGroup->id);
107+
}
108+
}
109+
}
110+
102111
$params = [
103112
'allTickets' => $allTickets,
104113
'event' => $event,
@@ -108,6 +117,7 @@ public function show(Request $request, Event $event, ?Ticket $ticket = null)
108117
'responsibleSeats' => $responsibleSeats,
109118
'responsibleTickets' => $responsibleTickets,
110119
'currentTicket' => $currentTicket,
120+
'seatGroups' => $seatGroups
111121
];
112122

113123
$view = 'seatingplans.show';
@@ -140,7 +150,7 @@ public function select(Request $request, Event $event, Ticket $ticket, Seat $sea
140150
return response()->redirectToRoute('seatingplans.show', $event->code)->with('errorMessage', 'You cannot pick a seat for this ticket')->withFragment("tab-plan-{$seat->plan->code}");
141151
}
142152

143-
if (!$seat->canPick($request->user())) {
153+
if (!$seat->canPick($ticket->user)) {
144154
return response()->redirectToRoute('seatingplans.show', [$event->code, $ticket->id])->with('errorMessage', "That seat is not available")->withFragment("tab-plan-{$seat->plan->code}");
145155
}
146156

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Admin;
4+
5+
use Illuminate\Contracts\Validation\ValidationRule;
6+
use Illuminate\Foundation\Http\FormRequest;
7+
8+
class SeatGroupAssignmentUpdateRequest extends FormRequest
9+
{
10+
/**
11+
* Determine if the user is authorized to make this request.
12+
*/
13+
public function authorize(): bool
14+
{
15+
return true;
16+
}
17+
18+
/**
19+
* Get the validation rules that apply to the request.
20+
*
21+
* @return array<string, ValidationRule|array<mixed>|string>
22+
*/
23+
public function rules(): array
24+
{
25+
$assignmentType = $this->input('assignment_type');
26+
return [
27+
'assignment_type' => 'required',
28+
'assignment_type_id' => 'required|integer|exists:'.$assignmentType.'s,id',
29+
];
30+
}
31+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Admin;
4+
5+
use Illuminate\Contracts\Validation\ValidationRule;
6+
use Illuminate\Foundation\Http\FormRequest;
7+
8+
class SeatGroupUpdateRequest extends FormRequest
9+
{
10+
/**
11+
* Determine if the user is authorized to make this request.
12+
*/
13+
public function authorize(): bool
14+
{
15+
return true;
16+
}
17+
18+
/**
19+
* Get the validation rules that apply to the request.
20+
*
21+
* @return array<string, ValidationRule|array<mixed>|string>
22+
*/
23+
public function rules(): array
24+
{
25+
return [
26+
'name' => 'required|string|max:100',
27+
'class' => 'sometimes|string|nullable|max:255',
28+
];
29+
}
30+
}

app/Http/Requests/Admin/SeatUpdateRequest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public function rules(): array
3030
'label' => 'required|string|max:100',
3131
'description' => 'sometimes|string|nullable|max:255',
3232
'class' => 'sometimes|string|nullable|max:255',
33+
'seat_group' => 'sometimes|exists:seat_groups,id|nullable',
3334
'disabled' => 'sometimes|boolean|nullable',
3435
];
3536
}

0 commit comments

Comments
 (0)