public void AsignaSesionesOtrosSubmodulos(int hora_inicial, int n_horas, int horas_asignadas, ClaseTeoricaInfo clase, ListaSesiones lista_sesiones, long sesiones_asignadas) { for (int i = horas_asignadas; i < n_horas; i++) { //intentar buscar un submodulo del mismo modulo que la clase asignada //con un orden secundario superior, que el instructor sea el mismo e //intentar asignarla al hueco ClaseTeoricaInfo cl_aux = null; foreach (ClaseTeoricaInfo clase_aux in _teoricas) { if (clase_aux.OidModulo == clase.OidModulo && clase_aux.OidSubmodulo != clase.OidSubmodulo //&& clase_aux.OrdenSecundario >= clase.OrdenSecundario && clase_aux.EEstadoClase == EEstadoClase.NoProgramada) { cl_aux = clase_aux; break; } } if (cl_aux != null) { AsignaSesion(cl_aux, hora_inicial + i, 1, lista_sesiones, sesiones_asignadas); } } }
public int GetSiguienteSesionLibre(out int n_horas, int hora_inicial, ListaSesiones lista_sesiones) { n_horas = 0; for (int i = hora_inicial; i < lista_sesiones.Count; i++) { if (lista_sesiones[i].EEstadoClase == EEstadoClase.NoProgramada && lista_sesiones[i].Activa) { int indice_hora = i % 14; for (int j = 0; j < _duracion_sesiones.Count; j++) { if (_duracion_sesiones[j].Contains(indice_hora)) { n_horas = 0; for (int k = 0; k <= j; k++) { if (lista_sesiones[i + j].EEstadoClase != EEstadoClase.NoProgramada || !lista_sesiones[i + j].Activa) { n_horas++; return(i); } n_horas++; } return(i); } } } } return(-1); }
/// <summary> /// Comprueba que sea posible asignar una clase práctica en función de las clases /// teóricas programadas hasta el momento en el horario actual /// </summary> /// <param name="cl"></param> /// <param name="lista"></param> /// <returns></returns> public bool PosibleAsignarPractica(ClasePracticaInfo cl, ListaSesiones lista_sesiones) { bool no_programadas = false; foreach (ClaseTeoricaInfo clase in _teoricas) { if (clase.EEstadoClase == EEstadoClase.Programada) { if ((clase.OidModulo != cl.OidModulo && (clase.OrdenPrimario >= cl.OrdenPrimario || (clase.OrdenPrimario == cl.OrdenPrimario && clase.OrdenSecundario >= cl.OrdenSecundario) || (clase.OrdenPrimario == cl.OrdenPrimario && clase.OrdenSecundario == cl.OrdenSecundario && clase.OrdenTerciario >= cl.OrdenTerciario))) || (clase.OidModulo == cl.OidModulo && clase.OrdenPrimario == cl.OrdenPrimario)) { return(true); } } else { no_programadas = true; } } //si ya no quedan clases teóricas por programar se puede incluir la práctica return(no_programadas ? false : true); }
public bool AsignaInstructorPractica(ClasePracticaInfo clase, int hora_inicial, int n_horas, ListaSesiones lista_sesiones, long sesiones_asignadas) { AsignaSesion(clase, hora_inicial, n_horas, lista_sesiones, sesiones_asignadas); return(true); }
public bool SesionDisponible(int hora_inicial, int n_horas, ListaSesiones lista_sesiones) { for (int hora = hora_inicial; hora < hora_inicial + n_horas; hora++) { if (lista_sesiones[hora].EEstadoClase != EEstadoClase.NoProgramada) { return(false); } } return(true); }
public int BuscaSesionLibre(int n_horas, ListaSesiones lista_sesiones) { for (int i = 0; i + n_horas - 1 < 75; i++) { if (SesionDisponible(i, n_horas, lista_sesiones)) { return(i); } } return(-1); }
public bool AsignaInstructorTeorica(ClaseTeoricaInfo clase, int hora_inicial, int n_horas, ListaSesiones lista_sesiones, long sesiones_asignadas) { if (AsignaInstructorTeorica2(hora_inicial, n_horas, clase, lista_sesiones, sesiones_asignadas)) { return(true); } return(false); }
/// <summary> /// Función que comprueba que se pueda realizar una práctica en una sesión determinada /// en función del campo Incompatible de la clase práctica /// </summary> /// <param name="lista_sesiones">sesiones del horario actual</param> /// <param name="_instructores_asignados">lista de horarios de la misma semana para otras promociones</param> /// <param name="index">índice de la sesión en la que se va a insertar la clase práctica</param> /// <param name="incompatible">campo Incompatible de la práctica</param> /// <returns></returns> public bool LaboratorioLibre(int index, long laboratorio, ListaSesiones lista_sesiones, long duracion) { //se comprueba el horario actual, por si el otro grupo tuviera una práctica //con el mismo valor de campo Incompatible for (int i = index; i < index + duracion; i++) { if (lista_sesiones[i].Laboratorio == laboratorio) { return(false); } } return(true); }
public bool AsignaSesionPractica(int hora_inicial, out int n_horas, ListaSesiones lista_sesiones, long sesiones_asignadas) { int n_grupo = GetGrupoConMenosPracticas(); n_horas = 5; for (int i = 1; i < _practicas.Count; i++) { int indice_practica = 0; //Bucle para buscar una clase que pueda ir la sesión while (indice_practica < _practicas[n_grupo].Count) { ClasePracticaInfo clase = _practicas[n_grupo][indice_practica]; clase.Grupo = n_grupo; if (clase.EEstadoClase == EEstadoClase.NoProgramada) // aún no está programada { /*if (!PosibleAsignarPracticaHorario(clase)) break; * if (!PosibleAsignarModulo(clase)) break; * if (!PosibleAsignarSubmodulo(clase)) break;*/ if ((lista_sesiones[hora_inicial].OidClasePractica == clase.Oid && lista_sesiones[hora_inicial].Grupo != n_grupo) || !PosibleAsignarPractica(clase, lista_sesiones) || !PosibleAsignarModulo(clase) || !PosibleAsignarSubmodulo(clase) || !PosibleAsignarClase(clase) || (clase.Laboratorio > 0 && !LaboratorioLibre(hora_inicial, clase.Laboratorio, lista_sesiones, clase.Duracion))) { indice_practica++; continue; } if (AsignaInstructorPractica(clase, hora_inicial + (5 - (int)clase.Duracion), (int)clase.Duracion, lista_sesiones, sesiones_asignadas)) { n_horas = (int)clase.Duracion; _practicas_programadas_grupo[n_grupo]++; break; } } indice_practica++; } //Calcula el número del siguiente grupo al que asignarle una clase n_grupo = (n_grupo % (_practicas.Count - 1)) + 1; } return(lista_sesiones[hora_inicial].EEstadoClase == EEstadoClase.Programada); }
public HorarioRpt GetHorarioReport(HorarioInfo item, bool alumno, /*bool autorizado,*/ ClaseTeoricaList teoricas, List <ClasePracticaList> practicas, ClaseExtraList extras, InstructorList instructores, ModuloList modulos, ListaSesiones sesiones, bool print_timestamp, DateTime timestamp) { if (item == null) { return(null); } HorarioRpt doc = new HorarioRpt(); if (instructores == null) { instructores = InstructorList.GetList(false); } if (modulos == null) { modulos = ModuloList.GetList(false); } List <HorarioPrint> pList = new List <HorarioPrint>(); pList.Add(item.GetPrintObject(instructores, modulos)); doc.SetDataSource(pList); FormatReport(doc, sesiones, alumno /*, autorizado*/, teoricas, practicas, extras /*, instructores*/); if (print_timestamp) { doc.SetParameterValue("Timestamp", timestamp.ToString("dd/MM/yy HH:mm:ss")); } else { doc.SetParameterValue("Timestamp", string.Empty); } return(doc); }
public int BuscaSesionPracticaLibre(int n_horas, ListaSesiones lista_sesiones) { for (int i = 0; i + n_horas - 1 < 75; i++) { if (SesionDisponible(i, n_horas, lista_sesiones)) { while (i + n_horas < 75 && SesionDisponible(i + 1, n_horas, lista_sesiones)) { i++; } return(i); } } return(-1); }
public bool AsignaInstructorTeorica2(int hora_inicial, int n_horas, ClaseTeoricaInfo clase, ListaSesiones lista_sesiones, long sesiones_asignadas) { int horas_restantes = 0; if (QuedanClasesSubmodulo(clase, n_horas, out horas_restantes)) { AsignaSesion(clase, hora_inicial, n_horas, lista_sesiones, sesiones_asignadas); } else { AsignaSesion(clase, hora_inicial, horas_restantes, lista_sesiones, sesiones_asignadas); AsignaSesionesOtrosSubmodulos(hora_inicial, n_horas, horas_restantes, clase, lista_sesiones, sesiones_asignadas); } return(true); }
/// <summary> /// Comprueba que no se impartan varias sesiones del mismo módulo el mismo día /// </summary> /// <returns></returns> public bool MismoModuloMismoDia(int indice_horario, ClaseTeoricaInfo clase, ListaSesiones lista_sesiones) { int indice_dia = indice_horario - (indice_horario % 14); int contador = 0; while (contador < 14 && contador + indice_dia < 75) { if (clase.OidModulo == lista_sesiones[indice_dia + contador].OidModulo && indice_dia + contador != indice_horario && lista_sesiones[indice_dia + contador].OidClaseTeorica > 0) { return(true); } contador++; } return(false); }
public static List <ListaSesiones> CargaSesionesProfesores(DateTime fecha, long oid_promocion) { HorarioList horarios = HorarioList.GetList(false); ClasePracticaList practicas = ClasePracticaList.GetList(); if (horarios != null) { List <ListaSesiones> lista = new List <ListaSesiones>(); foreach (HorarioInfo info in horarios) { if (info.FechaInicial.ToShortDateString() == fecha.ToShortDateString() && info.OidPromocion != oid_promocion) { ListaSesiones list = new ListaSesiones(fecha); Horario item = Horario.Get(info.Oid); foreach (Sesion ses in item.Sesions) { foreach (SesionAuxiliar aux in list) { if (ses.Fecha.ToShortDateString() == aux.Fecha.ToShortDateString() && ses.Hora.ToShortTimeString() == aux.Hora.ToShortTimeString()) { aux.OidProfesor = ses.OidProfesor; aux.OidClasePractica = ses.OidClasePractica; if (ses.OidClasePractica != 0) { aux.Incompatible = practicas.GetItem(ses.OidClasePractica).Incompatible; } else { aux.Incompatible = 0; } break; } } } lista.Add(list); item.CloseSession(); } } return(lista); } return(null); }
public void AsignaSesion(ClasePracticaInfo clase, int hora_inicial, int n_horas, ListaSesiones lista_sesiones, long sesiones_asignadas) { clase.EEstadoClase = EEstadoClase.Programada; if (lista_sesiones[hora_inicial].EEstadoClase == EEstadoClase.NoProgramada) { _practicas_semana--; } if (lista_sesiones[hora_inicial].EEstadoClase == EEstadoClase.NoProgramada) { lista_sesiones[hora_inicial].AsignaClaseASesion(clase); } else { lista_sesiones[hora_inicial + 1].AsignaClaseASesion(clase); } for (int indice = hora_inicial; indice < hora_inicial + n_horas; indice++) { if (lista_sesiones[indice].EEstadoClase == EEstadoClase.NoProgramada) { sesiones_asignadas++; lista_sesiones[indice].EEstadoClase = EEstadoClase.Programada; //lista_sesiones[indice].AsignaClaseASesion(clase); } /*else * { * if (indice % 2 == 0) * { * lista_sesiones[indice].AsignaClaseASesion(clase); * } * }*/ } }
public void AsignaSesion(ClaseTeoricaInfo clase, int hora_inicial, int n_horas, ListaSesiones lista_sesiones, long sesiones_asignadas) { clase.EEstadoClase = EEstadoClase.Programada; sesiones_asignadas++; lista_sesiones[hora_inicial].AsignaClaseASesion(clase); int indice_clase = _teoricas.IndexOf(clase) + 1; int asignadas = 1; while (indice_clase < _teoricas.Count && asignadas < n_horas) { if (_teoricas[indice_clase].OidSubmodulo == clase.OidSubmodulo && _teoricas[indice_clase].EEstadoClase == EEstadoClase.NoProgramada) { _teoricas[indice_clase].EEstadoClase = EEstadoClase.Programada; sesiones_asignadas++; lista_sesiones[hora_inicial + asignadas].AsignaClaseASesion(_teoricas[indice_clase]); asignadas++; } indice_clase++; } }
public bool AsignaSesionTeorica(int hora_inicial, int n_horas, ListaSesiones lista_sesiones, long sesiones_asignadas, bool mismo_modulo) { int indice_teorica = 0; //Bucle para buscar una clase que pueda ir la sesión while (indice_teorica < _teoricas.Count) { ClaseTeoricaInfo clase = _teoricas[indice_teorica]; if (clase.EEstadoClase == EEstadoClase.NoProgramada && (!mismo_modulo || (mismo_modulo && !MismoModuloMismoDia(hora_inicial, clase, lista_sesiones)))) // aún no está programada { if (AsignaInstructorTeorica(clase, hora_inicial, n_horas, lista_sesiones, sesiones_asignadas)) { return(true); } } indice_teorica++; } return(false); }
public ClaseHorarioSelectForm(ListaSesiones sesiones, ClaseTeoricaList teoricas, ClasePracticaList practicas, ClaseExtraList extras) : base(true) { InitializeComponent(); List <ClaseTeoricaInfo> t_ordenadas = teoricas.OrdenaLista(); List <ClasePracticaInfo> p_ordenadas = practicas.OrdenaLista(); List <ClaseTeoricaInfo> lista_teoricas = new List <ClaseTeoricaInfo>(); List <ClasePracticaInfo> lista_practicas = new List <ClasePracticaInfo>(); List <ClaseExtraInfo> lista_extras = new List <ClaseExtraInfo>(); foreach (ClaseTeoricaInfo clase in t_ordenadas) { bool esta = false; foreach (SesionAuxiliar item in sesiones) { if (item.OidClaseTeorica == clase.Oid) { if (item.Estado == 3) { esta = true; } break; } } if (!esta) { lista_teoricas.Add(clase); } } foreach (ClasePracticaInfo clase in p_ordenadas) { bool esta = false; foreach (SesionAuxiliar item in sesiones) { if (item.OidClasePractica == clase.Oid && clase.Grupo == item.Grupo) { if (item.Estado == 3) { esta = true; } break; } } if (!esta) { lista_practicas.Add(clase); } } foreach (ClaseExtraInfo clase in extras) { bool esta = false; foreach (SesionAuxiliar item in sesiones) { if (item.OidClaseExtra == clase.Oid) { if (item.Estado == 3) { esta = true; } break; } } if (!esta) { lista_extras.Add(clase); } } Datos_Teoricas.DataSource = lista_teoricas; Datos_Practicas.DataSource = lista_practicas; Datos_Extras.DataSource = lista_extras; this.Text = Resources.Labels.CLASE_HORARIO_TITLE; }
protected void DoHorario() { try { PgMng.Reset(12, 1, Resources.Messages.UPDATING_PROMOCION_HORARIO, this); //Se rellena lo referente al plan if (_planes == null) { return; } if (EntityInfo.Plan == null) { Plan_CB.Text = _planes.GetItem(EntityInfo.OidPlan).Nombre; } else { Plan_CB.Text = EntityInfo.Plan; } PgMng.Grow(string.Empty, "Plan"); //Se rellena lo referente a la promoción if (_promociones == null) { return; } if (EntityInfo.Promocion != string.Empty && EntityInfo.Promocion != null) { Promocion_CB.Text = EntityInfo.Promocion; } else { Promocion_CB.Text = _promociones.GetItem(EntityInfo.OidPromocion).Nombre; } PgMng.Grow(string.Empty, "Promocion"); DateTime hoy = DateTime.Today; // si la fecha del horario que se va a cargar es anterior a la del día en el que se edita // no se tiene en cuenta si las clases sesiones planificadas se han impartido o no para meterlas // en las lista, ya que de ningún modo se va a permitir modificar un horario antiguo if (hoy.Date >= EntityInfo.FechaInicial) { hoy = EntityInfo.FechaInicial; } else { while (hoy.DayOfWeek != DayOfWeek.Monday) { hoy = hoy.AddDays(-1); } } PgMng.Grow(string.Empty, "Hoy"); for (int i = 1; i < 3; i++) { if (_practicas.Count <= i) { _practicas.Add(ClasePracticaList.GetDisponiblesList(EntityInfo.OidPlan, EntityInfo.OidPromocion, EntityInfo.Oid, i)); } } if (_teoricas == null) { _teoricas = ClaseTeoricaList.GetDisponiblesList(EntityInfo.OidPlan, EntityInfo.OidPromocion, EntityInfo.Oid); } if (_extras == null) { _extras = ClaseExtraList.GetDisponiblesList(EntityInfo.OidPromocion, EntityInfo.Oid); } PgMng.Grow(string.Empty, "clases"); _day = Fecha_DTP.Value; while (_day.DayOfWeek != System.DayOfWeek.Monday) { _day = _day.AddDays(-1); } this.Text = Resources.Labels.HORARIO_ADD_TITLE + "De Lunes, " + _day.ToShortDateString() + " A Sábado, " + _day.AddDays(5).ToShortDateString(); if (_day < Fecha_DTP.MinDate) { Fecha_DTP.Value = Fecha_DTP.MinDate; } else { Fecha_DTP.Value = _day; } PgMng.Grow(string.Empty, "Fecha_DTP"); if (_instructores_asignados == null) { _instructores_asignados = Sesion.CargaSesionesProfesores(EntityInfo.FechaInicial, EntityInfo.OidPromocion); } if (_profesores == null) { _profesores = InstructorList.GetList(true); } _disponibilidades = _profesores.GetDisponibilidadesProfesores(_entity.FechaInicial); PgMng.Grow(string.Empty, "Instructores y profesores"); CLB_1.SetItemChecked(0, EntityInfo.H8AM); CLB_1.SetItemChecked(1, EntityInfo.H0); CLB_1.SetItemChecked(2, EntityInfo.H1); CLB_1.SetItemChecked(3, EntityInfo.H2); CLB_1.SetItemChecked(4, EntityInfo.H3); CLB_1.SetItemChecked(5, EntityInfo.H4); CLB_1.SetItemChecked(6, EntityInfo.H5); CLB_1.SetItemChecked(7, EntityInfo.H6); CLB_1.SetItemChecked(8, EntityInfo.H7); CLB_1.SetItemChecked(9, EntityInfo.H8); CLB_1.SetItemChecked(10, EntityInfo.H9); CLB_1.SetItemChecked(11, EntityInfo.H10); CLB_1.SetItemChecked(12, EntityInfo.H11); CLB_1.SetItemChecked(13, EntityInfo.H12); CLB_2.SetItemChecked(0, EntityInfo.Hs0); CLB_2.SetItemChecked(1, EntityInfo.Hs1); CLB_2.SetItemChecked(2, EntityInfo.Hs2); CLB_2.SetItemChecked(3, EntityInfo.Hs3); CLB_2.SetItemChecked(4, EntityInfo.Hs4); PgMng.Grow(string.Empty, "Lista horas"); //Se rellena la fecha Fecha_DTP.Value = EntityInfo.FechaInicial; this.Text = Resources.Labels.HORARIO_ADD_TITLE + "De Lunes, " + EntityInfo.FechaInicial.ToShortDateString() + " A Sábado, " + EntityInfo.FechaInicial.AddDays(5).ToShortDateString(); PgMng.Grow(string.Empty, "string fechas"); //Se rellena el horario if (_lista_sesiones == null) { _lista_sesiones = new ListaSesiones(EntityInfo.FechaInicial); //ResetSesiones(false); PgMng.Grow(string.Empty, "lista sesiones"); Horario.MuestraSesiones(EntityInfo.Sesions, _lista_sesiones, _teoricas, ClasePracticaList.Merge(_practicas[1], _practicas[2]), _extras); } Confirmar_BT.Enabled = true; Marcar_BT.Enabled = true; Generar_BT.Enabled = true; PgMng.Grow(string.Empty, "MuestraSesiones"); if (_combo_clases == null) { _combo_clases = Submodulo.GetComboClases(_teoricas, ClasePracticaList.Merge(_practicas[1], _practicas[2]), _extras); } _combo_clases.Childs = _combo_instructores; Datos_Clases.DataSource = _combo_clases; PgMng.Grow(string.Empty, "combo_clases"); Lunes_LB.Text = "LUNES (" + EntityInfo.FechaInicial.Day.ToString("00") + "/" + EntityInfo.FechaInicial.Month.ToString("00") + ")"; Martes_LB.Text = "MARTES (" + EntityInfo.FechaInicial.AddDays(1).Day.ToString("00") + "/" + EntityInfo.FechaInicial.AddDays(1).Month.ToString("00") + ")"; Miercoles_LB.Text = "MIÉRCOLES (" + EntityInfo.FechaInicial.AddDays(2).Day.ToString("00") + "/" + EntityInfo.FechaInicial.AddDays(2).Month.ToString("00") + ")"; Jueves_LB.Text = "JUEVES (" + EntityInfo.FechaInicial.AddDays(3).Day.ToString("00") + "/" + EntityInfo.FechaInicial.AddDays(3).Month.ToString("00") + ")"; Viernes_LB.Text = "VIERNES (" + EntityInfo.FechaInicial.AddDays(4).Day.ToString("00") + "/" + EntityInfo.FechaInicial.AddDays(4).Month.ToString("00") + ")"; Sabado_LB.Text = "SÁBADO (" + EntityInfo.FechaInicial.AddDays(5).Day.ToString("00") + "/" + EntityInfo.FechaInicial.AddDays(5).Month.ToString("00") + ")"; } finally { PgMng.FillUp(); } }
private static void FormatReport(HorarioRpt rpt, ListaSesiones list, bool alumnos, /*bool autorizado,*/ ClaseTeoricaList teoricas, List <ClasePracticaList> practicas, ClaseExtraList extras /*, * InstructorList instructores*/) { List <string> lista = new List <string>(); lista.Add("Lunes8AM"); lista.Add("Lunes"); lista.Add("Lunes2"); lista.Add("Lunes3"); lista.Add("Lunes4"); lista.Add("Lunes5"); lista.Add("Lunes6"); lista.Add("Lunes7"); lista.Add("Lunes8"); lista.Add("Lunes9"); lista.Add("Lunes10"); lista.Add("Lunes11"); lista.Add("Lunes12"); lista.Add("Lunes13"); lista.Add("Martes8AM"); lista.Add("Martes"); lista.Add("Martes2"); lista.Add("Martes3"); lista.Add("Martes4"); lista.Add("Martes5"); lista.Add("Martes6"); lista.Add("Martes7"); lista.Add("Martes8"); lista.Add("Martes9"); lista.Add("Martes10"); lista.Add("Martes11"); lista.Add("Martes12"); lista.Add("Martes13"); lista.Add("Miercoles8AM"); lista.Add("Miercoles"); lista.Add("Miercoles2"); lista.Add("Miercoles3"); lista.Add("Miercoles4"); lista.Add("Miercoles5"); lista.Add("Miercoles6"); lista.Add("Miercoles7"); lista.Add("Miercoles8"); lista.Add("Miercoles9"); lista.Add("Miercoles10"); lista.Add("Miercoles12"); lista.Add("Miercoles11"); lista.Add("Miercoles13"); lista.Add("Jueves8AM"); lista.Add("Jueves"); lista.Add("Jueves2"); lista.Add("Jueves3"); lista.Add("Jueves4"); lista.Add("Jueves5"); lista.Add("Jueves6"); lista.Add("Jueves7"); lista.Add("Jueves8"); lista.Add("Jueves9"); lista.Add("Jueves10"); lista.Add("Jueves11"); lista.Add("Jueves12"); lista.Add("Jueves13"); lista.Add("Viernes8AM"); lista.Add("Viernes"); lista.Add("Viernes2"); lista.Add("Viernes3"); lista.Add("Viernes4"); lista.Add("Viernes5"); lista.Add("Viernes6"); lista.Add("Viernes7"); lista.Add("Viernes8"); lista.Add("Viernes9"); lista.Add("Viernes10"); lista.Add("Viernes11"); lista.Add("Viernes12"); lista.Add("Viernes13"); lista.Add("Sabado"); lista.Add("Sabado2"); lista.Add("Sabado3"); lista.Add("Sabado4"); lista.Add("Sabado5"); InstructorList instructores = InstructorList.GetList(true); int ultimo = 0; int n_clases = 0; string aux = string.Empty; foreach (SesionAuxiliar info in list) { int indice = list.IndexOf(info); //si la sesión no tienen ninguna clase asignada, se elimina la etiqueta if (info.OidClaseTeorica <= 0 && info.OidClasePractica == 0 && info.OidClaseExtra == 0) { rpt.SetParameterValue(lista[indice], ""); ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = true; } else { //si la sesión tiene una clase asignada una clase teórica if (info.OidClaseTeorica != 0) { ClaseTeoricaInfo teorica = teoricas.GetItem(info.OidClaseTeorica); //si no es la primera clase del día //se comprueba si pertenece a la misma clase que la hora anterior if (indice % 14 != 0 && list[indice - 1].OidClaseTeorica > 0) { bool misma_clase = false; if (teorica.OidModulo == teoricas.GetItem(list[indice - 1].OidClaseTeorica).OidModulo && teorica.OidSubmodulo == teoricas.GetItem(list[indice - 1].OidClaseTeorica).OidSubmodulo && info.OidProfesor == list[indice - 1].OidProfesor) { misma_clase = true; rpt.SetParameterValue(lista[indice], ""); ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = true; if (!alumnos) { InstructorInfo item = instructores.GetItem(info.OidProfesor); string instructor = item.Alias; instructor += Environment.NewLine; int ind = aux.IndexOf(instructor); if (ind == -1) { misma_clase = false; } } else { aux = Environment.NewLine + aux; } if (misma_clase) { ((FieldObject)(rpt.Section3.ReportObjects[lista[ultimo]])).Height = ((FieldObject)(rpt.Section3.ReportObjects[lista[ultimo]])).Height + 720; rpt.SetParameterValue(lista[ultimo], aux); if (n_clases == 1) { ((FieldObject)(rpt.Section3.ReportObjects[lista[ultimo]])).Top += 80; } n_clases++; } } if (!misma_clase) { ModuloInfo modulo = ModuloInfo.Get(teorica.OidModulo, false); aux = Environment.NewLine + modulo.Alias + Environment.NewLine; aux += teorica.Submodulo + Environment.NewLine; if (!alumnos) { InstructorInfo item = instructores.GetItem(info.OidProfesor); string instructor = item.Alias; instructor += Environment.NewLine; aux += instructor; } ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = false; ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Top -= 80; rpt.SetParameterValue(lista[indice], aux); ultimo = indice; n_clases = 1; } } else { ModuloInfo modulo = ModuloInfo.Get(teorica.OidModulo, false); aux = Environment.NewLine + modulo.Alias + Environment.NewLine; aux += teorica.Submodulo + Environment.NewLine; if (!alumnos) { InstructorInfo item = instructores.GetItem(info.OidProfesor); string instructor = item.Alias; instructor += Environment.NewLine; aux += instructor; } ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = false; ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Top -= 80; rpt.SetParameterValue(lista[indice], aux); ultimo = indice; n_clases = 1; } } else { if (info.OidClasePractica != 0) { ClasePracticaInfo practica = practicas[(int)info.Grupo].GetItem(info.OidClasePractica); //if (indice % 14 != 0) { int ind_aux = 1; bool esta = false; bool anterior = false; //if (indice % 14 != 0) //{ while (ind_aux < 5 && (indice - ind_aux) >= 0 && (indice - ind_aux) % 14 < indice % 14) { if (list[indice - ind_aux].OidClasePractica != 0 && practica.OidModulo == practicas[(int)list[indice - ind_aux].Grupo].GetItem(list[indice - ind_aux].OidClasePractica).OidModulo && info.OidProfesor == list[indice - ind_aux].OidProfesor && info.Grupo == list[indice - ind_aux].Grupo) //comprobación de grupo por si fuera la misma práctica para los dos grupos { esta = true; break; } if (list[indice - ind_aux].OidClasePractica != 0) { anterior = true; } ind_aux++; } ind_aux = 1; bool posterior = false; while (ind_aux < 5 && (indice + ind_aux) % 14 > indice % 14 && (indice + ind_aux) < 75) { if (list[indice + ind_aux].OidClasePractica != 0 && list[indice + ind_aux].OidClasePractica != list[indice].OidClasePractica) { posterior = true; } ind_aux++; } //} if (!esta) { aux = Environment.NewLine + practica.Modulo + Environment.NewLine; aux += practica.Alias + " G" + list[indice].Grupo.ToString() + Environment.NewLine; if (!alumnos) { InstructorInfo item = instructores.GetItem(info.OidProfesor); string instructor = item.Alias; instructor += Environment.NewLine; aux += instructor; aux += Environment.NewLine; aux += "5H"; } rpt.SetParameterValue(lista[indice], aux); if (!anterior) { if (posterior) { ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Height = 1560; } else { ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Height = 3200; } } else { int top = 0; int i = 1; while (i < 5 && indice - i >= 0) { if (!((FieldObject)(rpt.Section3.ReportObjects[lista[indice - i]])).ObjectFormat.EnableSuppress) { top = ((FieldObject)(rpt.Section3.ReportObjects[lista[indice - i]])).Top + 1560 + 240; break; } i++; } ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Height = 1560; ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Top = top; } ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = false; } else { rpt.SetParameterValue(lista[indice], ""); ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = true; } } } else { ClaseExtraInfo extra = extras.GetItem(info.OidClaseExtra); //si no es la primera clase del día //se comprueba si pertenece a la misma clase que la hora anterior if (indice % 14 != 0 && list[indice - 1].OidClaseExtra > 0) { bool misma_clase = false; if (extra.OidModulo == extras.GetItem(list[indice - 1].OidClaseExtra).OidModulo && extra.OidSubmodulo == extras.GetItem(list[indice - 1].OidClaseExtra).OidSubmodulo && info.OidProfesor == list[indice - 1].OidProfesor) { misma_clase = true; rpt.SetParameterValue(lista[indice], ""); ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = true; if (!alumnos) { InstructorInfo item = instructores.GetItem(info.OidProfesor); string instructor = item.Alias; instructor += Environment.NewLine; int ind = aux.IndexOf(instructor); if (ind == -1) { misma_clase = false; } } else { aux = Environment.NewLine + aux; } if (misma_clase) { ((FieldObject)(rpt.Section3.ReportObjects[lista[ultimo]])).Height = ((FieldObject)(rpt.Section3.ReportObjects[lista[ultimo]])).Height + 720; rpt.SetParameterValue(lista[ultimo], aux); if (n_clases == 1) { ((FieldObject)(rpt.Section3.ReportObjects[lista[ultimo]])).Top += 80; } n_clases++; } } if (!misma_clase) { ModuloInfo modulo = ModuloInfo.Get(extra.OidModulo, false); aux = Environment.NewLine + modulo.Alias + Environment.NewLine; aux += extra.Submodulo + Environment.NewLine; if (!alumnos) { InstructorInfo item = instructores.GetItem(info.OidProfesor); string instructor = item.Alias; instructor += Environment.NewLine; aux += instructor; } ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = false; ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Top -= 80; rpt.SetParameterValue(lista[indice], aux); ultimo = indice; n_clases = 1; } } else { ModuloInfo modulo = ModuloInfo.Get(extra.OidModulo, false); aux = Environment.NewLine + modulo.Alias + Environment.NewLine; aux += extra.Submodulo + Environment.NewLine; if (!alumnos) { InstructorInfo item = instructores.GetItem(info.OidProfesor); string instructor = item.Alias; instructor += Environment.NewLine; aux += instructor; } ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).ObjectFormat.EnableSuppress = false; ((FieldObject)(rpt.Section3.ReportObjects[lista[indice]])).Top -= 80; rpt.SetParameterValue(lista[indice], aux); ultimo = indice; n_clases = 1; } } } } } }
protected override void DoPromociones() { try { PgMng.Reset(15, 1, Resources.Messages.UPDATING_PROMOCION_HORARIO, this); DateTime hoy = DateTime.Today; // si la fecha del horario que se va a cargar es anterior a la del día en el que se edita // no se tiene en cuenta si las clases sesiones planificadas se han impartido o no para meterlas // en las lista, ya que de ningún modo se va a permitir modificar un horario antiguo if (hoy.Date >= Entity.FechaInicial) { hoy = Entity.FechaInicial; } else { while (hoy.DayOfWeek != DayOfWeek.Monday) { hoy = hoy.AddDays(-1); } } for (int i = 1; i < 3; i++) { ClasePracticaList practicas = ClasePracticaList.GetDisponiblesList(Entity.OidPlan, Entity.OidPromocion, Entity.Oid, i); if (_practicas.Count <= i) { _practicas.Add(practicas); } else { _practicas[i] = practicas; } PgMng.Grow(string.Empty, "Rellena clases prácticas grupo " + i.ToString()); } _teoricas = ClaseTeoricaList.GetDisponiblesList(Entity.OidPlan, Entity.OidPromocion, Entity.Oid); PgMng.Grow(string.Empty, "Rellena clases teóricas"); _extras = ClaseExtraList.GetDisponiblesList(Entity.OidPromocion, Entity.Oid); PgMng.Grow(string.Empty, "Rellena clases extra"); //_combo_clases = Submodulo.GetComboClases(_teoricas, ClasePracticaList.Merge(_practicas[1],_practicas[2]), _extras); //pmg.Grow("combo clases"); //pmg.Grow("Rellena fecha"); while (_day.DayOfWeek != System.DayOfWeek.Monday) { _day = _day.AddDays(-1); } Fecha_DTP.Value = _day; DoSetFecha(); if (Promocion_CB.SelectedItem != null) { //ResetSesiones(false); PgMng.Grow(string.Empty, "reset sesiones"); _profesores = InstructorList.GetInstructoresHorariosList(((ComboBoxSource)Promocion_CB.SelectedItem).Oid, EntityInfo.FechaInicial, EntityInfo.FechaFinal); } if (_profesores != null) { _disponibilidades = _profesores.GetDisponibilidadesProfesores(_day); } PgMng.Grow(string.Empty, "_profesores"); if (Entity.OidPromocion != 0) { PromocionInfo promocion = _promociones.GetItem(Entity.OidPromocion); _entity.Promocion = promocion.Nombre; PlanEstudiosInfo plan = _planes.GetItem(promocion.OidPlan); _entity.Plan = plan.Nombre; PgMng.Grow(string.Empty, "Promociones"); //_profesores = InstructorList.GetInstructoresHorariosList(Entity.OidPromocion); PgMng.Grow(string.Empty, "GetInstructoresHorarioList"); CLB_1.SetItemChecked(0, promocion.H8AM); CLB_1.SetItemChecked(1, promocion.H0); CLB_1.SetItemChecked(2, promocion.H1); CLB_1.SetItemChecked(3, promocion.H2); CLB_1.SetItemChecked(4, promocion.H3); CLB_1.SetItemChecked(5, promocion.H4); CLB_1.SetItemChecked(6, promocion.H5); CLB_1.SetItemChecked(7, promocion.H6); CLB_1.SetItemChecked(8, promocion.H7); CLB_1.SetItemChecked(9, promocion.H8); CLB_1.SetItemChecked(10, promocion.H9); CLB_1.SetItemChecked(11, promocion.H10); CLB_1.SetItemChecked(12, promocion.H11); CLB_1.SetItemChecked(13, promocion.H12); CLB_2.SetItemChecked(0, promocion.HS0); CLB_2.SetItemChecked(1, promocion.HS1); CLB_2.SetItemChecked(2, promocion.HS2); CLB_2.SetItemChecked(3, promocion.HS3); CLB_2.SetItemChecked(4, promocion.HS4); PgMng.Grow(string.Empty, "SetItemChecked"); Entity.CopiaConfiguracion(promocion); } PgMng.Grow(string.Empty, "Inicializa horas disponibles"); if (!_generado) { Generar_BT.Enabled = true; } Instructores_BT.Enabled = true; Planes_BT.Enabled = true; Disponibilidades_BT.Enabled = true; if (_lista_sesiones == null) { _lista_sesiones = new ListaSesiones(Entity.FechaInicial); } RellenaCasillas(); } finally { PgMng.FillUp(); } }
protected void DoSetFecha() { try { if (Fecha_DTP.Value.Date.Equals(Fecha_DTP.MinDate)) { _day = DateTime.Today; } else { _day = Fecha_DTP.Value; } while (_day.DayOfWeek != System.DayOfWeek.Monday) { _day = _day.AddDays(-1); } this.Text = Resources.Labels.HORARIO_ADD_TITLE + "De Lunes, " + _day.ToShortDateString() + " A Sábado, " + _day.AddDays(5).ToShortDateString(); if (_day < Fecha_DTP.MinDate) { Fecha_DTP.Value = Fecha_DTP.MinDate; } else { Fecha_DTP.Value = _day; } Entity.FechaInicial = _day; Entity.FechaFinal = _day.AddDays(5); PgMng.Grow(string.Empty, "Inicializa fecha y ristras"); _lista_sesiones = new ListaSesiones(Entity.FechaInicial); PgMng.Grow(string.Empty, "lista_sesiones"); _instructores_asignados = Sesion.CargaSesionesProfesores(Entity.FechaInicial, Entity.OidPromocion); PgMng.Grow(string.Empty, "instructores_asignados"); ResetSesiones(true); PgMng.Grow(string.Empty, "Reset sesiones"); if (_profesores != null) { _disponibilidades = _profesores.GetDisponibilidadesProfesores(_day); } Generar_BT.Enabled = true; Lunes_LB.Text = "LUNES (" + EntityInfo.FechaInicial.Day.ToString("00") + "/" + Entity.FechaInicial.Month.ToString("00") + ")"; Martes_LB.Text = "MARTES (" + EntityInfo.FechaInicial.AddDays(1).Day.ToString("00") + "/" + Entity.FechaInicial.AddDays(1).Month.ToString("00") + ")"; Miercoles_LB.Text = "MIÉRCOLES (" + EntityInfo.FechaInicial.AddDays(2).Day.ToString("00") + "/" + Entity.FechaInicial.AddDays(2).Month.ToString("00") + ")"; Jueves_LB.Text = "JUEVES (" + EntityInfo.FechaInicial.AddDays(3).Day.ToString("00") + "/" + Entity.FechaInicial.AddDays(3).Month.ToString("00") + ")"; Viernes_LB.Text = "VIERNES (" + EntityInfo.FechaInicial.AddDays(4).Day.ToString("00") + "/" + Entity.FechaInicial.AddDays(4).Month.ToString("00") + ")"; Sabado_LB.Text = "SÁBADO (" + EntityInfo.FechaInicial.AddDays(5).Day.ToString("00") + "/" + Entity.FechaInicial.AddDays(5).Month.ToString("00") + ")"; } catch { return; } }
protected void DoNuevoHorario() { try { PgMng.Reset(10, 1, Resources.Messages.CREANDO_HORARIO, this); if (this is HorarioAddForm && Horario.ExisteHorario(Entity.OidPlan, Entity.OidPromocion, Entity.FechaInicial)) { MessageBox.Show("Ya existe un horario para la promoción y fecha indicadas, si lo desea modifique el que ya existe."); PgMng.FillUp(); return; } profesores_encargados.GetEncargados(Entity.OidPlan, Entity.OidPromocion); PgMng.Grow(); _combo_clases = Submodulo.GetComboClases(_teoricas, ClasePracticaList.Merge(_practicas[1], _practicas[2]), _extras); Datos_Clases.DataSource = _combo_clases; PgMng.Grow(); _instructores_asignados = Sesion.CargaSesionesProfesores(Entity.FechaInicial, Entity.OidPromocion); PgMng.Grow(); if (_profesores == null) { _profesores = InstructorList.GetInstructoresHorariosList(EntityInfo.OidPromocion, EntityInfo.FechaInicial, EntityInfo.FechaFinal); } PgMng.Grow(); CleanAction(); PgMng.Grow(string.Empty, "CleanAction"); if (_generado) { ResetNoConfirmadas(); } PgMng.Grow(string.Empty, "ResetNoConfirmadas"); if (_lista_sesiones == null) { _lista_sesiones = new ListaSesiones(Entity.FechaInicial); } if (!Entity.FechaInicial.Date.Equals(_lista_sesiones[0].Fecha.Date)) { DateTime fecha = Entity.FechaInicial; for (int i = 0; i < 70; i += 14) { _lista_sesiones[i].Fecha = fecha; _lista_sesiones[i + 1].Fecha = fecha; _lista_sesiones[i + 2].Fecha = fecha; _lista_sesiones[i + 3].Fecha = fecha; _lista_sesiones[i + 4].Fecha = fecha; _lista_sesiones[i + 5].Fecha = fecha; _lista_sesiones[i + 6].Fecha = fecha; _lista_sesiones[i + 7].Fecha = fecha; _lista_sesiones[i + 8].Fecha = fecha; _lista_sesiones[i + 9].Fecha = fecha; _lista_sesiones[i + 10].Fecha = fecha; _lista_sesiones[i + 11].Fecha = fecha; _lista_sesiones[i + 12].Fecha = fecha; _lista_sesiones[i + 13].Fecha = fecha; fecha = fecha.AddDays(1); } for (int i = 70; i < 75; i++) { _lista_sesiones[i].Fecha = fecha; } } _lista_sesiones = Entity.SetSesionesActivas(_lista_sesiones); PgMng.Grow(string.Empty, "Entity.SetSesionesActivas"); decimal n_practicas = 11; if (Practicas_CB.Checked) { n_practicas = NPracticas.Value; } HorarioController controlador = new HorarioController(_entity, _lista_sesiones, _teoricas, _practicas, _extras, _profesores, profesores_encargados, _instructores_asignados, _disponibilidades, n_practicas, DiasSuplente.Value); controlador.Rules[(int)TRule.MismoInstructorMismaSesion] = !MismoInstructorMismaSesion_CB.Checked; controlador.Rules[(int)TRule.MismoInstructorMismoDia] = !MismoInstructorMismoDia_CB.Checked; controlador.GeneraHorario(_no_asignables); PgMng.Grow(string.Empty, "Generación de horario"); RellenaCasillas(); PgMng.Grow(string.Empty, "Rellenar Casillas"); Completar_BT.Enabled = false; Marcar_BT.Enabled = true; Clean_BT.Enabled = true; if (this is HorarioEditForm) { Confirmar_BT.Enabled = true; } _generado = true; } catch (Exception ex) { throw ex; } finally { PgMng.FillUp(); } }
public virtual ListaSesiones SetSesionesActivas(ListaSesiones lista_sesiones, DateTime inicio_promocion, DateTime inicio_semana) { if (lista_sesiones != null) { //de lunes a viernes a 1ª hora lista_sesiones[0].Activa = _activas_dia[0]; lista_sesiones[14].Activa = _activas_dia[0]; lista_sesiones[28].Activa = _activas_dia[0]; lista_sesiones[42].Activa = _activas_dia[0]; lista_sesiones[56].Activa = _activas_dia[0]; //de lunes a viernes a 2ª hora lista_sesiones[1].Activa = _activas_dia[1]; lista_sesiones[15].Activa = _activas_dia[1]; lista_sesiones[29].Activa = _activas_dia[1]; lista_sesiones[43].Activa = _activas_dia[1]; lista_sesiones[57].Activa = _activas_dia[1]; //de lunes a viernes a 3ª hora lista_sesiones[2].Activa = _activas_dia[2]; lista_sesiones[16].Activa = _activas_dia[2]; lista_sesiones[30].Activa = _activas_dia[2]; lista_sesiones[44].Activa = _activas_dia[2]; lista_sesiones[58].Activa = _activas_dia[2]; //de lunes a viernes a 4ª hora lista_sesiones[3].Activa = _activas_dia[3]; lista_sesiones[17].Activa = _activas_dia[3]; lista_sesiones[31].Activa = _activas_dia[3]; lista_sesiones[45].Activa = _activas_dia[3]; lista_sesiones[59].Activa = _activas_dia[3]; //de lunes a viernes a 5ª hora lista_sesiones[4].Activa = _activas_dia[4]; lista_sesiones[18].Activa = _activas_dia[4]; lista_sesiones[32].Activa = _activas_dia[4]; lista_sesiones[46].Activa = _activas_dia[4]; lista_sesiones[60].Activa = _activas_dia[4]; //de lunes a viernes a 6ª hora lista_sesiones[5].Activa = _activas_dia[5]; lista_sesiones[19].Activa = _activas_dia[5]; lista_sesiones[33].Activa = _activas_dia[5]; lista_sesiones[47].Activa = _activas_dia[5]; lista_sesiones[61].Activa = _activas_dia[5]; //de lunes a viernes a 7ª hora lista_sesiones[6].Activa = _activas_dia[6]; lista_sesiones[20].Activa = _activas_dia[6]; lista_sesiones[34].Activa = _activas_dia[6]; lista_sesiones[48].Activa = _activas_dia[6]; lista_sesiones[62].Activa = _activas_dia[6]; //de lunes a viernes a 8ª hora lista_sesiones[7].Activa = _activas_dia[7]; lista_sesiones[21].Activa = _activas_dia[7]; lista_sesiones[35].Activa = _activas_dia[7]; lista_sesiones[49].Activa = _activas_dia[7]; lista_sesiones[63].Activa = _activas_dia[7]; //de lunes a viernes a 9ª hora lista_sesiones[8].Activa = _activas_dia[8]; lista_sesiones[22].Activa = _activas_dia[8]; lista_sesiones[36].Activa = _activas_dia[8]; lista_sesiones[50].Activa = _activas_dia[8]; lista_sesiones[64].Activa = _activas_dia[8]; //de lunes a viernes a 10ª hora lista_sesiones[9].Activa = _activas_dia[9]; lista_sesiones[23].Activa = _activas_dia[9]; lista_sesiones[37].Activa = _activas_dia[9]; lista_sesiones[51].Activa = _activas_dia[9]; lista_sesiones[65].Activa = _activas_dia[9]; //de lunes a viernes a 11ª hora lista_sesiones[10].Activa = _activas_dia[10]; lista_sesiones[24].Activa = _activas_dia[10]; lista_sesiones[38].Activa = _activas_dia[10]; lista_sesiones[52].Activa = _activas_dia[10]; lista_sesiones[64].Activa = _activas_dia[10]; //de lunes a viernes a 12ª hora lista_sesiones[11].Activa = _activas_dia[11]; lista_sesiones[25].Activa = _activas_dia[11]; lista_sesiones[39].Activa = _activas_dia[11]; lista_sesiones[53].Activa = _activas_dia[11]; lista_sesiones[67].Activa = _activas_dia[11]; //de lunes a viernes a 13ª hora lista_sesiones[12].Activa = _activas_dia[12]; lista_sesiones[26].Activa = _activas_dia[12]; lista_sesiones[40].Activa = _activas_dia[12]; lista_sesiones[54].Activa = _activas_dia[12]; lista_sesiones[68].Activa = _activas_dia[12]; //de lunes a viernes a 14ª hora lista_sesiones[13].Activa = _activas_dia[13]; lista_sesiones[27].Activa = _activas_dia[13]; lista_sesiones[41].Activa = _activas_dia[13]; lista_sesiones[55].Activa = _activas_dia[13]; lista_sesiones[69].Activa = _activas_dia[13]; //SÁBADO lista_sesiones[70].Activa = _activas_sabado[0]; lista_sesiones[71].Activa = _activas_sabado[1]; lista_sesiones[72].Activa = _activas_sabado[2]; lista_sesiones[73].Activa = _activas_sabado[3]; lista_sesiones[74].Activa = _activas_sabado[4]; SortedBindingList <FestivoInfo> festivos = FestivoList.GetList(inicio_semana, inicio_semana.AddDays(5)); //Se marcar como libres los días establecidos como no lectivos if (festivos != null && festivos.Count > 0) { foreach (SesionAuxiliar aux in lista_sesiones) { if (aux.Activa) { foreach (FestivoInfo festivo in festivos) { if (aux.Fecha.Date >= festivo.FechaInicio.Date && aux.Fecha.Date <= festivo.FechaFin.Date) { aux.Activa = false; break; } } } } } if (inicio_semana < inicio_promocion) { foreach (SesionAuxiliar aux in lista_sesiones) { if (aux.Activa && aux.Fecha.Date < inicio_promocion.Date) { aux.Activa = false; } } } } for (int i = 0; i < 75; i++) { if (!lista_sesiones[i].Activa && lista_sesiones[i].Estado == 1) { lista_sesiones[i].Titulo = "LIBRE"; lista_sesiones[i].Estado = 2; lista_sesiones[i].OidClaseTeorica = -1; } } return(lista_sesiones); }
public ListaSesiones GeneraHorario(int semana, DateTime inicio_promocion) { long sesiones_asignadas = 0; DateTime inicio_semana = inicio_promocion; while (inicio_semana.DayOfWeek != DayOfWeek.Monday) { inicio_semana = inicio_semana.AddDays(-1); } ListaSesiones lista_sesiones = new ListaSesiones(inicio_semana); SetSesionesActivas(lista_sesiones, inicio_promocion, inicio_semana); int n_grupos_activos = 0; for (int i = 1; i < _practicas.Count; i++) { n_grupos_activos += _practicas[i].Count > _practicas_programadas_grupo[i] ? 1 : 0; } _practicas_semana = _n_practicas == 0 ? 6 * n_grupos_activos : _n_practicas * n_grupos_activos; int index_practica = 0; //Se calcula el número de clases ya asignadas poniendo como asignadas las horas que no se van a programar //según las horas seleccionadas foreach (SesionAuxiliar obj in lista_sesiones) { if (obj.Estado > 1) { sesiones_asignadas++; } if ((obj.OidClasePractica != 0 && index_practica == 0) || index_practica > 0 && index_practica < 5) { if (obj.Estado != 3) { obj.Estado = 2; } index_practica++; sesiones_asignadas++; } if (index_practica == 5) { index_practica = 0; } } long num_sesiones_asignadas = 0; long total_asignadas = 0; bool practica_asignada = true; bool teorica_asignada = false; /*do * { * total_asignadas = num_sesiones_asignadas; * * if (semana >= _comienzo_practicas) * { * //CLASES PRACTICAS * practica_asignada = true; * * while (!PracticasTotalesAsignadas() && practica_asignada) * { * //Sesión del sábado * if (SesionDisponible(70, 5, lista_sesiones)) * { * practica_asignada = AsignaSesionPractica(70, 5, lista_sesiones, sesiones_asignadas); * } * * //Resto de sesiones * int hora_incial = BuscaSesionLibre(5, lista_sesiones); * if (hora_incial != -1) * { * practica_asignada = AsignaSesionPractica(hora_incial, 5, lista_sesiones, sesiones_asignadas); * } * else * practica_asignada = false; * * if (practica_asignada) * num_sesiones_asignadas += 5; * } * } * * //TEORICAS * * for (int hora_inicial = 0; hora_inicial < lista_sesiones.Count; hora_inicial++) * { * int n_horas = 0; * hora_inicial = GetSiguienteSesionLibre(out n_horas, hora_inicial, lista_sesiones); * * if (hora_inicial == -1) break; * teorica_asignada = AsignaSesionTeorica(hora_inicial, n_horas, lista_sesiones, sesiones_asignadas, true); * * if (teorica_asignada) * { * num_sesiones_asignadas += n_horas; * break; * } * } * if (!teorica_asignada) * { * for (int hora_inicial = 0; hora_inicial < lista_sesiones.Count; hora_inicial++) * { * int n_horas = 0; * hora_inicial = GetSiguienteSesionLibre(out n_horas, hora_inicial, lista_sesiones); * * if (hora_inicial == -1) break; * teorica_asignada = AsignaSesionTeorica(hora_inicial, n_horas, lista_sesiones, sesiones_asignadas, false); * * if (teorica_asignada) * { * num_sesiones_asignadas += n_horas; * break; * } * } * } * * } while (num_sesiones_asignadas < lista_sesiones.Count - sesiones_asignadas * && total_asignadas != num_sesiones_asignadas);*/ bool teoricas_no_asignadas = false; foreach (ClaseTeoricaInfo ct in _teoricas) { if (ct.EEstadoClase == EEstadoClase.NoProgramada) { teoricas_no_asignadas = true; break; } } if (!teoricas_no_asignadas) { _practicas_semana = 5; } do { total_asignadas = num_sesiones_asignadas; //CLASES PRACTICAS if (semana >= _comienzo_practicas) { practica_asignada = true; while (!PracticasTotalesAsignadas() && practica_asignada) { int n_horas = 0; //Sesión del sábado if (SesionDisponible(70, 5, lista_sesiones)) { practica_asignada = AsignaSesionPractica(70, out n_horas, lista_sesiones, sesiones_asignadas); } //Resto de sesiones int hora_incial = BuscaSesionPracticaLibre(5, lista_sesiones); if (hora_incial != -1) { practica_asignada = AsignaSesionPractica(hora_incial, out n_horas, lista_sesiones, sesiones_asignadas); } else { practica_asignada = false; } if (practica_asignada) { num_sesiones_asignadas += n_horas; } } } //TEORICAS for (int hora_inicial = 0; hora_inicial < lista_sesiones.Count; hora_inicial++) { int n_horas = 0; hora_inicial = GetSiguienteSesionLibre(out n_horas, hora_inicial, lista_sesiones); //if (n_horas == 1 && (hora_inicial+1) < lista_sesiones.Count && lista_sesiones[hora_inicial +1].OidClasePractica != 0) continue; if (hora_inicial == -1) { break; } teorica_asignada = AsignaSesionTeorica(hora_inicial, n_horas, lista_sesiones, sesiones_asignadas, true); if (teorica_asignada) { num_sesiones_asignadas += n_horas; break; } } if (!teorica_asignada) { for (int hora_inicial = 0; hora_inicial < lista_sesiones.Count; hora_inicial++) { int n_horas = 0; hora_inicial = GetSiguienteSesionLibre(out n_horas, hora_inicial, lista_sesiones); if (hora_inicial == -1) { break; } teorica_asignada = AsignaSesionTeorica(hora_inicial, n_horas, lista_sesiones, sesiones_asignadas, false); if (teorica_asignada) { num_sesiones_asignadas += n_horas; break; } } } } while (num_sesiones_asignadas < lista_sesiones.Count - sesiones_asignadas && total_asignadas != num_sesiones_asignadas); return(lista_sesiones); }
public void GeneraCronograma() { int semana = 1; int sesiones = -1; DateTime inicio_semana = _inicio_cronograma; int semanas_no_programadas = 0; while (semanas_no_programadas < 8) { sesiones = _cronograma.Sesiones.Count; ListaSesiones lista = GeneraHorario(semana, inicio_semana); for (int i = 0; i < lista.Count; i++) { if (lista[i].OidClaseTeorica > 0 || lista[i].OidClasePractica > 0) { SesionCronograma sesion = SesionCronograma.NewChild(_cronograma); sesion.MarkItemChild(); _cronograma.Sesiones.Add(sesion); sesion.OidClaseTeorica = lista[i].OidClaseTeorica; sesion.OidClasePractica = lista[i].OidClasePractica; sesion.Semana = semana; sesion.Dia = (int)i / 14 + 1; sesion.Turno = i % 14 + 1; sesion.Numero = 0; sesion.Duracion = string.Empty; sesion.Texto = string.Empty; sesion.Clase = string.Empty; sesion.Modulo = string.Empty; sesion.Fecha = lista[i].Fecha; sesion.Hora = lista[i].Hora; if (sesion.OidClaseTeorica > 0) { ClaseTeoricaInfo teorica = _teoricas.GetItem(sesion.OidClaseTeorica); sesion.Duracion = "1:00"; sesion.Texto = teorica.Alias; sesion.Clase = teorica.Alias; sesion.Modulo = teorica.Modulo; sesion.Submodulo = teorica.Submodulo; sesion.Alias = teorica.Alias; sesion.ETipoClase = ETipoClase.Teorica; sesion.OrdenPrimario = teorica.OrdenPrimario; sesion.OrdenSecundario = teorica.OrdenSecundario; sesion.OrdenTerciario = teorica.OrdenTerciario; } if (sesion.OidClasePractica > 0) { ClasePracticaInfo practica = _practicas[(int)lista[i].Grupo].GetItem(sesion.OidClasePractica); sesion.Duracion = practica.Duracion.ToString() + ":00"; sesion.Texto = practica.Alias + "G" + lista[i].Grupo.ToString(); sesion.Clase = practica.Alias + "G" + lista[i].Grupo.ToString(); sesion.Modulo = practica.Modulo; sesion.Submodulo = practica.Submodulo; sesion.Alias = practica.Alias; sesion.ETipoClase = ETipoClase.Practica; sesion.OrdenPrimario = practica.OrdenPrimario; sesion.OrdenSecundario = practica.OrdenSecundario; sesion.OrdenTerciario = practica.OrdenTerciario; sesion.Grupo = lista[i].Grupo; sesion.Incompatible = practica.Incompatible; } } } semana++; while (inicio_semana.DayOfWeek != DayOfWeek.Monday) { inicio_semana = inicio_semana.AddDays(-1); } inicio_semana = inicio_semana.AddDays(7); if (sesiones == _cronograma.Sesiones.Count) { semanas_no_programadas++; } else { semanas_no_programadas = 0; } if (inicio_semana > _fin_cronograma) { break; } } }
public bool QuedanSesiones(long sesiones_asignadas, ListaSesiones lista_sesiones) { return(sesiones_asignadas < lista_sesiones.Count); }