File manager - Edit - /var/www/html/spdc/api/app/Http/Services/ScaleTradesService.php
Back
<?php namespace App\Http\Services; use App\Enums\ScaleType; use App\Models\ScaleDay; use App\Models\Department; use App\Models\ScaleMember; use Illuminate\Http\Request; use App\Models\ScaleExtraHour; use App\Models\ScaleDayRequest; use Illuminate\Http\JsonResponse; use App\Classes\BaseServiceResponse; use App\Models\ScaleExtraHourRequest; use App\Models\ScaleWarningDayRequest; use App\Http\Resources\ScaleDayRequestResource; use App\Http\Resources\ScaleExtraHourRequestResource; use App\Http\Resources\ScaleWarningDayRequestResource; class ScaleTradesService extends BaseService { public function indexScaleDayRequest(Request $request, Department $department): BaseServiceResponse { $query = ScaleDayRequest::query(); $query = $query->whereHas('requestedMember.day.scale.department', function ($subquery) use ($department) { $subquery->where('id', $department->id); }); if ($request->has('approved')) { $query = $query->where('approved', $request->approved); } if ($request->has('approved_by_member')) { $query = $query->where('approved_by_member', $request->approved_by_member); } if ($request->has('current_user')) { $query = $query->whereRelation('requestedMember', 'user_id', $request->user['id']); } $requests = $query->paginate(); return $this->response(ScaleDayRequestResource::collection($requests), JsonResponse::HTTP_OK); } public function indexScaleExtraHourRequest(Request $request, Department $department): BaseServiceResponse { $approved = $request->input('approved', false); $query = ScaleExtraHourRequest::query(); $query = $query = $query->whereHas('extraHour.day.scale.department', function ($query) use ($department) { $query->where('id', $department->id); }); if ($request->has('approved')) { $query = $query->where('approved', $request->approved); } if ($request->has('current_user')) { $query = $query->where('user_id', $request->user['id']); } $requests = $query->paginate(); return $this->response(ScaleExtraHourRequestResource::collection($requests), JsonResponse::HTTP_OK); } public function indexScaleWarningDayRequest(Request $request, Department $department): BaseServiceResponse { $approved = $request->input('approved', false); $approvedByMember = $request->input('approved_by_member', false); $query = ScaleWarningDayRequest::query(); $query = $query->whereHas('day.scale.department', function ($query) use ($department) { $query->where('id', $department->id); }); if ($request->has('approved')) { $query = $query->where('approved', $request->approved); } if ($request->has('approved_by_member')) { $query = $query->where('approved_by_member', $request->approved_by_member); } if ($request->has('current_user')) { $query = $query->whereRelation('member', 'user_id', $request->user['id']); } $requests = $query->paginate(); return $this->response(ScaleWarningDayRequestResource::collection($requests), JsonResponse::HTTP_OK); } public function requestExtraHour(Request $request, ScaleExtraHour $extraHour): BaseServiceResponse { if ($extraHour->day->scale->warning === true) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Este tipo de escala não permite hora extra.'); } if ($extraHour->available === false) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Esta hora extra não está mais disponível.'); } $scaleService = new ScaleService(); if ($scaleService->isUserAvaliable($extraHour->day->day, $extraHour->day->scale->month, $extraHour->day->scale->year, $request->user_id)) { $extraHour->requests()->create([ 'approved' => false, 'user_id' => $request->user_id ]); } return $this->response(null, JsonResponse::HTTP_NO_CONTENT); } public function acceptExtraHour(Request $request, ScaleExtraHourRequest $extraHourRequest): BaseServiceResponse { /** * adicionar verificação: a pessoa que está aceitando tem a permissão para fazer isso */ $scale = $extraHourRequest->extraHour->day->scale; $day = $extraHourRequest->extraHour->day; if ($scale->warning === true) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Este tipo de escala não permite hora extra.'); } if ($extraHourRequest->approved === true) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Esta solicitação já foi aceita uma vez.'); } $scaleService = new ScaleService(); if (!$scaleService->isUserAvaliable($extraHourRequest->extraHour->day->day, $extraHourRequest->extraHour->day->scale->month, $extraHourRequest->extraHour->day->scale->year, $extraHourRequest->user_id)) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Esta pessoa não está disponível.'); } if ($scale->department->scale_type === ScaleType::EQUIPE->value) { if (!isset($extraHourRequest->extraHour->scale_team_id) || !isset($extraHourRequest->extraHour->scale_function_id)) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Não é possível aceitar essa hora extra. Informações incompletas.'); } $member = $day->members()->create([ 'user_id' => $extraHourRequest->user_id, ]); $member->teams()->attach($extraHourRequest->extraHour->scale_team_id, ['scale_function_id' => $extraHourRequest->extraHour->scale_function_id]); } elseif ($scale->department->scale_type === ScaleType::INDIVIDUAL->value) { $member = $day->members()->create([ 'user_id' => $extraHourRequest->user_id, ]); } $extraHourRequest->fill(['approved' => true])->save(); return $this->response(null, JsonResponse::HTTP_NO_CONTENT); } public function requestWarningDay(Request $request, ScaleDay $day): BaseServiceResponse { if ( ScaleWarningDayRequest::where('scale_member_id', $request->scale_member_id) ->where('requester_user_id', $request->requester_user_id) ->where('scale_day_id', $day->id) ->exists() ) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Já existe uma solicitação de troca com esses dados.'); } if ($day->scale->warning === false) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Este tipo de escala não permite rendições.'); } $day->warningRequests()->create([ 'scale_member_id' => $request->scale_member_id, 'requester_user_id' => $request->requester_user_id, 'approved' => false, ]); return $this->response(null, JsonResponse::HTTP_NO_CONTENT); } public function acceptWarningDay(Request $request, ScaleWarningDayRequest $warningRequest): BaseServiceResponse { if ($warningRequest->day->scale->warning === false) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Este tipo de escala não permite rendições.'); } if ($warningRequest->approved === true && $warningRequest->approved_by_member === true) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Esta solicitação já foi encerrada.'); } $warningRequest->fill($request->all())->save(); if ($warningRequest->approved === true && $warningRequest->approved_by_member === true) { $warningRequest->member->fill(['user_id' => $warningRequest->requester_user_id])->save(); } return $this->response(null, JsonResponse::HTTP_NO_CONTENT); } public function requestDay(Request $request): BaseServiceResponse { /** * Verificando se já possui uma solicitação aberta */ if ( ScaleDayRequest::where('current_scale_day_id', $request->current_scale_day_id) ->where('current_scale_member_id', $request->current_scale_member_id) ->where('requested_scale_day_id', $request->requested_scale_day_id) ->where('requested_scale_member_id', $request->requested_scale_member_id) ->exists() ) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Já existe uma solicitação de troca com esses dados.'); } $day = ScaleDay::findOrFail($request->requested_scale_day_id); if ($day->scale->warning === true) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Este tipo de escala não permite trocas.'); } $day->requests()->create([ 'current_scale_day_id' => $request->current_scale_day_id, 'current_scale_member_id' => $request->current_scale_member_id, 'requested_scale_member_id' => $request->requested_scale_member_id, 'approved' => false, 'approved_by_member' => false, ]); return $this->response(null, JsonResponse::HTTP_NO_CONTENT); } public function acceptDay(Request $request, ScaleDayRequest $dayRequest): BaseServiceResponse { if ($dayRequest->currentDay->scale->warning === true || $dayRequest->requestedDay->scale->warning === true) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Este tipo de escala não permite trocas.'); } if ($dayRequest->approved === true && $dayRequest->approved_by_member === true) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Esta solicitação já foi encerrada.'); } $scaleService = new ScaleService(); if (!$scaleService->isUserAvaliable($dayRequest->requestedDay->day, $dayRequest->requestedDay->scale->month, $dayRequest->requestedDay->scale->year, $dayRequest->currentMember->user_id)) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Esta pessoa não está disponível.'); } if (!$scaleService->isUserAvaliable($dayRequest->currentDay->day, $dayRequest->currentDay->scale->month, $dayRequest->currentDay->scale->year, $dayRequest->requestedMember->user_id)) { return $this->response([], JsonResponse::HTTP_BAD_REQUEST, 'Esta pessoa não está disponível.'); } $dayRequest->fill($request->all())->save(); if ($dayRequest->approved === true && $dayRequest->approved_by_member === true) { $dayRequest->currentMember->fill(['user_id' => $dayRequest->requested_scale_member_id])->save(); } return $this->response(null, JsonResponse::HTTP_NO_CONTENT); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings