%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/TimecardsController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Exports\TimecardsExport; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\v1\Timecards\ApproveTimecardRequest; use App\Http\Requests\Api\v1\Timecards\BulkApproveTimecardRequest; use App\Http\Requests\Api\v1\Timecards\BulkUnApproveTimecardRequest; use App\Http\Requests\Api\v1\Timecards\CreateTimecardRequest; use App\Models\BaseModel; use App\Models\Timecard; use App\Models\User; use App\Transformers\DayTransformer; use App\Transformers\TimecardTransformer; use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Throwable; class TimecardsController extends ApiController { /** * @var DayTransformer */ private $transformer; /** * @var User */ private $user; public function __construct(TimecardTransformer $transformer) { $this->transformer = $transformer; $this->user = BaseModel::getLoggedInUser(); } public function index(Request $request) { $timecards = Timecard::query() ->where('user_id', $this->user->id); if ($from = $request->get('from')) { $timecards = $timecards->where('date', '>=', Carbon::parse($from) ->startOfDay()); } if ($to = $request->get('to')) { $timecards = $timecards->where('date', '<=', Carbon::parse($to) ->endOfDay()); } $timecards = $timecards->orderBy('date', 'desc') ->paginate($request->get('per_page')); return $this->paginate($timecards, $this->transformer); } public function show($timecard) { $timecard = Timecard::query() ->findOrFail($timecard); return $this->item($timecard, $this->transformer); } public function store(CreateTimecardRequest $request) { try { $timecard = Timecard::createItem($request->only([ 'date', 'start_time', 'end_time', 'notes', 'project_id', ])); return $this->item($timecard, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function update(CreateTimecardRequest $request, $timecard) { try { /** @var Timecard $timecard */ $timecard = Timecard::query() ->findOrFail($timecard); $timecard->updateItem($request->only([ 'date', 'start_time', 'end_time', 'notes', 'project_id', ])); return $this->item($timecard, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function destroy($timecard) { /** @var Timecard $timecard */ $timecard = Timecard::query() ->findOrFail($timecard); try { $timecard->deleteItem(); return $this->noContent(); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function approve(ApproveTimecardRequest $request, $timecard) { try { $timecard = Timecard::query() ->findOrFail($timecard); $timecard->approve($request->get('approved_hours')); return $this->item($timecard, $this->transformer); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function bulkApprove(BulkApproveTimecardRequest $request) { try { Timecard::bulkApprove($request->get('timecards')); return response()->json([ 'message' => 'ok', ], 200); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function bulkUnApprove(BulkUnApproveTimecardRequest $request) { try { Timecard::bulkUnApprove($request->get('timecards')); return response()->json([ 'message' => 'ok', ], 200); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function toApprove(Request $request) { $timecards = $this->filterTimecards($request); $timecards = $timecards->orderBy('date') ->orderBy('start_time') ->paginate($request->get('per_page')); return $this->paginate($timecards, $this->transformer); } private function filterTimecards(Request $request) { $user = BaseModel::getLoggedInUser(); /** @var Builder $timecards */ $timecards = Timecard::query() ->private($user); if (!filter_var($request->get('show_approved'), FILTER_VALIDATE_BOOLEAN)) { $timecards = $timecards->where('status', Timecard::TO_APPROVE); } if ($user->isManager()) { $timecards = $timecards->whereHas('project', function (Builder $p) use ($user) { $p->where('manager_id', $user->id); }); } if ($project = $request->get('project_id')) { $timecards = $timecards->where('project_id', $project); } if ($from = $request->get('from')) { $timecards = $timecards->where('date', '>=', $from); } if ($to = $request->get('to')) { $timecards = $timecards->where('date', '<=', $to); } if ($userId = $request->get('user_id')) { $timecards = $timecards->where('user_id', '<=', $userId); } return $timecards; } public function approveAll() { try { Timecard::approveAll(); return response()->json([ 'message' => 'ok', ], 200); } catch (Throwable $e) { return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function export(Request $request) { $timecards = $this->filterTimecards($request); $timecards = $timecards->orderBy('date') ->orderBy('start_time'); return (new TimecardsExport($timecards))->download('timecards.xlsx'); } }