public VentaProductos(object vp)
        {
            InitializeComponent();
            this.v = (Venta)vp;
            txt_cliente.Text = v.Clientes.Nombre;
            txt_doc.Text = v.Clientes.Documento;
            txt_pais.Text = v.Clientes.Pais.Nombre;
            txt_venta_num.Text = v.Venta_numero.ToString();
            cbox_factura_num.Text = v.Factura_numero.ToString();
            txt_direccion.Text = v.Clientes.Direccion;
            txt_RUT.Text = v.Clientes.RUT;
            txt_ciudad.Text = v.Clientes.Ciudad;
            fecha.Value = v.Fecha;
            listacarrito = Datos.DatosVenta_Producto.getVenta_Producto(v.Id_venta);
            CargarFacturas();
            bdd_carrito.DataSource = listacarrito;
            for (int i = 0; i < listacarrito.Count; i++)
            {

                ((Venta_Producto)listacarrito[i]).Dato4 = ((Venta_Producto)listacarrito[i]).Cantidad * ((Venta_Producto)listacarrito[i]).Precio;
                txt_subtotal_sin_desc.Text = (Convert.ToDecimal(txt_subtotal_sin_desc.Text) + (((Venta_Producto)listacarrito[i]).Precio * ((Venta_Producto)listacarrito[i]).Cantidad)).ToString();

            }
            txt_observaciones.Text = v.Observaciones;
            txt_con_iva.Text = v.Total.ToString();
            txt_descuento_porcent.Text = Math.Round(((100 / (v.Total+v.Descuento)) * v.Descuento),3).ToString();
            txt_tipo.Text = v.Tipo;
            txt_descuento_pesos.Text = Math.Round(v.Descuento,2).ToString();
            decimal subtotal = Math.Round((v.Total / ((Principal.iva / 100) + 1)), 2);
            txt_subtotal_pesos.Text = subtotal.ToString();
            txt_iva_pesos.Text = (v.Total - subtotal).ToString();

            factura = Datos.Conex.traer_datos_facturas();
        }
        public static ArrayList getVentas(string dato)
        {
            //creo la conexion
            SqlConnection cnn = new SqlConnection(conexion);
            //abro la conexion
            cnn.Open();
            //creo la lista para almacenar las personas
            ArrayList listaventa = new ArrayList();
            //Creo el comando sql a utlizar
            SqlCommand cmd = new SqlCommand("select v.id_venta, v.fecha, v.id_cliente, v.total, c.nombre, c.documento, p.nombre, v.impreso, c.ciudad, c.direccion, c.rut, v.venta_numero,  v.factura_numero, v.tipo, v.estado,  v.id_fdp_1, v.id_fdp_2, v.id_fdp_3, v.id_fdp_4, v.fdp1_monto, v.fdp2_monto, v.fdp3_monto, v.fdp4_monto, v.descuento, v.iva, v.observaciones, v.en_pesos from venta v, cliente c, pais p where v.id_cliente = c.id_cliente and c.id_pais = p.id_pais " + dato + " and v.impreso = 1 order by v.id_venta");
            //asigno la conexion al comando
            cmd.Connection = cnn;
            //creo el datareader
            SqlDataReader obdr = cmd.ExecuteReader();
            //recorro el datareader
            while (obdr.Read())
            {
                Pais p = new Pais();
                p.Nombre = obdr.GetString(6);
                Cliente c = new Cliente();
                c.Nombre = obdr.GetString(4);
                c.Id_cliente = obdr.GetInt64(2);
                c.Documento = obdr.GetString(5);
                c.Pais = p;
                c.Ciudad = obdr.GetString(8);
                c.Direccion = obdr.GetString(9);
                c.RUT = obdr.GetString(10);
                Venta v = new Venta(obdr.GetInt64(0), obdr.GetInt64(2), obdr.GetDateTime(1), Convert.ToDecimal(Math.Round(Convert.ToDecimal(obdr.GetDecimal(3)), 2)), obdr.GetInt32(7), obdr.GetString(11), obdr.GetString(12), obdr.GetString(13), obdr.GetString(14), obdr.GetInt32(15), obdr.GetInt32(16), obdr.GetInt32(17), obdr.GetInt32(18), obdr.GetDecimal(19), obdr.GetDecimal(20), obdr.GetDecimal(21), obdr.GetDecimal(22), obdr.GetDecimal(23), obdr.GetDecimal(24), obdr.GetString(25), Convert.ToDecimal(Math.Round(Convert.ToDecimal(obdr.GetDecimal(26)), 2)));
                v.Provisorio = c.Nombre;
                v.Clientes = c;
                listaventa.Add(v);

            }
            //Cierro la conexion
            cnn.Close();
            //retorno la lsita
            return listaventa;
        }
        public static void NuevaVenta(Venta v)
        {
            //creo la conexion
            SqlConnection cnn = new SqlConnection(conexion);
            //abro la conexion
            cnn.Open();
            //Creo el comando sql a utlizar
            SqlCommand cmd = new SqlCommand("insert into venta(id_cliente, fecha, total, impreso, venta_numero, factura_numero, estado, tipo, id_fdp_1, id_fdp_2, id_fdp_3, id_fdp_4,fdp1_monto,fdp2_monto,fdp3_monto,fdp4_monto, iva, descuento, observaciones, en_pesos) Values (@id_cliente, @fecha,@total, @impreso, @venta_numero, @factura_numero, @estado, @tipo,@id_fdp_1,@id_fdp_2,@id_fdp_3,@id_fdp_4, @fdp1_monto,@fdp2_monto,@fdp3_monto,@fdp4_monto, @iva,@descuento, @observaciones, @en_pesos)");

            cmd.Parameters.Add(new SqlParameter("@id_cliente", v.Id_cliente));

            cmd.Parameters.Add(new SqlParameter("@fecha", v.Fecha));

            cmd.Parameters.Add(new SqlParameter("@total", v.Total));
            cmd.Parameters.Add(new SqlParameter("@impreso", v.Impreso));

            cmd.Parameters.Add(new SqlParameter("@factura_numero", v.Factura_numero));
            cmd.Parameters.Add(new SqlParameter("@venta_numero", v.Venta_numero));
            cmd.Parameters.Add(new SqlParameter("@estado", v.Estado));
            cmd.Parameters.Add(new SqlParameter("@tipo", v.Tipo));

            cmd.Parameters.Add(new SqlParameter("@id_fdp_1", v.Id_fdp_1));
            cmd.Parameters.Add(new SqlParameter("@id_fdp_2", v.Id_fdp_2));
            cmd.Parameters.Add(new SqlParameter("@id_fdp_3", v.Id_fdp_3));
            cmd.Parameters.Add(new SqlParameter("@id_fdp_4", v.Id_fdp_4));

            cmd.Parameters.Add(new SqlParameter("@fdp1_monto", v.Fdp1_monto));
            cmd.Parameters.Add(new SqlParameter("@fdp2_monto", v.Fdp2_monto));
            cmd.Parameters.Add(new SqlParameter("@fdp3_monto", v.Fdp3_monto));
            cmd.Parameters.Add(new SqlParameter("@fdp4_monto", v.Fdp4_monto));
            cmd.Parameters.Add(new SqlParameter("@iva", v.Iva));
            cmd.Parameters.Add(new SqlParameter("@descuento", v.Descuento));
            cmd.Parameters.Add(new SqlParameter("@observaciones", v.Observaciones));
            cmd.Parameters.Add(new SqlParameter("@en_pesos", v.En_pesos));
            //asigno la conexion al comando
            cmd.Connection = cnn;

            cmd.ExecuteNonQuery();
            cnn.Close();
        }
        public static void ModificarVenta(object o)
        {
            Venta v = new Venta();
            v = (Venta)o;
            //creo la conexion
            SqlConnection cnn = new SqlConnection(conexion);
            //abro la conexion
            cnn.Open();
            //Creo el comando sql a utlizar
            SqlCommand cmd = new SqlCommand("update venta set impreso = @impreso, venta_numero = @venta_num, factura_numero =@factura_num where id_venta = @id_venta");
            cmd.Parameters.Add(new SqlParameter("@id_venta", v.Id_venta));
            cmd.Parameters.Add(new SqlParameter("@impreso", 1));
            cmd.Parameters.Add(new SqlParameter("@venta_num", v.Venta_numero));
            cmd.Parameters.Add(new SqlParameter("@factura_num", v.Factura_numero));

            //asigno la conexion al comando
            cmd.Connection = cnn;

            cmd.ExecuteNonQuery();
        }
        public void guardar_imprimir(bool imprime)
        {
            //verifico si hay items en el carrito

            if (listacarrito.Count > 0)
            {
                this.Cursor = Cursors.WaitCursor;
                int conteo;
                for (conteo = listacarrito.Count; conteo > 0; )
                {
                    conteo = conteo - factura.Items_max;

                    cant_facturas = cant_facturas + 1;
                }

                factura_numero_conteo = factura.Factura_numero_dato;

                // verifico si el cliente es nuevo
                if (cbox_cliente.SelectedItem == null)
                {
                    if (txt_rut.Text == "")
                    {
                        txt_rut.Text = " ";
                    }

                    id_pais = DatosPais.obtener_id_pais_maximo();

                    Cliente c = new Cliente(0, cbox_cliente.Text, txt_n_documento.Text, " ", " ", " ", " ", id_pais, txt_rut.Text, Convert.ToDateTime("1/1/2000"));
                    DatosCliente.NuevoCliente(c);
                    id_cliente = DatosCliente.obtener_id_cliente_maximo();

                }
                //verifico si hay un cliente seleccionado en el cbox_cliente
                else
                {
                    id_cliente = ((Cliente)cbox_cliente.SelectedItem).Id_cliente;

                }
                int impre = 0;
                //creo una nueva venta en la bdd
                Int64 id_venta;
                if (imprime == true)
                {
                    impre = 1;
                }
                else
                {

                    txt_factura_num.Text = " ";
                    txt_venta_num.Text = " ";
                }
                if (txt_observaciones.Text == "")
                {
                    txt_observaciones.Text = " ";
                }
                Venta v = new Venta(0, id_cliente, DateTime.Now, Convert.ToDecimal(txt_total_pesos.Text), impre, txt_venta_num.Text, " ", tipo, "Pago", 1, 1, 1, 1, 0, 0, 0, 0, descuento_monto, Convert.ToDecimal(Principal.iva), txt_observaciones.Text,Convert.ToDecimal(txt_enPesos.Text));
                DatosVenta.NuevaVenta(v);

                // obtengo el id max de venta
                try
                {
                    id_venta = DatosVenta.obtener_id_venta();
                }
                catch
                {
                    id_venta = 0;

                }

                //agrego items a Venta_producto en la bdd
                for (int i = 0; i < listacarrito.Count; i++)
                {

                    Venta_Producto vp = new Venta_Producto(0, id_venta, ((Producto)listacarrito[i]).Id_producto, ((Producto)listacarrito[i]).Total, ((Producto)listacarrito[i]).Stock);
                    DatosVenta_Producto.NuevaVentaProducto(vp);
                    for (Int32 h = 0; h < listaInicial.Count; h++)
                    {
                        if (((Producto)listacarrito[i]).Id_producto == ((Producto)listainicial2[h]).Id_producto)
                        {
                            DatosProducto.CambiarStock(((Producto)listacarrito[i]).Id_producto, ((Producto)listainicial2[h]).Stock - ((Producto)listacarrito[i]).Stock);
                        }
                    }
                }
                if (imprime == true)
                {
                    for (int y = 0; y < cant_facturas; y++)
                    {
                        Factura fa = new Factura(factura.Factura_Prefijo_dato + (factura.Factura_numero_dato + y).ToString(), 0, id_venta);
                        Datos_Factura.NuevaFacura(fa);

                    }
                    Clases.Configuracion_factura factura_guardar = new Clases.Configuracion_factura();
                    factura_guardar = factura;
                    factura_guardar.Factura_numero_dato = factura.Factura_numero_dato + cant_facturas;
                    factura_guardar.Venta_numero_dato = factura.Venta_numero_dato + 1;
                    Conex.Modificar_Factura(factura_guardar);
                    try
                    {
                        PrintAString(0);
                    }
                    catch
                    {
                        MessageBox.Show(this, "Error al imprimir factura", "¡Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    }
                }

                tipo = null;
                detalle = null;

                Font printFont = null;
                string printString = null;
                clientes = null;
                listaVacia = null;
                listaInicial = null;
                listacarrito = null;
                listainicial2 = null;
                factura = null;

                Principal.cerrar_ventana_generar_venta = false;
                this.Close();

            }
            else
            {

                MessageBox.Show(this, "No hay items en el carrito", "¡Aviso!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txt_codigo2.Focus();
            }
        }
        public void cargar()
        {
            txt_pesos.Text = "0";

            lista2.Clear();
            // modelo

            lista2 = Datos.DatosVenta.getVenta_cliente_porfecha_impreso(date_fecha.Value.Date);

            for (int i = 0; i < lista2.Count; i++)
            {

                txt_pesos.Text = (Convert.ToDecimal(txt_pesos.Text) + ((Venta)lista2[i]).Total).ToString();
                txt_en_pesos.Text = (Convert.ToDecimal(txt_en_pesos.Text) + ((Venta)lista2[i]).En_pesos).ToString();

            }

            if (lista2.Count > 0)
            {
                listacarrito = Datos.DatosVenta_Producto.getVenta_Producto_no_impreso(date_fecha.Value.Date);
                lista = lista2;
                bdd_ventas.DataSource = lista;
                for (int i = 0; i < listacarrito.Count; i++)
                {
                    bool existe = false;

                    for (int x = 0; x < listaimprimir.Count; x++)
                    {
                        if (((Venta_Producto)listacarrito[i]).Dato2 == ((Venta_Producto)listaimprimir[x]).Dato2)
                        {

                            existe = true;
                            ((Venta_Producto)listaimprimir[x]).Cantidad = ((Venta_Producto)listaimprimir[x]).Cantidad + ((Venta_Producto)listacarrito[i]).Cantidad;
                        }
                    }

                    if (existe == false)
                    {

                        Venta_Producto p = new Venta_Producto();
                        p = (Venta_Producto)listacarrito[i];
                        //    p.Stock = Convert.ToInt32(txt_cantidad.Text);
                        //     bdd_carrito.Rows.Add(p.Codigo, p.Detalle, p.Stock, p.Total);
                        //bdd_print.Rows.Add(p.Stock, p.Detalle, p.Total);
                        listaimprimir.Add(p);
                        // txt_cantidad.Text = "1";

                    }
                    existe = false;

                }

                btn_imprimir.Enabled = true;
                btn_ver.Enabled = true;
            }
            else
            {
                btn_ver.Enabled = false;
                lista.Clear();
                Venta vt = new Venta(0, 0, DateTime.Today, 0, 0, "No hay registros", "No hay registro", "No hay registro", "No hay registro", 1, 1, 1, 1, 0, 0, 0, 0, 0, Principal.iva, " ",0);
                vt.Provisorio = "No hay registros";
                lista.Add(vt);
                bdd_ventas.Refresh();
                bdd_ventas.DataSource = lista;
                btn_imprimir.Enabled = false;

                MessageBox.Show(this, "No hay registros con la fecha seleccionada", "¡Aviso!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                btn_imprimir.Enabled = false;
            }
        }
        private void btn_imprimir_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show(this, "A continuacion se imprimirá los productos no impresos en facturas, ¿Desea continuar?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr == DialogResult.Yes)
            {
                this.Cursor = Cursors.WaitCursor;
                Cliente cli = new Cliente();
                cli = DatosCliente.getCliente(42);
                nombre_del_cliente = cli.Nombre;
                int conteo;
                for (conteo = listaimprimir.Count; conteo > 0; )
                {
                    conteo = conteo - factura.Items_max;

                    cant_facturas = cant_facturas + 1;
                }

                factura_numero_conteo = factura.Factura_numero_dato;

                for (int y = 0; y < lista.Count; y++)
                {

                    DatosVenta.setBajaVenta(((Venta)lista[y]).Id_venta);
                    DatosVenta_Producto.setBajaVenta_producto(((Venta)lista[y]).Id_venta);
                }

                Venta v = new Venta(0, 42, DateTime.Now, Convert.ToDecimal(txt_pesos.Text), 1, factura.Venta_Prefijo_dato + factura.Venta_numero_dato.ToString(), " ", "Contado", "Pago", 1, 1, 1, 1, 0, 0, 0, 0, 0, Principal.iva, " ",0);
                DatosVenta.NuevaVenta(v);
                Int64 id_venta = DatosVenta.obtener_id_venta();
                for (int y = 0; y < cant_facturas; y++)
                {
                    Factura fa = new Factura(factura.Factura_Prefijo_dato + (factura.Factura_numero_dato + y).ToString(), 0, id_venta);
                    Datos_Factura.NuevaFacura(fa);

                }
                Clases.Configuracion_factura factura_guardar = new Clases.Configuracion_factura();
                factura_guardar = factura;
                factura_guardar.Factura_numero_dato = factura.Factura_numero_dato + cant_facturas;
                factura_guardar.Venta_numero_dato = factura.Venta_numero_dato + 1;
                Conex.Modificar_Factura(factura_guardar);

                for (int x = 0; x < listaimprimir.Count; x++)
                {

                    Venta_Producto vp = new Venta_Producto(0, id_venta, ((Venta_Producto)listaimprimir[x]).Id_producto, ((Venta_Producto)listaimprimir[x]).Precio, ((Venta_Producto)listaimprimir[x]).Cantidad);
                    DatosVenta_Producto.NuevaVentaProducto(vp);
                }

                try
                {
                    PrintAString(0);
                }
                catch
                {
                    MessageBox.Show(this, "Error al imprimir", "¡Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
                Principal.cerrar_venta_no_impresa = false;
                this.Cursor = Cursors.Default;
                this.Close();
            }
        }