%PDF- %PDF-
Direktori : /var/www/html/hr/api/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/hr/api/app/Http/Controllers/Api/v1/PtosController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\v1\Ptos\CreatePtoRequest; use App\Models\BaseModel; use App\Models\Pto; use App\Models\Role; use App\Models\User; use App\Transformers\DayTransformer; use App\Transformers\PtoTransformer; use Carbon\Carbon; use Illuminate\Http\Request; use Throwable; class PtosController extends ApiController { /** * @var DayTransformer */ private $transformer; /** * @var User */ private $user; public function __construct(PtoTransformer $transformer) { $this->transformer = $transformer; $this->user = BaseModel::getLoggedInUser(); } public function getAll(Request $request) { $ptos = Pto::query() ->where('status', '!=', Pto::DRAFT) ->where('start_date', '>', Carbon::now()); if (!$this->user->isAdmin()) { $ptos = $ptos->whereHas('user', function ($q) { $q->whereDoesntHave('roles', function ($r) { $r->where('name', Role::ADMIN); }); }); } $ptos = $ptos->orderByRaw("FIELD(status , 'PENDING') DESC") ->orderBy('start_date', 'ASC') ->get(); return $this->collection($ptos, $this->transformer); } public function index(Request $request) { $ptos = Pto::query() ->where('user_id', $this->user->id) ->paginate($request->get('per_page')); return $this->paginate($ptos, $this->transformer); } public function show($pto) { $pto = Pto::query() ->findOrFail($pto); return $this->item($pto, $this->transformer); } public function store(CreatePtoRequest $request) { try { $pto = Pto::createItem($request->only([ 'start_date', 'end_date', 'notes', ])); return $this->item($pto, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function update(CreatePtoRequest $request, $pto) { try { /** @var Pto $pto */ $pto = Pto::query() ->findOrFail($pto); $pto->updateItem($request->only([ 'start_date', 'end_date', 'notes', ])); return $this->item($pto, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function destroy($pto) { Pto::destroy($pto); return $this->noContent(); } public function request(Pto $pto) { if ($pto->user_id !== $this->user->id) { return $this->unauthorized([ 'message' => trans('auth.unauthorized'), ]); } try { $pto->request(); return $this->item($pto, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function approve(Pto $pto) { try { $pto->approve(); return $this->item($pto, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function reject(Pto $pto) { try { $pto->reject(); return $this->item($pto, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } }