ReportController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Exports\ContatosAssociadosExport;
  4. use App\Exports\ExclusoesMesExport;
  5. use App\Exports\NovoAssociadosExport;
  6. use App\Exports\UsosConvenioExport;
  7. use App\Services\ReportService;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Request;
  10. use Maatwebsite\Excel\Facades\Excel;
  11. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  12. class ReportController extends Controller
  13. {
  14. public function __construct(protected ReportService $service) {}
  15. public function getCounters(): JsonResponse
  16. {
  17. return $this->successResponse(payload: $this->service->getCounters());
  18. }
  19. public function getNovoAssociadosPaginated(Request $request): JsonResponse
  20. {
  21. $filters = $request->only(['search']);
  22. $perPage = min((int) $request->get('per_page', 10), 100);
  23. $paginator = $this->service->getNovoAssociadosPaginated($filters, $perPage);
  24. return $this->successResponse(payload: [
  25. 'data' => array_map(
  26. fn($u) => [
  27. 'id' => $u->id,
  28. 'name' => $u->name,
  29. 'cpf' => $u->cpf,
  30. 'created_at' => $u->created_at?->format('d/m/Y'),
  31. ],
  32. $paginator->items()
  33. ),
  34. 'total' => $paginator->total(),
  35. 'from' => $paginator->firstItem() ?? 0,
  36. 'to' => $paginator->lastItem() ?? 0,
  37. ]);
  38. }
  39. public function getContatosAssociadosPaginated(Request $request): JsonResponse
  40. {
  41. $filters = $request->only(['search']);
  42. $perPage = min((int) $request->get('per_page', 10), 100);
  43. $paginator = $this->service->getContatosAssociadosPaginated($filters, $perPage);
  44. return $this->successResponse(payload: [
  45. 'data' => array_map(
  46. fn($u) => [
  47. 'id' => $u->id,
  48. 'name' => $u->name,
  49. 'phone' => $u->phone,
  50. 'email' => $u->email,
  51. ],
  52. $paginator->items()
  53. ),
  54. 'total' => $paginator->total(),
  55. 'from' => $paginator->firstItem() ?? 0,
  56. 'to' => $paginator->lastItem() ?? 0,
  57. ]);
  58. }
  59. public function getExclusoesMesPaginated(Request $request): JsonResponse
  60. {
  61. $filters = $request->only(['search']);
  62. $perPage = min((int) $request->get('per_page', 10), 100);
  63. $paginator = $this->service->getExclusoesMesPaginated($filters, $perPage);
  64. return $this->successResponse(payload: [
  65. 'data' => array_map(
  66. fn($u) => [
  67. 'id' => $u->id,
  68. 'name' => $u->name,
  69. 'cpf' => $u->cpf,
  70. 'excluded_at' => $u->excluded_at?->format('d/m/Y'),
  71. ],
  72. $paginator->items()
  73. ),
  74. 'total' => $paginator->total(),
  75. 'from' => $paginator->firstItem() ?? 0,
  76. 'to' => $paginator->lastItem() ?? 0,
  77. ]);
  78. }
  79. public function getUsosConvenioPaginated(Request $request): JsonResponse
  80. {
  81. $filters = $request->only(['search']);
  82. $perPage = min((int) $request->get('per_page', 10), 100);
  83. $paginator = $this->service->getUsosConvenioPaginated($filters, $perPage);
  84. return $this->successResponse(payload: [
  85. 'data' => array_map(
  86. fn($a) => $this->service->formatUsoConvenio($a),
  87. $paginator->items()
  88. ),
  89. 'total' => $paginator->total(),
  90. 'from' => $paginator->firstItem() ?? 0,
  91. 'to' => $paginator->lastItem() ?? 0,
  92. ]);
  93. }
  94. public function exportNovoAssociados(Request $request): BinaryFileResponse
  95. {
  96. $filename = 'novos_associados_' . now()->format('d-m-Y') . '.xlsx';
  97. return Excel::download(new NovoAssociadosExport($request->get('search')), $filename);
  98. }
  99. public function exportContatosAssociados(Request $request): BinaryFileResponse
  100. {
  101. $filename = 'contatos_associados_' . now()->format('d-m-Y') . '.xlsx';
  102. return Excel::download(new ContatosAssociadosExport($request->get('search')), $filename);
  103. }
  104. public function exportExclusoesMes(Request $request): BinaryFileResponse
  105. {
  106. $filename = 'exclusoes_mes_' . now()->format('d-m-Y') . '.xlsx';
  107. return Excel::download(new ExclusoesMesExport($request->get('search')), $filename);
  108. }
  109. public function exportUsosConvenio(Request $request): BinaryFileResponse
  110. {
  111. $filename = 'usos_convenio_' . now()->format('d-m-Y') . '.xlsx';
  112. return Excel::download(new UsosConvenioExport($this->service, $request->get('search')), $filename);
  113. }
  114. }