%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/camillo/camillo-api-master/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
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);
        }
    }
}

Zerion Mini Shell 1.0