| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
- namespace App\Http\Controllers;
- use App\Http\Controllers\Concerns\ResolvesActiveUnit;
- use App\Http\Requests\SettleReceivableRequest;
- use App\Http\Requests\StoreUnitReceivableRequest;
- use App\Http\Resources\UnitAccountReceivableResource;
- use App\Http\Resources\UnitReceivableResource;
- use App\Services\UnitReceivableService;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- class UnitReceivableController extends Controller
- {
- use ResolvesActiveUnit;
- public function __construct(
- protected UnitReceivableService $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', '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',
- );
- }
- }
|