// Перед закрытием окна обновить глобальные переменные настроек курса пользователя protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { using (var db = new LanguageTutorialContext()) { if (App.oActiveUser != null) { var result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 1); if (result != null) { App.oCourseEnglish = result; } else { App.oCourseEnglish = null; } result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 2); if (result != null) { App.oCourseFrançais = result; } else { App.oCourseFrançais = null; } } } base.OnClosing(e); }
private void btnYES_Click(object sender, RoutedEventArgs e) { using (var db = new LanguageTutorialContext()) { //запилить новый курс или в старом обнулить все? } }
/// <summary> /// Вход в приложение под своим профилем /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button_SignIn_Click(object sender, RoutedEventArgs e) { if ( combobox_Users.SelectedIndex != -1 ) {// Если пользователь выбран, то запоминаем и храним его глобально App.UserChanged = true; App.oActiveUser = combobox_Users.SelectedItem as User; using ( var db = new LanguageTutorialContext() ) { var result = db.Course.Where(course => course.Active == true && course.UserId == App.oActiveUser.Id); if ( result != null ) { foreach ( var c in result ) { if ( c.LanguageId == 1 ) { App.oCourseEnglish = c; } else { App.oCourseFrançais = c; } } } } // Открываем окно главного меню DispatcherTimer Timer = new DispatcherTimer(); Timer.Tick += new EventHandler(TimerMet.OnTimedEvent); Timer.Interval = new TimeSpan(0, (int)(App.oActiveUser.SessionPeriod * 60), 0); App.aTimer = Timer; MainMenuWindow oMainMenuWindow = new MainMenuWindow(); oMainMenuWindow.Show(); this.Close(); } }
private void Grid_Loaded_1(object sender, RoutedEventArgs e) { using (var db = new LanguageTutorialContext()) { var activeLanguages = db.Course.Where(c => c.Active && c.UserId == App.oActiveUser.Id); foreach (var l in activeLanguages) { if (l.LanguageId == 1) { ComboBoxLanguage.Items.Add("English"); ActiveCourseID[0] = l.Id; } else { ComboBoxLanguage.Items.Add("Français"); ActiveCourseID[1] = l.Id; } } } ComboBoxLanguage.SelectedIndex = 0; }
//функция записи в DataGridStatistics сессии за неделю private void WeekStatisticsGenegation(int CourseID, DateTime TopBoundary, DateTime BottomBounadry) { //показ в лэйбле последнего дня отображаемой недели LabelTopWeekBoundary.Content = TopBoundary.ToLongDateString(); //показ в лэйбле первого дня отображаемой недели LabelBottomWeekBoundary.Content = BottomBounadry.ToLongDateString(); if (collection == null) { collection = new ObservableCollection<StatisticsRow>(); DataGridStatistics.ItemsSource = collection; } if (chartElements == null) { chartElements = new ObservableCollection<ChartElement>(); chartStatistics.ItemsSource = chartElements; } //очистка коллекции, хранящей строки для отображения статистики collection.Clear(); chartElements.Clear(); //скрыть надпись, информирующую о том, что на отображаемой //неделе не было сессий LabelEmptyWeek.Visibility = System.Windows.Visibility.Hidden; //переменные, хранящие кол-во баллов за неделю и //кол-во отгаданных слов за неделю //(слово считается, если было отгаданно без ошибок) int PointsForWeek = 0, WordsForWeek = 0; using (var db = new LanguageTutorialContext()) { //выбор всех сессий для текущей недели и данного курса var sessionsForWeek = db.Session.Where(s => s.Datetime <= TopBoundary && s.Datetime >= BottomBounadry && s.CourseId == CourseID).ToList(); if (sessionsForWeek != null) { foreach (var s in sessionsForWeek) { // Заносим в DataGridStatistics новую строку, // содержащую информацию о дате сессии, //кол-ве баллов за сессию и кол-ве отгаданных слов за сессию //(слово считается, если было отгаданно без ошибок) collection.Add(new StatisticsRow() {Date = s.Datetime, PointsQuantity = s.Points, WordsQuantity = s.Words}); //изменяем общее кол-во баллов за неделю с учетом сессии PointsForWeek += s.Points; //добавление значения на график chartElements.Add(new ChartElement() { Date = s.Datetime, PointsQuantity = PointsForWeek }); //изменяем общее кол-во отгаданных слов //за неделю с учетом сессии WordsForWeek += s.Words; } } //если не было сессий на недели if (collection.Count == 0) { //вывести надпись, информирующую о том, что на отображаемой //неделе не было сессий LabelEmptyWeek.Visibility = System.Windows.Visibility.Visible; LabelFullPointsQuantityResult.Content = ""; LabelFullWordsQuantityResult.Content = ""; } else { // вывод кол-ва баллов за неделю LabelFullPointsQuantityResult.Content = Convert.ToString(PointsForWeek); // вывод кол-ва отгаданных слов за неделю LabelFullWordsQuantityResult.Content = Convert.ToString(WordsForWeek); } } }
//Функция, определяющая есть ли сессии до текущей недели private void PreviousWeekExisting(int CourseID, DateTime BottomBoundary) { List<StatisticsRow> coll = new List<StatisticsRow>(); using (var db = new LanguageTutorialContext()) { var nextAllSessions = db.Session.Where(s => s.Datetime <= BottomBoundary && s.CourseId == CourseID).ToList(); foreach (var s in nextAllSessions) { // Заносим в DataGridStatistics новую строку coll.Add(new StatisticsRow() { Date = s.Datetime.Date, PointsQuantity = s.Points, WordsQuantity = s.Words }); } if (coll.Count == 0) { ButtonPreviousWeek.IsEnabled = false; } else { ButtonPreviousWeek.IsEnabled = true; } } }
/// <summary> /// Обновление ComboBox данными из таблицы с пользователями. /// </summary> private void Update_ComboBox_Users() { using (var db = new LanguageTutorialContext()) { combobox_Users.ItemsSource = db.User.ToList(); } }
/// <summary> /// Подтверждение регистрации, создание нового профиля или обновление данных активного профиля /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button_Accept_Click(object sender, RoutedEventArgs e) { if (textbox_Profile_Name.Text.Trim() != "") {// Проверка на имя профиля if (num_Time_Between_Seans.Value != null) {// Проверка на часы меж сеансами if ((check_English.IsChecked == true || check_Français.IsChecked == true)) {// Проверка на то, что выбран хотя бы 1 язык if (App.oActiveUser == null || App.ChangeUser) {// Если активного пользователя нет или пользователь меняет профиль, то создаём новый профиль ( регистрация // Создаём пользователя User nUser = new User() { Name = textbox_Profile_Name.Text.Trim(), SessionPeriod = (double)num_Time_Between_Seans.Value }; // Добавляем пользователя в БД using (var db = new LanguageTutorialContext()) { var result = db.User.FirstOrDefault(user => user.Name == nUser.Name); if (result == null) { db.User.Add(nUser); db.SaveChanges(); } else { MessageBox.Show("Такое имя пользователя уже зарегистрировано!"); return; } } // Делаем текущего пользователя активным App.oActiveUser = nUser; // Создаём привязку пользователя к курсам и сохраняем настройки if (check_English.IsChecked == true) {// Курсы английского using (var db = new LanguageTutorialContext()) { var nCourse = new Course(); nCourse.Active = true; nCourse.WordsPerSession = App.oCourseEnglish.WordsPerSession; nCourse.WordsToStudy = App.oCourseEnglish.WordsToStudy; nCourse.SeansPerDay = App.oCourseEnglish.SeansPerDay; nCourse.TrueAnswers = App.oCourseEnglish.TrueAnswers; nCourse.UserId = nUser.Id; var lang = from Language in db.Language where Language.Id == 0 select Language; nCourse.LanguageId = 1; db.Course.Add(nCourse); db.SaveChanges(); for (int i = 1; i <= App.oCourseEnglish.WordsToStudy; i++) { db.WordQueue.Add(new WordQueue() { TrueAnswers = 0, IsLearned = false, UserId = nUser.Id, WordDictionaryId = i }); } db.SaveChanges(); } } if (check_Français.IsChecked == true) {// Курсы французского using (var db = new LanguageTutorialContext()) { var nCourse = new Course(); nCourse.Active = true; nCourse.WordsPerSession = App.oCourseFrançais.WordsPerSession; nCourse.WordsToStudy = App.oCourseFrançais.WordsToStudy; nCourse.SeansPerDay = App.oCourseFrançais.SeansPerDay; nCourse.TrueAnswers = App.oCourseFrançais.TrueAnswers; nCourse.UserId = nUser.Id; nCourse.LanguageId = 2; db.Course.Add(nCourse); db.SaveChanges(); for (int i = 496; i < 496 + App.oCourseFrançais.WordsToStudy; i++) { db.WordQueue.Add(new WordQueue() { TrueAnswers = 0, IsLearned = false, UserId = nUser.Id, WordDictionaryId = i }); } db.SaveChanges(); } } App.Registered = true; App.UserChanged = true; DispatcherTimer Timer = new DispatcherTimer(); Timer.Tick += new EventHandler(TimerMet.OnTimedEvent); Timer.Interval = new TimeSpan(0, (int)(App.oActiveUser.SessionPeriod * 60), 0); App.aTimer = Timer; this.Close(); } else {// Если есть активный пользователь, то необходимо обновить его настройки // Обновление параметров профиля в БД using (var db = new LanguageTutorialContext()) { var result = db.User.FirstOrDefault(user => user.Name == textbox_Profile_Name.Text.Trim()); if (result != null) { // Если пользователь с таким именем найден if (App.oActiveUser.Name != textbox_Profile_Name.Text.Trim()) {// Если пользователь сменил имя // Делаем прерывание т.к. имя уже занято MessageBox.Show("Такое имя пользователя уже зарегистрировано!"); return; } else { // Если пользователь не сменил имя // Обновляем данные активного пользователя App.oActiveUser.SessionPeriod = (double)num_Time_Between_Seans.Value; // Обновляем базу данных var original = db.User.Find(App.oActiveUser.Id); if (original != null) { original.SessionPeriod = (double)num_Time_Between_Seans.Value; db.SaveChanges(); } } } else { // Если пользователь с таким именем не найден, значит произошла смена имени. // Обновляем данные активного пользователя App.oActiveUser.Name = textbox_Profile_Name.Text.Trim(); App.oActiveUser.SessionPeriod = (double)num_Time_Between_Seans.Value; // Обновляем базу данных var original = db.User.Find(App.oActiveUser.Id); if (original != null) { original.Name = textbox_Profile_Name.Text.Trim(); original.SessionPeriod = (double)num_Time_Between_Seans.Value; db.SaveChanges(); } } } App.aTimer.Stop(); App.aTimer.Interval = new TimeSpan(0, (int)((double)num_Time_Between_Seans.Value * 60), 0); App.aTimer.Start(); // Проверка изменения курсов пользователя bool Course_Finded = false; if (check_English.IsChecked == true) {// Курсы английского //Проверка на наличие у пользователя неактивного курса английского using (var db = new LanguageTutorialContext()) { var result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 1); if (result != null) {// Если нашли курс, то запоминаем это Course_Finded = true; if ((result as Course).Active == false) { // Если курс был неактивен, то делаем его активным (result as Course).Active = true; db.SaveChanges(); } } } if (Course_Finded) {// Если курс найден, то применяем к нему обновлённые настройки using (var db = new LanguageTutorialContext()) { var original = db.Course.Find(App.oCourseEnglish.Id); original.WordsPerSession = App.oCourseEnglish.WordsPerSession; original.WordsToStudy = App.oCourseEnglish.WordsToStudy; original.SeansPerDay = App.oCourseEnglish.SeansPerDay; original.TrueAnswers = App.oCourseEnglish.TrueAnswers; db.SaveChanges(); } } else {// Если курс не найден, но галочка стоит, то необходимо создать курс для пользователя using (var db = new LanguageTutorialContext()) { var nCourse = new Course(); nCourse.Active = true; nCourse.WordsPerSession = 20; nCourse.WordsToStudy = 50; nCourse.SeansPerDay = 5; nCourse.TrueAnswers = 3; nCourse.UserId = App.oActiveUser.Id; nCourse.LanguageId = 1; db.Course.Add(nCourse); db.SaveChanges(); App.oCourseEnglish = nCourse; for (int i = 1; i <= App.oCourseEnglish.WordsToStudy; i++) { db.WordQueue.Add(new WordQueue() { TrueAnswers = 0, IsLearned = false, UserId = App.oActiveUser.Id, WordDictionaryId = i }); } db.SaveChanges(); } } } else {// Если галочки нет //Проверка на наличие у пользователя активного курса английского using (var db = new LanguageTutorialContext()) { var result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 1 && Course.Active == true); if (result != null) { (result as Course).Active = false; db.SaveChanges(); } } } Course_Finded = false; if (check_Français.IsChecked == true) {// Курсы английского //Проверка на наличие у пользователя неактивного курса французского using (var db = new LanguageTutorialContext()) { var result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 2); if (result != null) {// Если нашли курс, то запоминаем это Course_Finded = true; if ((result as Course).Active == false) { // Если курс был неактивен, то делаем его активным (result as Course).Active = true; db.SaveChanges(); } } } if (Course_Finded) {// Если курс найден, то применяем к нему обновлённые настройки using (var db = new LanguageTutorialContext()) { var original = db.Course.Find(App.oCourseFrançais.Id); original.WordsPerSession = App.oCourseFrançais.WordsPerSession; original.WordsToStudy = App.oCourseFrançais.WordsToStudy; original.SeansPerDay = App.oCourseFrançais.SeansPerDay; original.TrueAnswers = App.oCourseFrançais.TrueAnswers; db.SaveChanges(); } } else {// Если курс не найден, но галочка стоит, то необходимо создать курс для пользователя using (var db = new LanguageTutorialContext()) { var nCourse = new Course(); nCourse.Active = true; nCourse.WordsPerSession = 20; nCourse.WordsToStudy = 50; nCourse.SeansPerDay = 5; nCourse.TrueAnswers = 3; nCourse.UserId = App.oActiveUser.Id; nCourse.LanguageId = 2; db.Course.Add(nCourse); db.SaveChanges(); App.oCourseFrançais = nCourse; for (int i = 496; i < 496 + App.oCourseFrançais.WordsToStudy; i++) { db.WordQueue.Add(new WordQueue() { TrueAnswers = 0, IsLearned = false, UserId = App.oActiveUser.Id, WordDictionaryId = i }); } db.SaveChanges(); } } } else {// Если галочки нет //Проверка на наличие у пользователя активного курса французского using (var db = new LanguageTutorialContext()) { var result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 2 && Course.Active == true); if (result != null) { (result as Course).Active = false; db.SaveChanges(); } } } this.Close(); } } else { MessageBox.Show("Язык обучения не выбран!"); } } else { MessageBox.Show("Количество часов не указанно!"); } } else { MessageBox.Show("Имя профиля не указано!"); } }
private void MetroWindow_Loaded(object sender, RoutedEventArgs e) { button_Settings_English.IsEnabled = false; button_Settings_Français.IsEnabled = false; if (App.oActiveUser != null && !App.ChangeUser) {// Заполняем значениями профиля User tempUser = new User(); tempUser.Name = App.oActiveUser.Name; tempUser.SessionPeriod = App.oActiveUser.SessionPeriod; grid.DataContext = tempUser; // Ставим галочки и активируем управление языков using (var db = new LanguageTutorialContext()) { // Вытаскиваем Английский курс пользователя var result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 1); if (result != null) { // Запоминаем Английский курс пользователя App.oCourseEnglish = result as Course; // Активируем элементы управления, если курс активен if (App.oCourseEnglish.Active) { check_English.IsChecked = true; button_Settings_English.IsEnabled = true; } } // Вытаскиваем Французский курс пользователя result = db.Course.FirstOrDefault(Course => Course.UserId == App.oActiveUser.Id && Course.LanguageId == 2); if (result != null) { // Запоминаем Французский курс пользователя App.oCourseFrançais = result as Course; // Активируем элементы управления, если курс активен if (App.oCourseFrançais.Active) { check_Français.IsChecked = true; button_Settings_Français.IsEnabled = true; } } } } else {// Заполняем стандартными значениями настройки языков App.oCourseEnglish = new Course() { LanguageId = 1, WordsPerSession = 20, WordsToStudy = 50, SeansPerDay = 5, TrueAnswers = 3 }; App.oCourseFrançais = new Course() { LanguageId = 2, WordsPerSession = 20, WordsToStudy = 50, SeansPerDay = 5, TrueAnswers = 3 }; } App.Registered = false; currentTimeBetweenSessions = (double)num_Time_Between_Seans.Value; }
private void MetroWindow_Loaded(object sender, RoutedEventArgs e) { using (var db = new LanguageTutorialContext()) { if (LanguageID == 1) { var session = new Session(); session.CourseId = App.oCourseEnglish.Id; session.Words = CountRightWords; session.Points = Result; session.Datetime = DateTime.Now; session.FinishedWords = isLearned; db.Session.Add(session); } if (LanguageID == 2) { var session = new Session(); session.CourseId = App.oCourseFrançais.Id; session.Words = CountRightWords; session.Points = Result; session.Datetime = DateTime.Now; session.FinishedWords = isLearned; db.Session.Add(session); } db.SaveChanges(); //Проверка на то, что пользователь прошел веь курс var result = db.WordQueue.Where(wq => wq.UserId == App.oActiveUser.Id && wq.WordDictionary.LanguageId == LanguageID && wq.IsLearned == false).ToList(); if (result.Count == 0) { //Ты прошел весь курс TestEndWindow testEnd = new TestEndWindow(LanguageID); testEnd.ShowDialog(); } } }