using Microsoft.Win32; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media.Imaging; namespace Hotel_Course_Project { /// /// Логика взаимодействия для StaffChangeOrAddPage.xaml /// public partial class StaffChangeOrAddPage : Page { public byte[] contractImage; public string FilePath; public Staff _staff; public Staff addStaff; public int IdStaff = 0; public StaffChangeOrAddPage(Staff staff) { InitializeComponent(); DataContext = staff; _staff = staff; SStaffRole.ItemsSource = DataBase.db.StaffRole.ToList(); if (DataContext != null) { SStaffRole.Text = staff.ToString(); StaffChangeOrAddBtn.Content = "Изменить данные"; SLogin.IsReadOnly = true; this.Title = "Информация о сотруднике"; IdStaff = staff.Id; StaffDeleteOrRestoreBtn.Visibility = Visibility.Visible; if (staff.Id_PersStatus == 1) { StaffDeleteOrRestoreBtn.Content = "Удалить сотрудника"; } else { StaffDeleteOrRestoreBtn.Content = "Востановить сотрудника"; } } else { SLogin.IsReadOnly = false; StaffChangeOrAddBtn.Content = "Добавить сотрудника"; this.Title = "Окно добавления сотрудника"; StaffDeleteOrRestoreBtn.Visibility = Visibility.Collapsed; } } private void StaffChangeOrAddBtn_Click(object sender, RoutedEventArgs e) { if (DataContext == null) { if (SStaffRole.Text == null || SStaffRole.Text == "") { MessageBox.Show("Не выбрана должность"); return; } else { int numRole = DataBase.db.StaffRole.SingleOrDefault(item => item.Name == SStaffRole.Text).Id; if (TestAddStaff(SLName.Text, SFName.Text, SMName.Text, SLogin.Text, numRole) == true) { DataBase.db.Staff.Add(addStaff); var lastId = DataBase.db.Staff.OrderByDescending(item => item.Id).FirstOrDefault().Id; DataBase.db.Staff.SingleOrDefault(item => item.Id == lastId).PhotoContract = contractImage; DataBase.db.SaveChanges(); MessageBox.Show("Сотрудник добавлен в базу."); PChanger.MainFrame.GoBack(); } else { if (SLName.Text == null || SLName.Text == "" || SFName.Text == null || SFName.Text == "" || SMName.Text == null || SMName.Text == "" || SLogin.Text == null || SLogin.Text == "") { MessageBox.Show("Ключевые поля не были заполнены!"); } else { MessageBox.Show("Такой логин уже имеется в базе данных у другого сотрудника!"); } } } } else { if (SLName.Text == null || SFName.Text == null || SLogin.Text == null) { MessageBox.Show("Ключевые поля не были заполнены!"); return; } else if (DataBase.db.Staff.SingleOrDefault(item => item.Id == IdStaff).Login != SLogin.Text) { if (DataBase.db.Staff.SingleOrDefault(item => item.Login == SLogin.Text) != null) { MessageBox.Show("Такой логин имеется у другого сотрудника"); return; } } MessageBox.Show("Данные по сотрудинку изменены."); _staff.PhotoContract = contractImage; DataBase.db.SaveChanges(); PChanger.MainFrame.GoBack(); return; } } public bool TestAddStaff(string LName, string FName, string MName, string Login, int numRole) { if (LName == null || LName == "" || FName == null || FName == "" || Login == null || Login == "") { return false; } else { var existUserS = DataBase.db.Staff.SingleOrDefault(item => item.Login == Login); if (existUserS != null) { return false; } else { Staff staff = new Staff() { LName = LName, FName = FName, MName = MName, Login = Login, Password = SomeMethods.Hash("12345678"), Id_StaffRole = numRole, Id_PersStatus = 1 }; addStaff = staff; return true; } } } private void StaffDeleteOrRestoreBtn_Click(object sender, RoutedEventArgs e) { if (_staff.Id_PersStatus == 1) { _staff.Id_PersStatus = 2; MessageBox.Show("Статус пользователя изменился на <удалён>"); } else { _staff.Id_PersStatus = 1; MessageBox.Show("Статус пользователя восстановлен"); } DataBase.db.SaveChanges(); PChanger.MainFrame.GoBack(); } private void SContractPhoto_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == true) { FilePath = openFileDialog.FileName; string uriString = $"{FilePath}"; BitmapImage bitimage = new BitmapImage(new Uri(@uriString)); if (TestReceiveImage(uriString) == true) { SContractPhoto.Source = bitimage; contractImage = SomeMethods.ConvertBitmapImageToByte(bitimage); } else { MessageBox.Show("Ошибка при выборе изображения!\nБыло выбрано не изображение"); } } else { FilePath = string.Empty; } } public bool TestReceiveImage(string uriString) { List png = "89 50 4E 47".Split().ToList(); List jpg = "FF D8 FF DB".Split().ToList(); List jpeg = "FF D8 FF E0".Split().ToList(); List fileHead = new List(); try { using (FileStream stream = File.OpenRead(uriString)) { for (int i = 0; i < 4; i++) { string bit = stream.ReadByte().ToString("X2"); fileHead.Add(bit); } } } catch { return false; } if (!png.Except(fileHead).Any()) { return true; } if (!jpg.Except(fileHead).Any()) { return true; } if (!jpeg.Except(fileHead).Any()) { return true; } return false; } private void Page_Loaded(object sender, RoutedEventArgs e) { if (_staff == null || _staff.PhotoContract == null) { SContractPhoto.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/no_picture.jpg")); } } } }