TbrCalculationController.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 store(TbrCalculationRequest $request): JsonResponse
  21. {
  22. $item = $this->service->calculate($request->validated());
  23. return $this->successResponse(payload: new TbrCalculationResource($item), message: __('messages.created'), code: 201);
  24. }
  25. public function show(int $id): JsonResponse
  26. {
  27. $item = $this->service->findById($id);
  28. return $this->successResponse(payload: new TbrCalculationResource($item));
  29. }
  30. //
  31. public function generateBatch(TbrCalculationBatchRequest $request): JsonResponse
  32. {
  33. $result = $this->service->generateBatch(
  34. (int) $request->validated('reference_year'),
  35. (int) $request->validated('reference_month'),
  36. $request->validated('unit_ids'),
  37. );
  38. return $this->successResponse(
  39. payload: $result,
  40. message: sprintf(
  41. '%d título(s) gerado(s), %d pulado(s), %d erro(s).',
  42. $result['generated_count'],
  43. $result['skipped_count'],
  44. $result['error_count'],
  45. ),
  46. code: 201,
  47. );
  48. }
  49. public function generateReceivable(int $id): JsonResponse
  50. {
  51. $receive = $this->service->generateReceivable($id);
  52. return $this->successResponse(
  53. payload: new FranchiseeAccountReceiveResource($receive),
  54. message: 'Conta a Receber gerada com sucesso.',
  55. code: 201,
  56. );
  57. }
  58. public function preview(TbrCalculationRequest $request): JsonResponse
  59. {
  60. $payload = $this->service->preview($request->validated());
  61. return $this->successResponse(payload: $payload);
  62. }
  63. public function previewBatch(TbrCalculationBatchRequest $request): JsonResponse
  64. {
  65. $payload = $this->service->previewBatch(
  66. (int) $request->validated('reference_year'),
  67. (int) $request->validated('reference_month'),
  68. );
  69. return $this->successResponse(payload: $payload);
  70. }
  71. }