// Busca los turnos libres para la fecha y horas indicadas en el control // y para el cliente seleccionado private void btnBuscarLibres_Click(object sender, EventArgs e) { int hI = int.Parse(tiHoraITurnoLibre.Text.Split(':')[0]); int mI = int.Parse(tiHoraITurnoLibre.Text.Split(':')[1]); int hF = int.Parse(tiHoraFTurnoLibre.Text.Split(':')[0]); int mF = int.Parse(tiHoraFTurnoLibre.Text.Split(':')[1]); int duracion = int.Parse(tiDuracion.Text); if (cmbClienteBuscarTurno.SelectedItem == null) { MessageBox.Show("Debe seleccionar algun cliente en el combo clientes"); return; } long idCliente = ((Cliente)cmbClienteBuscarTurno.SelectedItem).Id; //DisponibilidadSemanal o = new DisponibilidadSemanal(true); TimeSpan horaInicial = new TimeSpan(hI, mI, 0); TimeSpan horaFinal = new TimeSpan(hF, mF, 0); DateTime fechaI = new DateTime(dpDiaTurnosLibres.Value.Year, dpDiaTurnosLibres.Value.Month, dpDiaTurnosLibres.Value.Day, hI, mI, 0, 0); DateTime fechaF = new DateTime(dpDiaTurnosLibres.Value.Year, dpDiaTurnosLibres.Value.Month, dpDiaTurnosLibres.Value.Day, hF, mF, 0, 0); lstTurnosLibres.DataSource = null; lstTurnosLibres.DataSource = Recursos.ObtenerDisponibilidad(idCliente, fechaI, fechaF, duracion); return; }
/*Busca turnos para el cliente, fecha y horas seleccionada y lo regresa en formato json * Esto lo hace pidiendo los recursos disponibles para ese dia y pivoteando la tabla para tener * como clave el horario del turno y una lista de los id's disponibles para ese horario */ private void btnCalendarioDisponibilidadTest_Click(object sender, EventArgs e) { #region Lectura parametros de los campos y obtiene los recursos disponibles en ese horario int hI = int.Parse(tiHoraITurnoLibre.Text.Split(':')[0]); int mI = int.Parse(tiHoraITurnoLibre.Text.Split(':')[1]); int hF = int.Parse(tiHoraFTurnoLibre.Text.Split(':')[0]); int mF = int.Parse(tiHoraFTurnoLibre.Text.Split(':')[1]); int duracion = int.Parse(tiDuracion.Text); if (cmbClienteBuscarTurno.SelectedItem == null) { MessageBox.Show("Debe seleccionar algun cliente en el combo clientes"); return; } long idCliente = ((Cliente)cmbClienteBuscarTurno.SelectedItem).Id; TimeSpan horaInicial = new TimeSpan(hI, mI, 0); TimeSpan horaFinal = new TimeSpan(hF, mF, 0); DateTime fechaI = new DateTime(dpDiaTurnosLibres.Value.Year, dpDiaTurnosLibres.Value.Month, dpDiaTurnosLibres.Value.Day, hI, mI, 0, 0); DateTime fechaF = new DateTime(dpDiaTurnosLibres.Value.Year, dpDiaTurnosLibres.Value.Month, dpDiaTurnosLibres.Value.Day, hF, mF, 0, 0); List <TurnoLibre> lTL = Recursos.ObtenerDisponibilidad(idCliente, fechaI, fechaF, 60); #endregion List <Turnos.BO.disponibilidad> lResultado = new List <disponibilidad>(); Dictionary <long, int> dicIDSecuenciales = new Dictionary <long, int>(); int idRecursoCalendario = 0; long idRecursoActual; idRecursoActual = lTL[0].Id; // Recorro todos los turnos libres que vienen en forma de una lista ordenada de NombreRecurso, Hora y si esta libre o no, // la transformo en una lista de horarios con un array de los id's que estan libres en ese horario // los id's tienen que ser comenzando con 0, 1, etc. foreach (TurnoLibre tl in lTL) { if (idRecursoActual == tl.Id) { //Busco todos los recursos que estan libres para esa fecha/hora var idRecursos = from o in lTL where o.Fecha == tl.Fecha && o.Libre select obtenerIDSecuencial(o.Id, ref dicIDSecuenciales); lResultado.Add(new disponibilidad { userId = idRecursos.ToList <int>(), start = tl.Fecha, end = tl.Fecha.AddMinutes(duracion), free = tl.Libre } ); } else { idRecursoActual = tl.Id; idRecursoCalendario++; } } //Transforma el resultado en un string jSon para que lo tome el calendario javascript /* { "start": new Date(year, month, day + 1, 08), "end": new Date(year, month, day + 1, 15), "free": true, userId: [0, 1, 2, 3] }, * {"start": new Date(year, month, day+0, 08), "end": new Date(year, month, day+0, 18, 00), "free": true, userId: [0,1,2,3]}, * {"start": new Date(year, month, day+1, 08), "end": new Date(year, month, day+1, 18, 00), "free": true, userId: [0,3]}, * {"start": new Date(year, month, day+2, 14), "end": new Date(year, month, day+2, 18, 00), "free": true, userId: 1} * ],*/ StringBuilder jResultado = new StringBuilder(); jResultado.Append("["); foreach (disponibilidad oHorario in lResultado) { string sIds = ""; oHorario.userId.ForEach(x => sIds += x.ToString() + ","); sIds = sIds.Remove(sIds.Length - 1, 1); // Recordar que el nro de mes en Javascript comienza con 0! jResultado.Append("{"); jResultado.AppendFormat("\"start\":new Date({0},{1},{2},{3},{4})", oHorario.start.Year, oHorario.start.Month - 1, oHorario.start.Day, oHorario.start.Hour, oHorario.start.Minute); jResultado.AppendFormat(",\"end\":new Date({0},{1},{2},{3},{4})", oHorario.end.Year, oHorario.end.Month - 1, oHorario.end.Day, oHorario.end.Hour, oHorario.end.Minute); jResultado.Append(",\"free\": true, userId: [" + sIds + "]"); jResultado.Append("},"); } jResultado.Remove(jResultado.Length - 1, 1); jResultado.Append("];"); tiJSon.Text = jResultado.ToString(); }