File manager - Edit - /var/www/html/gop/api/app/Http/Controllers/AnulacaoController.php
Back
<?php namespace App\Http\Controllers; use App\Http\Requests\Index\IndexAnulacaoRequest; use App\Http\Requests\Store\StoreAnulacaoRequest; use App\Http\Requests\Store\StorePrivateFieldRequest; use App\Http\Requests\Update\UpdateAnulacaoRequest; use App\Http\Services\PrivateFieldService; use App\Models\Anulacao; use App\Models\Empenho; use Illuminate\Support\Facades\DB; use Symfony\Component\HttpFoundation\JsonResponse; /** * @OA\Tag( * name="Anulacao", * description="Gerenciamento de Anulacoes" * ) */ class AnulacaoController extends Controller { public function __construct() { $this->authorizeResource(Anulacao::class); } /** * Retorna a lista de anulacoes paginadas. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Get( * path="/api/anulacoes", * summary="Lista Anulacoes", * operationId="IndexAnulacao", * tags={"Anulacao"}, * security={{"bearerAuth":{}}}, * @OA\Response(response=200, description="Anulacoes retornados com sucesso") * ) */ public function index(IndexAnulacaoRequest $request) { $limit = $request->limit ?? 15; $anulacao = Anulacao::with(['empenho']) ->when(! empty($request->empenho_id), function ($q) use ($request) { $q->where('empenho_id', $request->empenho_id); }) ->when(! empty($request->obra_id), function ($q) use ($request) { $q->whereHas('empenho', function ($q) use ($request) { $q->where('obra_id', $request->obra_id); }); }) ->latest('id') ->paginate($limit); return response()->json($anulacao); } /** * Salva uma nova Anulacao * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Post( * path="/api/anulacoes", * summary="Cria Anulacao", * operationId="StoreAnulacao", * tags={"Anulacao"}, * security={{"bearerAuth":{}}}, * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=201, description="Anulacao criado com sucesso") * ) */ public function store(StoreAnulacaoRequest $request) { $anulacao = null; $empenho = Empenho::findOrFail($request->empenho_id); if (((float) $empenho->valor - $request->valor_anulado) < 0) { return response()->json([ 'message' => "Atualmente a nota de empenho possui apenas R\$$empenho->valor.", 'errors' => [ 'valor' => 'O valor anulado é superior ao valor da nota de empenho.', ], ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY); } DB::transaction(function () use ($request, &$anulacao, &$empenho) { $anulacao = Anulacao::create([ 'valor_anterior' => (float) $empenho->valor, 'valor_anulado' => $request->valor_anulado, 'empenho_id' => $empenho->id, ]); $empenho->valor = round((float) $empenho->valor - $request->valor_anulado, 2); $empenho->save(); }); return response()->json($anulacao, JsonResponse::HTTP_CREATED); } /** * Mostra a Anulacao de determinado id. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Get( * path="/api/anulacoes/{anulacao}", * summary="Mostra Anulacao", * operationId="ShowAnulacao", * tags={"Anulacao"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="anulacao", in="path", required=true, @OA\Schema(type="string") * ), * @OA\Response(response=200, description="Anulacao retornado com sucesso") * ) */ public function show(Anulacao $anulacao) { $anulacao->load(['empenho']); return response()->json($anulacao); } /** * Atualiza a Anulacao baseando-se em seu id. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Put( * path="/api/anulacoes/{anulacao}", * summary="Atualiza Anulacao", * operationId="UpdateAnulacao", * tags={"Anulacao"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="anulacao", in="path", required=true, @OA\Schema(type="string") * ), * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=200, description="Anulacao atualizado com sucesso") * ) */ public function update(UpdateAnulacaoRequest $request, Anulacao $anulacao) { $empenho = Empenho::findOrFail($request->empenho_id); if (round((float) $anulacao->valor_anterior - (float) $anulacao->valor_anulado, 2) !== (float) $empenho->valor) { return response()->json([ 'message' => 'Apenas a Anulação mais recente pode ser alterada.', 'errors' => [ 'anulacao' => 'Apenas a Anulação mais recente pode ser alterada.', ], ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY); } $empenho->valor = (float) $empenho->valor + (float) $anulacao->valor_anulado - (float) $request->valor_anulado; $empenho->save(); $anulacao->update($request->validated()); return response()->json($anulacao, JsonResponse::HTTP_OK); } /** * Remove o modelo com base no id. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Delete( * path="/api/anulacoes/{anulacao}", * summary="Remove Anulacao", * operationId="DeleteAnulacao", * tags={"Anulacao"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="anulacao", in="path", required=true, @OA\Schema(type="string") * ), * @OA\Response(response=204, description="Anulacao removido com sucesso") * ) */ public function destroy(Anulacao $anulacao) { $empenho = Empenho::findOrFail($anulacao->empenho_id); if (round((float) $anulacao->valor_anterior - (float) $anulacao->valor_anulado, 2) !== (float) $empenho->valor) { return response()->json([ 'message' => 'Apenas a Anulação mais recente pode ser removida.', 'errors' => [ 'anulacao' => 'Apenas a Anulação mais recente pode ser removida.', ], ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY); } $empenho->valor = (float) $empenho->valor + (float) $anulacao->valor_anulado; $empenho->save(); $anulacao->delete(); return response()->json([], JsonResponse::HTTP_NO_CONTENT); } /** * Mostra os campos privados do modelo. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Get( * path="/api/anulacoes/{anulacao}/campos-ocultos", * summary="Mostra campos privados do Anulacao", * operationId="ShowAnulacaoPrivateFields", * tags={"Anulacao"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="anulacao", in="path", required=true, @OA\Schema(type="string") * ), * @OA\Response(response=200, description="Campos privados retornados com sucesso") * ) */ public function showPrivateFields(Anulacao $anulacao) { $privateFieldService = new PrivateFieldService(); return $privateFieldService->show($anulacao); } /** * Modifica os campos privados do modelo. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Put( * path="/api/anulacoes/{anulacao}/campos-ocultos", * summary="Modifica campos privados do Anulacao", * operationId="SetAnulacaoPrivateFields", * tags={"Anulacao"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="anulacao", in="path", required=true, @OA\Schema(type="string") * ), * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=200, description="Campos privados modificados com sucesso") * ) */ public function setPrivateFields(StorePrivateFieldRequest $request, Anulacao $anulacao) { $privateFieldService = new PrivateFieldService(); return $privateFieldService->setPrivateFields($request, $anulacao); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings