List <ArticuloVenta> ObtenerListaArticulosAGuardar(ref decimal diferenciaPrecio)
        {
            List <ArticuloVenta> listaSinPaquetes = (from art in listaArticulosVenta where !art.EsPaquete select art).ToList();
            decimal    totalDetallePaquete        = 0;
            decimal    totalPaquete    = 0;
            var        consultaPaquete = from art in listaArticulosVenta where art.EsPaquete select art;
            clsPaquete cPaquete        = new clsPaquete();

            foreach (ArticuloVenta pqte in consultaPaquete)
            {
                cPaquete.pqt_codigo = pqte.CodigoArticulo;
                var detalles = cPaquete.TraerDetallePaquetes();
                totalPaquete += pqte.Precio;
                if (detalles == null)
                {
                    continue;
                }

                foreach (DataRow r in detalles.Tables[0].Rows)
                {
                    int          cantidad       = int.Parse(r.ItemArray[3].ToString());
                    string       claveArt       = r.ItemArray[0].ToString();
                    clsArticulos cArticulo      = new clsArticulos();
                    DataSet      articulo       = cArticulo.leerArticulosUnicoPorClave(claveArt);
                    decimal      precio         = decimal.Parse(articulo.Tables[0].Rows[0][10].ToString());
                    string       descripcionArt = articulo.Tables[0].Rows[0][1].ToString();
                    AgregarArticuloALista(claveArt, descripcionArt, cantidad, precio, false, ref listaSinPaquetes);
                    totalDetallePaquete += (precio * cantidad);
                }
            }
            diferenciaPrecio = totalDetallePaquete - totalPaquete;
            return(listaSinPaquetes);
        }
        void BuscarProducto()
        {
            if (string.IsNullOrEmpty(txtClaveProducto.Text))
            {
                return;
            }

            string[] cantidadCodigo = txtClaveProducto.Text.Split('*');
            int      cantidad       = 0;
            string   codigo         = "";

            if (cantidadCodigo.Length > 1)
            {
                if (!int.TryParse(cantidadCodigo[0], out cantidad))
                {
                    cantidad = 1;
                }
                codigo = cantidadCodigo[1];
            }
            else
            {
                cantidad = 1;
                codigo   = cantidadCodigo[0];
            }

            clsArticulos articulos = new clsArticulos();

            articulos.art_codbar = codigo;
            DataSet respuesta = articulos.leerArticulosUnicoPorCodigoBarras();

            bool articuloEncontrado = false;
            bool esPaquete          = false;

            if (!string.IsNullOrEmpty(articulos.mensaje))
            {
                MessageBox.Show(articulos.mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            articuloEncontrado = respuesta != null && respuesta.Tables[0].Rows.Count > 0;

            if (!articuloEncontrado)
            {
                respuesta          = articulos.leerArticulosUnicoPorClave(codigo);
                articuloEncontrado = respuesta != null && respuesta.Tables[0].Rows.Count > 0;
            }

            if (!articuloEncontrado)
            {
                clsPaquete cPaquete = new clsPaquete();
                respuesta          = cPaquete.TraerPaqueteUnicoPorClave(codigo);
                articuloEncontrado = respuesta != null && respuesta.Tables[0].Rows.Count > 0;
                esPaquete          = articuloEncontrado;
            }

            if (!articuloEncontrado)
            {
                txtClaveProducto.Text = "";
                return;
            }

            string  clavearticulo  = esPaquete ? respuesta.Tables[0].Rows[0][1].ToString() : respuesta.Tables[0].Rows[0][0].ToString();
            string  codigoBarras   = esPaquete ? respuesta.Tables[0].Rows[0][1].ToString() : respuesta.Tables[0].Rows[0][20].ToString();
            string  nombreArticulo = esPaquete ? respuesta.Tables[0].Rows[0][4].ToString() : respuesta.Tables[0].Rows[0][1].ToString();
            decimal precio         = esPaquete ? decimal.Parse(respuesta.Tables[0].Rows[0][5].ToString()) : decimal.Parse(respuesta.Tables[0].Rows[0][10].ToString());

            AgregarVentaArticulo(clavearticulo, nombreArticulo, cantidad, precio, esPaquete);
            CalcularMontos();
            txtClaveProducto.Text = "";
        }