Exemplo n.º 1
0
        public static Schudle GetNearestSchudleData(out DayOfWeek?dayToSchudle)
        {
            DAL dal          = new DAL();
            var schudlesList = dal.GetAllSchudles().Where(s => s.Enabled).ToList();

            if (schudlesList.Count == 0)
            {
                dayToSchudle = DateTime.Now.DayOfWeek;
                return(null);
            }
            else
            {
                DayOfWeek day    = DateTime.Now.DayOfWeek;
                int       hour   = DateTime.Now.Hour;
                int       minute = DateTime.Now.Minute;
                //Si existe un schudle en el mismo dia con hora posterior a la actual
                var today_schudles       = schudlesList.FindAll((s) => s.Days.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToArray().Any((d) => d.ToDayOfWeakEnum() == day));
                var today_closer_schudle = today_schudles.Where(s => s.Hour > hour || (s.Hour == hour && s.Minute > minute)).OrderBy((s) => s.Hour).OrderBy((s) => s.Minute).ToList();
                if (today_closer_schudle != null && today_closer_schudle.Count > 0)
                {
                    dayToSchudle = DateTime.Now.DayOfWeek;
                    return(today_closer_schudle[0]);
                }
                //si hay un solo schudle
                if (schudlesList.Count == 1)
                {
                    dayToSchudle = NextDayInString(schudlesList[0].Days, DateTime.Now.DayOfWeek);
                    return(schudlesList [0]);
                }
                //si existe un schudle un dia despues del actual antes del fin de la semana
                String  day_to_right       = "";
                Schudle more_left_to_right = SchudlerManager.MoreLeftToTheRight(out day_to_right, schudlesList, DateTime.Now.DayOfWeek);
                if (day_to_right.ToDayOfWeakEnum() != DateTime.Now.DayOfWeek && day_to_right != "")
                {
                    dayToSchudle = (DayOfWeek)day_to_right.ToDayOfWeakEnum();
                    return(more_left_to_right);
                }
                //si existe un schudle un dia anterior del actual y ya se verifico q no hay ningun schudle en dia posterior se programa  para la proxima semana.
                String  day_to_left       = "";
                Schudle more_left_to_Left = SchudlerManager.MoreLeftToTheLeft(out day_to_left, schudlesList, DateTime.Now.DayOfWeek);
                dayToSchudle = day_to_left.ToDayOfWeakEnum();
                return(more_left_to_Left);
            }
        }