Functions.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using System;
  2. using System.Linq;
  3. using System.Text.RegularExpressions;
  4. using Microsoft.Win32;
  5. using System.IO;
  6. using System.Windows.Media.Imaging;
  7. namespace RaspisKusach
  8. {
  9. public class Functions
  10. {
  11. // Получение направления по маршруту или поездке
  12. public static string GetRouteDirection(Trips trip)
  13. {
  14. return GetDepartureStationLocation(trip.Routes) + " - " + GetArrivalStationLocation(trip.Routes);
  15. }
  16. // Получение времени прибытия поезда на станцию
  17. public static DateTime GetArrivalTime(Stations station, Trips trip)
  18. {
  19. DateTime date = trip.TripStartDate;
  20. foreach (RoutesStations item in cnt.db.RoutesStations.Where(item => item.IdRoute == trip.IdRoute))
  21. {
  22. if (item.IdStation == station.IdStation)
  23. break;
  24. date += item.StopTime + item.TravelTime;
  25. }
  26. return date;
  27. }
  28. // Получение времени отбытия поезда со станции
  29. public static DateTime GetDepartureTime(Stations station, Trips trip)
  30. {
  31. DateTime date = trip.TripStartDate;
  32. foreach (RoutesStations item in cnt.db.RoutesStations.Where(item => item.IdRoute == trip.IdRoute))
  33. {
  34. date += item.StopTime;
  35. if (item.IdStation == station.IdStation)
  36. break;
  37. date += item.TravelTime;
  38. }
  39. return date;
  40. }
  41. // Получение станции отправления (первой)
  42. public static string GetDepartureStationLocation(Routes route)
  43. {
  44. return cnt.db.RoutesStations.Where(item => item.IdRoute == route.IdRoute).OrderByDescending(item => item.IdRouteStation).Select(item => item.Stations.Location).FirstOrDefault();
  45. }
  46. // Получение станции прибытия (последней)
  47. public static string GetArrivalStationLocation(Routes route)
  48. {
  49. return cnt.db.RoutesStations.Where(item => item.IdRoute == route.IdRoute).Select(item => item.Stations.Location).FirstOrDefault();
  50. }
  51. // Получение количества свободных мест в вагоне
  52. public static int GetCountAvailableSeats(Carriages carriage)
  53. {
  54. return carriage.Places - cnt.db.Tickets.Where(item => item.IdCarriage == carriage.IdCarriage).Count();
  55. }
  56. // Получение свободного места
  57. public static int GetAvailableSeat(Carriages carriage)
  58. {
  59. int availableSeat = -1;
  60. if(GetCountAvailableSeats(carriage) > 0)
  61. {
  62. if (cnt.db.Tickets.Where(item => item.IdCarriage == carriage.IdCarriage).Select(item => item.PlaceNumber).DefaultIfEmpty(0).Max() + 1 <= carriage.Places)
  63. availableSeat = cnt.db.Tickets.Where(item => item.IdCarriage == carriage.IdCarriage).Select(item => item.PlaceNumber).DefaultIfEmpty(0).Max() + 1;
  64. else
  65. {
  66. int seatCounter = 1;
  67. foreach (var item in cnt.db.Tickets.Where(item => item.IdCarriage == carriage.IdCarriage).OrderBy(item => item.PlaceNumber))
  68. {
  69. if (item.PlaceNumber != seatCounter)
  70. {
  71. availableSeat = seatCounter;
  72. break;
  73. }
  74. seatCounter++;
  75. }
  76. }
  77. }
  78. return availableSeat;
  79. }
  80. // Проверка на необходимую длину и содержание только цифр
  81. public static bool IsOnlyDigitsAndLengthCorrect(string str, int length)
  82. {
  83. foreach (char c in str.Trim())
  84. if (!char.IsDigit(c))
  85. return false;
  86. if (str.Length != length)
  87. return false;
  88. return true;
  89. }
  90. // Проверка электронной почты на правильность ввода
  91. public static bool IsEmailCorrect(string email)
  92. {
  93. return Regex.IsMatch(email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
  94. }
  95. // Проверка на уникальность электронной почты
  96. public static bool IsEmailAlreadyTaken(string Email)
  97. {
  98. return cnt.db.Users.Select(item => item.Email).Contains(Email);
  99. }
  100. // Валидация логина и пароля при входе
  101. public static bool IsLogAndPassCorrect(string login, string password)
  102. {
  103. return login != "" && password != "";
  104. }
  105. // Валидация логина и пароля
  106. public static bool IsLogEqualPass(string login, string password)
  107. {
  108. return login != password;
  109. }
  110. // Проверка на необходимую длину строки
  111. public static bool IsMinLengthCorrect(string str, int minLength)
  112. {
  113. return str.Trim().Length >= minLength;
  114. }
  115. // Проверка на правильность введеных данных при входе
  116. public static bool LoginCheck(string login, string password)
  117. {
  118. return cnt.db.Users.Select(item => item.Login + item.Password).Contains(login + Encrypt.GetHash(password));
  119. }
  120. // Проверка на уникальность логина
  121. public static bool IsLoginAlreadyTaken(string login)
  122. {
  123. return cnt.db.Users.Select(item => item.Login).Contains(login);
  124. }
  125. // Преобразует из "string" в "String"
  126. public static string ToUlower(string str)
  127. {
  128. return str.Substring(0, 1).ToUpper() + str.Substring(1, str.Length);
  129. }
  130. // Получение всех станций в маршруте в виде строки
  131. public static string GetDirection(Routes route)
  132. {
  133. string stationsList = "";
  134. foreach (RoutesStations rs in cnt.db.RoutesStations.Where(item => item.IdRoute == route.IdRoute))
  135. stationsList += rs.Stations.Location == GetDepartureStationLocation(route) ? rs.Stations.Name : $"{rs.Stations.Name} → ";
  136. return stationsList;
  137. }
  138. // Проверка на уникальность номера телефона
  139. public static bool IsPhoneNumberAlreadyTaken(string Phone)
  140. {
  141. return cnt.db.Users.Select(item => item.PhoneNum).Contains(Phone);
  142. }
  143. //Кодирование картинки
  144. public static byte[] BitmapSourceToByteArray(BitmapSource image)
  145. {
  146. using (var stream = new MemoryStream())
  147. {
  148. var encoder = new PngBitmapEncoder();
  149. encoder.Frames.Add(BitmapFrame.Create(image));
  150. encoder.Save(stream);
  151. return stream.ToArray();
  152. }
  153. }
  154. // Выбор картинки
  155. public static BitmapImage SelectImage()
  156. {
  157. #region Выбор картинки
  158. OpenFileDialog op = new OpenFileDialog
  159. {
  160. Title = "Выбрать изображение",
  161. Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
  162. "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
  163. "Portable Network Graphic (*.png)|*.png"
  164. };
  165. return op.ShowDialog() == true ? new BitmapImage(new Uri(op.FileName)) : null;
  166. #endregion
  167. }
  168. ////Декодирование картинки
  169. //public static BitmapImage NewImage(Users user)
  170. //{
  171. // MemoryStream ms = new MemoryStream(user.Image);
  172. // BitmapImage image = new BitmapImage();
  173. // image.BeginInit();
  174. // image.StreamSource = ms;
  175. // image.EndInit();
  176. // return image;
  177. //}
  178. }
  179. }