TestPage.xaml.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace HelpHelf.Pages
  16. {
  17. /// <summary>
  18. /// Логика взаимодействия для TestPage.xaml
  19. /// </summary>
  20. public partial class TestPage : Page
  21. {
  22. LoginedTable loginedTable;
  23. List<Classes.AnswerClass> answerList;//лист для записи вопосов и ответов
  24. public TestPage(LoginedTable logined)
  25. {
  26. InitializeComponent();
  27. loginedTable = logined;
  28. List<QuestionTable> questions = Classes.DateBase.connect.QuestionTable.ToList();// запись вопросов в лист
  29. listTest.ItemsSource = questions;// данные с вопросами
  30. answerList = new List<Classes.AnswerClass>();// вопросы с ответами
  31. foreach (QuestionTable question in questions)
  32. {
  33. answerList.Add(new Classes.AnswerClass() { Question = question.ID });// запись ID вопросов в лист
  34. }
  35. }
  36. /// <summary>
  37. /// Проверка выбора ответа
  38. /// </summary>
  39. /// <param name="sender">Объект кнопки</param>
  40. /// <param name="i">Индекс ответа</param>
  41. void CheckRadioButton(object sender, int i)
  42. {
  43. RadioButton radio = sender as RadioButton;
  44. int id = Convert.ToInt32(radio.Uid);// берем id вопроса
  45. int index = answerList.FindLastIndex(x => x.Question == id);// ищем индекс в листе по id
  46. answerList[index].Aswer = i;// записываем ответ
  47. }
  48. private void btnSave_Click(object sender, RoutedEventArgs e)
  49. {
  50. if(Classes.CheckFields.CheckAnswer(answerList))
  51. {
  52. try
  53. {
  54. SessionTestTable session = new SessionTestTable()
  55. {
  56. IdUser = loginedTable.ID,
  57. Date = DateTime.Now,
  58. UserTable = loginedTable.UserTable
  59. };
  60. Classes.DateBase.connect.SessionTestTable.Add(session);// добавление в бд
  61. List<int> questions = new List<int>();
  62. foreach (Classes.AnswerClass answer in answerList)
  63. {
  64. if (answer.Aswer == 1)// поисо ответа "часто"
  65. {
  66. questions.Add(answer.Question);// запись вопроса
  67. }
  68. }
  69. if(questions.Count > 0)
  70. {
  71. List<int> disaeses = Classes.DateBase.connect.DiseaseQuestionTable.Where(x=> questions.Contains(x.IdQuestion)).Select(x=> x.IdDisease).ToList();// поиск заполевания по вопросу(id)
  72. disaeses = disaeses.Distinct().ToList();// дропаем совподения
  73. foreach(int disaese in disaeses)
  74. {
  75. SessionDiseaseTable diseaseTable = new SessionDiseaseTable()
  76. {
  77. IdDisease = disaese,
  78. IdSession = session.ID
  79. };
  80. Classes.DateBase.connect.SessionDiseaseTable.Add(diseaseTable);
  81. }
  82. }
  83. else// человек здоров
  84. {
  85. SessionDiseaseTable diseaseTable = new SessionDiseaseTable()
  86. {
  87. IdSession = session.ID,
  88. IdDisease = 9
  89. };
  90. Classes.DateBase.connect.SessionDiseaseTable.Add(diseaseTable);
  91. }
  92. Classes.DateBase.connect.SaveChanges();
  93. MessageBox.Show("Тестирование завершено","Информация",MessageBoxButton.OK, MessageBoxImage.Information);
  94. Classes.DebugClass.diagWrite("Переход на страницу результата теста");
  95. Classes.FrameClass.frmMain.Navigate(new ResultPage(session.ID));
  96. }
  97. catch (Exception ex)
  98. {
  99. Classes.DebugClass.diagWrite(ex.Message);
  100. MessageBox.Show("Ошибка", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  101. }
  102. }
  103. }
  104. private void btnCancel_Click(object sender, RoutedEventArgs e)
  105. {
  106. Classes.DebugClass.diagWrite("Переход на страницу главного меню");
  107. Classes.FrameClass.frmMain.Navigate(new MainPage(loginedTable));
  108. }
  109. private void rbAlways_Checked(object sender, RoutedEventArgs e)
  110. {
  111. CheckRadioButton(sender, 1);
  112. }
  113. private void rbSometimes_Checked(object sender, RoutedEventArgs e)
  114. {
  115. CheckRadioButton(sender, 2);
  116. }
  117. private void rbRarely_Checked(object sender, RoutedEventArgs e)
  118. {
  119. CheckRadioButton(sender, 3);
  120. }
  121. private void rbNever_Checked(object sender, RoutedEventArgs e)
  122. {
  123. CheckRadioButton(sender, 4);
  124. }
  125. }
  126. }