public static List<Mensalidade> getListaMensalidadeEmAberto(String nome, Date data){
        List<Mensalidade> lista = new ArrayList();

        Connection conn = Conexao.getConexao();
        
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Mensalidade mens = null;
       
        try {
                String sql = "Select C.Codigo, C.Nome, P.Valor from Clientes C, Planos P " +
                             "where P.Codigo = C.Plano and C.DataCadastro <= ?";
               
                if (nome != null) {
                    sql += " and C.Nome like '%" + nome + "%'";
                }
                
                if (data != null) {
                    sql += " and (not C.Codigo in (Select M.Cliente from MensalidadesPagas M " +
                           " where M.DataRef = ?))"; 
                           //" where Extract(Month from M.DataRef) = Extract(Month from ?) and " +
                           //"       Extract(Year from M.DataRef) = Extract(Year from ?)))";
                }
                
                sql += " Order by C.Nome";
                
                stmt = conn.prepareStatement(sql);
                
                if (data != null) {
                    stmt.setDate(1, new java.sql.Date(data.getTime()));
                    stmt.setDate(2, new java.sql.Date(data.getTime()));
                    //stmt.setDate(3, new java.sql.Date(data.getTime()));
                }
                
                rs = stmt.executeQuery();
                
                while (rs.next()) {
                    mens = new Mensalidade(); 
                    mens.setCodigo(rs.getInt("Codigo"));                    
                    mens.setCliente(ClienteDAO.getCliente(rs.getInt("codigo")));
                    mens.setValorpago(rs.getDouble("Valor")); 

                    lista.add(mens);
                }
        } catch (SQLException e) {
                System.out.println("ERRO: " + e.getMessage());
        } finally {
                if(stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        System.out.println("ERRO: " + e.getMessage());
                    }
                }
                if(conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        System.out.println("ERRO: " + e.getMessage());
                    }
                }	
        } 
               
        return lista;
    }