Muchas gracias por las aclaraciones.
Pues Iván tengo un proyecto hecho en grails 2.3.11, que tampoco es de lo más actual.
Y el código es el siguiente:
Tengo un método en un servicio que realiza un calculo de horario próximo:
/**
* Obtiene cual es la siguiente clase que tiene que dar es decir la unidad (conjunto de profesor, asignatura y grupo)
* @param profesor
* @return
*/
Horario obtenerProximoHorario(Profesor profesor) {
Date hoy = new Date()
Date diaCalculado, diaCalculadoMasCercano, diaCalculadoFestivo
List<Date> festivoList = festivoService.obtenerFestivos()
def horarios = profesor?.horarios?.findAll{ !it.dias.empty }
horarios?.each{ horarioInstance ->
List<DiaHorario> diaHorarioList = horarioInstance.dias.sort{ it.diaSemana }
diaHorarioList.eachWithIndex{ DiaHorario diaHorarioInstance, int counter ->
diaCalculado = fechaService.calcularSiguienteClase(hoy,
diaHorarioInstance.diaSemana?.numero,
diaHorarioInstance.tramoHorario?.endHours,
diaHorarioInstance.tramoHorario?.endMins)
diaCalculadoFestivo = diaCalculado.clone()
while(diaCalculadoFestivo.clearTime() in festivoList){
// es un día festivo calculamos el siguiente día que no sea festivo
diaCalculadoFestivo = fechaService.calcularSiguienteClase(diaCalculado,
diaHorarioInstance.diaSemana?.numero,
diaHorarioInstance.tramoHorario?.endHours,
diaHorarioInstance.tramoHorario?.endMins)
if(diaCalculado == diaCalculadoFestivo){
// en caso de que el calculado vuelva a ser el mismo día porque no haya pasado la hora de la clase
diaCalculadoFestivo = fechaService.calcularSiguienteClase(diaCalculadoFestivo + 1,
diaHorarioInstance.diaSemana?.numero,
diaHorarioInstance.tramoHorario?.endHours,
diaHorarioInstance.tramoHorario?.endMins)
diaCalculado = diaCalculadoFestivo.clone()
}
else{
diaCalculado = diaCalculadoFestivo.clone()
}
}
if(counter == 0) {
// primer iteración
diaCalculadoMasCercano = diaCalculado
diaHorarioInstance.siguienteDiaFin = diaCalculado
horarioInstance.diaHorarioSiguiente = diaHorarioInstance
}
if (diaCalculado?.after(hoy) && diaCalculado?.before(diaCalculadoMasCercano)) {
diaCalculadoMasCercano = diaCalculado
diaHorarioInstance.siguienteDiaFin = diaCalculado
horarioInstance.diaHorarioSiguiente = diaHorarioInstance
}
}
horarioInstance.save()
}
if(horarios && !horarios.empty){
horarios.sort { it.diaHorarioSiguiente?.siguienteDiaFin }
horarios.first()
}
else{
horarios
}
}
La línea que he puesto en amarillo es la que me afecta si la pongo el flush:true o no.
Puesto que cuando entro en la siguiente método que tengo en el controller que cargo la información de:
diaHorarioSiguiente
No esta calculado.
Este es el código de ese método que crea el modelo de datos para las vistas de pasar faltas:
protected createMultiEditModel(mdl = [:]){
MultiplePasarListaCommand command = mdl.command
List <TramoHorario> tramoHorarioList = []
Horario horarioInstance = Horario.read(session.idHorarioCargado)
if (horarioInstance){
command?.horario = command?.horario ?: horarioInstance
// por defecto el diaHorarioSiguiente y obtenemos "fecha" y "tramoHorario"
command?.fecha = command?.fecha ?: horarioInstance?.diaHorarioSiguiente?.siguienteDiaFin
command?.tramoHorario = command?.tramoHorario ?: horarioInstance?.diaHorarioSiguiente?.tramoHorario
Evaluacion.list().each{
command?.evaluacion = fechaService.perteneceAlIntervalo(command?.fecha, it.inicio, it.fin) ? it : null
}
TipoDiaSemana tipoDiaSemana
if (!command?.fecha){
// si la primera vez que acceder por defecto cojemos el dia siguiente que hay clases
tipoDiaSemana = horarioInstance?.diaHorarioSiguiente?.diaSemana
// obtenemos los tramos horarios de la asignatura para ese día por si hay más de un tramo horario
tramoHorarioList = tramoHorarioService.obtenerTramoHorarios(horarioInstance, tipoDiaSemana)
}
else{
Integer dayOfWeek = fechaService.getDayOfWeek(command?.fecha)
tipoDiaSemana = TipoDiaSemana.values()[dayOfWeek-1]
// obtenemos los tramos horarios de la asignatura para ese día por si hay más de un tramo horario
tramoHorarioList = tramoHorarioService.obtenerTramoHorarios(horarioInstance, tipoDiaSemana)
}
params.offset = params.int('offset') ?: 0
params.sort = params['sort'] ?: 'ordenarNombre'
params.order = params['order'] ?: 'asc'
command?.alumnos = command?.alumnos ?: alumnoService.getAllStudentsInHorario(horarioInstance, params)
FaltaAsistencia faltaAsistenciaInstance = FaltaAsistencia.get(command?.faltaSeleccionada)
if(!faltaAsistenciaInstance){
// faltas de ese dia en ese tramo horario
List<FaltaAsistencia> faltaAsistenciaList = faltaAsistenciaService
.obtenerFaltasDiaHora(horarioInstance, command?.fecha, command?.tramoHorario)
command?.faltas = faltaAsistenciaList.collect{ new SinglePasarListaCommand(it) }
}
else{
SinglePasarListaCommand faltaInstance = command?.faltas.find{ it.id == faltaAsistenciaInstance?.id }
command?.faltas.remove(faltaInstance)
command?.faltas << new SinglePasarListaCommand(faltaAsistenciaInstance)
}
}
mdl << [tramoHorarioList: tramoHorarioList]
render view: 'multiEdit', model:mdl
}
Saludos y gracias, ya me comentas que opinas del código. Me gusta aprender de mis errores.