|
|
@@ -0,0 +1,95 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Controllers;
|
|
|
+
|
|
|
+use App\Http\Controllers\Concerns\ResolvesActiveUnit;
|
|
|
+use App\Http\Requests\SettlePayableRequest;
|
|
|
+use App\Http\Requests\StoreUnitPayableRequest;
|
|
|
+use App\Http\Resources\UnitAccountPayableResource;
|
|
|
+use App\Services\UnitAccountPayableService;
|
|
|
+use Illuminate\Http\JsonResponse;
|
|
|
+use Illuminate\Http\Request;
|
|
|
+
|
|
|
+class UnitAccountPayableController extends Controller
|
|
|
+{
|
|
|
+ use ResolvesActiveUnit;
|
|
|
+
|
|
|
+ public function __construct(
|
|
|
+ protected UnitAccountPayableService $service,
|
|
|
+ ) {}
|
|
|
+
|
|
|
+ public function indexMe(Request $request): JsonResponse
|
|
|
+ {
|
|
|
+ $unitId = $this->activeUnitId();
|
|
|
+
|
|
|
+ if (!$unitId) {
|
|
|
+ return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $filters = array_filter($request->only(['status', 'origin']), fn ($v) => $v !== null);
|
|
|
+ $items = $this->service->list($unitId, $filters);
|
|
|
+
|
|
|
+ return $this->successResponse(payload: UnitAccountPayableResource::collection($items));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function storeMe(StoreUnitPayableRequest $request): JsonResponse
|
|
|
+ {
|
|
|
+ $unitId = $this->activeUnitId();
|
|
|
+
|
|
|
+ if (!$unitId) {
|
|
|
+ return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $item = $this->service->createManual($unitId, $request->validated());
|
|
|
+
|
|
|
+ return $this->successResponse(
|
|
|
+ payload: new UnitAccountPayableResource($item),
|
|
|
+ message: __('messages.created'),
|
|
|
+ code: 201,
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public function settleMe(SettlePayableRequest $request, int $id): JsonResponse
|
|
|
+ {
|
|
|
+ $unitId = $this->activeUnitId();
|
|
|
+
|
|
|
+ if (!$unitId) {
|
|
|
+ return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $payable = $this->service->findForUnit($id, $unitId);
|
|
|
+
|
|
|
+ if (!$payable) {
|
|
|
+ return $this->errorResponse(message: 'Conta a pagar não encontrada', code: 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $item = $this->service->settle($payable, $request->validated());
|
|
|
+
|
|
|
+ return $this->successResponse(
|
|
|
+ payload: new UnitAccountPayableResource($item),
|
|
|
+ message: 'Baixa realizada com sucesso',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public function reopenMe(int $id): JsonResponse
|
|
|
+ {
|
|
|
+ $unitId = $this->activeUnitId();
|
|
|
+
|
|
|
+ if (!$unitId) {
|
|
|
+ return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $payable = $this->service->findForUnit($id, $unitId);
|
|
|
+
|
|
|
+ if (!$payable) {
|
|
|
+ return $this->errorResponse(message: 'Conta a pagar não encontrada', code: 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $item = $this->service->reopen($payable);
|
|
|
+
|
|
|
+ return $this->successResponse(
|
|
|
+ payload: new UnitAccountPayableResource($item),
|
|
|
+ message: 'Conta reaberta',
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|