public static List<Vehicule> getAvailableVehiculesByAgence( Date startDate, Date endDate, Agence agence) { List<Vehicule> listVehiculesByAgence = Vehicule.getVehiculesByAgence(agence); List<Vehicule> listAvailableVehicules = new ArrayList<Vehicule>(); List<Session> listSessionsByAgence = Session.getSessionsByAgence(agence); List<Revision> listRevisionsByVehicule; Calendar calendar = new GregorianCalendar(); Date startRevision; Date endRevision; for (Vehicule vehicule : listVehiculesByAgence) { boolean isAvailable = true; listRevisionsByVehicule = Revision.getRevisionsByVehicule(vehicule); for (Revision revision : listRevisionsByVehicule) { startRevision = revision.date; calendar.setTime(revision.date); calendar.add(Calendar.DATE, 7); endRevision = calendar.getTime(); if (startDate.equals(startRevision) || endDate.equals(startRevision) || startDate.equals(endRevision) || endDate.equals(endRevision) || (startDate.after(startRevision) && startDate.before(endRevision)) || (endDate.after(startRevision) && endDate.before(endRevision))) { isAvailable = false; } } if (isAvailable) { for (Session session : listSessionsByAgence) { if (startDate.equals(session.dateDepart) || endDate.equals(session.dateDepart) || startDate.equals(session.dateFin) || endDate.equals(session.dateFin) || (startDate.after(session.dateDepart) && startDate.before(session.dateFin)) || (endDate.after(session.dateDepart) && endDate.before(session.dateFin))) { if (session.vehicule.id == vehicule.id) { isAvailable = false; } } } } if (isAvailable) { listAvailableVehicules.add(vehicule); } } return listAvailableVehicules; }