using GestionIntegral.Api.Dtos.Reportes.ViewModels; using QuestPDF.Fluent; using QuestPDF.Helpers; using QuestPDF.Infrastructure; using System.Linq; namespace GestionIntegral.Api.Controllers.Reportes.PdfTemplates { public class MovimientoBobinasDocument : IDocument { public MovimientoBobinasViewModel Model { get; } public MovimientoBobinasDocument(MovimientoBobinasViewModel model) { Model = model; } public DocumentMetadata GetMetadata() => DocumentMetadata.Default; public DocumentSettings GetSettings() => DocumentSettings.Default; public void Compose(IDocumentContainer container) { container .Page(page => { // Configuramos la página en modo apaisado (landscape) page.Size(PageSizes.A4.Landscape()); page.Margin(1, Unit.Centimetre); page.DefaultTextStyle(x => x.FontFamily("Roboto").FontSize(9)); // Un poco más pequeño por la cantidad de columnas page.Header().Element(ComposeHeader); page.Content().Element(ComposeContent); page.Footer() .AlignCenter() .Text(x => { x.Span("Página "); x.CurrentPageNumber(); }); }); } void ComposeHeader(IContainer container) { container.Column(column => { column.Spacing(5); column.Item().AlignCenter().Text("Reporte de Movimiento de Bobinas").SemiBold().FontSize(14); column.Item().AlignCenter().Text($"Planta: {Model.NombrePlanta}").FontSize(12); column.Item().PaddingTop(2, Unit.Millimetre).Row(row => { row.RelativeItem().Column(col => { col.Item().Text(text => { text.Span("Fecha del Reporte: ").SemiBold(); text.Span(Model.FechaReporte); }); col.Item().Text($"Periodo Consultado: Desde {Model.FechaDesde} Hasta {Model.FechaHasta}"); }); }); }); } void ComposeContent(IContainer container) { container.PaddingTop(1, Unit.Centimetre).Table(table => { // Definimos 11 columnas. Usamos una combinación de relativas y constantes table.ColumnsDefinition(columns => { columns.RelativeColumn(2.5f); // Tipo columns.ConstantColumn(50); // Cant. Inicial columns.ConstantColumn(60); // Kg Iniciales columns.ConstantColumn(50); // Compradas columns.ConstantColumn(60); // Kg Comprados columns.ConstantColumn(50); // Consumidas columns.ConstantColumn(60); // Kg Consumidos columns.ConstantColumn(50); // Dañadas columns.ConstantColumn(60); // Kg Dañados columns.ConstantColumn(50); // Cant. Final columns.ConstantColumn(60); // Kg Final }); // Encabezado de la tabla table.Header(header => { // Celda por celda para control total header.Cell().Background(Colors.Grey.Lighten3).Padding(2).Text("Tipo"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Cant. Inicial"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Kg Inicial"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Compradas"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Kg Comprados"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Consumidas"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Kg Consumidos"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Dañadas"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Kg Dañados"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Cant. Final"); header.Cell().Background(Colors.Grey.Lighten3).Padding(2).AlignCenter().Text("Kg Final"); }); // Filas de datos foreach (var item in Model.Movimientos) { table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).Text(item.TipoBobina); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.BobinasIniciales.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.KilosIniciales.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.BobinasCompradas.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.KilosComprados.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.BobinasConsumidas.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.KilosConsumidos.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.BobinasDaniadas.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.KilosDaniados.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.BobinasFinales.ToString("N0")); table.Cell().BorderBottom(1).BorderColor(Colors.Grey.Lighten2).Padding(2).AlignCenter().Text(item.KilosFinales.ToString("N0")); } }); } } }