/** Retorna el numero de casilleros en el horario en la grilla de horarios entrel el inicio y el final de la clase */ protected static int getRepeatCellCount(List <AulaTime> timesOfDay, AulaData criteria) { int startPos = -1; int endPos = -1; int currPos = -1; foreach (AulaTime aTime in timesOfDay) { currPos++; if (startPos > -1 && endPos > -1) { break; } if (aTime.h == criteria.horaInicio.h && aTime.m == criteria.horaInicio.m) { startPos = currPos; } if (aTime.h == criteria.horaFin.h && aTime.m == criteria.horaFin.m) { endPos = currPos; } } // Debug.Log ("" + criteria.horaFin.h + ":" + criteria.horaFin.m + " -- " + endPos + " " + startPos + " = " + (endPos - startPos)); return(endPos - startPos - 1); }
/** Reorganiza la informacion en forma de agenda semanala */ protected static void fillWeeklySchedule(int aulaID, int quarter, bool allTimesOfDays) { // Obtener las lineas de la tabla (8:00, 8:30, 9:00, 9:30... etc); List <AulaTime> aulaTimes = getTimesOfDay(); // Iterar por los dias de la semana de Lun a Sab Dictionary <int, Dictionary <AulaTime, AulaData> > days = new Dictionary <int, Dictionary <AulaTime, AulaData> > (); foreach (int day in DAYS_OF_WEEK) { // Por cada horario crear la celda y agregarlo al día Dictionary <AulaTime, AulaData> aCell = new Dictionary <AulaTime, AulaData> (); // Si se detecto el inicio de una clase, entonces "rellenar" o repetir celdas hasta la finalizacion de la misma int repeatCells = 0; AulaData currentAulaData = null; foreach (AulaTime aTime in aulaTimes) { // Debug.Log ("day: " + dias[day] + " - hhmm:" + aTime.h + ":" + aTime.m); // Qudan celdas a rellenar? if (repeatCells > 0) { repeatCells--; aCell.Add(aTime, currentAulaData); continue; } // Si ya no quedan celdas a rellenar, entonces buscar la clase (puede haber o no clases para el horario actual) AulaData aulaData = findClase(aulaID, quarter, day, aTime.h, aTime.m); if (aulaData != null) { repeatCells = (allTimesOfDays ? getRepeatCellCount(aulaTimes, aulaData) : 0); currentAulaData = aulaData; } aCell.Add(aTime, aulaData); } days.Add(day, aCell); } // Incorporar la actividad del dia a la grilla weeklySchedule[quarter].Add(aulaID, days); }
/** Busca la actividad para el aula, cuatrimestre, dia y hora indicados */ public static AulaData findClase(int aulaID, int quarter, int day, string h, string m) { AulaData retValue = null; // Debug.Log (aulaID + " " + quarter + " " + day + " " + h + " " + m); if (scheduleByAula[quarter] == null || scheduleByAula[quarter] [aulaID] == null || scheduleByAula[quarter] [aulaID].values == null) { return(retValue); } foreach (AulaData aData in scheduleByAula[quarter][aulaID].values) { if (aData.dia == day && aData.horaInicio.h == h && aData.horaInicio.m == m) { // Debug.Log ("Encontrada: " + aulas[aulaID] + ". Titulo:" + aData.titulo + ". " + aulaID + " " + quarter + " " + dias[day] + " " + h + " " + m); // Aprovechamos y le seteamos aulaID y aulaName aData.aulaID = aulaID; aData.aulaName = aulas [aulaID]; retValue = aData; break; } } return(retValue); }