public List<MappedInvoice> findAllUnpaidInvoices(final int userId) {
        final List<MappedInvoice> invoices = new ArrayList<MappedInvoice>();
        
        final String query = Conca.t(
            "select ",
            "   i.id                            as invoiceId, ",
            "   i.due                           as due, ",
            "   i.paid                          as paid, ",
            "   u.id                            as userId, ",
            "   u.username                      as username, ",
            "   u.active                        as active ",
            "from ",
            "   invoice i join user u on (i.userFk = u.id) ",
            "where ",
            "   paid = 0 and due != 0 and ",
            "   u.id = ?"
        );
        
        try {
            List<Object> params = new ArrayList<Object>();
            params.add(userId);
            
            List<Class<?>> types = new ArrayList<Class<?>>();
            types.add(Integer.class);
            
            final ResultSet rs = execute(query, params, types);
            
            while (rs.next()) {
                final MappedInvoice invoice = new MappedInvoice();
                invoice.setId(rs.getInt("invoiceId"));
                invoice.setDue(rs.getFloat("due"));
                invoice.setPaid(rs.getFloat("paid"));
                invoice.getUser().setId(rs.getInt("userId"));
                invoice.getUser().setUsername(rs.getString("username"));
                invoice.getUser().setActive(rs.getInt("active") == 1);
                
                invoice.getDrinks().addAll(findAllDrinkForInvoice(invoice.getId()));
                
                invoices.add(invoice);
            }
            
        } catch (Exception e) {
            log4jLogger.error(Conca.t("error occurred while attempting to find invoices for user with id ", userId), e);
        }
        
        return invoices;
    }