Functions.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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 int GetCarriageNum(Tickets ticket)
  82. {
  83. Carriages requiredСarriage = cnt.db.Carriages.Where(item => item.IdCarriage == ticket.IdCarriage).FirstOrDefault();
  84. int carrNum = 2;
  85. foreach(Carriages item in cnt.db.Carriages.Where(item => item.IdTrain == ticket.Trips.IdTrain))
  86. {
  87. if (item == requiredСarriage)
  88. return carrNum;
  89. carrNum++;
  90. }
  91. return -1;
  92. }
  93. // Проверка на необходимую длину и содержание только цифр
  94. public static bool IsOnlyDigitsAndLengthCorrect(string str, int length)
  95. {
  96. foreach (char c in str.Trim())
  97. if (!char.IsDigit(c))
  98. return false;
  99. if (str.Length != length)
  100. return false;
  101. return true;
  102. }
  103. // Проверка содержание только цифр
  104. public static bool IsOnlyDigits(string str)
  105. {
  106. foreach (char c in str.Trim())
  107. if (!char.IsDigit(c))
  108. return false;
  109. return true;
  110. }
  111. // Проверка формата ввода TimeSpan из строки
  112. public static bool IsHHMMTimeSpanFromString(string str)
  113. {
  114. for(int i = 0;i<str.Length;i++)
  115. if (!char.IsDigit(str[i]) && i != 2)
  116. return false;
  117. if(str.Length != 5)
  118. return false;
  119. if(str[3] != ' ' || str[3] != ':')
  120. return false;
  121. return true;
  122. }
  123. // Проверка электронной почты на правильность ввода
  124. public static bool IsEmailCorrect(string email)
  125. {
  126. return Regex.IsMatch(email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
  127. }
  128. // Проверка на уникальность электронной почты
  129. public static bool IsEmailAlreadyTaken(string Email)
  130. {
  131. return cnt.db.Users.Select(item => item.Email).Contains(Email);
  132. }
  133. // Валидация логина и пароля при входе
  134. public static bool IsLogAndPassCorrect(string login, string password)
  135. {
  136. return login != "" && password != "";
  137. }
  138. // Валидация логина и пароля
  139. public static bool IsLogEqualPass(string login, string password)
  140. {
  141. return login != password;
  142. }
  143. // Проверка на необходимую длину строки
  144. public static bool IsMinLengthCorrect(string str, int minLength)
  145. {
  146. return str.Trim().Length >= minLength;
  147. }
  148. // Проверка на правильность введеных данных при входе
  149. public static bool LoginCheck(string login, string password)
  150. {
  151. return cnt.db.Users.Select(item => item.Login + item.Password).Contains(login + Encrypt.GetHash(password));
  152. }
  153. // Проверка на уникальность логина
  154. public static bool IsLoginAlreadyTaken(string login)
  155. {
  156. return cnt.db.Users.Select(item => item.Login).Contains(login);
  157. }
  158. // Преобразует из "string" в "String"
  159. public static string ToUlower(string str)
  160. {
  161. return str.Substring(0, 1).ToUpper() + str.Substring(1, str.Length);
  162. }
  163. // Получение всех станций в маршруте в виде строки
  164. public static string GetDirection(Routes route)
  165. {
  166. string stationsList = "";
  167. foreach (RoutesStations rs in cnt.db.RoutesStations.Where(item => item.IdRoute == route.IdRoute))
  168. stationsList += rs.Stations.Location == GetDepartureStationLocation(route) ? rs.Stations.Name : $"{rs.Stations.Name} → ";
  169. return stationsList;
  170. }
  171. // Проверка на уникальность номера телефона
  172. public static bool IsPhoneNumberAlreadyTaken(string Phone)
  173. {
  174. return cnt.db.Users.Select(item => item.PhoneNum).Contains(Phone);
  175. }
  176. //Кодирование картинки
  177. public static byte[] BitmapSourceToByteArray(BitmapSource image)
  178. {
  179. using (var stream = new MemoryStream())
  180. {
  181. var encoder = new PngBitmapEncoder();
  182. encoder.Frames.Add(BitmapFrame.Create(image));
  183. encoder.Save(stream);
  184. return stream.ToArray();
  185. }
  186. }
  187. // Выбор картинки
  188. public static BitmapImage SelectImage()
  189. {
  190. #region Выбор картинки
  191. OpenFileDialog op = new OpenFileDialog
  192. {
  193. Title = "Выбрать изображение",
  194. Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
  195. "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
  196. "Portable Network Graphic (*.png)|*.png"
  197. };
  198. return op.ShowDialog() == true ? new BitmapImage(new Uri(op.FileName)) : null;
  199. #endregion
  200. }
  201. //Декодирование картинки
  202. public static BitmapImage NewImage(Users user)
  203. {
  204. MemoryStream ms = new MemoryStream(user.Image);
  205. BitmapImage image = new BitmapImage();
  206. image.BeginInit();
  207. image.StreamSource = ms;
  208. image.EndInit();
  209. return image;
  210. }
  211. }
  212. }