TbrCalculationController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\TbrCalculationBatchRequest;
  4. use App\Http\Requests\TbrCalculationRequest;
  5. use App\Http\Resources\FranchiseeAccountReceiveResource;
  6. use App\Http\Resources\TbrCalculationResource;
  7. use App\Services\TbrCalculationService;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Request;
  10. class TbrCalculationController extends Controller
  11. {
  12. public function __construct(
  13. protected TbrCalculationService $service,
  14. ) {}
  15. public function index(Request $request): JsonResponse
  16. {
  17. $items = $this->service->listAll($request->integer('limit', 100));
  18. return $this->successResponse(payload: TbrCalculationResource::collection($items));
  19. }
  20. public function preview(TbrCalculationRequest $request): JsonResponse
  21. {
  22. $payload = $this->service->preview($request->validated());
  23. return $this->successResponse(payload: $payload);
  24. }
  25. public function previewBatch(TbrCalculationBatchRequest $request): JsonResponse
  26. {
  27. $payload = $this->service->previewBatch(
  28. (int) $request->validated('reference_year'),
  29. (int) $request->validated('reference_month'),
  30. );
  31. return $this->successResponse(payload: $payload);
  32. }
  33. public function store(TbrCalculationRequest $request): JsonResponse
  34. {
  35. $item = $this->service->calculate($request->validated());
  36. return $this->successResponse(payload: new TbrCalculationResource($item), message: __('messages.created'), code: 201);
  37. }
  38. public function show(int $id): JsonResponse
  39. {
  40. $item = $this->service->findById($id);
  41. return $this->successResponse(payload: new TbrCalculationResource($item));
  42. }
  43. public function generateReceivable(int $id): JsonResponse
  44. {
  45. $receive = $this->service->generateReceivable($id);
  46. return $this->successResponse(
  47. payload: new FranchiseeAccountReceiveResource($receive),
  48. message: 'Conta a Receber gerada com sucesso.',
  49. code: 201,
  50. );
  51. }
  52. public function generateBatch(TbrCalculationBatchRequest $request): JsonResponse
  53. {
  54. $result = $this->service->generateBatch(
  55. (int) $request->validated('reference_year'),
  56. (int) $request->validated('reference_month'),
  57. $request->validated('unit_ids'),
  58. );
  59. return $this->successResponse(
  60. payload: $result,
  61. message: sprintf(
  62. '%d título(s) gerado(s), %d pulado(s), %d erro(s).',
  63. $result['generated_count'],
  64. $result['skipped_count'],
  65. $result['error_count'],
  66. ),
  67. code: 201,
  68. );
  69. }
  70. }