%PDF- %PDF-
Direktori : /var/www/html/camillo/camillo-api-master/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/camillo/camillo-api-master/app/Http/Controllers/Api/v1/EventController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Http\Controllers\Controller; use App\Http\Resources\EventResource; use App\Models\Absence; use App\Models\Classroom; use App\Models\Event; use App\Models\Institute; use App\Models\Minor; use App\Traits\ApiUser; use App\Traits\EventEmitterTrait; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Symfony\Component\HttpKernel\Exception\HttpException; class EventController extends Controller { use ApiUser; use EventEmitterTrait; public function show(Request $request, Classroom $classroom) { $minors = $classroom->minors; return response()->json(EventResource::collection($minors)); } /** * @param Request $request * @param Classroom $classroom * @param Minor $minor * * @return \Illuminate\Http\JsonResponse */ public function confirmPresence(Request $request, Classroom $classroom, Minor $minor) { $this->registerEvent('presence_confirmed', $minor, $classroom); return response()->json(__('presence_successfully_confirmed'), Response::HTTP_CREATED); } public function confirmAbsence(Request $request, Classroom $classroom, Minor $minor) { $user = $this->getLoggedUser(); $absence = new Absence([ "date" => date("Y-m-d"), "reason" => "Assente all'appello", ]); DB::transaction(function () use ($absence, $user, $minor, $classroom) { $absence->user()->associate($user); $absence->minor()->associate($minor); $absence->classroom()->associate($classroom); $absence->saveOrFail(); $this->registerEvent("minor_absence_teacher", $minor, $classroom); }); return response()->json(__('absence_successfully_confirmed'), Response::HTTP_CREATED); } /** * @param Request $request * @param Classroom $classroom * @param Minor $minor * * @return \Illuminate\Http\JsonResponse */ public function confirmLeft(Request $request, Classroom $classroom, Minor $minor) { $this->registerEvent('minor_left_class', $minor, $classroom); return response()->json(__('minor_left_successfully_confirmed'), Response::HTTP_CREATED); } /** * @param Request $request * * @return \Illuminate\Http\JsonResponse * @internal param Minor $minor * @internal param Institute $institute * @internal param Classroom $classroom */ // DEPRECATED public function qrArrived(Request $request) { $user = $this->getLoggedUser(); $minor = Minor::find($request->input('minor_id', false)); $institute = Institute::find($request->input('institute_id', false)); if (!$minor || !$institute) { throw new HttpException(Response::HTTP_BAD_REQUEST, __('invalid_data_provided')); } $user->isTutor($minor); $classroom = $minor->getClassroomFromInstitute($institute); $this->registerEvent('qr_minor_arrived', $minor, $classroom); return response()->json(__('qr_arrived_confirmed'), Response::HTTP_CREATED); } /** * @param Request $request * * @return \Illuminate\Http\JsonResponse * @internal param Minor $minor * @internal param Institute $institute * @internal param Classroom $classroom */ // DEPRECATED public function qrLeft(Request $request) { $user = $this->getLoggedUser(); $minor = Minor::find($request->input('minor_id', false)); $institute = Institute::find($request->input('institute_id', false)); if (!$minor || !$institute) { throw new HttpException(Response::HTTP_BAD_REQUEST, __('invalid_data_provided')); } $user->isTutor($minor); $classroom = $minor->getClassroomFromInstitute($institute); $this->registerEvent('qr_minor_left', $minor, $classroom); return response()->json(__('qr_left_confirmed'), Response::HTTP_CREATED); } /** * @param Request $request * * @return \Illuminate\Http\JsonResponse */ // ALWAYS USE THIS METHOD FOR QR CODE public function qrToggle(request $request) { $user = $this->getLoggedUser(); /** @var Minor $minor */ $minor = Minor::find($request->input('minor_id', false)); $institute = Institute::find($request->input('institute_id', false)); if (!$minor || !$institute) { Log::channel('database')->alert("Qr code non valido: minore - ".$request->input('minor_id')." instituto - ".$request->input('institute_id')); throw new HttpException(Response::HTTP_BAD_REQUEST, __('invalid_data_provided')); } $user->isTutor($minor); $classroom = null; $requestClassroomId = $request->classroom_id ? : $request->header('classroom_id'); if ($requestClassroomId) { $classroom = Classroom::find($requestClassroomId); } else { $classroom = $minor->getExpectedClassroom($institute->id); } $today = (int)date('Ymd'); $hasArrived = Event::where('date_as_int', $today)->where('classroom_id', $classroom->id) ->where('minor_id', $minor->id)->whereHas('eventType', function ($query) { $query->where('event_type', 'presence_confirmed'); $query->orWhere('event_type', 'qr_minor_arrived'); })->count(); if ($hasArrived) { $this->registerEvent('qr_minor_left', $minor, $classroom); return response()->json(__('qr_left_confirmed'), Response::HTTP_CREATED); } else { $this->registerEvent('qr_minor_arrived', $minor, $classroom); return response()->json(__('qr_arrived_confirmed'), Response::HTTP_CREATED); } } }