TeamProfileWindow.xaml.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Windows;
  6. using System.Windows.Media.Imaging;
  7. using Курсовой_проект_3._1.Windows;
  8. namespace Курсовой_проект_3._1
  9. {
  10. /// <summary>
  11. /// Логика взаимодействия для TeamProfileWindow.xaml
  12. /// </summary>
  13. public partial class TeamProfileWindow : Window
  14. {
  15. MyTeamContext _context;
  16. int nowTeamId;
  17. List<PlayerInTeamList> teamList = new List<PlayerInTeamList>();
  18. List<Match> matchList = new List<Match>();
  19. List<int> matchIds = new List<int>();
  20. int offsetMatch = 0;
  21. List<Achievement> achievementList = new List<Achievement>();
  22. List<int> tournamentIds = new List<int>();
  23. int offsetAchievment = 0;
  24. public TeamProfileWindow(int teamId)
  25. {
  26. InitializeComponent();
  27. _context = new MyTeamContext();
  28. nowTeamId = teamId;
  29. // Адаптация к размеру окна
  30. SizeChanged += MainWindow_SizeChanged;
  31. // Доступность доп. кнопок
  32. if (_context.TeamsUsers.Where(tu => tu.FK_User_Id == App.UserId && tu.FK_Team_Id == nowTeamId && tu.DateEnd == null).Count() > 0)
  33. {
  34. ExitBtn.Visibility = Visibility.Visible;
  35. }
  36. if (_context.Teams.Find(teamId).FK_Creater_Id == App.UserId)
  37. {
  38. AddPlayerBtn.Visibility = Visibility.Visible;
  39. SettingsBtn.Visibility = Visibility.Visible;
  40. }
  41. // Подгрузка краткой информации
  42. Teams team = _context.Teams.Where(t => t.Id == nowTeamId).ToList()[0];
  43. TeamNameTB.Text = team.Name;
  44. CountryTB.Text = "Страна: " + _context.Countries.Where(c => c.Id == team.FK_Country_Id).Select(c => c.Name).Single().ToString();
  45. FoundationDateTB.Text = "Дата основания: " + team.FoundationDate.ToString("D");
  46. PhoneNumberTB.Text = "Номер телефона: " + "+" + team.PhoneNumber;
  47. EmailTB.Text = "Email: " + team.Email;
  48. AboutTeamTB.Text = "О команде: " + team.About;
  49. // Подгрузка аватара
  50. if (team.LogoPath != null)
  51. {
  52. TeamLogoImg.Source = new BitmapImage(new Uri(team.LogoPath));
  53. }
  54. // Подгрузка кубков и призовых
  55. int frstCupCount = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId && a.Place == "1").Count();
  56. int scndCupCount = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId && a.Place == "2").Count();
  57. int thrdCupCount = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId && a.Place == "3").Count();
  58. decimal prize = 0;
  59. if (_context.Achievements.Where(a => a.FK_Team_Id == nowTeamId).Select(a => a.Prize).Count() != 0)
  60. {
  61. prize = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId).Select(a => a.Prize).Sum();
  62. }
  63. if (prize == 0)
  64. {
  65. PriceMoneyTB.Text = "Призовые: " + Convert.ToString(prize) + "$";
  66. FirstPlaceCountTB.Text = ":" + Convert.ToString(frstCupCount);
  67. SecondPlaceCountTB.Text = ":" + Convert.ToString(scndCupCount);
  68. ThirdPlaceCountTB.Text = ":" + Convert.ToString(thrdCupCount);
  69. }
  70. // Подгрузка статистики
  71. var (winCount, drawCount, loseCount) = Func.GetWinDrawLoseCountTeam(nowTeamId);
  72. int gamesCount = winCount + drawCount + loseCount;
  73. if (gamesCount != 0)
  74. {
  75. LineBarWin.Width = new GridLength(winCount * 100 / gamesCount, GridUnitType.Star);
  76. LineBarDraw.Width = new GridLength(drawCount * 100 / gamesCount, GridUnitType.Star);
  77. LineBarLose.Width = new GridLength(loseCount * 100 / gamesCount, GridUnitType.Star);
  78. WinCountTB.Text = winCount.ToString() + " побед";
  79. DrawCountTB.Text = drawCount.ToString() + " ничьих";
  80. LoseCountTB.Text = loseCount.ToString() + " поражений";
  81. WinPercentTB.Text = Math.Round(Convert.ToDouble(winCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
  82. DrawPercentTB.Text = Math.Round(Convert.ToDouble(drawCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
  83. LosePercentTB.Text = Math.Round(Convert.ToDouble(loseCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
  84. }
  85. // Подгрузка состава -- происходит в NowStatusRB_Checked
  86. NowStatusRB.IsChecked = true;
  87. // Подгрузка истории матчей
  88. matchIds = Func.GetTeamMatchIds(nowTeamId);
  89. int offsetMatchInc = 0;
  90. if (matchIds.Count > 5)
  91. {
  92. for (int i = offsetMatch; i < 5; i++)
  93. {
  94. int id = matchIds[i];
  95. matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == id).ToList()[0]));
  96. offsetMatchInc++;
  97. }
  98. }
  99. else
  100. {
  101. for (int i = offsetMatch; i < matchIds.Count; i++)
  102. {
  103. int id = matchIds[i];
  104. matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == id).ToList()[0]));
  105. offsetMatchInc++;
  106. }
  107. }
  108. offsetMatch += offsetMatchInc;
  109. MatchesGrid.ItemsSource = matchList;
  110. // Подгрузка достижений
  111. tournamentIds = Func.GetTeamTournamentIds(nowTeamId);
  112. int offsetAchievementInc = 0;
  113. if (tournamentIds.Count > 5)
  114. {
  115. for (int i = 0; i < 5; i++)
  116. {
  117. achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
  118. offsetAchievementInc++;
  119. }
  120. }
  121. else
  122. {
  123. for (int i = 0; i < tournamentIds.Count; i++)
  124. {
  125. achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
  126. offsetAchievementInc++;
  127. }
  128. }
  129. offsetAchievment += offsetAchievementInc;
  130. AchievementDataGrid.ItemsSource = achievementList;
  131. }
  132. private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
  133. {
  134. ProfileDockPanel.MinHeight = MyWindow.Height * 4 / 10;
  135. ProfileDockPanel.MaxHeight = ProfileDockPanel.MinHeight + 100;
  136. }
  137. private void NowStatusRB_Checked(object sender, RoutedEventArgs e)
  138. {
  139. TeamListStatusExpander.Header = NowStatusRB.Content;
  140. TeamListStatusExpander.IsExpanded = false;
  141. teamList = new List<PlayerInTeamList>();
  142. List<int> userIds = Func.GetPlayerIdsInTeamPresent(nowTeamId);
  143. foreach (int userId in userIds)
  144. {
  145. teamList.Add(GetPlayerInTeamList(userId));
  146. }
  147. TeamLB.ItemsSource = new List<int>();
  148. TeamLB.ItemsSource = teamList;
  149. }
  150. private void PastStatusRB_Checked(object sender, RoutedEventArgs e)
  151. {
  152. TeamListStatusExpander.Header = PastStatusRB.Content;
  153. TeamListStatusExpander.IsExpanded = false;
  154. teamList = new List<PlayerInTeamList>();
  155. List<int> userIds = Func.GetPlayerIdsInTeamPast(nowTeamId);
  156. foreach (int userId in userIds)
  157. {
  158. teamList.Add(GetPlayerInTeamList(userId));
  159. }
  160. TeamLB.ItemsSource = new List<int>();
  161. TeamLB.ItemsSource = teamList;
  162. }
  163. private void MoreAchievementBtn_Click(object sender, RoutedEventArgs e)
  164. {
  165. if (tournamentIds.Count <= achievementList.Count)
  166. {
  167. MessageBox.Show("Больше достижений нет!");
  168. return;
  169. }
  170. int offsetInc = 0;
  171. if (tournamentIds.Count - achievementList.Count > 5)
  172. {
  173. for (int i = offsetAchievment; i < offsetAchievment + 5; i++)
  174. {
  175. achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
  176. offsetInc++;
  177. }
  178. offsetAchievment += offsetInc;
  179. }
  180. else
  181. {
  182. int achievementListCount = achievementList.Count;
  183. for (int i = offsetAchievment; i < tournamentIds.Count - achievementListCount + offsetAchievment; i++)
  184. {
  185. achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
  186. }
  187. }
  188. AchievementDataGrid.ItemsSource = new List<Achievement>();
  189. AchievementDataGrid.ItemsSource = achievementList;
  190. }
  191. private void MoreGamesBtn_Click(object sender, RoutedEventArgs e)
  192. {
  193. if (matchIds.Count == matchList.Count)
  194. {
  195. MessageBox.Show("Больше матчей нет!");
  196. return;
  197. }
  198. int offsetInc = 0;
  199. if (matchIds.Count - matchList.Count > 5)
  200. {
  201. for (int i = offsetMatch; i < offsetMatch + 5; i++)
  202. {
  203. matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == matchIds[i]).ToList()[0]));
  204. offsetInc++;
  205. }
  206. offsetMatch += offsetInc;
  207. }
  208. else
  209. {
  210. int matchListCount = matchList.Count;
  211. for (int i = offsetMatch; i < matchIds.Count - matchListCount + offsetMatch; i++)
  212. {
  213. matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == matchIds[i]).ToList()[0]));
  214. }
  215. }
  216. MatchesGrid.ItemsSource = new List<Match>();
  217. MatchesGrid.ItemsSource = matchList;
  218. }
  219. private void AddPlayerBtn_Click(object sender, RoutedEventArgs e)
  220. {
  221. AddPlayerInTeamWindow wnd = new AddPlayerInTeamWindow();
  222. wnd.ShowDialog();
  223. }
  224. private void SettingsBtn_Click(object sender, RoutedEventArgs e)
  225. {
  226. TeamProfileSettingsWindow wnd = new TeamProfileSettingsWindow();
  227. wnd.ShowDialog();
  228. }
  229. private void ExitBtn_Click(object sender, RoutedEventArgs e)
  230. {
  231. TeamsUsers teamUsersRow = _context.TeamsUsers.Where(tu => tu.FK_User_Id == App.UserId && tu.FK_Team_Id == nowTeamId && tu.DateEnd == null).FirstOrDefault();
  232. teamUsersRow.DateEnd = DateTime.Now;
  233. _context.SaveChanges();
  234. // переинициализируем окном
  235. TeamProfileWindow wnd = new TeamProfileWindow(nowTeamId);
  236. wnd.Show();
  237. Close();
  238. }
  239. private void ToMainBtn_Click(object sender, RoutedEventArgs e)
  240. {
  241. ApplicationWindow wnd = new ApplicationWindow();
  242. wnd.Show();
  243. Close();
  244. }
  245. private void ToSearchBtn_Click(object sender, RoutedEventArgs e)
  246. {
  247. SearchWindow wnd = new SearchWindow();
  248. wnd.ShowDialog();
  249. }
  250. private void ToProfileBtn_Click(object sender, RoutedEventArgs e)
  251. {
  252. MainWindow wnd = new MainWindow(App.UserId);
  253. wnd.Show();
  254. Close();
  255. }
  256. // Возвращает объект класса PlayerInTeamList
  257. private PlayerInTeamList GetPlayerInTeamList(int userId)
  258. {
  259. PlayerInTeamList player = new PlayerInTeamList();
  260. Users user = _context.Users.Find(userId);
  261. // имя
  262. player.RealName = $"{user.LName} {user.FName} {user.MName}";
  263. player.Nickname = user.Nickname;
  264. // фото игрока
  265. if (user.PhotoPath != null)
  266. {
  267. player.UserPhotoPath = user.PhotoPath;
  268. }
  269. else
  270. {
  271. player.UserPhotoPath = "C:/Users/nikich4523/source/repos/Курсовой проект 3.1/Images/WithoutPhoto.png";
  272. }
  273. // иконка страны
  274. if (user.Countries.IconPath != null)
  275. {
  276. player.CountryIconPath = user.Countries.IconPath;
  277. }
  278. else
  279. {
  280. player.CountryIconPath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\countrys - 24\_unknown.png";
  281. }
  282. // даты в команде
  283. string dateIn = _context.TeamsUsers.Where(tu => tu.FK_Team_Id == nowTeamId && tu.FK_User_Id == userId).Select(tu => tu.DateStart).ToList()[0].ToString("d");
  284. string dateOut = _context.TeamsUsers.Where(tu => tu.FK_Team_Id == nowTeamId && tu.FK_User_Id == userId).Select(tu => tu.DateEnd).ToList()[0] == null? "наст. время" : _context.TeamsUsers.Where(tu => tu.FK_Team_Id == nowTeamId && tu.FK_User_Id == userId).Select(tu => tu.DateStart).ToList()[0].ToString("d");
  285. player.Dates = dateIn + " - " + dateOut;
  286. // статистика в команде
  287. int winCount, drawCount, loseCount;
  288. (winCount, drawCount, loseCount) = Func.GetWinDrawLoseCountUserInOneTeam(userId, nowTeamId);
  289. player.Statistick = winCount.ToString() + " побед, " + drawCount.ToString() + " ничьих, " + loseCount.ToString() + " поражений";
  290. return player;
  291. }
  292. // Возвращает объект класса Achievment
  293. private Achievement GetAchievement(int teamId, int tournamentId)
  294. {
  295. Achievement achievement = new Achievement();
  296. Tournaments tournament = _context.Tournaments.Where(t => t.Id == tournamentId).ToList()[0];
  297. string place = Func.GetPlaceInTournament(tournamentId, teamId);
  298. int prize = Func.GetPrizeInTournament(tournamentId, teamId);
  299. achievement.Tournament = tournament.Name;
  300. achievement.Venue = tournament.Venue + ",";
  301. achievement.DateOfVenue = tournament.DateStart.ToString("d") + " - " + tournament.DateStart.ToString("d");
  302. achievement.Place = place;
  303. achievement.Prize = prize.ToString();
  304. achievement.PrizeFond = tournament.PrizeFond.ToString();
  305. return achievement;
  306. }
  307. // Возвращает объект класса Match
  308. private Match GetMatch(Matches oldMatch)
  309. {
  310. Match match = new Match();
  311. match.FrstTeamName = Func.GetTeamName(oldMatch.FK_FrstTeam_Id);
  312. match.ScndTeamName = Func.GetTeamName(oldMatch.FK_ScndTeam_Id);
  313. match.Scores = oldMatch.FrstScore + " : " + oldMatch.ScndScore;
  314. match.Tournament = Func.GetTournamentName(oldMatch.FK_Tournament_Id);
  315. match.GameDate = oldMatch.GameDate.ToString("D");
  316. if (oldMatch.FK_WinnerTeam_Id != 1)
  317. {
  318. if (oldMatch.FK_WinnerTeam_Id == oldMatch.FK_FrstTeam_Id)
  319. {
  320. match.WinTeam = match.FrstTeamName;
  321. }
  322. else
  323. {
  324. match.WinTeam = match.ScndTeamName;
  325. }
  326. }
  327. return match;
  328. }
  329. }
  330. // Класс, описывающий объект/элемент ListBox - TeamListGroupBox
  331. public class PlayerInTeamList
  332. {
  333. public string UserPhotoPath { get; set; }
  334. public string CountryIconPath { get; set; }
  335. public string Nickname { get; set; }
  336. public string RealName { get; set; }
  337. public string Dates { get; set; }
  338. public string Statistick { get; set; }
  339. }
  340. // Класс, описывающий объект/элемент DataGrid - AchievementListGroupBox
  341. public class Achievement
  342. {
  343. public string Place { get; set; }
  344. public string Tournament { get; set; }
  345. public string Venue { get; set; }
  346. public string DateOfVenue { get; set; }
  347. public string Prize { get; set; }
  348. public string PrizeFond { get; set; }
  349. }
  350. }