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