%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/hrsys/api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/hrsys/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(),
            ]);
        }
    }

}

Zerion Mini Shell 1.0