コード例 #1
0
        /// <summary>
        /// Checa si el salon se puede asignar, y si no evalua los cambios que hay que hacer y si los hace
        /// </summary>
        /// <param name="grupo">Grupo a asignar</param>
        /// <param name="s">Salon en que se quiere asignar</param>
        /// <returns></returns>
        private bool AsignaEnSalon(Variable grupo, Salon s)
        {
            try
            {
                //Checa si es apto para el grupo
                if (grupo.CalculaPuntos(s) <= 0 ||
                    grupo.Cupo >= s.Cupo)
                {
                    return(false);
                }

                if (s.Disponible(grupo.horario))
                {
                    grupo.Salon = s;
                    return(true);
                }

                //Obtiene los grupos que estan asignados de este salon
                ListaVariables enSalon = new ListaVariables(Grupos.EnSalon(s.Cve_espacio));

                //Obtiene los grupos con los que se crusaria
                ListaVariables conEmpalme = enSalon.Empalmados(grupo);

                //Compara el maximo puntaje de los grupos contra el que tendria estre grupo
                if (grupo.CalculaPuntos(s) > conEmpalme.MaxPuntos())
                {
                    //Quita la asignacon de los grupos y asigna al nuevo grupo
                    foreach (Variable g in conEmpalme)
                    {
                        g.Salon = null;
                    }

                    if (s.Disponible(grupo.horario))    //Checa si no hay problemas con grupos de otras horas
                    {
                        Grupos.Actualiza(conEmpalme);   //actualiza los grupos en otros horarios

                        grupo.Salon = s;

                        return(true);
                    }
                    else
                    {
                        foreach (Variable g in conEmpalme)
                        {
                            g.Salon = s;
                        }
                    }
                }
            }
            catch (Exception) { }

            return(false);
        }