public ActionResult GenerarNotaPedido(int Id)
        {
            var venta = ventaMayoristaBL.GetVentaMayoristaById(Id);

            VentaMayoristaViewModel viewModel = new VentaMayoristaViewModel(venta)
            {
                // Clientes = clienteBL.GetClienteById(venta.ClienteID),
                //ProductoXVenta = productoxVentaBL.GetProductoXVentaByIdVenta(venta.ID)
            };



            ViewBag.ProductoXVenta = productoxVentaBL.GetProductoXVentaByIdVenta(venta.ID);



            return(View("NotaDePedidoForm", viewModel));
        }
Esempio n. 2
0
        public void CrearPdf(int id)
        {
            using (StringWriter sw = new StringWriter())
            {
                using (HtmlTextWriter hw = new HtmlTextWriter(sw))
                {
                    StringBuilder           sb        = new StringBuilder();
                    var                     venta     = ventaMayoristaBL.GetVentaMayoristaById(id);
                    VentaMayoristaViewModel viewModel = new VentaMayoristaViewModel(venta)
                    {
                        // Clientes = clienteBL.GetClienteById(venta.ClienteID),
                        ProductoXVenta = productoxVentaBL.GetProductoXVentaByIdVenta(venta.ID)
                    };

                    sb.Append("<br />");
                    sb.Append("<br />");
                    sb.Append("<br />");
                    sb.Append("<br />");
                    sb.Append("<br />");
                    sb.Append("<br />");
                    sb.Append("<br />");
                    sb.Append("<br />");


                    //Generar contenido del body de la tabla
                    sb.Append("<table style='font-size:9px;' border = '0' ;>");

                    double sumaParcial       = 0;
                    double sumaSinDescuentos = 0;

                    bool fondoColor = true;
                    foreach (var prod in viewModel.ProductoXVenta)
                    {
                        if (fondoColor)
                        {
                            sb.Append("<tr bgcolor='#e1e3e8'>");
                            fondoColor = false;
                        }
                        else
                        {
                            sb.Append("<tr>");
                            fondoColor = true;
                        }

                        if (prod.Producto.MarcaId != null)
                        {
                            sb.Append("<td width='24%' style='font-size:10px;'>" + prod.Producto.Nombre + " (" + prod.Producto.Marca.Nombre + ")" + "</td>");
                        }

                        if (prod.Producto.CategoriaId != null)
                        {
                            sb.Append("<td width='24%' style='font-size:10px;'>" + prod.Producto.Nombre + " (" + prod.Producto.Categoria.Nombre + ")" + "</td>");
                        }

                        sb.Append("<td width='5%' align = 'center'>" + prod.Cantidad + "</td>");
                        sb.Append("<td width='4%' align = 'center'>" + prod.TipoDeUnidad.Nombre + "</td>");
                        sb.Append("<td width='6%' align = 'center'>" + prod.Importe + "</td>");
                        sb.Append("<td width='5%' align = 'left'>" + Math.Round((double)prod.Descuento, 2) + "</td>");
                        sb.Append("<td width='6%' align = 'left'>" + prod.Total + "</td>");

                        if (prod.Producto.MarcaId != null)
                        {
                            sb.Append("<td width='24%' style='font-size:10px;'>" + prod.Producto.Nombre + " (" + prod.Producto.Marca.Nombre + ")" + "</td>");
                        }

                        if (prod.Producto.CategoriaId != null)
                        {
                            sb.Append("<td width='24%' style='font-size:10px;'>" + prod.Producto.Nombre + " (" + prod.Producto.Categoria.Nombre + ")" + "</td>");
                        }

                        sb.Append("<td width='5%' align = 'center'>" + prod.Cantidad + "</td>");
                        sb.Append("<td width='4%' align = 'center'>" + prod.TipoDeUnidad.Nombre + "</td>");
                        sb.Append("<td width='6%' align = 'center'>" + prod.Importe + "</td>");
                        sb.Append("<td width='5%' align = 'left'>" + Math.Round((double)prod.Descuento, 2) + "</td>");
                        sb.Append("<td width='6%' align = 'left'>" + prod.Total + "</td>");
                        sb.Append("</tr>");

                        sumaParcial += prod.Total;

                        if (prod.Descuento == 0)
                        {
                            sumaSinDescuentos += prod.Total;
                        }
                    }

                    //Calculamos importe del descuento aplicado
                    double?descuentoFinal     = 0;
                    double?ivaFinal           = 0;
                    double?total              = 0;
                    double?nuevoTotal         = 0;
                    double?precioSinIVA       = 0;
                    double?precioTotalSinDesc = 0;

                    if (venta.IVA != 0)
                    {
                        total        = venta.IVA / 100;
                        nuevoTotal   = 1 + total;
                        precioSinIVA = venta.SumaTotal / nuevoTotal;

                        ivaFinal = Math.Round((venta.SumaTotal - precioSinIVA).Value, 2);
                    }

                    if (venta.TipoDescuentoTotal == 1)
                    {
                        descuentoFinal = venta.Descuento;
                    }
                    else
                    {
                        if (venta.Descuento == null)
                        {
                            venta.Descuento = 0;
                        }

                        if (venta.IVA != 0)
                        {
                            precioTotalSinDesc = (precioSinIVA * 100) / (100 - venta.Descuento);

                            descuentoFinal = Math.Round(((venta.Descuento * precioTotalSinDesc) / 100).Value, 2);
                        }
                        else
                        {
                            descuentoFinal = (venta.Descuento * sumaSinDescuentos) / 100;
                        }
                    }



                    //Calculamos Anterior
                    double?saldoAnterior = (venta.EntregaEfectivo == 0) ? venta.Debe - venta.SumaTotal : (venta.EntregaEfectivo - venta.SumaTotal) + venta.Debe;


                    sb.Append("<tr><td colspan='2' ></td><td align = 'right' colspan = '2' >Suma de Venta: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + sumaParcial + "</td>");
                    sb.Append("</tr>");
                    sb.Append("<tr><td colspan='2'  ></td><td align = 'right' colspan = '2' >Suma de Venta: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + sumaParcial + "</td>");
                    sb.Append("</tr>");

                    sb.Append("<tr><td colspan='2' ></td><td align = 'right' colspan = '2' >Descuento: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + descuentoFinal + "</td>");
                    sb.Append("</tr>");
                    sb.Append("<tr><td colspan='2' ></td><td align = 'right' colspan = '2' >Descuento: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + descuentoFinal + "</td>");
                    sb.Append("</tr>");

                    sb.Append("<tr><td colspan='2' ></td><td align = 'right' colspan = '2' >IVA: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + ivaFinal + "</td>");
                    sb.Append("</tr>");
                    sb.Append("<tr><td colspan='2' ></td><td align = 'right' colspan = '2' >IVA: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + ivaFinal + "</td>");
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td colspan='2' rowspan='3'>");
                    sb.Append("<table width='90%' align='center'><tr><td border='1' align='center' style='font-size:8px;'>");
                    sb.Append("No se aceptan devoluciones pasadas las 72hs de entregado el pedido." +
                              " Los cambios, devoluciones y omisiones se realizarán en la siguiente compra. Revisar el pedido en el momento de la entrega.");
                    sb.Append("</td></tr></table>");
                    sb.Append("</td>");
                    sb.Append("<td align = 'right' colspan = '2'>Total: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + venta.SumaTotal + "</td>");
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td colspan='2' rowspan='3' >");
                    sb.Append("<table width='90%' align='center'><tr><td border='1' align='center' style='font-size:8px;'>");
                    sb.Append("No se aceptan devoluciones pasadas las 72hs de entregado el pedido." +
                              " Los cambios, devoluciones y omisiones se realizarán en la siguiente compra. Revisar el pedido en el momento de la entrega.");
                    sb.Append("</td></tr></table>");
                    sb.Append("</td>");
                    sb.Append("<td align = 'right' colspan = '2'>Total: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + venta.SumaTotal + "</td>");
                    sb.Append("</tr>");

                    sb.Append("<tr><td align = 'right' colspan = '2' >Anterior: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + saldoAnterior + "</td>");
                    sb.Append("</tr>");
                    sb.Append("<tr><td align = 'right' colspan = '2' >Anterior: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + saldoAnterior + "</td>");
                    sb.Append("</tr>");

                    sb.Append("<tr><td align = 'right' colspan = '2' >Saldo: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + venta.Debe + "</td>");
                    sb.Append("</tr>");
                    sb.Append("<tr><td align = 'right' colspan = '2' >Saldo: </td>");
                    sb.Append("<td align = 'left' colspan = '2'>$" + venta.Debe + "</td>");
                    sb.Append("</tr>");

                    sb.Append("</table>");



                    //Export HTML String as PDF.
                    StringReader sr     = new StringReader(sb.ToString());
                    Document     pdfDoc = new Document(PageSize.A4.Rotate(), 25, 25, 30, 25);

                    //Instanciamos Componentes para el Header
                    PDFHeader pageHeader = new PDFHeader();
                    pageHeader.VentaMayorista = viewModel;
                    PDFFooter pagefooter = new PDFFooter();
                    pagefooter.VentaMayorista = viewModel;

                    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
                    PdfWriter  writer     = PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream);

                    writer.PageEvent = pageHeader;
                    writer.PageEvent = pagefooter;

                    //Donde la magia sucede
                    pdfDoc.Open();
                    htmlparser.Parse(sr);
                    pdfDoc.Close();


                    HttpContext.Current.Response.ContentType = "application/pdf";
                    HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=NotaPedido_" + venta.NumeroVenta + ".pdf");
                    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    HttpContext.Current.Response.Write(pdfDoc);
                    HttpContext.Current.Response.End();
                }
            }
        }