using Microsoft.Win32; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.ConstrainedExecution; 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; using static System.Net.Mime.MediaTypeNames; namespace School { /// /// Логика взаимодействия для AddPage.xaml /// public partial class AddPage : Page { string path; bool flagUpdate; Service service; public AddPage() { InitializeComponent(); Title.Text = "Добавление услуги"; service = new Service(); AddPhotos.Visibility = Visibility.Collapsed; } public AddPage(Service service) { InitializeComponent(); flagUpdate = true; Title.Text = "Изменение услуги"; this.service = service; IdService.Visibility = Visibility.Visible; IdService.Text = service.ID.ToString(); NameServices.Text = service.Title; Description.Text = service.Description; PriceServices.Text = Math.Round(service.Cost, 0).ToString(); TimeServices.Text = service.time.ToString(); if (service.Discount == null) { Sale.Text = "0"; } else { Sale.Text = (service.Discount * 100).ToString(); } path = service.MainImagePath; ImageService.Source = new BitmapImage(new Uri(path, UriKind.Relative)); UpdatePhoto.Visibility = Visibility.Visible; IdService.Visibility = Visibility.Visible; } public bool NameService(string title) { List servers = DBase.DB.Service.Where(x => x.Title == title).ToList(); if (servers.Count > 0) { MessageBox.Show("Данная услуга уже существует", "Ошибка", MessageBoxButton.OK); return false; } else { return true; } } public bool SaleService(string discount) { try { int price = Convert.ToInt32(discount); return true; } catch { MessageBox.Show("Укажите значение скидки цифрами", "Ошибка", MessageBoxButton.OK); return false; } } public bool PriceService(string cost) { try { int price = Convert.ToInt32(cost); return true; } catch { MessageBox.Show("Укажите значение цены цифрами", "Ошибка", MessageBoxButton.OK); return false; } } public bool TimeService(string timeLesson) { try { int time = Convert.ToInt32(timeLesson); if ((time > 0) && (time <= 240)) { return true; } else { MessageBox.Show("Время не должно быть отрицательным или превышать 4 часа", "Ошибка", MessageBoxButton.OK); return false; } } catch { MessageBox.Show("Укажите значение времени в цифрах", "Ошибка", MessageBoxButton.OK); return false; } } private void AddPhoto_Click(object sender, RoutedEventArgs e) { try { OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = Environment.CurrentDirectory.Substring(0, Environment.CurrentDirectory.Length - 9) + "image\\"; ofd.ShowDialog(); string[] array = ofd.FileName.Split('\\'); if (array.Length != 1) { path = "\\" + array[array.Length - 2] + "\\" + array[array.Length - 1]; ImageService.Source = new BitmapImage(new Uri(path, UriKind.Relative)); } } catch { MessageBox.Show("Что-то пошло не так", "Ошибка", MessageBoxButton.OK); } } int n = 0; private void UpdatePhoto_Click(object sender, RoutedEventArgs e) { List servicePhoto = DBase.DB.ServicePhoto.Where(x => x.ServiceID == service.ID).ToList(); if (servicePhoto.Count >= 1) { BitmapImage img = new BitmapImage(new Uri(servicePhoto[n].PhotoPath, UriKind.RelativeOrAbsolute)); ImageService.Source = img; AddPhoto.Visibility = Visibility.Collapsed; UpdatePhoto.Visibility = Visibility.Collapsed; AddPhotos.Visibility = Visibility.Collapsed; SavePhoto.Visibility = Visibility.Visible; DeletPhoto.Visibility = Visibility.Visible; Back.Visibility = Visibility.Visible; Next.Visibility = Visibility.Visible; } else { MessageBox.Show("Дополнительные фотографии еще не добавлены", "Ошибка", MessageBoxButton.OK); } } private void Next_Click(object sender, RoutedEventArgs e) { List servicePhoto = DBase.DB.ServicePhoto.Where(x => x.ServiceID == service.ID).ToList(); n++; if (servicePhoto == null) { Next.IsEnabled = false; } else if(servicePhoto.Count == n) // если n достигла количества фотографий в листе, то дальше листать запрещено { Next.IsEnabled = false; Back.IsEnabled = true; } else // если объект не пустой, начинает переводить байтовый массив в изображение { BitmapImage img = new BitmapImage(new Uri(servicePhoto[n].PhotoPath, UriKind.RelativeOrAbsolute)); ImageService.Source = img; } } private void Back_Click(object sender, RoutedEventArgs e) { List photo = DBase.DB.ServicePhoto.Where(x => x.ServiceID == service.ID).ToList(); n--; if (photo == null) { Back.IsEnabled = false; } else if(n<0) // если n достигла первой фотографий в листе, то дальше листать запрещено { Back.IsEnabled = false; Next.IsEnabled = true; } else // если объект не пустой, начинает переводить байтовый массив в изображение { BitmapImage img = new BitmapImage(new Uri(photo[n].PhotoPath, UriKind.RelativeOrAbsolute)); ImageService.Source = img; } } private void SavePhoto_Click(object sender, RoutedEventArgs e) { List photo = DBase.DB.ServicePhoto.Where(x => x.ServiceID == service.ID).ToList(); service.MainImagePath = photo[n].PhotoPath; DBase.DB.SaveChanges(); MessageBox.Show("Фотография изменена"); SavePhoto.Visibility = Visibility.Collapsed; AddPhoto.Visibility = Visibility.Visible; UpdatePhoto.Visibility = Visibility.Visible; AddPhotos.Visibility = Visibility.Visible; DeletPhoto.Visibility = Visibility.Collapsed; Back.Visibility = Visibility.Collapsed; Next.Visibility = Visibility.Collapsed; ClassFrame.newFrame.Navigate(new PageListOfService()); } private void AddPhotos_Click(object sender, RoutedEventArgs e) { try { OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect = true; if ((bool)ofd.ShowDialog()) { foreach (string path in ofd.FileNames) { string[] array = path.Split('\\'); try { File.Copy(path, Environment.CurrentDirectory.Substring(0, Environment.CurrentDirectory.Length - 9) + "image\\" + array[array.Length - 1]); } catch { } ServicePhoto photo = new ServicePhoto() { ServiceID = service.ID, PhotoPath = "\\image\\" + array[array.Length - 1] }; DBase.DB.ServicePhoto.Add(photo); } DBase.DB.SaveChanges(); MessageBox.Show("Фото успешно добавлены", "Услуги", MessageBoxButton.OK, MessageBoxImage.Information); } } catch { MessageBox.Show("Что-то пошло не так. Часть файлов не удалось загрузить", "Услуги", MessageBoxButton.OK, MessageBoxImage.Information); } } private void DeletPhoto_Click(object sender, RoutedEventArgs e) { List photos = DBase.DB.ServicePhoto.Where(x => x.ServiceID == service.ID).ToList(); if (photos[n].PhotoPath != service.MainImagePath) { ServicePhoto photo = photos.FirstOrDefault(x => x.PhotoPath == photos[n].PhotoPath); DBase.DB.ServicePhoto.Remove(photo); DBase.DB.SaveChanges(); ClassFrame.newFrame.Navigate(new AddPage(service)); } else { MessageBox.Show("Выбранное фото нельзя удалить", "Ошибка", MessageBoxButton.OK); } } private void Add_Click(object sender, RoutedEventArgs e) { if(NameServices.Text == "" || PriceServices.Text == "" || TimeServices.Text == "") { MessageBox.Show("Обязательные поля не могут быть пустыми"); return; } try { if (NameService(NameServices.Text)) { if (TimeService(TimeServices.Text)) { if (PriceService(PriceServices.Text)) { if (SaleService(Sale.Text)) { double? discount; if (Sale.Text == "" || Convert.ToInt32(Sale.Text) == 0) { discount = null; } else { discount = Convert.ToInt32(Sale.Text) / 100.0; } service.Title = NameServices.Text; service.Cost = Convert.ToDecimal(PriceServices.Text); service.DurationInSeconds = Convert.ToInt32(TimeServices.Text) * 60; service.Description = Description.Text; service.Discount = discount; service.MainImagePath = path; if (flagUpdate == false) { DBase.DB.Service.Add(service); DBase.DB.SaveChanges(); MessageBox.Show("Услуга успешно добавлена", "Услуги", MessageBoxButton.OK, MessageBoxImage.Information); ClassFrame.newFrame.Navigate(new HomePage()); } else { DBase.DB.SaveChanges(); MessageBox.Show("Услуга успешно изменена", "Услуги", MessageBoxButton.OK, MessageBoxImage.Information); ClassFrame.newFrame.Navigate(new HomePage()); } } } } } } catch { MessageBox.Show("Не удалось добавить запись. Проверьте заполненнеы поля"); } } private void Home_Click(object sender, RoutedEventArgs e) { ClassFrame.newFrame.Navigate(new HomePage("0000")); } } }