using Sessioa.BaseModel; using Sessioa.Classes; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; namespace Sessioa.Pages { /// /// Логика взаимодействия для ProductCard.xaml /// public partial class ProductCard : Page { User user = null; Product prEdit = null; List imagePath = new List(); List categories = BaseClass.C_Base.ProductCategory.ToList(); List manufacturersList = BaseClass.C_Base.Manufacturer.ToList(); List providerList = BaseClass.C_Base.Provider.ToList(); int imActual = -1; bool state = true; bool resIm = false; public ProductCard(User userSign) { InitializeComponent(); user = userSign; sett(); } public ProductCard(User userSign, Product product) { InitializeComponent(); state = false; prEdit = product; user = userSign; TB_Articule.Text = product.ProductArticleNumber; TB_Articule.IsReadOnly = true; TB_Title.Text = product.ProductName; TB_Description.Text = product.ProductDescription; sett(); foreach (var imList in imagePath) { imActual++; if (imList == product.ProductPhoto) { resIm = true; break; } } if (resIm == true) ImageProd.Source = new BitmapImage(new Uri(imagePath[imActual], UriKind.Relative)); CategoryProd.SelectedItem = categories[product.ProductCategory - 1]; ManufacturedProd.SelectedItem = manufacturersList[product.ProductManufacturer - 1]; ProviderProd.SelectedItem = providerList[product.ProductProvider - 1]; TB_Price.Text = product.ProductCost.ToString(); if (product.ProductDiscountAmount != null) TB_Discount.Text = product.ProductDiscountAmount.ToString(); TB_Count.Text = product.ProductQuantityInStock.ToString(); } public void sett() { FileInfo[] files = new DirectoryInfo($"{Directory.GetCurrentDirectory()}\\Photos").GetFiles(); foreach (FileInfo file in files) { imagePath.Add("/Photos/" + file.Name); Debug.Write(file.Name); } CategoryProd.ItemsSource = categories; CategoryProd.DisplayMemberPath = "CategoryTitle"; CategoryProd.SelectedValuePath = "CategoryId"; ManufacturedProd.ItemsSource = manufacturersList; ManufacturedProd.DisplayMemberPath = "Manufacturer1"; ManufacturedProd.SelectedValuePath = "ManufacturerId"; ProviderProd.ItemsSource = providerList; ProviderProd.DisplayMemberPath = "Provider1"; ProviderProd.SelectedValuePath = "ProviderId"; } private void BT_save_Click(object sender, RoutedEventArgs e) { try { Regex regArticule = new Regex("[A-z][0-9]{3}[A-z][0-9]"); Regex regPrice = new Regex(@"(\d)"); if (TB_Articule.Text.Length < 1) { MessageBox.Show("Укажите артикул.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (!regArticule.IsMatch(TB_Articule.Text)) { MessageBox.Show("Неверный формат артикула. Пример: А000А0. Используются латинские буквы.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (TB_Price.Text.Length < 1) { MessageBox.Show("Укажите стоимость.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (!regPrice.IsMatch(TB_Price.Text)) { MessageBox.Show("Неверный формат стоимости. Все символы должны быть целочисленными.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (Convert.ToDouble(TB_Price.Text) < 1 || !double.TryParse(TB_Price.Text, out double a)) { MessageBox.Show("Стоимость не может быть меньше 1.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if ((!regPrice.IsMatch(TB_Discount.Text) || !int.TryParse(TB_Discount.Text, out int c)) && TB_Discount.Text != string.Empty) MessageBox.Show("Неверный формат скидки. Все символы должны быть целочисленными.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); else if ((Convert.ToInt32(TB_Discount.Text) > 99 || Convert.ToInt32(TB_Discount.Text) < 0) && TB_Discount.Text != string.Empty) MessageBox.Show("Такая скидка не может быть применена. Скидка не может быть больше 99 и меньше 0.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); else if (TB_Count.Text.Length < 1) { MessageBox.Show("Укажите количество товара.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (!regPrice.IsMatch(TB_Count.Text)) { MessageBox.Show("Неверный формат количества товара. Все символы должны быть целочисленными.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (Convert.ToInt32(TB_Count.Text) < 1) { MessageBox.Show("Стоимость не может быть меньше 1.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (TB_Title.Text.Length < 1) { MessageBox.Show("Заполните поле с названием товара.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (TB_Description.Text.Length < 1) { MessageBox.Show("Заполните поле с описанием.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (CategoryProd.SelectedItem == null) { MessageBox.Show("Категория товара не выбрана.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (ManufacturedProd.SelectedItem == null) { MessageBox.Show("Производитель товара не выбран.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else if (ProviderProd.SelectedItem == null) { MessageBox.Show("Поставщик товара не выбран.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else { if (state == true) { Product newProduct = new Product() { ProductArticleNumber = TB_Articule.Text, ProductName = TB_Title.Text, ProductDescription = TB_Description.Text, ProductCategory = CategoryProd.SelectedIndex + 1, ProductManufacturer = ManufacturedProd.SelectedIndex + 1, ProductProvider = ProviderProd.SelectedIndex + 1, ProductCost = Convert.ToInt32(TB_Price.Text), ProductQuantityInStock = Convert.ToInt32(TB_Count.Text) }; if (imActual != -1) newProduct.ProductPhoto = imagePath[imActual]; if (TB_Discount.Text.Length > 0) { newProduct.ProductDiscountAmount = Convert.ToByte(TB_Discount.Text); } bool res = false; foreach (var item in BaseClass.C_Base.Product.ToList()) { if (item.ProductArticleNumber == newProduct.ProductArticleNumber) { MessageBox.Show("Продукт с таким артикулом уже существует.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); res = true; } } if (res != true) { BaseClass.C_Base.Product.Add(newProduct); BaseClass.C_Base.SaveChanges(); MessageBoxResult mbr = MessageBox.Show("Продукт добавлен", "Уведомление", MessageBoxButton.OK, MessageBoxImage.Information); if (mbr == MessageBoxResult.OK) FrameClass.C_Frame.Navigate(new ProductsPage(user)); } } else { Product edit = BaseClass.C_Base.Product.FirstOrDefault(x => x.ProductArticleNumber == prEdit.ProductArticleNumber); edit.ProductArticleNumber = TB_Articule.Text; edit.ProductName = TB_Title.Text; edit.ProductDescription = TB_Description.Text; edit.ProductCategory = CategoryProd.SelectedIndex + 1; edit.ProductManufacturer = ManufacturedProd.SelectedIndex + 1; edit.ProductProvider = ProviderProd.SelectedIndex + 1; edit.ProductCost = Convert.ToDecimal(TB_Price.Text); edit.ProductQuantityInStock = Convert.ToInt32(TB_Count.Text); if (resIm != false) edit.ProductPhoto = imagePath[imActual]; if (TB_Discount.Text.Length > 0) { edit.ProductDiscountAmount = Convert.ToByte(TB_Discount.Text); } BaseClass.C_Base.SaveChanges(); MessageBoxResult mbr = MessageBox.Show("Продукт изменен", "Уведомление", MessageBoxButton.OK, MessageBoxImage.Information); if (mbr == MessageBoxResult.OK) FrameClass.C_Frame.Navigate(new ProductsPage(user)); } } } catch { MessageBox.Show("Неизвестная ошибка.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } } private void BT_Back_Click(object sender, RoutedEventArgs e) { FrameClass.C_Frame.Navigate(new ProductsPage(user)); } private void BackIm_Click(object sender, RoutedEventArgs e) { if (imActual == 0 || imActual == -1) imActual = imagePath.Count - 1; else imActual--; ImageProd.Source = new BitmapImage(new Uri(imagePath[imActual], UriKind.Relative)); } private void NextIm_Click(object sender, RoutedEventArgs e) { if (imActual == imagePath.Count - 1 || imActual == -1) imActual = 0; else imActual++; ImageProd.Source = new BitmapImage(new Uri(imagePath[imActual], UriKind.Relative)); } } }