File manager - Edit - /var/www/html/gop/api/app/Http/Controllers/ReajusteController.php
Back
<?php namespace App\Http\Controllers; use App\Http\Requests\Index\IndexReajusteRequest; use App\Http\Requests\Store\StorePrivateFieldRequest; use App\Http\Requests\Store\StoreReajusteRequest; use App\Http\Requests\Update\UpdateReajusteRequest; use App\Http\Services\PrivateFieldService; use App\Models\Obra; use App\Models\Reajuste; use Illuminate\Support\Facades\DB; use Symfony\Component\HttpFoundation\JsonResponse; /** * @OA\Tag( * name="Reajuste", * description="Gerenciamento de Reajustes" * ) */ class ReajusteController extends Controller { public function __construct() { $this->authorizeResource(Reajuste::class); } /** * @OA\Get( * path="/api/reajuste", * summary="Lista de reajustes", * operationId="IndexReajuste", * tags={"Reajuste"}, * security={{"bearerAuth":{}}}, * @OA\Parameter(name="tipo", in="query", @OA\Schema(type="string"), description="Filtra por tipo"), * @OA\Parameter(name="subtipo", in="query", @OA\Schema(type="string"), description="Filtra por subtipo"), * @OA\Parameter(name="obra_id", in="query", @OA\Schema(type="integer"), description="Filtra por obra"), * @OA\Parameter(name="limit", in="query", @OA\Schema(type="integer", default=15)), * @OA\Response(response=200, description="Reajustes retornados com sucesso") * ) */ public function index(IndexReajusteRequest $request) { $limit = $request->limit ?? 15; $reajuste = Reajuste::with(['obra', 'subtipos']) ->when(! empty($request->tipo), function ($q) use ($request) { $q->where('tipo', 'LIKE', $request->tipo); }) ->when(! empty($request->subtipo), function ($q) use ($request) { $q->where('subtipo', 'LIKE', $request->subtipo); }) ->when(! empty($request->obra_id), function ($q) use ($request) { $q->where('obra_id', $request->obra_id); }) ->latest('id') ->paginate($limit); return response()->json($reajuste); } /** * @OA\Post( * path="/api/reajuste", * summary="Cria novo reajuste", * operationId="StoreReajuste", * tags={"Reajuste"}, * security={{"bearerAuth":{}}}, * @OA\RequestBody( * required=true, * @OA\JsonContent( * type="object", * @OA\Property(property="obra_id", type="integer"), * @OA\Property(property="tipo", type="string"), * @OA\Property(property="valor_ajustado", type="number", format="float"), * @OA\Property(property="prazo_ajustado", type="integer"), * @OA\Property( * property="subtipos", * type="array", * @OA\Items(type="object") * ) * ) * ), * @OA\Response(response=201, description="Reajuste criado com sucesso") * ) */ public function store(StoreReajusteRequest $request) { $reajuste = null; DB::transaction(function () use ($request, &$reajuste) { $obra = Obra::findOrFail($request->obra_id); $reajuste = Reajuste::create([ 'tipo' => $request->tipo, 'valor_anterior' => (float) $obra->valor_ajustado, 'valor_ajustado' => $request->valor_ajustado, 'prazo_anterior' => $obra->prazo_ajustado, 'prazo_ajustado' => $request->prazo_ajustado, 'altera_valor' => (bool) $request->valor_ajustado, 'altera_prazo' => (bool) $request->prazo_ajustado, 'obra_id' => $obra->id, ]); $reajuste->subtipos()->createMany($request->subtipos); if ($request->valor_ajustado) { $obra->valor_ajustado = $request->valor_ajustado; } if ($request->prazo_ajustado) { $obra->prazo_ajustado = $request->prazo_ajustado; } $obra->save(); $reajuste->load('subtipos'); }); return response()->json($reajuste, JsonResponse::HTTP_CREATED); } /** * @OA\Get( * path="/api/reajuste/{reajuste}", * summary="Exibe um reajuste", * operationId="ShowReajuste", * tags={"Reajuste"}, * security={{"bearerAuth":{}}}, * @OA\Parameter(name="reajuste", in="path", required=true, @OA\Schema(type="integer")), * @OA\Response(response=200, description="Reajuste retornado com sucesso") * ) */ public function show(Reajuste $reajuste) { $reajuste->load(['obra', 'subtipos']); return response()->json($reajuste); } /** * @OA\Put( * path="/api/reajuste/{reajuste}", * summary="Atualiza um reajuste", * operationId="UpdateReajuste", * tags={"Reajuste"}, * security={{"bearerAuth":{}}}, * @OA\Parameter(name="reajuste", in="path", required=true, @OA\Schema(type="integer")), * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=200, description="Reajuste atualizado com sucesso") * ) */ public function update(UpdateReajusteRequest $request, Reajuste $reajuste) { $obra = Obra::findOrFail($request->obra_id); if ($request->valor_ajustado && $reajuste->valor_ajustado !== $obra->valor_ajustado) { $obra->valor_ajustado = $request->valor_ajustado; } if ($request->prazo_ajustado && $reajuste->prazo_ajustado !== $obra->prazo_ajustado) { $obra->prazo_ajustado = $request->prazo_ajustado; } $obra->save(); $reajuste->update($request->validated()); \App\Models\ReajusteSubtipo::where('reajuste_id', $reajuste->id)->delete(); $reajuste->subtipos()->createMany($request->subtipos); return response()->json($reajuste->load(['subtipos']), JsonResponse::HTTP_OK); } /** * @OA\Delete( * path="/api/reajuste/{reajuste}", * summary="Remove um reajuste", * operationId="DeleteReajuste", * tags={"Reajuste"}, * security={{"bearerAuth":{}}}, * @OA\Parameter(name="reajuste", in="path", required=true, @OA\Schema(type="integer")), * @OA\Response(response=204, description="Reajuste removido com sucesso") * ) */ public function destroy(Reajuste $reajuste) { $obra = Obra::findOrFail($reajuste->obra_id); $obra->valor_ajustado = (float) $reajuste->valor_anterior; $obra->prazo_ajustado = $reajuste->prazo_anterior; $obra->save(); $reajuste->delete(); return response()->json([], JsonResponse::HTTP_NO_CONTENT); } /** * @OA\Get( * path="/api/reajuste/{reajuste}/campos-ocultos", * summary="Campos privados do reajuste", * operationId="ShowReajustePrivateFields", * tags={"Reajuste"}, * security={{"bearerAuth":{}}}, * @OA\Parameter(name="reajuste", in="path", required=true, @OA\Schema(type="integer")), * @OA\Response(response=200, description="Campos privados retornados com sucesso") * ) */ public function showPrivateFields(Reajuste $reajuste) { $privateFieldService = new PrivateFieldService(); return $privateFieldService->show($reajuste); } /** * @OA\Post( * path="/api/reajuste/{reajuste}/campos-ocultos", * summary="Atualiza campos privados do reajuste", * operationId="SetReajustePrivateFields", * tags={"Reajuste"}, * security={{"bearerAuth":{}}}, * @OA\Parameter(name="reajuste", in="path", required=true, @OA\Schema(type="integer")), * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=200, description="Campos privados atualizados com sucesso") * ) */ public function setPrivateFields(StorePrivateFieldRequest $request, Reajuste $reajuste) { $privateFieldService = new PrivateFieldService(); return $privateFieldService->setPrivateFields($request, $reajuste); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings