GerarRelatorioUseCase.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.IO;
  2. using AGEHAB.RelatorioSeadIpasgo.Application.Abstractions;
  3. using AGEHAB.RelatorioSeadIpasgo.Application.DTOs;
  4. using AGEHAB.RelatorioSeadIpasgo.Domain.Services;
  5. namespace AGEHAB.RelatorioSeadIpasgo.Application.UseCases;
  6. public class GerarRelatorioUseCase
  7. {
  8. private readonly IRelatorioRepository _repository;
  9. private readonly IIpasgoFiltroService _filtroIpasgoService;
  10. private readonly IExcelRelatorioWriter _excelWriter;
  11. private readonly IIpasgoZipWriter _zipWriter;
  12. public GerarRelatorioUseCase(
  13. IRelatorioRepository repository,
  14. IIpasgoFiltroService filtroIpasgoService,
  15. IExcelRelatorioWriter excelWriter,
  16. IIpasgoZipWriter zipWriter)
  17. {
  18. _repository = repository;
  19. _filtroIpasgoService = filtroIpasgoService;
  20. _excelWriter = excelWriter;
  21. _zipWriter = zipWriter;
  22. }
  23. public async Task ExecutarAsync(GerarRelatorioRequest request, CancellationToken cancellationToken)
  24. {
  25. cancellationToken.ThrowIfCancellationRequested();
  26. GarantirDiretorio(request.ExcelPath);
  27. var linhas = await _repository.ObterRelatorioAsync(request.Competencia.Handle, request.TipoCalculo.Valor, cancellationToken);
  28. cancellationToken.ThrowIfCancellationRequested();
  29. if (request.Relatorio.EhIpasgo)
  30. {
  31. if (string.IsNullOrWhiteSpace(request.ZipPath))
  32. {
  33. throw new InvalidOperationException("Escolha onde salvar o ZIP do IPASGO.");
  34. }
  35. GarantirDiretorio(request.ZipPath);
  36. linhas = _filtroIpasgoService.Filtrar(linhas);
  37. cancellationToken.ThrowIfCancellationRequested();
  38. SubstituirArquivo(request.ZipPath);
  39. _zipWriter.Escrever(request.Competencia.Referencia, linhas, request.ZipPath, cancellationToken);
  40. }
  41. cancellationToken.ThrowIfCancellationRequested();
  42. SubstituirArquivo(request.ExcelPath);
  43. _excelWriter.Escrever(request.Relatorio.TituloExcel, linhas, request.ExcelPath, cancellationToken);
  44. }
  45. private static void GarantirDiretorio(string filePath)
  46. {
  47. var diretorio = Path.GetDirectoryName(filePath);
  48. if (!string.IsNullOrWhiteSpace(diretorio) && !Directory.Exists(diretorio))
  49. {
  50. Directory.CreateDirectory(diretorio);
  51. }
  52. }
  53. private static void SubstituirArquivo(string filePath)
  54. {
  55. if (File.Exists(filePath))
  56. {
  57. File.Delete(filePath);
  58. }
  59. }
  60. }