public Turno getSiguienteHorarioDisponible(Turno turno, Profesional profesional) { GestorTurno gTurnos = new GestorTurno(); Turno turnoNuevo = null; DateTime fecha = turno.Fecha.AddDays(1); bool encontrado = false; foreach (Matricula matricula in profesional.Matriculas) { foreach (Horario horario in matricula.Horarios) { while (fecha.CompareTo(horario.Desde) > 0 && fecha.CompareTo(horario.Hasta) < 0 && !encontrado) { foreach (HorarioDetalle horarioDet in horario.Detalle) { if (fecha.DayOfWeek.ToString() == horarioDet.Dia.DescIngles) { DateTime hora = horarioDet.HoraDesde; int minutoDiferencia = (int)horarioDet.HoraHasta.Subtract(horarioDet.HoraDesde).TotalMinutes; int cantTurnos = minutoDiferencia / horarioDet.Frecuencia; for (int i = 0; i < cantTurnos; i++) { turnoNuevo = gTurnos.buscar(horarioDet, fecha, hora); if (turnoNuevo == null) { turnoNuevo = new Turno(); turnoNuevo.Fecha = fecha; turnoNuevo.Hora = hora; turnoNuevo.EntidadTurno = turno.EntidadTurno; turnoNuevo.EstadoTurno = turno.EstadoTurno; turnoNuevo.HorarioDet = horarioDet; turnoNuevo.Paciente = turno.Paciente; turnoNuevo.TipoTurno = turno.TipoTurno; turnoNuevo.Observacion = turno.Observacion; gTurnos.guardar(turnoNuevo); turno.EstadoTurno = gTurnos.getEstadoXCodigo(EstadoTurno.CANCELADO); gTurnos.guardar(turno); encontrado = true; } if (encontrado) { break; } hora = hora.AddMinutes(horarioDet.Frecuencia); } if (encontrado) { break; } } } if (encontrado) { break; } fecha = fecha.AddDays(1); } if (encontrado) { break; } } if (encontrado) { break; } } return turnoNuevo; }