%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/ArrivalExceptionController.php

<?php

namespace App\Http\Controllers\Api\v1;

use App\Http\Controllers\Controller;
use App\Http\Resources\ArrivalExceptionCollection;
use App\Models\ArrivalException;
use App\Models\Classroom;
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 Symfony\Component\HttpKernel\Exception\HttpException;

class ArrivalExceptionController extends Controller
{
    use ApiUser;
    use EventEmitterTrait;
    /**
     * lists all arrival exceptions by minor/class
     * @param Request $request
     * @param Minor $minor
     * @param Classroom $classroom
     * @return ArrivalExceptionCollection
     */
    public function index(Request $request, Minor $minor, Classroom $classroom)
    {
        $todayFilter = $request->get('today', false);

        $user = $this->getLoggedUser();

        $user->isTutor($minor);

        $exceptions = ArrivalException::where('minor_id', $minor->id)
                ->where('classroom_id', $classroom->id);

       if($todayFilter && $todayFilter == 1){
            $today = date("Y-m-d");
            $exceptions->whereDate('date', $today);
        }

        $arrivalExceptions = $exceptions->get();

        return new ArrivalExceptionCollection($arrivalExceptions);
    }

    /**
     * Stores an arrival exception
     * @param Request $request
     * @param Minor $minor
     * @param Classroom $classroom
     * @return \Illuminate\Contracts\Routing\ResponseFactory|Response
     */
    public function store(Request $request, Minor $minor, Classroom $classroom)
    {
        $user = $this->getLoggedUser();

        $user->isTutor($minor);

        $date = $request->input('date', false);
        $time = $request->input('arrival_time', false);

        if(!$time || !$date){
            throw new HttpException(Response::HTTP_BAD_REQUEST, __('required_fields_are_missing'));
        }

        $arrival_exception = new ArrivalException([
            "date" => Carbon::parse($date)->format("Y-m-d"),
            "arrival_time" => $time
        ]);

        DB::transaction(function () use($arrival_exception, $user, $minor, $classroom) {

            $arrival_exception->user()->associate($user);
            $arrival_exception->minor()->associate($minor);
            $arrival_exception->classroom()->associate($classroom);

            $arrival_exception->saveOrFail();

            $this->registerEvent('arrival_time_exception', $minor, $classroom);
        });
        return response(Response::HTTP_CREATED);
    }

    /**
     * Updates an arrival exception
     * @param Request $request
     * @param ArrivalException $arrivalException
     * @internal param Minor $minor
     * @internal param Classroom $classroom
     * @return \Illuminate\Contracts\Routing\ResponseFactory|Response
     */
    public function update(Request $request, ArrivalException $arrivalException)
    {
        $user = $this->getLoggedUser();

        $minor = $arrivalException->minor;

        $user->isTutor($minor);

        if($request->input('date')){
            throw new HttpException(Response::HTTP_NOT_MODIFIED, __('arrival_time_exception.date_not_updatable'));
        }

        $new_time = $request->input('arrival_time', false);

        if($new_time) {
            DB::transaction(function () use ($arrivalException, $new_time){

            $arrivalException->arrival_time = $new_time;
            $arrivalException->forceSave();

            $this->registerEvent('arrival_time_exception_updated', $arrivalException->minor, $arrivalException->classroom);
            });

            return response(Response::HTTP_OK);
        }

        return response(Response::HTTP_NOT_MODIFIED);
    }

    /**
     * Deletes an arrival exception
     * @param Request $request
     * @param ArrivalException $arrivalException
     * @return \Illuminate\Contracts\Routing\ResponseFactory|Response
     */
    public function destroy(Request $request, ArrivalException $arrivalException)
    {
        $user = $this->getLoggedUser();

        $minor = $arrivalException->minor;

        $user->isTutor($minor);

        $arrivalException->delete();

        return response(Response::HTTP_NO_CONTENT);
    }
}

Zerion Mini Shell 1.0