private bool generarBoleta(int codVenT) { Boleta boleta = new Boleta(); List<DetalleVentaBoleta> detalles = new List<DetalleVentaBoleta>(); var lista = from obj in db.DetalleVenta where obj.codVen == codVenT select obj; foreach (var detalle in lista) { DetalleVentaBoleta de = new DetalleVentaBoleta(); try { var fu = db.Funcion.Find(detalle.codFuncion); var evento = db.Eventos.Find(fu.codEvento); var pe = db.PrecioEvento.Find(detalle.codPrecE); de.Descripcion = evento.nombre + " " + fu.horaIni; de.Cantidad = detalle.cantEntradas; de.Codigo = detalle.codDetalleVenta; de.Total = detalle.total; de.Precio = pe.precio; if (detalle.descTot.HasValue) { de.Descuento = detalle.descTot; } else { de.Descuento = 0; } detalles.Add(de); } catch (Exception ex) { return false; } } boleta.detalles = detalles; try { var total = db.Ventas.Where(c => c.codVen == codVenT).First().MontoTotalSoles; if (total.HasValue) { boleta.Total = total; } else { //Cuando no hay total?? boleta.Total = 0; } } catch (Exception ex) { } string cadena = ""; cadena += " TickNet \r\n"; cadena += " Av.Universitaria No 1400 \r\n"; cadena += " Lima-Peru \r\n"; cadena += " Telefono: 620 0000 Anx 3090 \r\n"; cadena += " RUC 20009080255 \r\n"; cadena += " BOLETA DE VENTA ELECTRONICA \r\n"; cadena += "Codigo |Descripcion | Cant | Total \r\n"; foreach (var detalle in boleta.detalles) { cadena += "" + detalle.Codigo.ToString().PadRight(10, ' ') + " " + detalle.Descripcion.PadRight(30, ' ').Substring(0, 30) + " " + detalle.Cantidad.ToString().PadRight(10, ' ') + " " + detalle.Total.Value.ToString("0.##").PadRight(10, ' ') + "\r\n"; if (detalle.Descuento != 0) { cadena += " Descuento: " + detalle.Descuento + "/r/n"; } } cadena += String.Empty.PadRight(60, '-') + "\r\n"; cadena += String.Concat("Total: ").PadLeft(40, ' ') + boleta.Total.Value.ToString("0.##").PadRight(20, ' '); cadena += "\r\n"; cadena += "\r\n"; cadena += "\r\n"; cadena += " GRACIAS POR SU COMPRA \r\n"; Stream stream = Utilitarios.GenerateStreamFromString(cadena); StreamReader reader = new StreamReader(stream); Font printFont = new Font("Arial", 9); PrintDocument pd = new PrintDocument(); string printer = pd.PrinterSettings.PrinterName; pd.PrintPage += (sender, args) => { string line = null; float yPos; int count = 0; float leftMargin = 0; float topMargin = args.MarginBounds.Top; while ((line = reader.ReadLine()) != null) { yPos = topMargin + (count * printFont.GetHeight(args.Graphics)); args.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); count++; } }; try { pd.Print(); } catch (Exception ex) { //No encontro alguna impresora activa. return false; } return true; }