diff --git a/CORRESPONSALBackend.csproj b/CORRESPONSALBackend.csproj index 557bbb8..6ffe05b 100644 --- a/CORRESPONSALBackend.csproj +++ b/CORRESPONSALBackend.csproj @@ -14,6 +14,8 @@ + + diff --git a/Controllers/Corresponsalias/AnticiposController.cs b/Controllers/Corresponsalias/AnticiposController.cs index 76d4af4..d5ccea0 100644 --- a/Controllers/Corresponsalias/AnticiposController.cs +++ b/Controllers/Corresponsalias/AnticiposController.cs @@ -5,6 +5,16 @@ using CORRESPONSALBackend.Models.Corresponsales; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using CORRESPONSALBackend.Contracts.Utils; +using iText.Kernel.Pdf; +using iText.Layout; +using iText.Kernel.Geom; +using iText.Layout.Element; +using iText.IO.Image; +using iText.Layout.Properties; +using iText.Kernel.Colors; +using iText.Layout.Borders; +using iText.Kernel.Font; +using iText.IO.Font.Constants; namespace CORRESPONSALBackend.Controllers.Corresponsalias { @@ -17,12 +27,14 @@ namespace CORRESPONSALBackend.Controllers.Corresponsalias private readonly ICorresponsaliasAnticiposRepository _Repo; private readonly IConfiguration _config; private readonly IFileManagerRepository _fileManager; + private readonly ICorresponsaliasTraficosRepository _traficoRepository; - public AnticiposController(ICorresponsaliasAnticiposRepository Repo, IConfiguration config, IFileManagerRepository fileManager) + public AnticiposController(ICorresponsaliasAnticiposRepository Repo, IConfiguration config, IFileManagerRepository fileManager, ICorresponsaliasTraficosRepository traficoRepository) { _config = config; _Repo = Repo; _fileManager = fileManager; + _traficoRepository = traficoRepository; } [HttpPost] @@ -74,6 +86,79 @@ namespace CORRESPONSALBackend.Controllers.Corresponsalias return entrada; } + [HttpGet("Download")] + public async Task Download([FromQuery] int idTrafico, [FromQuery] int idAnticipo){ + var trafico = await _traficoRepository.Get(idTrafico); + var anticipos = await _Repo.getAll(idTrafico); + var anticipo = anticipos.First(x => x.id == idAnticipo); + MemoryStream ms = new MemoryStream(); + PdfWriter pw = new PdfWriter(ms); + PdfDocument pdfDocument = new PdfDocument(pw); + Document doc = new Document(pdfDocument, PageSize.LETTER);//En este punto ya se tiene creado un docuento en blanco + PdfFont font = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN); + doc.SetFont(font); + doc.SetMargins(25, 25, 25, 25); + #region Encabezado + String imageFile = "C:\\data\\Corresponsales\\Img\\LogoGemco.png"; + ImageData data = ImageDataFactory.Create(imageFile); + Image img = new Image(data); + Table headerTable = new Table(3).UseAllAvailableWidth(); + headerTable.AddCell(new Cell(2,1).Add(img.SetAutoScale(true).SetWidth(30).SetHeight(20)).SetBorder(Border.NO_BORDER)); + headerTable.AddCell( + new Cell(2,2) + .Add( + new Paragraph("ANTICIPO PARA CORRESPONSALIAS") + .SetTextAlignment(TextAlignment.CENTER).SetPaddingRight(30) + ) + .SetVerticalAlignment(VerticalAlignment.BOTTOM) + .SetBorder(Border.NO_BORDER) + ); + headerTable.SetBorderBottom(new SolidBorder(ColorConstants.BLACK, 2)); + doc.Add(headerTable); + #endregion + #region datos de la cuenta + Table accountTable = new Table(1).UseAllAvailableWidth().SetMarginTop(15); + accountTable.AddCell(new Cell().Add(new Paragraph("NUMERO DE CHEQUE:")).SetBorder(Border.NO_BORDER)); + accountTable.AddCell(new Cell().Add(new Paragraph($"SOLICITUD: ").Add(new Text($"{anticipo.id}").SetItalic())).SetBorder(Border.NO_BORDER)); + accountTable.AddCell(new Cell().Add(new Paragraph("DEPENDENCIA: ").Add(new Text("CORRESPONSALIA").SetItalic())).SetBorder(Border.NO_BORDER)); + accountTable.AddCell(new Cell().Add(new Paragraph($"IMPRESION: ").Add(new Text($"{DateTime.Now}").SetItalic())).SetVerticalAlignment(VerticalAlignment.BOTTOM).SetBorder(Border.NO_BORDER)); + doc.Add(accountTable); + #endregion + #region datos del anticipo + Table dataTable = new Table(7).UseAllAvailableWidth().SetMarginTop(15).SetFontSize(8f); + dataTable.AddCell(new Cell().Add(new Paragraph("GEMCO"))); + dataTable.AddCell(new Cell().Add(new Paragraph("PEDIMENTO"))); + dataTable.AddCell(new Cell().Add(new Paragraph("CLIENTE"))); + dataTable.AddCell(new Cell().Add(new Paragraph("PRODUCTO"))); + dataTable.AddCell(new Cell().Add(new Paragraph("FECHA DE CRUCE"))); + dataTable.AddCell(new Cell().Add(new Paragraph("PROVEEDOR"))); + dataTable.AddCell(new Cell().Add(new Paragraph("IMPORTE"))); + + dataTable.AddCell(new Cell().Add(new Paragraph(trafico.FolioGemco)).SetBorder(Border.NO_BORDER)); + dataTable.AddCell(new Cell().Add(new Paragraph($"{trafico.Aduana}-{trafico.Patente}-{trafico.Pedimento}")).SetBorder(Border.NO_BORDER)); + dataTable.AddCell(new Cell().Add(new Paragraph($"ALEN DEL NORTE S.A. DE C.V.")).SetBorder(Border.NO_BORDER)); + dataTable.AddCell(new Cell().Add(new Paragraph("")).SetBorder(Border.NO_BORDER)); + dataTable.AddCell(new Cell().Add(new Paragraph(trafico.FechaDesaduanamiento != null && trafico.FechaDesaduanamiento != "" ? trafico.FechaDesaduanamiento.Substring(0,10) : "")).SetBorder(Border.NO_BORDER)); + dataTable.AddCell(new Cell().Add(new Paragraph("CORRESPONSAL")).SetBorder(Border.NO_BORDER)); + dataTable.AddCell(new Cell().Add(new Paragraph($"{anticipo.Anticipo}")).SetBorder(Border.NO_BORDER)); + dataTable.SetBorderBottom(new SolidBorder(ColorConstants.BLACK, 2)); + doc.Add(dataTable); + #endregion + #region Importe final + Table importeTable = new Table(7).UseAllAvailableWidth(); + importeTable.AddCell(new Cell(1,7) + .Add(new Paragraph($"SUMA IMPORTE: $ {anticipo.Anticipo}").SetTextAlignment(TextAlignment.RIGHT).SetFontSize(10f)).SetBorder(Border.NO_BORDER) + ); + doc.Add(importeTable); + #endregion + doc.Close();//Aqui se cierra el documento para poder enviarlo al front para ser descargado. + byte[] bytesStream = ms.ToArray(); + ms = new MemoryStream(); + ms.Write(bytesStream, 0, bytesStream.Length); + ms.Position = 0; + + return new FileStreamResult(ms, "application/pdf"); + } } } \ No newline at end of file