using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Text.RegularExpressions; namespace Cafe.AddWindows { public partial class AddExchangeWindow : Window { public AddExchangeWindow() { InitializeComponent(); EmployeeBox.ItemsSource = Connection.db.Users.Where(item => item.IDRole != 1).Select(item => item.Login).ToList(); } private void DateTextChanged(object sender, TextChangedEventArgs e) { if (Regex.IsMatch((((TextBox)sender).Text).ToString(), "[^0-9.]")) { ((TextBox)sender).Text = ((TextBox)sender).Text.Remove(((TextBox)sender).Text.Length - 1); ((TextBox)sender).SelectionStart = ((TextBox)sender).Text.Length; } } private void TimeTextChanged(object sender, TextChangedEventArgs e) { if (Regex.IsMatch((((TextBox)sender).Text).ToString(), "[^0-9:]")) { ((TextBox)sender).Text = ((TextBox)sender).Text.Remove(((TextBox)sender).Text.Length - 1); ((TextBox)sender).SelectionStart = ((TextBox)sender).Text.Length; } } private void AddEmployeeClick(object sender, RoutedEventArgs e) { if (EmployeeBox.SelectedItem == null) { ErrorWindow errorWindow = new ErrorWindow("не выбрано работник"); errorWindow.Show(); return; } Users employee = Connection.db.Users.Where(item => item.Login == EmployeeBox.SelectedItem.ToString()).FirstOrDefault(); EmployeeBox.SelectedItem = null; EmployeeBox.ItemsSource = Connection.db.Users.Where(item => item.Login != employee.Login && item.IDRole != 1).Select(item => item.Login).ToList(); EmployeesList.Items.Add(employee); } private void SaveExchangeClick(object sender, RoutedEventArgs e) { List employees = new List(); foreach (var item in EmployeesList.Items) { employees.Add((Users)item); } if (!ExchangeValidation(employees, Date.Text, TimeOfBegin.Text, TimeOfEnd.Text)) { return; } DateTime.TryParse(Date.Text, out DateTime dateResult); TimeSpan.TryParse(TimeOfBegin.Text, out TimeSpan timeOfBeginResult); TimeSpan.TryParse(TimeOfEnd.Text, out TimeSpan timeOfEndResult); Exchange exchange = new Exchange() { Date = dateResult.Date, TimeOfBegin = timeOfBeginResult, TimeOfEnd = timeOfEndResult }; Connection.db.Exchange.Add(exchange); Connection.db.SaveChanges(); int idExchange = Connection.db.Exchange.Select(item => item.ID).ToList().Last(); foreach (var item in EmployeesList.Items) { EmployeesExchanges employeesExchanges = new EmployeesExchanges() { IDEmployee = ((Users)item).ID, IDExchange = idExchange }; Connection.db.EmployeesExchanges.Add(employeesExchanges); Connection.db.SaveChanges(); } MainWindow mainWindow = new MainWindow(); mainWindow.Show(); this.Close(); } public bool ExchangeValidation(List employees, string date, string timeOfBegin, string timeOfEnd) { if (employees == null) { ErrorWindow errorWindow = new ErrorWindow("не выбрано ни одного работника"); errorWindow.Show(); return false; } if (date == "" || timeOfBegin == "" || timeOfEnd == "") { ErrorWindow errorWindow = new ErrorWindow("не выбрано время"); errorWindow.Show(); return false; } TimeValidation(timeOfBegin); if (!TimeValidation(timeOfBegin)) { return false; } TimeSpan.TryParse(timeOfBegin, out TimeSpan timeOfBeginResult); TimeValidation(timeOfEnd); if (!TimeValidation(timeOfEnd)) { return false; } TimeSpan.TryParse(timeOfEnd, out TimeSpan timeOfEndResult); DateValidation(date); if (!DateValidation(date)) { return false; } DateTime.TryParse(date, out DateTime dateResult); List allExchangesOnDate = Connection.db.Exchange.Where(item => item.Date == dateResult).ToList(); if (allExchangesOnDate.Exists(item => (item.TimeOfBegin <= timeOfBeginResult && item.TimeOfEnd >= timeOfBeginResult) || (item.TimeOfBegin <= timeOfEndResult && item.TimeOfEnd >= timeOfEndResult))) { ErrorWindow errorWindow = new ErrorWindow("на это время уже запланирована смена"); errorWindow.Show(); return false; } if (dateResult.Date - DateTime.Now.Date > new TimeSpan(5, 0, 0, 0)) { ErrorWindow errorWindow = new ErrorWindow("можно сформировать рассписание тольок на 5 дней вперёд"); errorWindow.Show(); return false; } return true; } public bool TimeValidation(string time) { TimeSpan timeResult; if (!TimeSpan.TryParse(time, out timeResult) || time.Count(item => item == ':') != 1) { ErrorWindow errorWindow = new ErrorWindow("неверно указано время"); errorWindow.Show(); return false; } return true; } public bool DateValidation(string date) { DateTime dateResult; if (!DateTime.TryParse(date, out dateResult) || date.Count(item => item == '.') != 2) { ErrorWindow errorWindow = new ErrorWindow("неверно указана дата"); errorWindow.Show(); return false; } return true; } private void BackButtonClick(object sender, RoutedEventArgs e) { MainWindow mainWindow = new MainWindow(); mainWindow.Show(); this.Close(); } } }