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);
                }
            }
        }
        /// <summary>
        /// Función que devuelve el nombre del módulo a la que pertenece una clase a partir del
        /// Oid y el tipo de la misma
        /// </summary>
        /// <param name="oid"></param>
        /// <param name="tipo"></param>
        /// <param name="teoricas"></param>
        /// <param name="practicas"></param>
        /// <param name="extras"></param>
        /// <param name="modulos"></param>
        /// <returns></returns>
        public string ObtieneNombreModulo(long oid, long tipo, ModuloList modulos)
        {
            long oid_clase  = oid;
            long oid_modulo = 0;

            if (oid_clase < 0)
            {
                return(string.Empty);
            }

            if (tipo.Equals(0))
            {
                ClaseTeoricaInfo clase = _teoricas.GetItem(oid_clase);
                oid_modulo = clase.OidModulo;
            }
            else
            {
                if (tipo.Equals(1))
                {
                    ClasePracticaInfo clase = null;
                    foreach (ClasePracticaList lista in _practicas)
                    {
                        clase = lista.GetItem(oid_clase);
                        if (clase != null)
                        {
                            break;
                        }
                    }
                    oid_modulo = clase.OidModulo;
                }
            }
            ModuloInfo modulo = modulos.GetItem(oid_modulo);

            return(modulo.Texto);
        }
 /// <summary>
 /// Comprueba que queden clases del mismo submódulo por impartir para rellenar el hueco con el
 /// número de horas de la sesión
 /// </summary>
 /// <param name="clase"></param>
 /// <param name="n_horas"></param>
 /// <returns></returns>
 public bool QuedanClasesSubmodulo(ClaseTeoricaInfo clase,
                                   int n_horas,
                                   out int horas_restantes)
 {
     horas_restantes = (int)(clase.TotalClases - clase.OrdenTerciario + 1);
     return(horas_restantes >= n_horas);
 }
        /// <summary>
        /// Copia los atributos del objeto
        /// </summary>
        /// <param name="source">Objeto origen</param>
        protected void CopyValues(SesionCronogramaInfo source, ModuloList modulos, ClaseTeoricaList teoricas, ClasePracticaList practicas)
        {
            if (source == null)
            {
                return;
            }

            Oid = source.Oid;
            _base.Record.OidCronograma    = source.OidCronograma;
            _base.Record.OidClaseTeorica  = source.OidClaseTeorica;
            _base.Record.OidClasePractica = source.OidClasePractica;
            _base.Record.Semana           = source.Semana;
            _base.Record.Dia    = source.Dia;
            _base.Record.Turno  = source.Turno;
            _base.Record.Numero = source.Numero;
            _base.Record.Texto  = source.Texto;
            _base.Clase         = source.Clase;
            _base.Modulo        = source.Modulo;
            _base.Record.Fecha  = source.Fecha;
            _base.Record.Hora   = source.Hora;
            _base.Duracion      = source.Duracion;

            long oid_modulo = 0;

            if (source.OidClaseTeorica > 0)
            {
                ClaseTeoricaInfo teorica = teoricas.GetItem(source.OidClaseTeorica);
                if (teorica != null)
                {
                    oid_modulo = teorica.OidModulo;
                }
            }

            if (source.OidClasePractica > 0)
            {
                ClasePracticaInfo practica = practicas.GetItem(source.OidClasePractica);
                if (practica != null)
                {
                    oid_modulo = practica.OidModulo;
                }
            }

            if (oid_modulo > 0)
            {
                ModuloInfo modulo = modulos.GetItem(oid_modulo);
                if (modulo != null)
                {
                    _base.Modulo = modulo.NumeroModulo + " " + modulo.Texto;
                }
            }

            //if (_base.Record.OidClaseTeorica != 0)
            //    _base.Duracion = "1";
            //else
            //    _base.Duracion = "5";
        }
        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);
        }
 public void CopyFrom(ClaseTeoricaInfo source)
 {
     Oid               = Convert.ToInt64(source.Tipo.ToString() + source.Oid.ToString("000000"));
     _titulo           = source.Titulo;
     _oid_submodulo    = source.OidSubmodulo;
     _oid_modulo       = source.OidModulo;
     _tipo             = (long)ETipoClase.Teorica;
     _orden_primario   = source.OrdenPrimario;
     _orden_secundario = source.OrdenSecundario;
     _orden_terciario  = source.OrdenTerciario;
     _estado           = source.Estado;
     _incompatible     = 0;
     _modulo           = source.Modulo;
     _submodulo        = source.Submodulo;
     _alias            = source.Alias;
     _grupo            = 0;
 }
        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 void CopyValues(ClaseTeoricaInfo source)
        {
            if (source == null)
            {
                return;
            }

            _record.CopyValues(source.Base.Record);

            _modulo          = source.Modulo;
            _submodulo       = source.Submodulo;
            _codigo_orden    = source.CodigoOrden;
            _estado          = source.Estado;
            _instructor      = source.Instructor;
            _fecha           = source.Fecha;
            _hora            = source.Hora;
            _total_modulo    = source.TotalModulo;
            _total_submodulo = source.TotalSubmodulo;
        }
        protected virtual void CopyFrom(ClaseTeoricaInfo source)
        {
            if (source == null)
            {
                return;
            }

            Oid             = source.Oid;
            OidPlan         = source.OidPlan;
            OidModulo       = source.OidModulo;
            OidSubmodulo    = source.OidSubmodulo;
            OrdenPrimario   = source.OrdenPrimario;
            OrdenSecundario = source.OrdenSecundario;
            Titulo          = source.Titulo;
            Observaciones   = source.Observaciones;
            OrdenTerciario  = source.OrdenTerciario;
            Alias           = source.Alias;
            TotalClases     = source.TotalClases;
            Duracion        = source.Duracion;
        }
        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 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++;
            }
        }
        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;
                            }
                        }
                    }
                }
            }
        }
예제 #14
0
        /// <summary>
        /// Copia los atributos del objeto
        /// </summary>
        /// <param name="source">Objeto origen</param>
        protected void CopyValues(SesionInfo source, InstructorInfo instructor, ClaseTeoricaList teoricas,
                                  ClasePracticaList practicas, ClaseExtraList extras, string clases, long grupo, bool print_alumno)
        {
            if (source == null)
            {
                return;
            }

            Oid = source.Oid;
            _base.Record.OidHorario       = source.OidHorario;
            _base.Record.OidClaseTeorica  = source.OidClaseTeorica;
            _base.Record.OidClasePractica = source.OidClasePractica;
            _base.Record.OidClaseExtra    = source.OidClaseExtra;
            _base.Record.OidProfesor      = source.OidProfesor;
            _base.Record.Fecha            = source.Fecha;
            _base.Record.Hora             = source.Hora;
            _base.Record.Estado           = source.Estado;
            _base.Record.Observaciones    = source.Observaciones;
            _base.Record.Grupo            = grupo;
            _base.Record.Forzada          = source.Forzada;

            if (OidClaseTeorica != 0)
            {
                ClaseTeoricaInfo clase = teoricas.GetItem(OidClaseTeorica);
                if (clase != null)
                {
                    _modulo    = ModuloInfo.Get(clase.OidModulo, false).Alias;
                    _submodulo = SubmoduloInfo.Get(clase.OidSubmodulo, false).Codigo;    // clases;

                    if (instructor != null)
                    {
                        foreach (Submodulo_InstructorInfo item in instructor.Submodulos)
                        {
                            if (item.OidSubmodulo == clase.OidSubmodulo &&
                                item.FechaInicio.Date <= source.Fecha.Date &&
                                item.FechaFin >= source.Fecha.Date
                                )
                            {
                                instructor = InstructorInfo.Get(item.OidInstructorSuplente);
                                break;
                            }
                        }
                        if (instructor != null)
                        {
                            _instructor = instructor.Apellidos + ", " + instructor.NombrePropio;
                        }
                    }
                }
            }
            else
            {
                if (OidClasePractica != 0)
                {
                    ClasePracticaInfo clase = practicas.GetItem(OidClasePractica);
                    if (clase != null)
                    {
                        _modulo    = ModuloInfo.Get(clase.OidModulo, false).Alias;
                        _submodulo = clases;
                        _titulo    = clase.Alias;

                        if (instructor != null)
                        {
                            foreach (Submodulo_InstructorInfo item in instructor.Submodulos)
                            {
                                if (item.OidSubmodulo == clase.OidSubmodulo &&
                                    item.FechaInicio.Date <= source.Fecha.Date &&
                                    item.FechaFin >= source.Fecha.Date
                                    )
                                {
                                    instructor = InstructorInfo.Get(item.OidInstructorSuplente);
                                    break;
                                }
                            }
                            if (instructor != null)
                            {
                                _instructor = instructor.Apellidos + ", " + instructor.NombrePropio;
                            }
                        }
                    }
                }
                else
                {
                    if (OidClaseExtra != 0)
                    {
                        ClaseExtraInfo clase = extras.GetItem(OidClaseExtra);
                        if (clase != null)
                        {
                            _modulo    = ModuloInfo.Get(clase.OidModulo, false).Alias;
                            _submodulo = SubmoduloInfo.Get(clase.OidSubmodulo, false).Codigo;    //clases;

                            if (instructor != null)
                            {
                                foreach (Submodulo_InstructorInfo item in instructor.Submodulos)
                                {
                                    if (item.OidSubmodulo == clase.OidSubmodulo &&
                                        item.FechaInicio.Date <= source.Fecha.Date &&
                                        item.FechaFin >= source.Fecha.Date
                                        )
                                    {
                                        instructor = InstructorInfo.Get(item.OidInstructorSuplente);
                                        break;
                                    }
                                }
                                if (instructor != null)
                                {
                                    _instructor = instructor.Apellidos + ", " + instructor.NombrePropio;
                                }
                            }
                        }
                    }
                }
            }

            if (print_alumno)
            {
                _instructor = string.Empty;
            }
        }
        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;
                }
            }
        }