public EstadoClienteDeudor ObtenerEstadoClienteDeudor(string rut_cliente)
        {
            EstadoClienteDeudor estado = null;

            using (da = new DataAccess.DataAccess())
            {
                da.GenerarComando("select rut_cliente, usuario_autorizador, fecha_autorizacion, usuario_bloqueador, fecha_bloqueo from cliente_fiado where rut_cliente = :rut");
                da.AgregarParametro(":rut", rut_cliente);
                var reader = da.ExecuteReader();
                while (reader.Read())
                {
                    string fecha_bloqueo   = reader["fecha_bloqueo"].ToString();
                    string usuario_bloqueo = reader["usuario_bloqueador"].ToString();
                    estado = new EstadoClienteDeudor
                    {
                        ClienteDeudor      = mantenedorClientes.Read(reader["rut_cliente"].ToString()),
                        UsuarioAutorizador = mantenedorUsuarios.Read(reader["usuario_autorizador"].ToString()),
                        FechaAutorizado    = Convert.ToDateTime(reader["fecha_autorizacion"].ToString()),
                        UsuarioBloqueo     = String.IsNullOrEmpty(usuario_bloqueo) ? null : mantenedorUsuarios.Read(usuario_bloqueo),
                        FechaBloqueo       = String.IsNullOrEmpty(fecha_bloqueo) ? null : (DateTime?)Convert.ToDateTime(fecha_bloqueo)
                    };
                }
            }
            return(estado);
        }
        private bool CambiarEstadoClienteDeudor(string rut_cliente, string id_usuario, bool nuevo_estado)
        {
            bool res = false;
            EstadoClienteDeudor estadoActual = ObtenerEstadoClienteDeudor(rut_cliente);

            #region Caso Autorizar
            if (nuevo_estado)
            {
                if (estadoActual == null) // Cliente no se encuentra registrado como deudor, se autoriza para deudas
                {
                    using (da = new DataAccess.DataAccess())
                    {
                        da.GenerarComando(@"insert into cliente_fiado(rut_cliente, usuario_autorizador, fecha_autorizacion)
                                            values (:rut, :usuario, :fecha)");
                        da.AgregarParametro(":rut", rut_cliente);
                        da.AgregarParametro(":usuario", id_usuario);
                        da.AgregarParametro(":fecha", DateTime.Now, DbType.Date);
                        res = da.ExecuteNonQuery() > 0;
                    }
                }
                else if (estadoActual.FechaBloqueo == null) // Cliente ya se encuentra registrado como deudor habilitado
                {
                    res = true;
                }
                else // Cliente se encuentra registrado como deudor no habilitado, no es posible desbloquear
                {
                    res = false;
                }
            }
            #endregion

            #region Caso Revocar
            else
            {
                if (estadoActual == null) // Cliente no se encuentra registrado como deudor, no se puede bloquear en forma preventiva
                {
                    res = false;
                }
                else if (estadoActual.FechaBloqueo != null) // Cliente se encuentra registrado como deudor habilitado, se revoca autorizacion
                {
                    using (da = new DataAccess.DataAccess())
                    {
                        da.GenerarComando(@"update cliente_fiado set usuario_bloqueador = :usuario, fecha_bloqueo = :fecha where rut_cliente = :rut)");
                        da.AgregarParametro(":usuario", id_usuario);
                        da.AgregarParametro(":fecha", DateTime.Now, DbType.Date);
                        da.AgregarParametro(":rut", rut_cliente);
                        res = da.ExecuteNonQuery() > 0;
                    }
                }
                else // Cliente se encuentra registrado como deudor no habilitado, ya fue bloqueado
                {
                    res = true;
                }
            }
            #endregion

            return(res);
        }