|
|
@@ -2,9 +2,11 @@
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
+use App\Models\UnitFinancial;
|
|
|
use App\Services\StudentContractService;
|
|
|
use App\Http\Requests\StudentContractRequest;
|
|
|
use App\Http\Resources\StudentContractResource;
|
|
|
+use App\Http\Resources\StudentContractInstallmentResource;
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
@@ -70,9 +72,34 @@ public function attachFile(Request $request, int $id): JsonResponse
|
|
|
return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.updated'));
|
|
|
}
|
|
|
|
|
|
+ public function installments(int $id): JsonResponse
|
|
|
+ {
|
|
|
+ $items = $this->service->getInstallments($id);
|
|
|
+ return $this->successResponse(payload: StudentContractInstallmentResource::collection($items));
|
|
|
+ }
|
|
|
+
|
|
|
public function freeze(int $id): JsonResponse
|
|
|
{
|
|
|
- $item = $this->service->freeze($id);
|
|
|
+ $months = request()->integer('months', 0);
|
|
|
+
|
|
|
+ if ($months < 1) {
|
|
|
+ return $this->errorResponse(message: 'Informe o tempo de trancamento em meses.', code: 422);
|
|
|
+ }
|
|
|
+
|
|
|
+ $contract = $this->service->findById($id);
|
|
|
+ if (!$contract) {
|
|
|
+ return $this->errorResponse(message: 'Contrato não encontrado.', code: 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $financial = UnitFinancial::where('unit_id', $contract->unit_id)->first();
|
|
|
+ if ($financial && $financial->max_freeze_count !== null && $months > $financial->max_freeze_count) {
|
|
|
+ return $this->errorResponse(
|
|
|
+ message: "Não é possível trancar por mais de {$financial->max_freeze_count} mês(es).",
|
|
|
+ code: 422,
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ $item = $this->service->freeze($id, $months);
|
|
|
return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.updated'));
|
|
|
}
|
|
|
|