Para ello agregamos al filtro ne("viajes.idviaje",viaje.getIdviaje());, de esta manera realiza la búsqueda entre los demás registros e ignora el mismo para permitir su edición.
Boolean iseditable = false;
Date fechaHoraInicioReservaanterior= new Date();
Date fechaHoraFinReservaAnterior= new Date();
Vehiculo vehiculoSelected;
Conductor conductorSelected;
@PostConstruct
public void init() {
try {
vehiculoScheduleModel = new DefaultScheduleModel();
conductorScheduleModel = new DefaultScheduleModel();
solicitudScheduleModel = new DefaultScheduleModel();
viajeScheduleModel = new DefaultScheduleModel();
iseditable = false;
vehiculoSelected = new Vehiculo();
conductorSelected = new Conductor();
String action = loginController.get("viaje");
String id = loginController.get("idviaje");
String pageSession = loginController.get("pageviaje");
//Search
if (loginController.get("searchviaje") == null || loginController.get("searchviaje").equals("")) {
loginController.put("searchviaje", "_init");
}
writable = false;
viajeList = new ArrayList<>();
viajeFiltered = new ArrayList<>();
viaje = new Viaje();
viajeDataModel = new ViajeDataModel(viajeList);
if (pageSession != null) {
page = Integer.parseInt(pageSession);
}
Integer c = viajeRepository.sizeOfPage(rowPage);
page = page > c ? c : page;
if (action != null) {
switch (action) {
case "gonew":
viaje = new Viaje();
viaje.setFechahorainicioreserva(DateUtil.getFechaHoraActual());
viaje.setFechahorafinreserva(DateUtil.getFechaHoraActual());
viaje.setActivo("si");
viaje.setLugarpartida("UTP-AZUERO");
viajeSelected = viaje;
writable = false;
break;
case "view":
if (id != null) {
Optional<Viaje> optional = viajeRepository.find("idviaje", Integer.parseInt(id));
if (optional.isPresent()) {
viaje = optional.get();
viajeSelected = viaje;
vehiculoSelected = viaje.getVehiculo();
conductorSelected = viaje.getConductor();
fechaHoraInicioReservaanterior = viaje.getFechahorainicioreserva();
fechaHoraFinReservaAnterior = viaje.getFechahorafinreserva();
iseditable = true;
writable = true;
}
}
break;
case "golist":
move();
break;
}
} else {
move();
}
} catch (Exception e) {
errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
}
}// </editor-fold>
@Override
public String edit() {
try {
if (!viajeServices.isValid(viaje)) {
return "";
}
if (noHayCambioFechaHoras()) {
//si cambia el vehiculo
if (!viaje.getVehiculo().getIdvehiculo().equals(vehiculoSelected.getIdvehiculo())) {
if (!viajeServices.vehiculoDisponible(viaje)) {
JsfUtil.warningMessage(rf.getMessage("warning.vehiculoenviajefechas"));
return null;
}
}
// si cambio el conductor
if (!viaje.getConductor().getIdconductor().equals(conductorSelected.getIdconductor())) {
if (viaje.getConductor().getEscontrol().equals("no")) {
if (!viajeServices.conductorDisponible(viaje)) {
JsfUtil.warningMessage(rf.getMessage("warning.conductoresenviajefechas"));
return null;
}
}
}
} else {
//si cambia el vehiculo
if (!viajeServices.vehiculoDisponibleExcluyendoMismoViaje(viaje)) {
JsfUtil.warningMessage(rf.getMessage("warning.vehiculoenviajefechas"));
return null;
}
// si cambio el conductor
if (viaje.getConductor().getEscontrol().equals("no")) {
if (!viajeServices.conductorDisponibleExcluyendoMismoViaje(viaje)) {
JsfUtil.warningMessage(rf.getMessage("warning.conductoresenviajefechas"));
return null;
}
}
}
viaje.getUserInfo().add(userInfoServices.generateUserinfo(loginController.getUsername(), "update"));
//guarda el contenido actualizado
revisionHistoryTransporteejbRepository.save(revisionHistoryServices.getRevisionHistory(viaje.getIdviaje().toString(), loginController.getUsername(),
"update", "viaje", viajeRepository.toDocument(viaje).toString()));
viajeRepository.update(viaje);
JsfUtil.successMessage(rf.getAppMessage("info.update"));
} catch (Exception e) {
errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
}
return "";
}
public List<Viaje> viajesVehiculoChoques(Vehiculo vehiculo, Date fechahorainicioreserva, Date fechahorafinreserva) {
List<Viaje> list = new ArrayList<>();
try {
Bson filter= Filters.and(eq("vehiculo.idvehiculo",vehiculo.getIdvehiculo()),eq("activo","si"));
return repository.notAvailableBetweenDateHour(filter,
"fechahorainicioreserva", fechahorainicioreserva, "fechahorafinreserva", fechahorafinreserva);
} catch (Exception e) {
JsfUtil.errorDialog("viajesVehiculoChoques() ", e.getLocalizedMessage().toString());
}
return list;
}
public Boolean isValidDate(Viaje viajes) {
try {
if (DateUtil.fechaMenor(viaje.getFechahorafinreserva(), viaje.getFechahorainicioreserva())) {
JsfUtil.warningDialog("Advertencia", "Fecha de regreso menor que la fecha de partida");
return false;
}
if (DateUtil.fechaMenor(viaje.getFechahorafinreserva(), viaje.getFechahorainicioreserva())) {
JsfUtil.warningDialog("Advertencia", "Fecha de regreso menor que la fecha de partida");
return false;
}
if (DateUtil.fechaIgual(viaje.getFechahorafinreserva(), viaje.getFechahorainicioreserva())) {
JsfUtil.warningDialog("Advertencia", "Fecha de regreso es igual a la fecha de partida");
return false;
}
if (DateUtil.getHoraDeUnaFecha(viaje.getFechahorainicioreserva()) == 0
&& DateUtil.getMinutosDeUnaFecha(viaje.getFechahorainicioreserva()) == 0) {
JsfUtil.warningDialog("Advertencia", "La hora de partida no debe ser cero");
return false;
}
if (DateUtil.getHoraDeUnaFecha(viaje.getFechahorafinreserva()) == 0
&& DateUtil.getMinutosDeUnaFecha(viaje.getFechahorafinreserva()) == 0) {
JsfUtil.warningDialog("Advertencia", "La hora de llegada no debe ser cero");
return false;
}
return true;
} catch (Exception e) {
JsfUtil.errorDialog("isValid() ", e.getLocalizedMessage().toString());
}
return false;
}