Skip to content

Commit 4bb079e

Browse files
committed
Seat Groups Implementation
Added seating groups to events. Seat groups can be set on an event, and then assignments can be made to each group by either user, ticket_type or clan - multiple can be set and will be treated as an OR condition. Looking to address #7 with this.
1 parent 8a97e76 commit 4bb079e

Some content is hidden

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

50 files changed

+1486
-11
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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public function down(Event $event, SeatingPlan $seatingplan)
9999
public function export(Event $event, SeatingPlan $seatingplan)
100100
{
101101
$csv = [[
102-
'ID', 'X', 'Y', 'Row', 'Number', 'Label', 'Description', 'CSS Class', 'Disabled',
102+
'ID', 'X', 'Y', 'Row', 'Number', 'Label', 'Description', 'CSS Class', 'Seat Group ID', 'Disabled',
103103
]];
104104
$seatingplan->seats()->chunk(100, function ($chunk) use (&$csv) {
105105
foreach ($chunk as $seat) {
@@ -112,6 +112,7 @@ public function export(Event $event, SeatingPlan $seatingplan)
112112
$seat->label,
113113
$seat->description,
114114
$seat->class,
115+
$seat->group ? $seat->group->id : null,
115116
$seat->disabled ? 1 : 0,
116117
];
117118
}

app/Http/Controllers/SeatingPlanController.php

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

102+
$seatGroups = [];
103+
foreach ($event->seatGroups as $seatGroup) {
104+
if($request->user()->allowedSeatGroup($seatGroup)) {
105+
array_push($seatGroups, $seatGroup->id);
106+
}
107+
}
108+
102109
$params = [
103110
'allTickets' => $allTickets,
104111
'event' => $event,
@@ -108,6 +115,7 @@ public function show(Request $request, Event $event, ?Ticket $ticket = null)
108115
'responsibleSeats' => $responsibleSeats,
109116
'responsibleTickets' => $responsibleTickets,
110117
'currentTicket' => $currentTicket,
118+
'seatGroups' => $seatGroups
111119
];
112120

113121
$view = 'seatingplans.show';
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)