CompanyAccountReceivableController.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\SettleReceivableRequest;
  4. use App\Http\Requests\StoreCompanyReceivableRequest;
  5. use App\Http\Resources\CompanyAccountReceivableResource;
  6. use App\Services\CompanyAccountReceivableService;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. /**
  10. * Contas a Receber avulsas da matriz (franqueadora).
  11. */
  12. class CompanyAccountReceivableController extends Controller
  13. {
  14. public function __construct(
  15. protected CompanyAccountReceivableService $service,
  16. ) {}
  17. public function index(Request $request): JsonResponse
  18. {
  19. $filters = array_filter($request->only(['status']), fn ($v) => $v !== null);
  20. return $this->successResponse(
  21. payload: CompanyAccountReceivableResource::collection($this->service->list($filters)),
  22. );
  23. }
  24. public function store(StoreCompanyReceivableRequest $request): JsonResponse
  25. {
  26. $item = $this->service->createManual($request->validated());
  27. return $this->successResponse(
  28. payload: new CompanyAccountReceivableResource($item),
  29. message: __('messages.created'),
  30. code: 201,
  31. );
  32. }
  33. public function settle(SettleReceivableRequest $request, int $id): JsonResponse
  34. {
  35. $receivable = $this->service->findById($id);
  36. if (!$receivable) {
  37. return $this->errorResponse(message: 'Recebível não encontrado', code: 404);
  38. }
  39. $item = $this->service->settle($receivable, $request->validated());
  40. return $this->successResponse(
  41. payload: new CompanyAccountReceivableResource($item),
  42. message: 'Baixa realizada com sucesso',
  43. );
  44. }
  45. public function reopen(int $id): JsonResponse
  46. {
  47. $receivable = $this->service->findById($id);
  48. if (!$receivable) {
  49. return $this->errorResponse(message: 'Recebível não encontrado', code: 404);
  50. }
  51. $item = $this->service->reopen($receivable);
  52. return $this->successResponse(
  53. payload: new CompanyAccountReceivableResource($item),
  54. message: 'Recebível reaberto',
  55. );
  56. }
  57. }