Disponible entre dos fechas en rangos/fechas inicial y final) con filtro
Bases datos NoSQL:Mongodb.
APi: ejbjmoordb
Versiòn: 0.19
En algunas ocasiones necesitamos hacer búsquedas en rangos de fechas (inicial y final) adicional de un filtro para determinar si hay disponibilidad de asignarlo en ese intervalo.
Método | Descripción |
Boolean isAvailableBetweenDateHour(Bson filter, String namefieldOfStart, Date valueStart, String namefieldOfEnd, Date valueEnd) | Devuelve true si no hay registros con la condición fecha y hora de inicio y fin y el filtro que se pasa como parámetro |
List<T> notAvailableBetweenDateHour(Bson filter, String namefieldOfStart, Date valueStart, String namefieldOfEnd, Date valueEnd) | Devuelve una lista de los elementos que estan en ese rango de fechas y que cumplan la condición del filtro que se pasa como parámetro |
Esta disponible en las condiciones: a, m
Ejemplo
Formulario
Tenemos un formulario donde se selecciona la fecha de inicio y fin y al seleccionar un vehículo deseamos determinar si esta disponible o no entre esas dos fechas.
Las reglas que usaremos para validar si esta disponible son a,m.
Controller
if (!viajeServices.vehiculoDisponible(viaje)) {
JsfUtil.warningMessage("El vehiculo no esta disponible en ese rango de fecha y hora"));
return null;
}
ViajesServices.java
- Definimos el metodo vehiculoDisponible que recibe un entity de tipo viajes que contiene las fechas de inicio, fin y el entity vehiculo, para que realice la búsqueda.
public Boolean vehiculoDisponible(Viaje viajes) {
try {
return repository.isAvailableBetweenDateHour(eq("vehiculo.idvehiculo",
viajes.getVehiculo().getIdvehiculo()),
viajes.getVehiculo().getIdvehiculo()),
"fechahorainicioreserva", viajes.getFechahorainicioreserva(),
"fechahorafinreserva", viajes.getFechahorafinreserva());
"fechahorafinreserva", viajes.getFechahorafinreserva());
} catch (Exception e) {
JsfUtil.errorDialog("vehiculoDisponible() ", e.getLocalizedMessage().toString());
}
return false;
}
SI LO DESEAMOS HACER DE MANERA MANUAL VALIDANDO LAS DIVERSAS CONDICIONES
public Boolean vehiculoDisponible(Viaje viajes) {
try {
//Vehiculos en viajes
Integer count = repository.count();
if (count.equals(0)) {
return true;
}
//inicio
Bson b= Filters.and(
Filters.gt("fechahorainicioreserva", viajes.getFechahorainicioreserva()),
Filters.lt("fechahorainicioreserva", viajes.getFechahorafinreserva()),
Filters.gt("fechahorafinreserva", viajes.getFechahorainicioreserva()),
Filters.gt("fechahorafinreserva", viajes.getFechahorafinreserva())
);
Bson c_e_f_g_h_l= Filters.or(
Filters.eq("fechahorainicioreserva", viajes.getFechahorainicioreserva()),
Filters.eq("fechahorainicioreserva", viajes.getFechahorafinreserva()),
Filters.eq("fechahorafinreserva", viajes.getFechahorainicioreserva()),
Filters.eq("fechahorafinreserva", viajes.getFechahorafinreserva())
);
Bson j= Filters.and(
Filters.lt("fechahorainicioreserva", viajes.getFechahorainicioreserva()),
Filters.lt("fechahorainicioreserva", viajes.getFechahorafinreserva()),
Filters.gt("fechahoraifinreserva", viajes.getFechahorainicioreserva()),
Filters.eq("fechahoraifinreserva", viajes.getFechahorafinreserva())
);
Bson d= Filters.and(
Filters.gt("fechahorainicioreserva", viajes.getFechahorainicioreserva()),
Filters.lt("fechahorainicioreserva", viajes.getFechahorafinreserva()),
Filters.gt("fechahorafinreserva", viajes.getFechahorainicioreserva()),
Filters.lt("fechahorafinreserva", viajes.getFechahorafinreserva())
);
Bson i= Filters.and(
Filters.lt("fechahorainicioreserva", viajes.getFechahorainicioreserva()),
Filters.lt("fechahorainicioreserva", viajes.getFechahorafinreserva()),
Filters.gt("fechahorafinreserva", viajes.getFechahorainicioreserva()),
Filters.gt("fechahorafinreserva", viajes.getFechahorafinreserva())
);
Bson k= Filters.and(
Filters.lt("fechahorainicioreserva", viajes.getFechahorainicioreserva()),
Filters.lt("fechahorainicioreserva", viajes.getFechahorafinreserva()),
Filters.gt("fechahorafinreserva", viajes.getFechahorainicioreserva()),
Filters.lt("fechahorafinreserva", viajes.getFechahorafinreserva())
);
Bson f =Filters.and(
eq("vehiculo.idvehiculo", viajes.getVehiculo().getIdvehiculo()),
or(b,c_e_f_g_h_l,d,i,j,k)
);
List<Viaje> list = repository.findBy(and(
eq("vehiculo.idvehiculo", viajes.getVehiculo().getIdvehiculo()),
or(b,c_e_f_g_h_l,d,i,j,k))
);
if (list.isEmpty()) {
return true;
}
} catch (Exception e) {
JsfUtil.errorDialog("vehiculoDisponible() ", e.getLocalizedMessage().toString());
}
return false;
}
Comments