pageEditService.xaml.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. using Microsoft.Win32;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Reflection;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. using System.Windows.Data;
  12. using System.Windows.Documents;
  13. using System.Windows.Input;
  14. using System.Windows.Media;
  15. using System.Windows.Media.Imaging;
  16. using System.Windows.Navigation;
  17. using System.Windows.Shapes;
  18. namespace school
  19. /// <summary>
  20. /// Логика взаимодействия для pageEditService.xaml
  21. /// </summary>
  22. {
  23. public partial class pageEditService : Page
  24. {
  25. Service thisService;//текущая услуга
  26. bool edit;//флаг редактирования
  27. string messegeErr;//сообщение с ошибками в заполнении формы
  28. public pageEditService()
  29. {
  30. InitializeComponent();
  31. thisService = new Service();//инициализация услуги
  32. edit = false; //флаг редактирования
  33. }
  34. public pageEditService(int idService)
  35. {
  36. thisService = baseConnect.thisBase.Service.Where(tb => tb.ID == idService).FirstOrDefault();//инициализация услуги
  37. InitializeComponent();
  38. init();
  39. edit = true;//флаг редактирования
  40. }
  41. /// <summary>
  42. /// Инициализация компонентов страницы
  43. /// </summary>
  44. private void init()
  45. {
  46. TBHeader.Text = "Редактирование услуги";
  47. BtnEdit.Content = "Редактировать";
  48. TBNameService.Text = thisService.Title;
  49. TBDescriptionService.Text = thisService.Description;
  50. TBDiscountService.Text = (thisService.Discount * 100).ToString();
  51. TBPriceService.Text = thisService.Cost.ToString();
  52. TBTimeServise.Text = (thisService.DurationInSeconds / 60).ToString();
  53. if (thisService.MainImagePath != null)
  54. {
  55. ImgService.Source = new BitmapImage(new Uri("/" + thisService.MainImagePath.Replace('\\', '/'), UriKind.Relative));
  56. }
  57. }
  58. /// <summary>
  59. /// Обработка добавления главного изображения
  60. /// </summary>
  61. private void BtnAddImageClick(object sender, RoutedEventArgs e)
  62. {
  63. try
  64. {
  65. string appDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);//полный путь для проверки наличия файла
  66. appDir = appDir.Replace("\\bin\\Debug", "");//убираем все лишнее из пути [для отладки]
  67. appDir = appDir.Replace("\\bin\\Release", "");//убираем все лишнее из пути [для релиза]
  68. string initPath = appDir + "\\Услуги школы\\";
  69. OpenFileDialog OFD = new OpenFileDialog(); // создаем объект диалогового окна
  70. OFD.InitialDirectory = initPath;
  71. OFD.ShowDialog(); // открываем диалоговое окно
  72. string path = OFD.FileName; // извлекаем полный путь к картинке
  73. if (path.Contains(initPath))//проверяем содержит ли наш путь изначальный
  74. {
  75. int n = path.IndexOf("Услуги школы");
  76. path = path.Substring(n); // записываем в бд путь, начиная с имени папки
  77. thisService.MainImagePath = path;
  78. ImgService.Source = new BitmapImage(new Uri("/" + thisService.MainImagePath.Replace('\\', '/'), UriKind.Relative));
  79. }
  80. else
  81. {
  82. MessageBox.Show("Выбранный файл, находится вне дирректории!", "Ошибка выбора фото", MessageBoxButton.OK, MessageBoxImage.Error);
  83. }
  84. }
  85. catch
  86. {
  87. MessageBox.Show("Фото не добавлено");
  88. }
  89. }
  90. /// <summary>
  91. /// Изменение данных о сервисе
  92. /// </summary>
  93. private void BtnEditClick(object sender, RoutedEventArgs e)
  94. {
  95. if (saveService()) dataFrame.mainFrame.Navigate(new pageServicesList());//сохранение объекта
  96. }
  97. /// <summary>
  98. /// Сохранение сервиса
  99. /// </summary>
  100. /// <returns>Успешность сохранения</returns>
  101. private bool saveService()
  102. {
  103. messegeErr = "Во время заполнения формы возникли следующие ошибки:\n";
  104. bool f1 = checkStr(TBNameService.Text, "Название");
  105. bool f2 = checkName(TBNameService.Text);
  106. bool f3 = checkNum(TBPriceService.Text, "Стоимость");
  107. bool f4 = checkNum(TBTimeServise.Text, "Длительность");
  108. bool flag = f1 && f2 && f3 && f4;
  109. if (flag)
  110. {
  111. thisService.Title = TBNameService.Text;
  112. thisService.Cost = Convert.ToDecimal(TBPriceService.Text);
  113. thisService.DurationInSeconds = (int)Convert.ToDouble(TBTimeServise.Text) * 60;
  114. if (checkStr(TBDescriptionService.Text, "Описание")) thisService.Description = TBDescriptionService.Text;
  115. if (checkNum(TBDiscountService.Text, "Скидка")) thisService.Discount = Convert.ToDouble(TBDiscountService.Text) / 100;
  116. try
  117. {
  118. if (!edit)
  119. {
  120. baseConnect.thisBase.Service.Add(thisService);
  121. }
  122. baseConnect.thisBase.SaveChanges();
  123. if (edit) MessageBox.Show("Услуга успешно отредактирована");
  124. else MessageBox.Show("Услуга успешно добавлена");
  125. return true;
  126. }
  127. catch
  128. {
  129. if (edit) MessageBox.Show("Ошибка обновления сервиса");
  130. else MessageBox.Show("Ошибка добавления сервиса");
  131. return false;
  132. }
  133. }
  134. else
  135. {
  136. MessageBox.Show(messegeErr, "Ошибка заполнения формы", MessageBoxButton.OK, MessageBoxImage.Error);
  137. return false;
  138. }
  139. }
  140. private bool checkName(string name)
  141. {
  142. List<Service> list = baseConnect.thisBase.Service.Where(tb => tb.Title == name).ToList();
  143. bool flag = true;
  144. if (edit && list.Count > 1)
  145. {
  146. flag = false;
  147. messegeErr += "\n Услуга с таким названием уже существует";
  148. }
  149. if (!edit && list.Count > 0)
  150. {
  151. flag = false;
  152. messegeErr += "\n Услуга с таким названием уже существует";
  153. }
  154. return flag;
  155. }
  156. private bool checkStr(string str, string param)
  157. {
  158. bool flag = true;
  159. if (string.IsNullOrWhiteSpace(str))
  160. {
  161. messegeErr += "\n Значение " + param + " пустое";
  162. flag = false;
  163. }
  164. return flag;
  165. }
  166. /// <summary>
  167. /// Проверка числовых значений
  168. /// </summary>
  169. /// <param name="strNum">Число</param>
  170. /// <param name="param">Название параметра</param>
  171. private bool checkNum(string strNum, string param)
  172. {
  173. if (strNum == null || string.IsNullOrWhiteSpace(strNum))
  174. {
  175. messegeErr += $"\n Значение " + param + " пустое";
  176. return false;
  177. }
  178. double count = Convert.ToDouble(strNum);
  179. bool flag = true;
  180. if (count <= 0)
  181. {
  182. messegeErr += $"\n Значение " + param + " не может быть отрицательным";
  183. flag = false;
  184. }
  185. if (param == "Длительность" && count / 60 > 4)
  186. {
  187. messegeErr += $"\n Длительность занятия не может быть больше 4 часов";
  188. flag = false;
  189. }
  190. if (param == "Скидка" && count > 100)
  191. {
  192. messegeErr += $"\n Скидка занятия не может быть больше 100%";
  193. flag = false;
  194. }
  195. return flag;
  196. }
  197. private void BtnBackClick(object sender, RoutedEventArgs e)
  198. {
  199. switch (MessageBox.Show("Вы действительно хотите выйти? таком случае, введенные вами данные не сохраняться", "Попытка выхода", MessageBoxButton.YesNo, MessageBoxImage.Warning))
  200. {
  201. case MessageBoxResult.Yes:
  202. {
  203. dataFrame.mainFrame.Navigate(new pageServicesList());
  204. break;
  205. }
  206. case MessageBoxResult.No:
  207. {
  208. break;
  209. }
  210. }
  211. }
  212. private void BtnAddOtherImageClick(object sender, RoutedEventArgs e)
  213. {
  214. switch (MessageBox.Show("Для продолжения работы необходимо сохранить услугу? Желаете сохранить и продолжить?", "Сохранить услугу?", MessageBoxButton.YesNo, MessageBoxImage.Question))
  215. {
  216. case MessageBoxResult.Yes:
  217. {
  218. if (saveService()) dataFrame.mainFrame.Navigate(new pageEditServiseImage(thisService.ID));
  219. break;
  220. }
  221. case MessageBoxResult.No:
  222. {
  223. break;
  224. }
  225. }
  226. }
  227. }
  228. }