AddTeacherViewModel.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. using Avalonia;
  2. using Avalonia.Controls;
  3. <<<<<<< HEAD
  4. using Avalonia.Threading;
  5. =======
  6. >>>>>>> cb3f32a974d3f3dd8a95538b44505c7803821611
  7. using Microsoft.EntityFrameworkCore;
  8. using MsBox.Avalonia;
  9. using MsBox.Avalonia.Enums;
  10. using ReactiveUI;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Security.Cryptography.X509Certificates;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using Teachers.Models;
  18. using Teachers.Views;
  19. namespace Teachers.ViewModels
  20. {
  21. internal class AddTeacherViewModel : ViewModelBase
  22. {
  23. //создаем нового учителя для дальнейшего добавления в бд
  24. Teacher? _newTeacher;
  25. public Teacher? NewTeacher { get => _newTeacher; set => this.RaiseAndSetIfChanged(ref _newTeacher, value); }
  26. string _buttonText;
  27. public string ButtonText { get => _buttonText; set => this.RaiseAndSetIfChanged(ref _buttonText, value); }
  28. public AddTeacherViewModel()
  29. {
  30. _newTeacher = new Teacher()
  31. {
  32. GenderNavigation = new Gender()
  33. };
  34. _newCourse = new Course();
  35. <<<<<<< HEAD
  36. =======
  37. _courseWindow = new Window();
  38. >>>>>>> cb3f32a974d3f3dd8a95538b44505c7803821611
  39. _buttonText = "Добавить";
  40. }
  41. public AddTeacherViewModel(int idTeacher)
  42. {
  43. _newTeacher = MainWindowViewModel.myConnection.Teachers
  44. .Include(x => x.GenderNavigation)
  45. .Include(x => x.TeacherCourses).ThenInclude(x => x.IdCourseNavigation)
  46. .Include(x => x.SubjectsTaughts).ThenInclude(x => x.IdSubjectNavigation).FirstOrDefault(x => x.Id == idTeacher);
  47. _newCourse = new Course();
  48. <<<<<<< HEAD
  49. =======
  50. _courseWindow = new Window();
  51. >>>>>>> cb3f32a974d3f3dd8a95538b44505c7803821611
  52. CoursesTable = NewTeacher.TeacherCourses.ToList();
  53. SubjectsTable = NewTeacher.SubjectsTaughts.ToList();
  54. _buttonText = "Сохранить изменения";
  55. }
  56. #region Comboboxes
  57. //поля и свойства для работы со связью М:М
  58. List<TeacherCourse> _coursesTable;
  59. List<SubjectsTaught> _subjectsTable;
  60. public List<TeacherCourse> CoursesTable { get => _coursesTable; set => this.RaiseAndSetIfChanged(ref _coursesTable, value); }
  61. public List<SubjectsTaught> SubjectsTable { get => _subjectsTable; set => this.RaiseAndSetIfChanged(ref _subjectsTable, value); }
  62. //листы для отображения в комбобоксах (там где М:М в листы входят только те элементы, которых нету в листах-выбранных-значений
  63. //List<Gender> _gendersL = [new Gender() { Id = 0, Gender1 = "Выберите пол" }, .. MainWindowViewModel.myConnection.Genders.ToList()];
  64. List<Course> _coursesL = [new Course() { Id = 0, Name = "Выберите курс" }, .. MainWindowViewModel.myConnection.Courses.ToList()];
  65. List<Subject> _subjectL = [new Subject() { Id = 0, Name = "Выберите предмет" }, .. MainWindowViewModel.myConnection.Subjects.ToList()];
  66. //public List<Gender> GendersL => _gendersL;
  67. public List<Gender> GendersL => MainWindowViewModel.myConnection.Genders.ToList();
  68. public List<Course> CoursesL
  69. {
  70. get => _coursesL
  71. .Except(_newTeacher.TeacherCourses.Select(x => x.IdCourseNavigation)).ToList();
  72. set
  73. {
  74. _coursesL = value;
  75. this.RaisePropertyChanged(nameof(CoursesL));
  76. }
  77. }
  78. public List<Subject> SubjectsL => _subjectL
  79. .Except(_newTeacher.SubjectsTaughts.Select(x => x.IdSubjectNavigation)).ToList();
  80. //свойства для добавления выбранных элементов в другой лист и удаления из исходного
  81. //Gender? selectedGender;
  82. //public Gender? SelectedGender
  83. //{
  84. // get
  85. // {
  86. // if (selectedGender == null)
  87. // {
  88. // return _gendersL[0];
  89. // }
  90. // else
  91. // {
  92. // return selectedGender;
  93. // }
  94. // //return selectedGender;
  95. // }
  96. // set
  97. // {
  98. // if (value != null)
  99. // {
  100. // NewTeacher.Gender = value.Id;
  101. // }
  102. // }
  103. //}
  104. Course? selectedCourse;
  105. public Course? SelectedCourse
  106. {
  107. get
  108. {
  109. if (selectedCourse == null)
  110. {
  111. return _coursesL[0];
  112. }
  113. else
  114. {
  115. return selectedCourse;
  116. }
  117. }
  118. set
  119. {
  120. if (value != null)
  121. {
  122. NewTeacher.TeacherCourses.Add
  123. (new TeacherCourse()
  124. {
  125. IdTeacherNavigation = NewTeacher,
  126. IdCourseNavigation = value
  127. });
  128. CoursesTable = NewTeacher.TeacherCourses.ToList();
  129. this.RaisePropertyChanged(nameof(CoursesL));
  130. }
  131. }
  132. }
  133. Subject? selectedSubject;
  134. public Subject? SelectedSubject
  135. {
  136. get
  137. {
  138. if (selectedSubject == null)
  139. {
  140. return _subjectL[0];
  141. }
  142. else
  143. {
  144. return selectedSubject;
  145. }
  146. }
  147. set
  148. {
  149. if (value != null)
  150. {
  151. NewTeacher.SubjectsTaughts.Add
  152. (new SubjectsTaught()
  153. {
  154. IdTeacherNavigation = NewTeacher,
  155. IdSubjectNavigation = value
  156. });
  157. SubjectsTable = NewTeacher.SubjectsTaughts.ToList();
  158. this.RaisePropertyChanged(nameof(SubjectsL));
  159. }
  160. }
  161. }
  162. //методы для удаления выбранных курсов и предметов (М:М)
  163. public void DeleteCourse(TeacherCourse courseForDelete)
  164. {
  165. NewTeacher.TeacherCourses.Remove(courseForDelete);
  166. CoursesTable = NewTeacher.TeacherCourses.ToList(); //обновляем лист с выбранными значениями
  167. this.RaisePropertyChanged(nameof(CoursesL)); //обновляем лист с исходными значениями
  168. }
  169. public void DeleteSubject(SubjectsTaught subjectForDelete)
  170. {
  171. NewTeacher.SubjectsTaughts.Remove(subjectForDelete);
  172. SubjectsTable = NewTeacher.SubjectsTaughts.ToList(); //обновляем лист с выбранными значениями
  173. this.RaisePropertyChanged(nameof(SubjectsL)); //обновляем лист с исходными значениями
  174. }
  175. #endregion
  176. public void AddTeacher()
  177. {
  178. try
  179. {
  180. if (NewTeacher.Id == 0) //если текущего учителя не существует, т.е. в объекте newTeacher его Id равен 0, мы добавляем нового
  181. {
  182. MainWindowViewModel.myConnection.Teachers.Add(NewTeacher);
  183. }
  184. MainWindowViewModel.myConnection.SaveChanges();
  185. MessageBoxManager.GetMessageBoxStandard("Успех", "Учитель успешно добавлен!", MsBox.Avalonia.Enums.ButtonEnum.Ok);
  186. MainWindowViewModel.Instance.Us = new TeachersView();
  187. }
  188. catch (Exception ex)
  189. {
  190. MessageBoxManager.GetMessageBoxStandard("Внимание", ex.Message + "\n" + ex.StackTrace, MsBox.Avalonia.Enums.ButtonEnum.Ok).ShowAsync();
  191. }
  192. }
  193. public void ToTeachersView()
  194. {
  195. MainWindowViewModel.Instance.Us = new TeachersView();
  196. }
  197. Course? _newCourse;
  198. public Course? NewCourse { get => _newCourse; set => this.RaiseAndSetIfChanged(ref _newCourse, value); }
  199. <<<<<<< HEAD
  200. =======
  201. Window _courseWindow;
  202. public Window CourseWindow { get => _courseWindow; set => this.RaiseAndSetIfChanged(ref _courseWindow, value); }
  203. bool rubilnik = true;
  204. >>>>>>> cb3f32a974d3f3dd8a95538b44505c7803821611
  205. public async Task ShowAddCourse()
  206. {
  207. var window = new Window();
  208. window.Width = 400;
  209. window.Height = 225;
  210. <<<<<<< HEAD
  211. window.Content = new AddCourseView();
  212. window.Show();
  213. }
  214. public void UpdateList()
  215. {
  216. //_coursesL = [new Course() { Id = 0, Name = "Выберите курс" }, .. MainWindowViewModel.myConnection.Courses.ToList()];
  217. CoursesL = _coursesL
  218. .Except(_newTeacher.TeacherCourses.Select(x => x.IdCourseNavigation)).ToList();
  219. this.RaisePropertyChanged(nameof(CoursesL));
  220. Dispatcher.UIThread.Post(() => { this.RaisePropertyChanged(nameof(CoursesL)); });
  221. AddTeacherView atv = new();
  222. atv.UpdatePage();
  223. //this.RaisePropertyChanged(nameof(_coursesL));
  224. //Teacher? buf = _newTeacher;
  225. //MainWindowViewModel.Instance.Us = new AddTeacherView();
  226. //_newTeacher = buf;
  227. //NewTeacher = buf;
  228. =======
  229. //CourseWindow.Content = new AddCourseView();
  230. window.Content = new AddCourseView();
  231. window.Show();
  232. //if (result)
  233. //{
  234. //}
  235. //CourseWindow.Show();
  236. //window.DataContext = new AddTeacherViewModel { CourseWindow = window };
  237. //_courseWindow = window;
  238. //if (rubilnik)
  239. //{
  240. // window.Show();
  241. // window.Content = new AddCourseView();
  242. //}
  243. //else window.Close();
  244. }
  245. public void CloseWindow()
  246. {
  247. CourseWindow.Close();
  248. >>>>>>> cb3f32a974d3f3dd8a95538b44505c7803821611
  249. }
  250. }
  251. }