private void btnproductosXrubro_Click(object sender, RoutedEventArgs e) { categoriaFacade catFac1 = new categoriaFacade(); int hay = catFac1.getTotalCategoriabyMes(MesRubroProd); if (!string.IsNullOrEmpty(month)) { if (hay > 0) { //buscar productos que fueron ingresados o modificados dentro de la fecha indicada ProductoFacade prodFac = new ProductoFacade(); List<Producto> listProductoMes = prodFac.getALLProductosbyFechaMes(Convert.ToDateTime(month)); //MessageBox.Show(listProductoMes.Count.ToString()); //categorizar productos y obtener total de costo de compra en reporte if (listProductoMes.Count > 0) { SaveFileDialog exportSaveFileDialog = new SaveFileDialog(); exportSaveFileDialog.Title = "Guardar reporte de costo para productos adquiridos"; exportSaveFileDialog.Filter = "PDF(*.pdf)|*.pdf"; exportSaveFileDialog.FileName = "ReporteCostoProdAdquiridos"; exportSaveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); if (exportSaveFileDialog.ShowDialog() == true) { string tempIdpro = ""; int dineroTotalbyCat = 0; List<Producto> listProductoConCategoria = listProductoMes; foreach (var item in listProductoMes) { if (!tempIdpro.Equals(item.idProducto)) { Document doc = new Document(PageSize.LETTER, 50, 50, 50, 50); PdfWriter writer = null; // Indicamos donde vamos a guardar el documento try { writer = PdfWriter.GetInstance(doc, new FileStream(exportSaveFileDialog.FileName, FileMode.Create)); doc.AddCreator("Magnolia"); doc.Open(); iTextSharp.text.Image imagen = iTextSharp.text.Image.GetInstance(urlLogo, System.Drawing.Imaging.ImageFormat.Png); imagen.Alignment = Element.ALIGN_CENTER; imagen.ScaleToFit(120f, 120f); doc.Add(imagen); doc.Add(Chunk.NEWLINE); iTextSharp.text.Font _fontTitulo = new iTextSharp.text.Font(iTextSharp.text.Font.HELVETICA, 25, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK); iTextSharp.text.Paragraph titulo = new iTextSharp.text.Paragraph("Reporte de costo ventas mensuales"); titulo.Alignment = Element.ALIGN_CENTER; titulo.Font = _fontTitulo; doc.Add(titulo); doc.Add(Chunk.NEWLINE); iTextSharp.text.Paragraph dgeneral = new iTextSharp.text.Paragraph("Detalles general"); dgeneral.Alignment = Element.ALIGN_LEFT; //doc.AddTitle("Reporte de MVentas"); iTextSharp.text.Font _standardFont = new iTextSharp.text.Font(iTextSharp.text.Font.HELVETICA, 8, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK); ////////////////////////////////////// ///////Tabla especificos ////////// ///////////////////////////////////// categoriaFacade catFacEsp = new categoriaFacade(); ProductoFacade prodFacEsp = new ProductoFacade(); ventasFacade ventasFacEsp = new ventasFacade(); PdfPTable tblEspecifico = new PdfPTable(5); iTextSharp.text.Paragraph despecifico = new iTextSharp.text.Paragraph("Detalles Especificos"); despecifico.Alignment = Element.ALIGN_LEFT; //LLenar tabla especifico PdfPCell clFechaEsp = new PdfPCell(); //PdfPCell clidprod = new PdfPCell(); PdfPCell clnombreprod = new PdfPCell(); PdfPCell clPrecioReal = new PdfPCell(); PdfPCell clCant = new PdfPCell(); PdfPCell cltotalEsp = new PdfPCell(); listProductoConCategoria = listProductoConCategoria.OrderByDescending(i => i.idCategoria).ToList(); //MessageBox.Show("TotalProductos:" + listProductoConCategoria.Count().ToString()); var q = from x in listProductoConCategoria group x.idCategoria by x.idCategoria into g let count = g.Count() /*orderby count descending*/ select new { Value = g.Key, Count = count }; int posList = 0; foreach (var x in q) { tblEspecifico.WidthPercentage = 100; tblEspecifico.HorizontalAlignment = Element.ALIGN_LEFT; PdfPCell clnombreCat = new PdfPCell(new Phrase(catFacEsp.getNombreCategoriaById(x.Value.ToString()), _standardFont)); clnombreCat.Colspan = 2; PdfPCell h1 = new PdfPCell(new Phrase("")); PdfPCell h2 = new PdfPCell(new Phrase("")); PdfPCell h3 = new PdfPCell(new Phrase("")); h1.Border = 0; h2.Border = 0; h3.Border = 0; tblEspecifico.AddCell(clnombreCat); tblEspecifico.AddCell(h1); tblEspecifico.AddCell(h2); tblEspecifico.AddCell(h3); clFechaEsp = new PdfPCell(new Phrase("Fecha", _standardFont)); //clidprod = new PdfPCell(new Phrase("IDProducto", _standardFont)); clnombreprod = new PdfPCell(new Phrase("Nombre", _standardFont)); clPrecioReal = new PdfPCell(new Phrase("Precio Compra", _standardFont)); clCant = new PdfPCell(new Phrase("Stock", _standardFont)); //PdfPCell clTipoPag = new PdfPCell(new Phrase("Tipo Pago", _standardFont)); cltotalEsp = new PdfPCell(new Phrase("Total", _standardFont)); tblEspecifico.AddCell(clFechaEsp); // tblEspecifico.AddCell(clidprod); tblEspecifico.AddCell(clnombreprod); tblEspecifico.AddCell(clPrecioReal); tblEspecifico.AddCell(clCant); //tblEspecifico.AddCell(clTipoPag); tblEspecifico.AddCell(cltotalEsp); for (int i = 0; i < x.Count; i++) { var v = listProductoConCategoria[posList]; clFechaEsp = new PdfPCell(new Phrase(v.fecha.ToString("y"), _standardFont)); //clidprod = new PdfPCell(new Phrase(x.Value.ToString(), _standardFont)); // clidprod = new PdfPCell(new Phrase(v.idProducto.ToString(), _standardFont)); //clnombreprod = new PdfPCell(new Phrase(v.idCategoria.ToString() + ":" + v.nombreProducto, _standardFont)); clnombreprod = new PdfPCell(new Phrase(v.nombre.ToString(), _standardFont)); //clnombreprod= new PdfPCell(new Phrase(prodFacEsp.getnombreProdbyidProd(v.idProducto), _standardFont)); clPrecioReal = new PdfPCell(new Phrase(v.precioReal.ToString(), _standardFont)); clCant = new PdfPCell(new Phrase(v.stock.ToString(), _standardFont)); //clTipoPag = new PdfPCell(new Phrase("", _standardFont)); cltotalEsp = new PdfPCell(new Phrase(v.total.ToString(), _standardFont)); tblEspecifico.AddCell(clFechaEsp); //tblEspecifico.AddCell(clidprod); tblEspecifico.AddCell(clnombreprod); tblEspecifico.AddCell(clPrecioReal); tblEspecifico.AddCell(clCant); //tblEspecifico.AddCell(clTipoPag); tblEspecifico.AddCell(cltotalEsp); dineroTotalbyCat = dineroTotalbyCat + v.total; tempIdpro = v.idProducto; posList = posList + 1; } //################################# //en cada categoria //################################# clFechaEsp = new PdfPCell(new Phrase("", _standardFont)); ////clidprod = new PdfPCell(new Phrase("", _standardFont)); clnombreprod = new PdfPCell(new Phrase("", _standardFont)); clPrecioReal = new PdfPCell(new Phrase("", _standardFont)); clCant = new PdfPCell(new Phrase("Subtotal($)", _standardFont)); //clTipoPag = new PdfPCell(new Phrase("-----------", _standardFont)); cltotalEsp = new PdfPCell(new Phrase(dineroTotalbyCat.ToString(), _standardFont)); dineroTotalbyCat = 0; clFechaEsp.Border = 0; // clidprod.Border = 0; clnombreprod.Border = 0; clPrecioReal.Border = 0; clCant.Border = 1; cltotalEsp.Border = 1; tblEspecifico.AddCell(clFechaEsp); //tblEspecifico.AddCell(clidprod); tblEspecifico.AddCell(clnombreprod); tblEspecifico.AddCell(clPrecioReal); tblEspecifico.AddCell(clCant); //tblEspecifico.AddCell(clTipoPag); tblEspecifico.AddCell(cltotalEsp); ///////////////////////////////////////////// clFechaEsp = new PdfPCell(new Phrase("", _standardFont)); //clidprod = new PdfPCell(new Phrase("", _standardFont)); clnombreprod = new PdfPCell(new Phrase("", _standardFont)); clCant = new PdfPCell(new Phrase("", _standardFont)); clPrecioReal = new PdfPCell(new Phrase("", _standardFont)); //clTipoPag = new PdfPCell(new Phrase("-----------", _standardFont)); cltotalEsp = new PdfPCell(new Phrase("", _standardFont)); clFechaEsp.Border = 0; //clidprod.Border = 0; clnombreprod.Border = 0; clPrecioReal.Border = 0; clCant.Border = 0; cltotalEsp.Border = 0; cltotalEsp.FixedHeight = 30f; clFechaEsp.FixedHeight = 30f; // clidprod.FixedHeight = 30f; clnombreprod.FixedHeight = 30f; clPrecioReal.FixedHeight = 30f; clCant.FixedHeight = 30f; cltotalEsp.FixedHeight = 30f; tblEspecifico.AddCell(clFechaEsp); // tblEspecifico.AddCell(clidprod); tblEspecifico.AddCell(clnombreprod); tblEspecifico.AddCell(clPrecioReal); tblEspecifico.AddCell(clCant); //tblEspecifico.AddCell(clTipoPag); tblEspecifico.AddCell(cltotalEsp); } //####################################################### //###### DETALLES GENERALES ############ //####################################################### PdfPTable tblGenerales = new PdfPTable(3); //doc.SetMargins(0f, 0f, 0f, 0f); tblGenerales.HorizontalAlignment = Element.ALIGN_LEFT; // Configuramos el título de las columnas de la tabla PdfPCell clFecha = new PdfPCell(new Phrase("Mes", _standardFont)); PdfPCell clCat = new PdfPCell(new Phrase("Categoria", _standardFont)); PdfPCell clSubtotal = new PdfPCell(new Phrase("Subtotal", _standardFont)); tblGenerales.AddCell(clFecha); tblGenerales.AddCell(clCat); tblGenerales.AddCell(clSubtotal); categoriaFacade catFac = new categoriaFacade(); int subtotal = 0; int total = 0; int posListG = 0; //Agrupar por categoria los idproducto foreach (var x in q) { for (int i = 0; i < x.Count; i++) { var v = listProductoConCategoria[posListG]; subtotal = subtotal + v.total; posListG = posListG + 1; } total = total + subtotal; clFecha = new PdfPCell(new Phrase(Convert.ToDateTime(month).ToString("y"), _standardFont)); clCat = new PdfPCell(new Phrase(catFac.getNombreCategoriaById(x.Value.ToString()), _standardFont)); clSubtotal = new PdfPCell(new Phrase(subtotal.ToString(), _standardFont)); tblGenerales.AddCell(clFecha); tblGenerales.AddCell(clCat); tblGenerales.AddCell(clSubtotal); subtotal = 0; } clFecha = new PdfPCell(new Phrase("", _standardFont)); clCat = new PdfPCell(new Phrase("Total Costo Producto Adquiridos", _standardFont)); clSubtotal = new PdfPCell(new Phrase(total.ToString(), _standardFont)); clFecha.Border = 0; tblGenerales.AddCell(clFecha); tblGenerales.AddCell(clCat); tblGenerales.AddCell(clSubtotal); doc.Add(dgeneral); doc.Add(Chunk.NEWLINE); doc.Add(tblGenerales); doc.Add(Chunk.NEWLINE); doc.Add(despecifico); doc.Add(new Chunk("\n")); doc.Add(tblEspecifico); doc.Add(new Chunk("\n")); doc.Close(); writer.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { doc.Close(); writer.Close(); } } } System.Diagnostics.Process.Start(exportSaveFileDialog.FileName); } } else { MessageBox.Show("No hay Productos ingresados", "Magnolia", MessageBoxButton.OK, MessageBoxImage.Error); } } } else { MessageBox.Show("Seleccionar mes para generar reporte", "Magnolia", MessageBoxButton.OK, MessageBoxImage.Warning); } }