private List <AgendaProfesional> obtenerAgendasProfesionalEspecialidad() { List <AgendaProfesional> agendasReturn = new List <AgendaProfesional>(); using (SqlConnection cx = Connection.getConnection()) { Especialidad especialidadSeleccionada = this.especialidades.Find(especialidad => especialidad.Descripcion.Equals(this.cmb_especialidad.SelectedItem.ToString())); StringBuilder query = new StringBuilder(ConfigurationManager.AppSettings["query.obtener.agendas.select"].ToString()); query.Append(ConfigurationManager.AppSettings["query.obtener.agendas.group.by"].ToString()); query.Append(" HAVING"); query.Append(ConfigurationManager.AppSettings["query.obtener.agendas.having.profesional"].Replace("{0}", this.profesional.NroDoc.ToString()).ToString()); query.Append(" AND"); query.Append(ConfigurationManager.AppSettings["query.obtener.agendas.having.especialidad"].Replace("{8}", especialidadSeleccionada.Id.ToString())); Console.WriteLine("Query:"); Console.WriteLine(query.ToString()); SqlCommand sqlCmd = new SqlCommand(query.ToString(), cx); sqlCmd.CommandType = CommandType.Text; try { cx.Open(); SqlDataReader sqlReader = sqlCmd.ExecuteReader(); while (sqlReader.Read()) { AgendaProfesional agenda = new AgendaProfesional(); agenda.Dia = new Dia((int)sqlReader["dia_id"], sqlReader["dia"].ToString()); agenda.Especialidad = especialidadSeleccionada; agenda.FechaDesde = DateTime.Parse(sqlReader["fechaDesde"].ToString()).Date; agenda.FechaHasta = DateTime.Parse(sqlReader["fechaHasta"].ToString()).Date; agenda.hhDesde = TimeSpan.Parse(sqlReader["desde"].ToString()); agenda.hhHasta = TimeSpan.Parse(sqlReader["hasta"].ToString()); agendasReturn.Add(agenda); } sqlReader.Close(); sqlReader.Dispose(); } catch (Exception ex) { Console.WriteLine("Se ha producido un error al buscar las agendas para el profesional y la especialidad seleccionados"); Console.WriteLine(ex); MessageBox.Show("Se ha producido un error al buscar las agendas para el profesional y la especialidad seleccionados", "Error al buscar especialidades", MessageBoxButtons.OK, MessageBoxIcon.Error); } } return(agendasReturn); }
private List <DateTime> generarPosiblesTurnosAgenda(DateTime fechaMin, AgendaProfesional agenda, List <DateTime> horariosOcupados, List <DateTime> diasCancelados) { List <Turno> turnosPosibles = new List <Turno>(); List <DateTime> horariosPosibles = new List <DateTime>(); //Seteo la fecha minima DateTime fechaActual = fechaMin; TimeSpan horario; //Mientras esté en el rango de fechas definido por la agenda while (fechaActual <= agenda.FechaHasta) { horario = agenda.hhDesde; DateTime fechaHoraTurnoPosible = fechaActual.Add(horario); //Mientras el horario esté dentro del rango definido por la agenda while (horario < agenda.hhHasta) { //Si el horario no está tomado por alguno de los horariosOcupados, agrego a la lista de posibles turnos if (horariosOcupados.Find(horarioOcupado => horarioOcupado.Equals(fechaHoraTurnoPosible)) == DateTime.MinValue && diasCancelados.Find(diaCancelado => diaCancelado.Equals(fechaHoraTurnoPosible.Date)) == DateTime.MinValue) { horariosPosibles.Add(fechaHoraTurnoPosible); } //Incremento el horario horario = horario.Add(this.incrementoHorario); fechaHoraTurnoPosible = fechaHoraTurnoPosible.Add(this.incrementoHorario); } //Incremento la fecha fechaActual = fechaActual.AddDays(7); } return(horariosPosibles); }