%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/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); } }