From 2d2819ba97a445ee412fe2c1785fa727bcc53c8d Mon Sep 17 00:00:00 2001 From: Felix Morales Date: Thu, 18 Jan 2024 17:49:09 -0600 Subject: [PATCH] Creacion del reporte de facturas de traficos consolidados de Alen --- .../Reportes/Alen/IReportesAlenRepository.cs | 5 +++ .../Reportes/Alen/IReportesAlenService.cs | 1 + .../Reportes/ReportesAlenController.cs | 16 ++++++++++ .../DTOReporteFacturasTraficosConsolidados.cs | 20 ++++++++++++ Program.cs | 2 +- .../Reportes/Alen/ReportesAlenRepository.cs | 22 +++++++++++++ Services/Reportes/Alen/ReportesAlenService.cs | 31 +++++++++++++++++++ 7 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 Contracts/Reportes/Alen/IReportesAlenRepository.cs create mode 100644 DTO/Reportes/Alen/DTOReporteFacturasTraficosConsolidados.cs create mode 100644 Repository/Reportes/Alen/ReportesAlenRepository.cs diff --git a/Contracts/Reportes/Alen/IReportesAlenRepository.cs b/Contracts/Reportes/Alen/IReportesAlenRepository.cs new file mode 100644 index 0000000..130581a --- /dev/null +++ b/Contracts/Reportes/Alen/IReportesAlenRepository.cs @@ -0,0 +1,5 @@ +namespace CORRESPONSALBackend.Contracts.Reportes.Alen{ + public interface IReportesAlenRepository{ + public Task> GetFacturasTraficoConsolidado(int idTrafico, string referencia); + } +} \ No newline at end of file diff --git a/Contracts/Reportes/Alen/IReportesAlenService.cs b/Contracts/Reportes/Alen/IReportesAlenService.cs index 2fd51bd..db52f2f 100644 --- a/Contracts/Reportes/Alen/IReportesAlenService.cs +++ b/Contracts/Reportes/Alen/IReportesAlenService.cs @@ -3,5 +3,6 @@ using CORRESPONSALBackend.Models.Corresponsales; namespace CORRESPONSALBackend.Contracts.Reportes.Alen{ public interface IReportesAlenService{ public Task GetRelacionFacturas(ITrafico trafico, IEnumerable facturas, IEnumerable contenedores); + public Task GetReporteFacturasTraficoConsolidado(string referencia); } } \ No newline at end of file diff --git a/Controllers/Reportes/ReportesAlenController.cs b/Controllers/Reportes/ReportesAlenController.cs index 1506ce3..ab72aa4 100644 --- a/Controllers/Reportes/ReportesAlenController.cs +++ b/Controllers/Reportes/ReportesAlenController.cs @@ -38,5 +38,21 @@ namespace CORRESPONSALBackend.Controllers.Reportes{ return BadRequest(ex.Message); } } + + [HttpGet("FacturasConsolidados")] + public async Task FacturasConsolidados([FromQuery] string referencia){ + try{ + var trafico = await _traficosRepository.GetByReferencia(referencia); + var stream = await _reportesAlenService.GetReporteFacturasTraficoConsolidado(referencia); + if(stream.Length > 0){ + stream.Position = 0; + return File(stream,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", $"FacturasConsolidado_{trafico.FolioGemco}.xlsx"); + }else{ + throw new Exception("Ocurrio un error al generar el reporte, intentelo de nuevo"); + } + }catch(Exception ex){ + return BadRequest(ex.Message); + } + } } } \ No newline at end of file diff --git a/DTO/Reportes/Alen/DTOReporteFacturasTraficosConsolidados.cs b/DTO/Reportes/Alen/DTOReporteFacturasTraficosConsolidados.cs new file mode 100644 index 0000000..150e3bd --- /dev/null +++ b/DTO/Reportes/Alen/DTOReporteFacturasTraficosConsolidados.cs @@ -0,0 +1,20 @@ +public class DTOReporteFacturasTraficosConsolidados{ + public string trafico { get; set; } + public string TipoOperacion { get; set; } + public string Cliente { get; set; } + public string Proveedor { get; set; } + public string Corresponsal { get; set; } + public int Aduana { get; set; } + public int Patente { get; set; } + public string Pedimento { get; set; } + public int PedimentoMaster { get; set; } + public string Fecha { get; set; } + public string Cuenta { get; set; } + public string Factura { get; set; } + public string Descripcion { get; set; } + public string Semaforo { get; set; } + public string ClavePedimento { get; set; } + public string TipoCambio { get; set; } + public string Operacion { get; set; } + public string Contenedor { get; set; } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs index 8fedbf7..2cb0a84 100644 --- a/Program.cs +++ b/Program.cs @@ -70,7 +70,7 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); - +builder.Services.AddScoped(); // Corresponsalias builder.Services.AddScoped(); builder.Services.AddScoped(); diff --git a/Repository/Reportes/Alen/ReportesAlenRepository.cs b/Repository/Reportes/Alen/ReportesAlenRepository.cs new file mode 100644 index 0000000..4aafeda --- /dev/null +++ b/Repository/Reportes/Alen/ReportesAlenRepository.cs @@ -0,0 +1,22 @@ +using System.Data; +using CORRESPONSALBackend.Context; +using CORRESPONSALBackend.Contracts.Reportes.Alen; +using Dapper; + +public class ReportesAlenRepository : IReportesAlenRepository +{ + private readonly DapperContext _context; + public ReportesAlenRepository(DapperContext context) { _context = context; } + public async Task> GetFacturasTraficoConsolidado(int idTrafico, string referencia) + { + var query = "[Reportes.Alen.FacturasTraficosConsolidados]"; + using var connection = _context.CreateConnection(); + var entrada = await connection.QueryAsync(query, new + { + @IdTrafico = idTrafico, + @Referencia = referencia + }, + commandType: CommandType.StoredProcedure); + return entrada; + } +} \ No newline at end of file diff --git a/Services/Reportes/Alen/ReportesAlenService.cs b/Services/Reportes/Alen/ReportesAlenService.cs index 136103e..fa5225d 100644 --- a/Services/Reportes/Alen/ReportesAlenService.cs +++ b/Services/Reportes/Alen/ReportesAlenService.cs @@ -1,3 +1,4 @@ +using CORRESPONSALBackend.Contracts.Corresponsalias; using CORRESPONSALBackend.Contracts.Reportes.Alen; using CORRESPONSALBackend.Models.Corresponsales; using OfficeOpenXml; @@ -6,6 +7,12 @@ using OfficeOpenXml.Table; namespace CORRESPONSALBackend.Services.Reportes.Alen{ public class ReportesAlenService : IReportesAlenService { + private readonly ICorresponsaliasTraficosRepository _traficosRepo; + private readonly IReportesAlenRepository _repo; + public ReportesAlenService(ICorresponsaliasTraficosRepository traficosRepo, IReportesAlenRepository repo){ + _traficosRepo = traficosRepo; + _repo = repo; + } public async Task GetRelacionFacturas(ITrafico trafico, IEnumerable facturas, IEnumerable contenedores) { try{ @@ -64,5 +71,29 @@ namespace CORRESPONSALBackend.Services.Reportes.Alen{ throw new Exception(ex.Message); } } + + public async Task GetReporteFacturasTraficoConsolidado(string referencia) + { + try{ + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + using (ExcelPackage excelPackage = new ExcelPackage()){ + var worksheet = excelPackage.Workbook.Worksheets.Add("sheet1"); + var trafico = await _traficosRepo.GetByReferencia(referencia); + var facturas = await _repo.GetFacturasTraficoConsolidado(trafico.id, referencia); + worksheet.Cells["A1"].LoadFromCollection(facturas, true); + ExcelRange range = worksheet.Cells[1, 1,facturas.Count() + 1, 18]; + ExcelTable tab = worksheet.Tables.Add(range, "Table1"); + tab.TableStyle = TableStyles.Light1; + worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); + excelPackage.Workbook.Calculate(); + var stream = new MemoryStream(); + excelPackage.SaveAs(stream); + stream.Position = 0; + return stream; + } + }catch(Exception ex){ + throw new Exception(ex.Message); + } + } } } \ No newline at end of file