internal async Task<TelegramBotReply> GetRoosterForDocentOrKlas(string command, string[] arguments, User from, RoosterFor roosterFor, bool useUserPreferences = true) { if (roosterFor == null) return Message(from.ID, "Je hebt nog geen klas of docent gekoppeld!\n\rGebruik /klas om een klas te koppelen, of /docent om een docent te koppelen"); var date = DateTime.Now; var userPreferences = PreferenceRegistry.GetUserPreferencesForUser(from); DateTime? restrict = null; switch (command.ToLower()) { case "/rooster": if (arguments != null && arguments.Length > 0) { string[] datesStr = arguments[0].Split('-'); if (datesStr.Length < 2) return WrongDateFormat(from.ID); int[] datesInt = new int[datesStr.Length]; for (var i = 0; i < datesStr.Length; i++) try { datesInt[i] = Convert.ToInt32(datesStr[i]); } catch (FormatException) { return WrongDateFormat(from.ID); } try { date = new DateTime(datesInt.Length >= 3 ? datesInt[2] : date.Year, datesInt[1], datesInt[0]); if (Math.Abs((DateTime.Now - date).TotalDays) > 365) return WrongDateFormat(from.ID); } catch (ArgumentOutOfRangeException) //Thrown door DateTime als er onjuiste gegevens in staan. { return WrongDateFormat(from.ID); } if (arguments?.Length > 1 && arguments[1] == "week") date = date.WeekendDate(); else restrict = date; } else { date = date.WeekendDate(); } break; case "/vandaag": restrict = date; break; case "/morgen": var morgen = date.AddDays(1); date = morgen; restrict = morgen; break; case "/volgendeweek": date = date.WeekendDate().AddDays(7); break; default: return Message(from.ID, "Er is iets fout gegaan bij het verwerken van je verzoek"); } var result = useUserPreferences ? await GetResult(userPreferences, date, restrict) : await GetResult(roosterFor, date, restrict); var rooster = result.Rooster; if (rooster == null) return Message(from.ID, result != null ? result.ErrorMessage : "Er is iets fout gegaan bij het ophalen van het rooster."); else if (CountWithoutIgnoredLessen(rooster.Lessen, PreferenceRegistry.GetUserPreferencesForUser(from)) == 0) { string value = null; switch (command.ToLower()) { case "/rooster": value = "deze week"; break; case "/vandaag": value = "vandaag"; break; case "/morgen": value = "morgen"; break; case "/volgendeweek": value = "volgende week"; break; } return Message(from.ID, $"Je hebt {value} geen lessen"); } return FormatRoosterResponse(rooster,from); }
private async Task<RoosterFetchResult> GetResult(RoosterFor roosterFor, DateTime date, DateTime? restrict = null) => await WindesheimRoosterConvertor.GetRooster(roosterFor, date, restrictToDate: restrict);