using Microsoft.Win32; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace school /// /// Логика взаимодействия для pageEditService.xaml /// { public partial class pageEditService : Page { Service thisService;//текущая услуга bool edit;//флаг редактирования string messegeErr;//сообщение с ошибками в заполнении формы public pageEditService() { InitializeComponent(); thisService = new Service();//инициализация услуги edit = false; //флаг редактирования } public pageEditService(int idService) { thisService = baseConnect.thisBase.Service.Where(tb => tb.ID == idService).FirstOrDefault();//инициализация услуги InitializeComponent(); init(); edit = true;//флаг редактирования } /// /// Инициализация компонентов страницы /// private void init() { TBHeader.Text = "Редактирование услуги"; BtnEdit.Content = "Редактировать"; TBNameService.Text = thisService.Title; TBDescriptionService.Text = thisService.Description; TBDiscountService.Text = (thisService.Discount * 100).ToString(); TBPriceService.Text = thisService.Cost.ToString(); TBTimeServise.Text = (thisService.DurationInSeconds / 60).ToString(); if (thisService.MainImagePath != null) { ImgService.Source = new BitmapImage(new Uri("/" + thisService.MainImagePath.Replace('\\', '/'), UriKind.Relative)); } } /// /// Обработка добавления главного изображения /// private void BtnAddImageClick(object sender, RoutedEventArgs e) { try { string appDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);//полный путь для проверки наличия файла appDir = appDir.Replace("\\bin\\Debug", "");//убираем все лишнее из пути [для отладки] appDir = appDir.Replace("\\bin\\Release", "");//убираем все лишнее из пути [для релиза] string initPath = appDir + "\\Услуги школы\\"; OpenFileDialog OFD = new OpenFileDialog(); // создаем объект диалогового окна OFD.InitialDirectory = initPath; OFD.ShowDialog(); // открываем диалоговое окно string path = OFD.FileName; // извлекаем полный путь к картинке if (path.Contains(initPath))//проверяем содержит ли наш путь изначальный { int n = path.IndexOf("Услуги школы"); path = path.Substring(n); // записываем в бд путь, начиная с имени папки thisService.MainImagePath = path; ImgService.Source = new BitmapImage(new Uri("/" + thisService.MainImagePath.Replace('\\', '/'), UriKind.Relative)); } else { MessageBox.Show("Выбранный файл, находится вне дирректории!", "Ошибка выбора фото", MessageBoxButton.OK, MessageBoxImage.Error); } } catch { MessageBox.Show("Фото не добавлено"); } } /// /// Изменение данных о сервисе /// private void BtnEditClick(object sender, RoutedEventArgs e) { if (saveService()) dataFrame.mainFrame.Navigate(new pageServicesList());//сохранение объекта } /// /// Сохранение сервиса /// /// Успешность сохранения private bool saveService() { messegeErr = "Во время заполнения формы возникли следующие ошибки:\n"; bool f1 = checkStr(TBNameService.Text, "Название"); bool f2 = checkName(TBNameService.Text); bool f3 = checkNum(TBPriceService.Text, "Стоимость"); bool f4 = checkNum(TBTimeServise.Text, "Длительность"); bool flag = f1 && f2 && f3 && f4; if (flag) { thisService.Title = TBNameService.Text; thisService.Cost = Convert.ToDecimal(TBPriceService.Text); thisService.DurationInSeconds = (int)Convert.ToDouble(TBTimeServise.Text) * 60; if (checkStr(TBDescriptionService.Text, "Описание")) thisService.Description = TBDescriptionService.Text; if (checkNum(TBDiscountService.Text, "Скидка")) thisService.Discount = Convert.ToDouble(TBDiscountService.Text) / 100; try { if (!edit) { baseConnect.thisBase.Service.Add(thisService); } baseConnect.thisBase.SaveChanges(); if (edit) MessageBox.Show("Услуга успешно отредактирована"); else MessageBox.Show("Услуга успешно добавлена"); return true; } catch { if (edit) MessageBox.Show("Ошибка обновления сервиса"); else MessageBox.Show("Ошибка добавления сервиса"); return false; } } else { MessageBox.Show(messegeErr, "Ошибка заполнения формы", MessageBoxButton.OK, MessageBoxImage.Error); return false; } } private bool checkName(string name) { List list = baseConnect.thisBase.Service.Where(tb => tb.Title == name).ToList(); bool flag = true; if (edit && list.Count > 1) { flag = false; messegeErr += "\n Услуга с таким названием уже существует"; } if (!edit && list.Count > 0) { flag = false; messegeErr += "\n Услуга с таким названием уже существует"; } return flag; } private bool checkStr(string str, string param) { bool flag = true; if (string.IsNullOrWhiteSpace(str)) { messegeErr += "\n Значение " + param + " пустое"; flag = false; } return flag; } /// /// Проверка числовых значений /// /// Число /// Название параметра private bool checkNum(string strNum, string param) { if (strNum == null || string.IsNullOrWhiteSpace(strNum)) { messegeErr += $"\n Значение " + param + " пустое"; return false; } double count = Convert.ToDouble(strNum); bool flag = true; if (count <= 0) { messegeErr += $"\n Значение " + param + " не может быть отрицательным"; flag = false; } if (param == "Длительность" && count / 60 > 4) { messegeErr += $"\n Длительность занятия не может быть больше 4 часов"; flag = false; } if (param == "Скидка" && count > 100) { messegeErr += $"\n Скидка занятия не может быть больше 100%"; flag = false; } return flag; } private void BtnBackClick(object sender, RoutedEventArgs e) { switch (MessageBox.Show("Вы действительно хотите выйти? таком случае, введенные вами данные не сохраняться", "Попытка выхода", MessageBoxButton.YesNo, MessageBoxImage.Warning)) { case MessageBoxResult.Yes: { dataFrame.mainFrame.Navigate(new pageServicesList()); break; } case MessageBoxResult.No: { break; } } } private void BtnAddOtherImageClick(object sender, RoutedEventArgs e) { switch (MessageBox.Show("Для продолжения работы необходимо сохранить услугу? Желаете сохранить и продолжить?", "Сохранить услугу?", MessageBoxButton.YesNo, MessageBoxImage.Question)) { case MessageBoxResult.Yes: { if (saveService()) dataFrame.mainFrame.Navigate(new pageEditServiseImage(thisService.ID)); break; } case MessageBoxResult.No: { break; } } } } }