activeUnitId(); if (!$unitId) { return $this->errorResponse(message: 'Unidade não encontrada', code: 404); } $filters = array_filter($request->only(['status', 'student_id', 'type']), fn ($v) => $v !== null); // Parcelas de aluno + recebíveis avulsos convivem na mesma listagem, // normalizados e ordenados por vencimento. 'source' distingue a origem. $installments = UnitReceivableResource::collection($this->service->list($unitId, $filters)) ->toArray($request); $manual = UnitAccountReceivableResource::collection($this->service->listManual($unitId, $filters)) ->toArray($request); $merged = collect(array_merge($installments, $manual)) ->sortBy('due_date') ->values() ->all(); return $this->successResponse(payload: $merged); } public function storeManualMe(StoreUnitReceivableRequest $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 UnitAccountReceivableResource($item), message: __('messages.created'), code: 201, ); } public function settleManualMe(SettleReceivableRequest $request, int $id): JsonResponse { $unitId = $this->activeUnitId(); if (!$unitId) { return $this->errorResponse(message: 'Unidade não encontrada', code: 404); } $receivable = $this->service->findManualForUnit($id, $unitId); if (!$receivable) { return $this->errorResponse(message: 'Recebível não encontrado', code: 404); } $item = $this->service->settleManual($receivable, $request->validated()); return $this->successResponse( payload: new UnitAccountReceivableResource($item), message: 'Baixa realizada com sucesso', ); } public function reopenManualMe(int $id): JsonResponse { $unitId = $this->activeUnitId(); if (!$unitId) { return $this->errorResponse(message: 'Unidade não encontrada', code: 404); } $receivable = $this->service->findManualForUnit($id, $unitId); if (!$receivable) { return $this->errorResponse(message: 'Recebível não encontrado', code: 404); } $item = $this->service->reopenManual($receivable); return $this->successResponse( payload: new UnitAccountReceivableResource($item), message: 'Recebível reaberto', ); } public function settleMe(SettleReceivableRequest $request, int $id): JsonResponse { $unitId = $this->activeUnitId(); if (!$unitId) { return $this->errorResponse(message: 'Unidade não encontrada', code: 404); } $installment = $this->service->findForUnit($id, $unitId); if (!$installment) { return $this->errorResponse(message: 'Recebível não encontrado', code: 404); } $item = $this->service->settle($installment, $request->validated()); return $this->successResponse( payload: new UnitReceivableResource($item), message: 'Baixa realizada com sucesso', ); } public function chargeMe(int $id): JsonResponse { $unitId = $this->activeUnitId(); if (!$unitId) { return $this->errorResponse(message: 'Unidade não encontrada', code: 404); } $installment = $this->service->findForUnit($id, $unitId); if (!$installment) { return $this->errorResponse(message: 'Recebível não encontrado', code: 404); } $item = $this->service->generateCharge($installment); return $this->successResponse( payload: new UnitReceivableResource($item), message: 'Cobrança gerada no Asaas', ); } public function reopenMe(int $id): JsonResponse { $unitId = $this->activeUnitId(); if (!$unitId) { return $this->errorResponse(message: 'Unidade não encontrada', code: 404); } $installment = $this->service->findForUnit($id, $unitId); if (!$installment) { return $this->errorResponse(message: 'Recebível não encontrado', code: 404); } $item = $this->service->reopen($installment); return $this->successResponse( payload: new UnitReceivableResource($item), message: 'Recebível reaberto', ); } }