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;
}
}
}
}
}