Exemple #1
0
        private void btnEliminar_Click(object sender, EventArgs e)
        {
            var confirm = MessageBox.Show("¿Está seguro que desea eliminar el cliente: " + txtDNIDet.Text + " - " + txtNombreDet.Text + " " + txtApellidos.Text + "?.", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (confirm == DialogResult.Yes)
            {
                string id = txtID.Text;
                try
                {
                    string result = BL_Clientes.eliminarCliente(id);

                    if (result == "1")
                    {
                        MessageBox.Show("¡Cliente eliminado exitosamente!", "Eliminar cliente", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        fillClientes();
                    }
                    else
                    {
                        MessageBox.Show("¡Ocurrió un error al eliminar el cliente!", "Eliminar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message, "Eliminar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Exemple #2
0
        private void btnObtener_Click(object sender, EventArgs e)
        {
            int         res          = 0;
            BE_clientes pBE_clientes = new BE_clientes();

            pBE_clientes.ID = Convert.ToInt32(0);
            pBE_clientes.oBE_Tipo_Documento.ID  = (this.txtRucDNI.Text.Length == 8) ? 1 : 6;
            pBE_clientes.Str_num_documento      = txtRucDNI.Text;
            pBE_clientes.Str_nom_cliente        = txtNombre.Text;
            pBE_clientes.Str_direccion_cliente  = null;
            pBE_clientes.oBE_Departamento.ID    = null;
            pBE_clientes.oBE_Provincia.ID       = null;
            pBE_clientes.oBE_Distrito.ID        = null;
            pBE_clientes.Str_v_ubigeo           = null;
            pBE_clientes.Int_chk_promo_vigentes = 0;
            pBE_clientes.Dcm_linea_credito      = 0;
            pBE_clientes.Dcm_credito_utilizado  = 0;
            pBE_clientes.Dcm_credito_disponible = 0;

            pBE_clientes.IDUsuarioCreacion = 1;
            res = BL_Clientes.Registrar_clientes(pBE_clientes);

            this.txtRucDNI.Clear();
            this.txtNombre.Clear();
            txt_buscar.Text = pBE_Clientes.Str_num_documento;
            this.pnlBusquedaSunat.Visible = false;
        }
Exemple #3
0
        private void showDetallesDoc(DataGridViewCellEventArgs e)
        {
            reiniciarCotizacion();
            string id = dgvDocumentos.Rows[e.RowIndex].Cells["ID_CAB"].Value.ToString();

            id_cab = id;
            fillDetalles(id);
            tipo         = dgvDocumentos.Rows[e.RowIndex].Cells["TIPO_VENTA"].Value.ToString();
            lblTipo.Text = dgvDocumentos.Rows[e.RowIndex].Cells["TIPO_VENTA"].Value.ToString() == "CO" ? "Compra" : "Alquiler";

            lblFecha.Text        = dgvDocumentos.Rows[e.RowIndex].Cells["FECHA"].Value.ToString();
            lblUsuario.Text      = dgvDocumentos.Rows[e.RowIndex].Cells["USUARIO"].Value.ToString();
            lblDNI.Text          = dgvDocumentos.Rows[e.RowIndex].Cells["DNI"].Value.ToString();
            lblNombre.Text       = dgvDocumentos.Rows[e.RowIndex].Cells["NOMBRE"].Value.ToString();
            lblTotal.Text        = dgvDocumentos.Rows[e.RowIndex].Cells["MONEDA"].Value.ToString() + " " + String.Format("{0:f2}", dgvDocumentos.Rows[e.RowIndex].Cells["MONTO_TOTAL"].Value);
            gbDetalle.Visible    = true;
            btnConfirmar.Enabled = true;

            cotizacion.id_cab      = Convert.ToInt32(id_cab);
            cotizacion.cliente     = lblNombre.Text;
            cotizacion.cliente_doc = lblDNI.Text;
            Ent_Clientes cliente = BL_Clientes.getCliente(lblDNI.Text);

            cotizacion.direccion       = cliente.direccion;
            cotizacion.tipo_cotizacion = tipo;
            cotizacion.dias_alquiler   = Convert.ToInt32(dgvDocumentos.Rows[e.RowIndex].Cells["DIAS_ALQUILER"].Value.ToString());
            cotizacion.monto_total     = Convert.ToDouble(lblTotal.Text.Split(' ')[1]);
            cotizacion.monto_subtotal  = Convert.ToDouble(cotizacion.monto_total / (0.18 + 1));
            cotizacion.monto_igv       = (cotizacion.monto_total - Convert.ToDouble(cotizacion.monto_subtotal));
            cotizacion.moneda          = dgvDocumentos.Rows[e.RowIndex].Cells["MONEDA"].Value.ToString();
        }
Exemple #4
0
        private void BuscarCliente()
        {
            dgvClientes.AutoGenerateColumns = false;

            if (dgvClientes.Rows.Count > 0)
            {
                dgvClientes.Rows.Clear();
            }

            string input = txtCliente.Text.Trim();

            List <Ent_Clientes> lstClientes;

            if (tipo == "dni")
            {
                lstClientes = BL_Clientes.getClientesxDNI(input, tipo_cliente);
            }
            else
            {
                lstClientes = BL_Clientes.getClientesxNombre(input, tipo_cliente);
            }

            var bindingList = new BindingList <Ent_Clientes>(lstClientes);
            var source      = new BindingSource(bindingList, null);

            dgvClientes.DataSource = source;
        }
Exemple #5
0
        private void txt_buscar_TextChanged(object sender, EventArgs e)
        {
            if (this._tipo == 1)
            {
                var BE_clienteTmp = BL_Clientes.Listar_Clientes(new BE_clientes()
                {
                    Str_texto_buscar = this.txt_buscar.Text
                });

                this.gv_Clientes_Lista.DataSource = BE_clienteTmp;
            }
        }
Exemple #6
0
        private void fillMediosContacto()
        {
            List <Ent_MediosContacto> items = new List <Ent_MediosContacto>();

            var medios = BL_Clientes.getMediosContacto();

            items.AddRange(medios);

            cboMedio.DataSource    = items;
            cboMedio.ValueMember   = "id";
            cboMedio.DisplayMember = "descripcion";
        }
Exemple #7
0
        public void Listar_Clientes()
        {
            List <BE_clientes> Listar_Clientes = new List <BE_clientes>();

            pBE_Clientes = new BE_clientes();
            pBL_Clientes = new BL_Clientes();

            pBE_Clientes.Str_texto_buscar = Convert.ToString(txt_buscar.Text);
            Listar_Clientes = BL_Clientes.Listar_Clientes(pBE_Clientes);

            gv_Clientes_Lista.AutoGenerateColumns = false;
            gv_Clientes_Lista.DataSource          = Listar_Clientes;
            gv_Clientes_Lista.ClearSelection();
        }
Exemple #8
0
        private void btn_Clientes_Buscar_Sunat_Click(object sender, EventArgs e)
        {
            var cliente = BL_Clientes.Listar_Clientes_x_NumDoc(new BE_clientes()
            {
                Str_num_documento = txtRucDNI.Text
            });

            if (cliente.Count > 0)
            {
                MessageBox.Show("Nro. Documento ya esta registrado.");
            }
            else
            {
                try
                {
                    if (txt_buscar.Text.Length == 8)
                    {
                        string html = string.Empty;
                        string url  = @"http://informaticaperuana.com/ukupacha/katariq.php?usr=iperuana&pwd=ip2017!&dni=" + this.txt_buscar.Text;

                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                        request.AutomaticDecompression = DecompressionMethods.GZip;

                        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                            using (Stream stream = response.GetResponseStream())
                                using (StreamReader reader = new StreamReader(stream))
                                {
                                    html = reader.ReadToEnd();
                                }

                        this.txtRucDNI.Text           = txt_buscar.Text;
                        this.txtNombre.Text           = html;
                        this.pnlBusquedaSunat.Visible = true;
                    }
                    else if (txt_buscar.Text.Length == 11)
                    {
                        MessageBox.Show("En estos momentos no se puede obtener la información solicitada, por favor verifique su conexión a internet.");
                    }
                }
                catch (Exception es)
                {
                    MessageBox.Show("En estos momentos no se puede obtener la información solicitada, por favor verifique su conexión a internet.");
                }
            }
        }
Exemple #9
0
        private void gv_Clientes_Lista_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this._tipo == 1)
            {
                DataGridViewRow row   = gv_Clientes_Lista.CurrentRow;
                int             valor = Convert.ToInt32(row.Cells["ID"].Value);

                var clienteTmp = BL_Clientes.Listar_Clientes_x_ID(new BE_clientes()
                {
                    ID = valor
                });

                if (clienteTmp.Count > 0)
                {
                    pBE_Clientes = clienteTmp[0];
                    this.Close();
                }
            }
        }
Exemple #10
0
        private void fillClientes()
        {
            string dni    = txtDNI.Text;
            string nombre = txtNombre.Text;

            dgvClientes.AutoGenerateColumns = false;

            if (dgvClientes.Rows.Count > 0)
            {
                dgvClientes.Rows.Clear();
            }

            List <Ent_Clientes> lstClientes = BL_Clientes.getClientesRegistrados(dni, nombre);

            var bindingList = new BindingList <Ent_Clientes>(lstClientes);
            var source      = new BindingSource(bindingList, null);

            dgvClientes.DataSource = source;
        }
Exemple #11
0
        private void fillReporte()
        {
            DataTable dt = new DataTable();
            DataSet   ds = new DataSet();

            BL_Clientes.getReporteClientes(txtDNI.Text, txtNombres.Text, cboTipo.SelectedValue.ToString(), ref ds, ref dt);

            rpvClientes.ProcessingMode         = ProcessingMode.Local;
            rpvClientes.LocalReport.ReportPath = "Reportes/Clientes.rdlc";

            rpvClientes.LocalReport.DataSources.Clear();
            ReportDataSource source = new ReportDataSource("ClientesDS", dt);

            source.Value = ds.Tables[0];

            rpvClientes.LocalReport.DataSources.Add(source);

            rpvClientes.RefreshReport();
        }
        public void Listar_Clientes_x_ID()
        {
            List <BE_clientes> Listar_Clientes_x_ID = new List <BE_clientes>();

            pBE_clientes = new BE_clientes();
            pBL_clientes = new BL_Clientes();

            pBE_clientes.ID = Convert.ToInt32(txt_Codigo_Cliente.Text);

            Listar_Clientes_x_ID = BL_Clientes.Listar_Clientes_x_ID(pBE_clientes);

            txt_Codigo_Cliente.Text = Convert.ToString(Listar_Clientes_x_ID[0].ID);

            cbo_Clientes_Documento.Text    = Convert.ToString(Listar_Clientes_x_ID[0].oBE_Tipo_Documento.Str_abrev_tipo_documento);
            txt_Documento_Cliente.Text     = Convert.ToString(Listar_Clientes_x_ID[0].Str_num_documento);
            txt_Clientes_RazonSocial.Text  = Convert.ToString(Listar_Clientes_x_ID[0].Str_nom_cliente);
            txt_Clientes_Direccion.Text    = Convert.ToString(Listar_Clientes_x_ID[0].Str_direccion_cliente);
            cbo_Clientes_Departamento.Text = Convert.ToString(Listar_Clientes_x_ID[0].oBE_Departamento.Str_Departamento);
            cbo_Clientes_Provincia.Text    = Convert.ToString(Listar_Clientes_x_ID[0].oBE_Provincia.Str_Provincia);
            cbo_Clientes_Distrito.Text     = Convert.ToString(Listar_Clientes_x_ID[0].oBE_Distrito.Str_Distrito);
            txt_Clientes_Ubigeo.Text       = Convert.ToString(Listar_Clientes_x_ID[0].Str_v_ubigeo);
            if (Listar_Clientes_x_ID[0].Int_chk_promo_vigentes == 1)
            {
                chk_Clientes_ProVigentes.Checked = true;
            }
            else
            {
                chk_Clientes_ProVigentes.Checked = false;
            }
            if (Listar_Clientes_x_ID[0].Int_chk_aceptar_vtas_credito == 1)
            {
                chk_Clientes_VentaCredito.Checked = true;
            }
            else
            {
                chk_Clientes_VentaCredito.Checked = false;
            }
            txt_Clientes_LineaCredito.Text      = Convert.ToString(Listar_Clientes_x_ID[0].Dcm_linea_credito);
            txt_Clientes_CreditoUtilizado.Text  = Convert.ToString(Listar_Clientes_x_ID[0].Dcm_credito_utilizado);
            txt_Clientes_CreditoDisponible.Text = Convert.ToString(Listar_Clientes_x_ID[0].Dcm_credito_disponible);

            this.Listar_Nivel_Dcto_x_Cliente();
        }
Exemple #13
0
        private void btn_Clientes_Eliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (gv_Clientes_Lista.RowCount > 0)
                {
                    int ID = Convert.ToInt16(label2.Text);
                    if (ID == 0)
                    {
                        MessageBox.Show("Seleccione fila");
                    }
                    else
                    {
                        label2.Text = Convert.ToString(0);
                        if (MessageBox.Show("Estas seguro de eliminar este registro ?", "Eliminar registro", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            pBE_Clientes = new BE_clientes();
                            pBL_Clientes = new BL_Clientes();

                            pBE_Clientes.ID = ID;
                            pBE_Clientes.IDUsuarioModificacion = 1;

                            BL_Clientes.ActualizarEstadoclientes(pBE_Clientes);

                            Listar_Clientes();
                            MessageBox.Show("Registro eliminado");
                        }
                    }
                }
                else
                {
                    MessageBox.Show("No hay registros, lista vacia");
                }
            }
            catch
            {
            }
        }
Exemple #14
0
        private void btnGuardar_Click_1(object sender, EventArgs e)
        {
            if (txtNombreDet.Text.Equals(String.Empty))
            {
                MessageBox.Show("El nombre no puede estar vacío.", "Agregar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNombreDet.Focus();
                return;
            }

            if (txtApellidos.Text.Equals(String.Empty) && cboTipo.SelectedValue.ToString().Equals("N"))
            {
                MessageBox.Show("El apellido no puede estar vacío.", "Agregar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtApellidos.Focus();
                return;
            }

            if (txtDireccion.Text.Equals(String.Empty))
            {
                MessageBox.Show("La dirección no puede estar vacía.", "Agregar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtDireccion.Focus();
                return;
            }

            if (txtTelefono.Text.Equals(String.Empty))
            {
                MessageBox.Show("El teléfono no puede estar vacío.", "Agregar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtApellidos.Focus();
                return;
            }

            var confirm = MessageBox.Show("¿Está seguro que desea agregar al cliente?.", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (confirm == DialogResult.Yes)
            {
                Ent_Clientes cliente = new Ent_Clientes();
                cliente.dni        = txtDNIDet.Text;
                cliente.nombres    = txtNombreDet.Text;
                cliente.apellidos  = txtApellidos.Text;
                cliente.direccion  = txtDireccion.Text;
                cliente.telefono   = txtTelefono.Text;
                cliente.email      = txtEmail.Text;
                cliente.tipo       = cboTipo.SelectedValue.ToString();
                cliente.medio      = cboMedio.SelectedValue.ToString();
                cliente.otro_medio = txtRecomendado.Text;

                try
                {
                    string result = BL_Clientes.insertarCliente(cliente);

                    if (result == "1")
                    {
                        MessageBox.Show("¡Cliente agregado exitosamente!", "Agregar cliente", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("¡Ocurrió un error al agregar el cliente!", "Agregar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message, "Agregar cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Exemple #15
0
        private void procesarCotizacion()
        {
            Ent_Venta venta = new Ent_Venta();

            venta.cod_tienda      = cod_tienda;
            venta.tipo_venta      = tipo_venta;
            venta.cantidad        = sumarCantidad();
            venta.cliente_doc     = txtDesRuc.Text;
            venta.emision         = DateTime.Now.ToString("dd/MM/yyyy");
            venta.cliente         = txtDesCliente.Text;
            venta.email           = txtEmail.Text;
            venta.usuario         = usuario;
            venta.tipo_cotizacion = cboTipo.SelectedValue.ToString();
            venta.dias_alquiler   = int.Parse(txtDias.Text);
            venta.monto_subtotal  = double.Parse(txtSubTotal.Text);
            venta.monto_igv       = double.Parse(txtIGV.Text);
            venta.monto_total     = total;
            venta.denominacion    = txtDenominación.Text;
            venta.observacion     = txtObservacion.Text;
            venta.moneda          = cboMoneda.SelectedValue.ToString();

            bool existe_cliente = BL_Clientes.existeCliente(venta.cliente_doc);

            //save customer if doesnt exists
            if (!existe_cliente)
            {
                var confirm = MessageBox.Show("¿Desea guardar el cliente en el sistema?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (confirm == DialogResult.Yes)
                {
                    Ent_Clientes nuevo_cliente = new Ent_Clientes();
                    nuevo_cliente.dni       = txtDesRuc.Text;
                    nuevo_cliente.nombres   = txtDesCliente.Text;
                    nuevo_cliente.apellidos = "";
                    nuevo_cliente.direccion = "";
                    nuevo_cliente.telefono  = "";
                    nuevo_cliente.email     = txtEmail.Text;
                    nuevo_cliente.tipo      = (nuevo_cliente.dni.Length > 8) ? "E" : "N";
                    nuevo_cliente.posible   = "1";

                    try
                    {
                        string _result = BL_Clientes.insertarCliente(nuevo_cliente);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Ocurrió un error al grabar al cliente, sin embargo, el proceso de compra continuará.\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                }
            }

            foreach (DataGridViewRow row in dgvProductos.Rows)
            {
                Ent_Productos prd = new Ent_Productos();
                prd.cod_producto = row.Cells["CODIGO"].Value.ToString();
                prd.id           = int.Parse(row.Cells["ID"].Value.ToString());
                prd.nombre       = row.Cells["DESCRIPCION"].Value.ToString();
                prd.cantidad     = int.Parse(row.Cells["CANTIDAD"].Value.ToString());
                prd.precio       = float.Parse(row.Cells["PU"].Value.ToString());
                prd.monto_total  = float.Parse(row.Cells["IMPORTE"].Value.ToString());

                venta.lstProductos.Add(prd);
            }

            try
            {
                string id_cab = "";
                string result = BL_Ventas.procesarCotizacion(venta, out id_cab);

                venta.id_cab = Convert.ToInt32(id_cab);

                Email email = new Email();
                email.Send_Email(venta, _ent_tienda, ent_configuracion, txtObservacion.Text, adjunto);

                if (result == "1")
                {
                    MessageBox.Show("Cotización Realizada con Éxito!.", "Cotización", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    InvoicePDF pdf = new InvoicePDF();
                    pdf.createCotizacion(ent_configuracion, venta);
                    reiniciarVenta();
                }
                else
                {
                    MessageBox.Show(result, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en el proceso de cotización.\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public void Registrar_Clientes()
        {
            int res = 0;

            pBE_clientes    = new BE_clientes();
            pBL_clientes    = new BL_Clientes();
            pBE_clientes.ID = Convert.ToInt32(txt_Codigo_Cliente.Text);
            pBE_clientes.oBE_Tipo_Documento.ID = Convert.ToInt32(cbo_Clientes_Documento.SelectedValue);
            pBE_clientes.Str_num_documento     = txt_Documento_Cliente.Text;
            pBE_clientes.Str_nom_cliente       = txt_Clientes_RazonSocial.Text;
            pBE_clientes.Str_direccion_cliente = txt_Clientes_Direccion.Text;
            pBE_clientes.oBE_Departamento.ID   = Convert.ToInt16(cbo_Clientes_Departamento.SelectedValue);
            pBE_clientes.oBE_Provincia.ID      = Convert.ToInt32(cbo_Clientes_Provincia.SelectedValue);
            pBE_clientes.oBE_Distrito.ID       = Convert.ToInt32(cbo_Clientes_Distrito.SelectedValue);
            pBE_clientes.Str_v_ubigeo          = txt_Clientes_Ubigeo.Text;
            if (chk_Clientes_ProVigentes.Checked == true)
            {
                pBE_clientes.Int_chk_promo_vigentes = 1;
            }
            else
            {
                pBE_clientes.Int_chk_promo_vigentes = 0;
            }
            if (chk_Clientes_VentaCredito.Checked == true)
            {
                pBE_clientes.Int_chk_aceptar_vtas_credito = 1;
            }
            else
            {
                pBE_clientes.Int_chk_aceptar_vtas_credito = 0;
            }
            if (txt_Clientes_LineaCredito.Text.Length == 0)
            {
                pBE_clientes.Dcm_linea_credito = 0;
            }
            else
            {
                pBE_clientes.Dcm_linea_credito = Convert.ToDecimal(txt_Clientes_LineaCredito.Text.Replace(".", ","));
            }

            if (txt_Clientes_CreditoUtilizado.Text.Length == 0)
            {
                pBE_clientes.Dcm_credito_utilizado = 0;
            }
            else
            {
                pBE_clientes.Dcm_credito_utilizado = Convert.ToDecimal(txt_Clientes_CreditoUtilizado.Text.Replace(".", ","));
            }

            if (txt_Clientes_CreditoDisponible.Text.Length == 0)
            {
                pBE_clientes.Dcm_credito_disponible = 0;
            }
            else
            {
                pBE_clientes.Dcm_credito_disponible = Convert.ToDecimal(txt_Clientes_CreditoDisponible.Text.Replace(".", ","));
            }


            if (Convert.ToInt32(txt_Codigo_Cliente.Text) == 0)
            {
                pBE_clientes.IDUsuarioCreacion = 1;
                res = BL_Clientes.Registrar_clientes(pBE_clientes);
            }
            else
            {
                pBE_clientes.IDUsuarioModificacion = 1;
                res = BL_Clientes.Actualizar_clientes(pBE_clientes);
            }
        }
Exemple #17
0
        private void procesarCompra()
        {
            forma_pago = cboFormaPago.SelectedValue.ToString();

            Ent_Venta venta = new Ent_Venta();

            venta.nro_doc         = int.Parse(correlativo);
            venta.nro_doc_str     = lblSerie.Text;
            venta.cod_tienda      = cod_tienda;
            venta.tipo_venta      = tipo_venta;
            venta.forma_pago      = forma_pago;
            venta.cantidad        = sumarCantidad();
            venta.monto_total     = total;
            venta.monto_subtotal  = double.Parse(txtSubTotal.Text);
            venta.monto_igv       = double.Parse(txtIGV.Text);
            venta.monto_recibido  = double.Parse(txtRecibido.Text);
            venta.monto_vuelto    = double.Parse(txtVuelto.Text);
            venta.monto_descuento = double.Parse(txtDescuento.Text);
            venta.cliente_doc     = txtDNI.Text;
            venta.cliente         = txtNombres.Text + " " + txtApellidos.Text;
            venta.direccion       = txtDireccion.Text;
            venta.usuario         = ent_usuario.username;

            venta.fecha_inicio = dtpFechaInicio.Value.ToShortDateString();
            venta.fecha_fin    = dtpFechaEntrega.Value.ToShortDateString();

            venta.moneda = cboMoneda.SelectedValue.ToString();

            bool existe_cliente = BL_Clientes.existeCliente(venta.cliente_doc);

            //save customer if doesnt exists
            if (!existe_cliente)
            {
                log.Info("Cliente " + txtDNI.Text + " no existe en la base de datos.", System.Reflection.MethodBase.GetCurrentMethod().Name);

                var confirm = MessageBox.Show("¿Desea guardar el cliente en el sistema?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (confirm == DialogResult.Yes)
                {
                    Ent_Clientes nuevo_cliente = new Ent_Clientes();
                    nuevo_cliente.dni       = txtDNI.Text;
                    nuevo_cliente.nombres   = txtNombres.Text;
                    nuevo_cliente.apellidos = txtApellidos.Text;
                    nuevo_cliente.direccion = txtDireccion.Text;
                    nuevo_cliente.telefono  = txtTelefono.Text;
                    nuevo_cliente.email     = txtEmail.Text;
                    nuevo_cliente.tipo      = (tipo_venta == "FA") ? "E" : "N";
                    nuevo_cliente.posible   = "1";

                    try
                    {
                        string _result = BL_Clientes.insertarCliente(nuevo_cliente);

                        if (_result == "1")
                        {
                            log.Info("Cliente " + nuevo_cliente.dni + " grabado con éxito.", System.Reflection.MethodBase.GetCurrentMethod().Name);
                        }
                        else
                        {
                            log.Error("Error al grabar cliente: " + _result, System.Reflection.MethodBase.GetCurrentMethod().Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Ocurrió un error al grabar al cliente, sin embargo, el proceso de compra continuará.\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        log.Error("Error al grabar cliente: " + ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name);
                    }
                }
                else
                {
                    log.Info("Cliente " + txtDNI.Text + " no se guardará en la base de datos.", System.Reflection.MethodBase.GetCurrentMethod().Name);
                }
            }

            foreach (DataGridViewRow row in dgvProductos.Rows)
            {
                Ent_Productos prd = new Ent_Productos();
                prd.id       = int.Parse(row.Cells["ID"].Value.ToString());
                prd.nombre   = row.Cells["DESCRIPCION"].Value.ToString();
                prd.cantidad = int.Parse(row.Cells["CANTIDAD"].Value.ToString());
                prd.precio   = float.Parse(row.Cells["PU"].Value.ToString());

                venta.lstProductos.Add(prd);
            }

            try
            {
                string result = BL_Ventas.procesarVenta(venta);

                if (result == "1")
                {
                    MessageBox.Show("Venta Realizada con Éxito!.", "Venta", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    InvoicePDF pdf = new InvoicePDF();
                    if (venta.tipo_venta == "BO")
                    {
                        pdf.createBoleta(ent_configuracion, venta);
                    }
                    else
                    {
                        pdf.createFactura(ent_configuracion, venta);
                    }

                    log.Info("Venta " + lblSerie.Text + " realizada con éxito.", System.Reflection.MethodBase.GetCurrentMethod().Name);
                    string resumen =
                        "\n-----------------------------------\n" +
                        "Resumen Venta:\n" +
                        "Serie: " + lblSerie.Text + "\n" +
                        "Tipo Venta: " + tipo_venta + "\n" +
                        "Forma de Pago: " + cboFormaPago.Text + "\n" +
                        "Cliente: " + txtDNI.Text + "\n" +
                        "Productos:\n";
                    foreach (DataGridViewRow item in dgvProductos.Rows)
                    {
                        resumen += "  - " + item.Cells["CODIGO"].Value.ToString() + " | " +
                                   item.Cells["DESCRIPCION"].Value.ToString() + " | " +
                                   item.Cells["CANTIDAD"].Value.ToString() + " | " +
                                   item.Cells["PU"].Value.ToString() + " | " +
                                   item.Cells["IMPORTE"].Value.ToString() + "\n";
                    }
                    resumen +=
                        "Subtotal: " + txtSubTotal.Text + "\n" +
                        "IGV: " + txtIGV.Text + "\n" +
                        "TOTAL: " + txtTotal.Text + "\n" +
                        "Recibido: " + txtRecibido.Text + "\n" +
                        "Vuelto: " + txtVuelto.Text + "\n" +
                        "-----------------------------------\n\n";
                    log.Info(resumen, System.Reflection.MethodBase.GetCurrentMethod().Name);
                    reiniciarVenta();
                }
                else
                {
                    MessageBox.Show(result, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en el proceso de compra.\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                log.Error("Error en el proceso de compra: " + ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name);
            }
        }