Exemplo n.º 1
0
        private void btnCalcularTotal_Click(object sender, EventArgs e)
        {
            double subtotal = 0;
            double totalIGV = 0;
            Single DescDescuentos = (Single)0.0;
            Single DescPack = (Single)0.0;
            Single DesCategoria = (Single)0.0;
            Single DescuentoTotal = (Single)0.0;
            foreach (DocumentoLinea linea in lineasDocumento)
            {
                subtotal += linea.PrecioLinea;
                totalIGV += linea.PrecioLinea * linea.Impuesto;
            }
            txtSubtotal.Text = subtotal.ToString("0.00");
            txtTotalIGV.Text = totalIGV.ToString("0.00");

            if (cliente != null)
            {
                /*$$$$$$$$$$ INICIO DESCUENTOS $$$$$$$$$$$$$$$$$*/

                //obtengo la linea de documento para analizarla
                IList<DocumentoLinea> lineasDocumentoCopy = new List<DocumentoLinea>();
                //lineasDocumentoCopy = lineasDocumento;
                foreach (DocumentoLinea doclin in lineasDocumento)
                {
                    DocumentoLinea objdoc = new DocumentoLinea();
                    objdoc.Cantidad = doclin.Cantidad;
                    objdoc.PrecioLinea = doclin.PrecioLinea;
                    objdoc.ArticuloXLocal = new ArticuloXLocal();
                    objdoc.ArticuloXLocal.Articulo = new Articulo();
                    objdoc.ArticuloXLocal.Articulo.Id = doclin.ArticuloXLocal.Articulo.Id;
                    objdoc.ArticuloXLocal.Articulo.PrecioVenta = doclin.ArticuloXLocal.Articulo.PrecioVenta;
                    lineasDocumentoCopy.Add(objdoc);
                }
                /*########### ANALISIS DE PACKSS ###############*/

                //Obtengo todos los Packs de la categoria de mi cliente
                IList<PackXCategoriaCliente> PacksActualesCategoria = new List<PackXCategoriaCliente>();
                //le paso el id de categoria del cliente
                PackXCategoriaClienteBL objPacksCategoria = new PackXCategoriaClienteBL();
                PacksActualesCategoria = objPacksCategoria.FindByIdCliente(cliente.CategoriaCliente.Id);

                IList<ArticuloXPack> ArticulosPack = new List<ArticuloXPack>();

                foreach (PackXCategoriaCliente objPack in PacksActualesCategoria)
                {

                    ArticuloXPackBL objArPack = new ArticuloXPackBL();
                    ArticulosPack = objArPack.findArticulosXPack(objPack.Pack.Id);
                    //obtengo todos los articulos de ese
                    //para la lista de articulos verifica si estan todas las cantidades en mi linea actual
                    bool cumple = true;
                    int cantidadPacks = -1;
                    foreach (ArticuloXPack objArtpack in ArticulosPack)
                    {

                        bool esArt = false;

                        foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy)
                        {

                            if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0
                                && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0 && objArtpack.CantidadPack > 0)
                            {
                                int dif = (int)lineaDoc.Cantidad - (int)objArtpack.CantidadPack;

                                if (cantidadPacks != -1)
                                    cantidadPacks = Math.Min(cantidadPacks, dif / (int)objArtpack.CantidadPack);
                                else
                                    cantidadPacks = dif / (int)objArtpack.CantidadPack;

                                esArt = true;
                            }
                            if (esArt)
                                break;
                        }
                        if (!esArt)
                            cumple = false;

                        if (!cumple)
                            break;
                    }

                    if (cumple)
                    {//ese pack se puede extraer de la linea actual
                        //extraemos todos los productos
                        cantidadPacks = Math.Min(cantidadPacks, (int)objPack.Pack.CantidadPacks);
                        foreach (ArticuloXPack objArtpack in ArticulosPack)
                        {
                            if (cantidadPacks <= 0)
                                break;
                            foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy)
                            {

                                if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0
                                    && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0)
                                {
                                    lineaDoc.Cantidad -= objArtpack.CantidadPack * cantidadPacks;
                                    //para guardar que se uso ese pack
                                }
                            }

                        }
                        Single PrecioOriginal = (Single)0.0;

                        foreach (ArticuloXPack objArtpack in ArticulosPack)
                            PrecioOriginal += (Single)objArtpack.CantidadPack * (Single)cantidadPacks * objArtpack.Articulo.PrecioVenta;

                        if (cantidadPacks > 0)
                        {
                            objPack.Pack.CantidadPacks -= cantidadPacks;
                            objPack.Pack.CantidadUtilizada += cantidadPacks;
                            DescPack += (PrecioOriginal - objPack.Pack.PrecioPack * cantidadPacks);
                        }
                        // se actualizo la linea auxiliars
                    }
                    //fin de iteracion de un PACK
                }

                /*########### FIN DE ANALISIS DE PACKSS ###############*/

                /*########### ANALISIS DE DESCUENTOS ###############*/
                IList<DescuentoXCategoriaCliente> DescuentosActualesCategoria = new List<DescuentoXCategoriaCliente>();
                //obtiene todos los descuentos de la categoria cliente
                DescuentoXCategoriaClienteBL objDescuentoXCategoriaClienteBL = new DescuentoXCategoriaClienteBL();
                DescuentosActualesCategoria = objDescuentoXCategoriaClienteBL.FindById(cliente.CategoriaCliente.Id);

                IList<DescuentoXArticulo> ArticulosDescuento = new List<DescuentoXArticulo>();

                //itero sobre cada articulo para que descuente solo una vez
                foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy)
                {
                    bool desconto = false;
                    foreach (DescuentoXCategoriaCliente objDescuentos in DescuentosActualesCategoria)
                    {
                        //obtengo todos los articulos de ese descuento
                        if (desconto)
                            break;
                        DescuentoXArticuloBL objDeArt = new DescuentoXArticuloBL();
                        ArticulosDescuento = objDeArt.Find(objDescuentos.Descuento);

                        foreach (DescuentoXArticulo objArticulo in ArticulosDescuento)
                        {
                            if (desconto)
                                break;
                            if (objArticulo.Articulo.Id == lineaDoc.ArticuloXLocal.Articulo.Id &&
                                lineaDoc.Cantidad > 0)
                            {
                                Single porce = objArticulo.PorcentajeDescuento / (Single)100.0;
                                DescDescuentos += (Single)porce * (Single)lineaDoc.Cantidad * (Single)lineaDoc.ArticuloXLocal.Articulo.PrecioVenta;
                                desconto = true;
                            }
                        }
                    }
                }
            }
            /*########### ANALISIS DE DESCUENTOS ###############*/
            DescDescuentos = DescDescuentos + (Single)0.0;
            DescPack = DescPack + (Single)0.0;
            DescuentoTotal = DescDescuentos + DescPack;

            txtPromo.Text = DescDescuentos.ToString("0.00");
            txtDescuento.Text = DescuentoTotal.ToString("0.00");
            txtDesPac.Text = DescPack.ToString("0.00");
            /*SOLO POR AHORA*/
            Single total2 = (Single)totalIGV - DescuentoTotal;
            txtTotal.Text = total2.ToString("0.00");
            /*$$$$$$$$$$ FIN DESCUENTOS $$$$$$$$$$$$$$$$$*/
        }
Exemplo n.º 2
0
        private void llenarGrillas()
        {
            double totalImpuestos;
            float descuentoUnit, precioVenta, total;
            int filaArt = 0;
            int filaPack = 0;

            dgvArticulos.Rows.Clear();
            dgvPacks.Rows.Clear();
            listaArticulos = new List<DocumentoLinea>();
            listaPacks = new List<DocumentoLinea>();
            listaLineasDevolucion = new List<DocumentoLinea>();
            this.totalDevolucion = 0;

            IList<DocumentoLinea> listadocLinea = new DocumentoLineaBL().findByIdDocumento(this.documentoVenta.Id.ToString());

            DescuentoXArticuloBL objDescXArtBL = new DescuentoXArticuloBL();

            foreach (DocumentoLinea linea in listadocLinea)
            {
                if (linea.Pack == null)
                {
                    descuentoUnit = 0;
                    precioVenta = (float)linea.PrecioLinea / (float)linea.Cantidad;

                    if (linea.DescuentoXArticulo != null) //si es un articulo con descuento
                    {
                       // DescuentoXArticulo descxArt=objDescXArtBL.findById(linea.DescuentoXArticulo.ToString());
                        //descuentoUnit =(float)descxArt.PorcentajeDescuento;
                        descuentoUnit = linea.DescuentoXArticulo.PorcentajeDescuento;
                    }

                    totalImpuestos = linea.PrecioLinea * linea.Impuesto;
                    total = (float)(precioVenta*(linea.Cantidad-linea.CantidadDevuelta) + totalImpuestos - descuentoUnit *linea.Cantidad);

                    object[] row = { linea.ArticuloXLocal.Articulo.CodigoArticulo, linea.ArticuloXLocal.Articulo.Titulo, linea.ArticuloXLocal.Articulo.Tipo,linea.Impuesto, precioVenta,descuentoUnit,linea.Cantidad,linea.CantidadDevuelta,0,0};
                    dgvArticulos.Rows.Add(row);
                    listaArticulos.Add(linea);
                    filaArt++;

                }

                else //si la linea trata de un pack,agregamos este a la grilla de packs
                {

                    object[] row = { linea.Pack.CodigoPack, linea.Pack.Nombre, linea.Pack.PrecioPack, linea.Cantidad,linea.CantidadDevuelta, 0, 0 };
                    dgvPacks.Rows.Add(row);
                    listaPacks.Add(linea);
                    filaPack++;
                }
            }

            agregarControlesGrilla();

            this.lblTotalVentas.Text = documentoVenta.Total.ToString();
            if (documentoVenta.Cliente != null) this.lblCliente.Text = documentoVenta.Cliente.Nombre;
            this.linkNroDocumento.Text = documentoVenta.NroDocumentoVenta.ToString();
            this.lblFechaVenta.Text = documentoVenta.FechaEmision.ToString();

            documentoVentaActual = documentoVenta;
            documentoVenta = null;
        }
Exemplo n.º 3
0
        private void btnCalcularTotal_Click(object sender, EventArgs e)
        {
            double TotalFin = 0;
            double subtotal = 0;
            double totalIGV = 0;
            Single DescDescuentos = (Single)0.0;
            Single DescPack = (Single)0.0;
            Single DesCategoria = (Single)0.0;
            Single DescuentoTotal = (Single)0.0;

            foreach (DocumentoLinea linea in lineasDocumento)
            {
                subtotal += linea.PrecioLinea;
                if (linea.Impuesto >= 0.012)
                    totalIGV += linea.PrecioLinea * 0.19;
            }
            TotalFin = subtotal + totalIGV;

            if (cliente != null)
            {
                /*$$$$$$$$$$ INICIO DESCUENTOS $$$$$$$$$$$$$$$$$*/

                //obtengo la linea de documento para analizarla
                IList<DocumentoLinea> lineasDocumentoCopy;

                lineasDocumentoCopy = lineasDocumento;
                /*########### ANALISIS DE PACKSS ###############*/

                //Obtengo todos los Packs de la categoria de mi cliente
                IList<PackXCategoriaCliente> PacksActualesCategoria = new List<PackXCategoriaCliente>();
                //le paso el id de categoria del cliente
                PackXCategoriaClienteBL objPacksCategoria = new PackXCategoriaClienteBL();
                PacksActualesCategoria = objPacksCategoria.FindByIdCliente(cliente.CategoriaCliente.Id);

                IList<ArticuloXPack> ArticulosPack = new List<ArticuloXPack>();
                lineasPack = new List<DocumentoLinea>();
                //recorro todos los packs
                foreach (PackXCategoriaCliente objPack in PacksActualesCategoria)
                {
                    ArticuloXPackBL objArPack = new ArticuloXPackBL();
                    //obtengo todos los articulos de ese
                    ArticulosPack = objArPack.findArticulosXPack(objPack.Pack.Id);

                    //para la lista de articulos verifica si estan todas las cantidades en mis lineas actual
                    bool cumple = true;
                    int cantidadPacks = -1;

                    foreach (ArticuloXPack objArtpack in ArticulosPack)
                    {

                        bool esArt = false;

                        foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy)
                        {

                            if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0
                                && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0 && objArtpack.CantidadPack > 0)
                            {
                                int dif = (int)lineaDoc.Cantidad;

                                if (cantidadPacks != -1)
                                    cantidadPacks = Math.Min(cantidadPacks, dif / (int)objArtpack.CantidadPack);
                                else
                                    cantidadPacks = dif / (int)objArtpack.CantidadPack;

                                esArt = true;
                            }
                            if (esArt)
                                break;
                        }
                        //si el articulo de ese pack no se encuentra en mi linea
                        if (!esArt)
                            cumple = false;

                        // este pack ya no cumple
                        if (!cumple)
                            break;
                    }

                    //despues de recorrer todos mis articulos del pack
                    if (cumple)
                    {   //ese pack se puede extraer de la linea actual
                        //extraemos todos los productos
                        cantidadPacks = Math.Min(cantidadPacks, (int)objPack.Pack.CantidadPacks);

                        foreach (ArticuloXPack objArtpack in ArticulosPack)
                        {
                            if (cantidadPacks <= 0)
                                break;
                            foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy)
                            {

                                if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0
                                    && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0)
                                {
                                    lineaDoc.Cantidad -= objArtpack.CantidadPack * cantidadPacks;

                                    //para guardar que se uso ese pack

                                }
                            }
                        }

                        DocumentoLinea lineaPack = new DocumentoLinea();
                        lineaPack.ArticuloXLocal = null;
                        lineaPack.Cantidad = cantidadPacks;
                        lineaPack.CantidadDevuelta = 0;
                        lineaPack.DescuentoXArticulo = null;
                        lineaPack.Documento = documento;
                        lineaPack.Impuesto = 0;
                        lineaPack.Pack = objPack.Pack;
                        lineaPack.PrecioLinea = cantidadPacks * objPack.Pack.PrecioPack;
                        lineasPack.Add(lineaPack);

                        Single PrecioOriginal = (Single)0.0;

                        foreach (ArticuloXPack objArtpack in ArticulosPack)
                            PrecioOriginal += objArtpack.Articulo.PrecioVenta * (Single)objArtpack.CantidadPack;
                        PrecioOriginal *= cantidadPacks;

                        if (cantidadPacks > 0)
                        {
                            objPack.Pack.CantidadPacks -= cantidadPacks;
                            objPack.Pack.CantidadUtilizada += cantidadPacks;
                            DescPack += (PrecioOriginal - objPack.Pack.PrecioPack * cantidadPacks);
                            new PackBL().Grabar(objPack.Pack);
                        }
                        // se actualizo la linea auxiliars
                    }
                    //fin de iteracion de un PACK
                }

                /*########### FIN DE ANALISIS DE PACKSS ###############*/

                /*########### ANALISIS DE DESCUENTOS ###############*/
                IList<DescuentoXCategoriaCliente> DescuentosActualesCategoria = new List<DescuentoXCategoriaCliente>();
                //obtiene todos los descuentos de la categoria cliente
                DescuentoXCategoriaClienteBL objDescuentoXCategoriaClienteBL = new DescuentoXCategoriaClienteBL();
                DescuentosActualesCategoria = objDescuentoXCategoriaClienteBL.FindById(cliente.CategoriaCliente.Id);

                IList<DescuentoXArticulo> ArticulosDescuento = new List<DescuentoXArticulo>();

                //itero sobre cada articulo para que descuente solo una vez
                foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy)
                {
                    bool desconto = false;
                    foreach (DescuentoXCategoriaCliente objDescuentos in DescuentosActualesCategoria)
                    {
                        //obtengo todos los articulos de ese descuento
                        if (desconto)
                            break;
                        DescuentoXArticuloBL objDeArt = new DescuentoXArticuloBL();
                        ArticulosDescuento = objDeArt.Find(objDescuentos.Descuento);

                        foreach (DescuentoXArticulo objArticulo in ArticulosDescuento)
                        {
                            if (desconto)
                                break;
                            if (objArticulo.Articulo.Id == lineaDoc.ArticuloXLocal.Articulo.Id &&
                                lineaDoc.Cantidad > 0)
                            {
                                Single porce = objArticulo.PorcentajeDescuento / (Single)100.0;
                                Single Desunico = (Single)porce * (Single)lineaDoc.Cantidad * (Single)lineaDoc.ArticuloXLocal.Articulo.PrecioVenta;
                                DescDescuentos += Desunico;
                                desconto = true;
                                lineaDoc.DescuentoXArticulo = objArticulo;
                                //tenemos q crear otro
                                DocumentoLinea lineaPack = new DocumentoLinea();
                                lineaPack.ArticuloXLocal = lineaDoc.ArticuloXLocal;
                                lineaPack.Cantidad = lineaDoc.Cantidad;
                                lineaPack.CantidadDevuelta = 0;
                                lineaPack.Documento = documento;
                                lineaPack.DescuentoXArticulo = objArticulo;
                                //lineaPack.Impuesto = lineaDoc.ArticuloXLocal.Articulo.IndIGV[0] == 'S' ? (float)0.19 * (lineaDoc.ArticuloXLocal.Articulo.PrecioVenta - lineaDoc.ArticuloXLocal.Articulo.PrecioVenta * (lineaPack.DescuentoXArticulo.PorcentajeDescuento)/(float)100) : 0;
                                lineaPack.Impuesto = lineaDoc.Impuesto;
                                lineaPack.Pack = null;
                                lineaPack.PrecioLinea = (float)lineaDoc.Cantidad * lineaDoc.ArticuloXLocal.Articulo.PrecioVenta;
                                lineasPack.Add(lineaPack);
                                lineaDoc.Cantidad = 0;
                                objDescuentos.Descuento.CantidadUtilizada++;
                                new DescuentoBL().Grabar(objDescuentos.Descuento);
                            }
                        }
                    }
                }

                foreach (DocumentoLinea linea in lineasDocumentoCopy)
                {
                    if (linea.Cantidad > 0)
                    {
                        lineasPack.Add(linea);
                    }
                }
            }
            else{
                lineasPack = lineasDocumento;
            }
            double TotalFin2 = 0;
            double subtotal2 = 0;
            double totalIGV2 = 0;
            foreach (DocumentoLinea linea in lineasPack)
            {
                subtotal2 += linea.PrecioLinea;
                if (linea.Impuesto >= 0.012)
                    totalIGV2 += linea.PrecioLinea * 0.19;
            }
            TotalFin2 = subtotal2 + totalIGV2;

            txtSubtotal.Text = subtotal.ToString("0.00");
            txtTotalIGV.Text = totalIGV.ToString("0.00");

            /*########### ANALISIS DE DESCUENTOS ###############*/
            DescDescuentos = DescDescuentos + (Single)0.0;
            DescPack = DescPack + (Single)0.0;
            DescuentoTotal = DescDescuentos + DescPack;

            txtPromo.Text = DescDescuentos.ToString("0.00");
            txtDescuento.Text = DescuentoTotal.ToString("0.00");
            txtDesPac.Text = DescPack.ToString("0.00");
            /*SOLO POR AHORA*/
            Single total2 = (Single)TotalFin2 - DescDescuentos;
            txtTotal.Text = total2.ToString("0.00");
            /*$$$$$$$$$$ FIN DESCUENTOS $$$$$$$$$$$$$$$$$*/
        }
Exemplo n.º 4
0
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            //  llenarCategoriaClientes();

             if (validarCampos())
             {
                 bool ok = true;

                 for (int i = 0; i < dgvArticulos.Rows.Count; i++)
                 {
                     dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.White;
                 }

                // total = 0;

                 for (int i = 0; i < dgvArticulos.Rows.Count; i++)
                 {
                     string strCantidad = dgvArticulos.Rows[i].Cells["cantidad"].Value.ToString();//cantidad
                     string strPorcentaje = dgvArticulos.Rows[i].Cells["Porcentaje"].Value.ToString();

                     int intCantidad;
                     float floatPorcentaje;

                     if ((!String.IsNullOrEmpty(strCantidad) && int.TryParse(strCantidad, out intCantidad) && intCantidad > 0) && (!String.IsNullOrEmpty(strPorcentaje) && float.TryParse(strPorcentaje, out floatPorcentaje) && floatPorcentaje > 0))
                     {
                         if (floatPorcentaje >= 0 && floatPorcentaje <= 100)
                         {
                             listadescuentoXArt[i].CantidadDisponible = intCantidad;
                             listadescuentoXArt[i].PorcentajeDescuento = floatPorcentaje;
                         }
                         else
                         {
                             ok = false;
                             dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.RosyBrown;
                         }
                     }
                     else
                     {
                         ok = false;
                         dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.RosyBrown;

                     }

                 }

                 if (ok)
                 {
                     descuento.Nombre = this.txtNombre.Text;
                     descuento.FechaInicio = this.dtpFechaInicio.Value.Date;
                     descuento.FechaFin = this.dtpFechaFin.Value.Date;
                     descuento.CantidadUtilizada = int.Parse(this.lblCantidadUtilizada.Text);
                     descuento.CodigoDescuento = this.txtCodigoDescuento.Text;

                     if (descuento.FechaInicio.Value <= DateTime.Today && descuento.FechaFin.Value >= DateTime.Today) descuento.Estado = "Activo";
                     else descuento.Estado = "Inactivo";

                     DescuentoBL objdescuentoBL = new DescuentoBL();

                     objdescuentoBL.Grabar(descuento);

                     if (descuento.CantidadUtilizada == 0)
                     {
                         //graba articulos participantes
                         DescuentoXArticuloBL objDescXart = new DescuentoXArticuloBL();

                         foreach (DescuentoXArticulo descxpack in listaArtEliminados)
                             objDescXart.Eliminar(descxpack);

                         for (int i = 0; i < dgvArticulos.Rows.Count; i++)// listaArtxPack.Count; i++)
                         {
                             listadescuentoXArt[i].Descuento = descuento;
                             listadescuentoXArt[i].CantidadDisponible = int.Parse(dgvArticulos.Rows[i].Cells["cantidad"].Value.ToString());
                             listadescuentoXArt[i].PorcentajeDescuento = float.Parse(dgvArticulos.Rows[i].Cells["Porcentaje"].Value.ToString());
                             objDescXart.Grabar(listadescuentoXArt[i]);
                         }

                         //graba categoria de clientes participantes

                         if (listaDescuentoxCat != null)
                             foreach (DescuentoXCategoriaCliente descxcat in listaDescuentoxCat)
                                 objcatCliente.Eliminar(descxcat);

                         foreach (int index in chkClientes.CheckedIndices)
                         {
                             DescuentoXCategoriaCliente descxCatCliente = new DescuentoXCategoriaCliente();
                             descxCatCliente.Descuento = descuento;

                             descxCatCliente.CategoriaCliente = categorias[index];
                             objcatCliente.Grabar(descxCatCliente);
                         }
                     }

                     Utils.Utils.OK(Utils.Utils.REGISTRO_OK);
                     this.Close();
                 }

                 else
                 {
                     Utils.Utils.Error(null, "Las cantidades sombreadas no son válidas");
                 }
             }
        }
Exemplo n.º 5
0
        private void llenarGrillas()
        {
            double totalImpuestos;
            float descuentoUnit, precioVenta, total;
            int filaArt = 0;
            int filaPack = 0;

            limpiarCampos();

            DescuentoXArticuloBL objDescXArtBL = new DescuentoXArticuloBL();

            foreach (DocumentoLinea linea in documentoVenta.DocumentoDocumentoLineafk)
            {
                if (linea.Pack == null)
                {
                    descuentoUnit = 0;
                    precioVenta = (float)linea.PrecioLinea / (float)linea.Cantidad;

                    if (linea.DescuentoXArticulo != null) //si es un articulo con descuento
                    {
                        descuentoUnit = linea.DescuentoXArticulo.PorcentajeDescuento;
                    }

                    totalImpuestos = linea.PrecioLinea * linea.Impuesto;
                    total = (float)(precioVenta*(linea.Cantidad-linea.CantidadDevuelta) + totalImpuestos - descuentoUnit *linea.Cantidad);

                    object[] row = { linea.ArticuloXLocal.Articulo.CodigoArticulo, linea.ArticuloXLocal.Articulo.Titulo, linea.ArticuloXLocal.Articulo.Tipo,linea.Impuesto, precioVenta,descuentoUnit,linea.Cantidad,linea.CantidadDevuelta,0,0};
                    dgvArticulos.Rows.Add(row);
                    listaArticulos.Add(linea);
                    filaArt++;

                }

                else //si la linea trata de un pack,agregamos este a la grilla de packs
                {

                    object[] row = { linea.Pack.CodigoPack, linea.Pack.Nombre, linea.Pack.PrecioPack, linea.Cantidad,linea.CantidadDevuelta, 0, 0 };
                    dgvPacks.Rows.Add(row);
                    listaPacks.Add(linea);
                    filaPack++;
                }
            }

            this.lblTotalVentas.Text = documentoVenta.Total.ToString("0.00");
            if (documentoVenta.Cliente != null) this.lblCliente.Text = documentoVenta.Cliente.Nombre;
            this.linkNroDocumento.Text = documentoVenta.NroDocumentoVenta.ToString();
            this.lblFechaVenta.Text =((DateTime)(documentoVenta.FechaEmision)).ToShortDateString();
            this.lblTipoDoc.Text = documentoVenta.TipoDocumento;

            if (documentoVenta.Cliente!=null)
                {
                    this.lblCliente.Text = documentoVenta.Cliente.Nombre;
                }

            documentoVentaActual = documentoVenta;
            documentoVenta = null;
        }