69 lines
2.2 KiB
PHP
69 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\DoublerRequestsStoreRequest;
|
|
use App\Models\DoublerRequest;
|
|
use App\Models\Event;
|
|
use Illuminate\Contracts\Foundation\Application;
|
|
use Illuminate\Contracts\View\Factory;
|
|
use Illuminate\Contracts\View\View;
|
|
|
|
use function auth;
|
|
use function compact;
|
|
use function to_route;
|
|
|
|
class DoublerRequestController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* Data sent to view:
|
|
* - events - all existing events
|
|
* - existingRequests - previously made requests for each event, keyed by student id
|
|
* existingRequest[eventId][student id]-> Request
|
|
* - doublers - existing doublers, grouped by event. Keyed by event_id and student_id
|
|
*
|
|
* @return Application|Factory|View|\Illuminate\Foundation\Application|\Illuminate\View\View
|
|
*/
|
|
public function index()
|
|
{
|
|
$events = Event::all();
|
|
$existingRequests = auth()->user()->school->doublerRequests
|
|
->groupBy('event_id')
|
|
->map(function ($requestsForEvent) {
|
|
return $requestsForEvent->keyBy('student_id');
|
|
});
|
|
$doublers = auth()->user()->school->doublers()
|
|
->with('student')
|
|
->with('event')
|
|
->get()
|
|
->groupBy('event_id');
|
|
|
|
return view('doubler_request.index', compact('events', 'doublers', 'existingRequests'));
|
|
}
|
|
|
|
public function makeRequest(DoublerRequestsStoreRequest $request)
|
|
{
|
|
foreach ($request->getDoublerRequests() as $thisRequest) {
|
|
if (! $thisRequest['request']) {
|
|
DoublerRequest::where('event_id', $thisRequest['event_id'])
|
|
->where('student_id', $thisRequest['student_id'])->delete();
|
|
|
|
continue;
|
|
}
|
|
DoublerRequest::upsert([
|
|
'event_id' => $thisRequest['event_id'],
|
|
'student_id' => $thisRequest['student_id'],
|
|
'request' => $thisRequest['request'],
|
|
],
|
|
uniqueBy: ['event_id', 'student_id'],
|
|
update: ['request']
|
|
);
|
|
}
|
|
|
|
return to_route('doubler_request.index')->with('success', 'Recorded doubler requests');
|
|
|
|
}
|
|
}
|