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