ProductCard.xaml.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. using Sessioa.BaseModel;
  2. using Sessioa.Classes;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text.RegularExpressions;
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. using System.Windows.Media.Imaging;
  12. namespace Sessioa.Pages
  13. {
  14. /// <summary>
  15. /// Логика взаимодействия для ProductCard.xaml
  16. /// </summary>
  17. public partial class ProductCard : Page
  18. {
  19. User user = null;
  20. Product prEdit = null;
  21. List<string> imagePath = new List<string>();
  22. List<ProductCategory> categories = BaseClass.C_Base.ProductCategory.ToList();
  23. List<Manufacturer> manufacturersList = BaseClass.C_Base.Manufacturer.ToList();
  24. List<Provider> providerList = BaseClass.C_Base.Provider.ToList();
  25. int imActual = -1;
  26. bool state = true;
  27. bool resIm = false;
  28. public ProductCard(User userSign)
  29. {
  30. InitializeComponent();
  31. user = userSign;
  32. sett();
  33. }
  34. public ProductCard(User userSign, Product product)
  35. {
  36. InitializeComponent();
  37. state = false;
  38. prEdit = product;
  39. user = userSign;
  40. TB_Articule.Text = product.ProductArticleNumber;
  41. TB_Articule.IsReadOnly = true;
  42. TB_Title.Text = product.ProductName;
  43. TB_Description.Text = product.ProductDescription;
  44. sett();
  45. foreach (var imList in imagePath)
  46. {
  47. imActual++;
  48. if (imList == product.ProductPhoto)
  49. {
  50. resIm = true;
  51. break;
  52. }
  53. }
  54. if (resIm == true)
  55. ImageProd.Source = new BitmapImage(new Uri(imagePath[imActual], UriKind.Relative));
  56. CategoryProd.SelectedItem = categories[product.ProductCategory - 1];
  57. ManufacturedProd.SelectedItem = manufacturersList[product.ProductManufacturer - 1];
  58. ProviderProd.SelectedItem = providerList[product.ProductProvider - 1];
  59. TB_Price.Text = product.ProductCost.ToString();
  60. if (product.ProductDiscountAmount != null)
  61. TB_Discount.Text = product.ProductDiscountAmount.ToString();
  62. TB_Count.Text = product.ProductQuantityInStock.ToString();
  63. }
  64. public void sett()
  65. {
  66. FileInfo[] files = new DirectoryInfo($"{Directory.GetCurrentDirectory()}\\Photos").GetFiles();
  67. foreach (FileInfo file in files)
  68. {
  69. imagePath.Add("/Photos/" + file.Name);
  70. Debug.Write(file.Name);
  71. }
  72. CategoryProd.ItemsSource = categories;
  73. CategoryProd.DisplayMemberPath = "CategoryTitle";
  74. CategoryProd.SelectedValuePath = "CategoryId";
  75. ManufacturedProd.ItemsSource = manufacturersList;
  76. ManufacturedProd.DisplayMemberPath = "Manufacturer1";
  77. ManufacturedProd.SelectedValuePath = "ManufacturerId";
  78. ProviderProd.ItemsSource = providerList;
  79. ProviderProd.DisplayMemberPath = "Provider1";
  80. ProviderProd.SelectedValuePath = "ProviderId";
  81. }
  82. private void BT_save_Click(object sender, RoutedEventArgs e)
  83. {
  84. try
  85. {
  86. Regex regArticule = new Regex("[A-z][0-9]{3}[A-z][0-9]");
  87. Regex regPrice = new Regex(@"(\d)");
  88. if (TB_Articule.Text.Length < 1)
  89. {
  90. MessageBox.Show("Укажите артикул.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  91. }
  92. else if (!regArticule.IsMatch(TB_Articule.Text))
  93. {
  94. MessageBox.Show("Неверный формат артикула. Пример: А000А0. Используются латинские буквы.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  95. }
  96. else if (TB_Price.Text.Length < 1)
  97. {
  98. MessageBox.Show("Укажите стоимость.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  99. }
  100. else if (!regPrice.IsMatch(TB_Price.Text))
  101. {
  102. MessageBox.Show("Неверный формат стоимости. Все символы должны быть целочисленными.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  103. }
  104. else if (Convert.ToDouble(TB_Price.Text) < 1 || !double.TryParse(TB_Price.Text, out double a))
  105. {
  106. MessageBox.Show("Стоимость не может быть меньше 1.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  107. }
  108. else if ((!regPrice.IsMatch(TB_Discount.Text) || !int.TryParse(TB_Discount.Text, out int c)) && TB_Discount.Text != string.Empty)
  109. MessageBox.Show("Неверный формат скидки. Все символы должны быть целочисленными.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  110. else if ((Convert.ToInt32(TB_Discount.Text) > 99 || Convert.ToInt32(TB_Discount.Text) < 0) && TB_Discount.Text != string.Empty)
  111. MessageBox.Show("Такая скидка не может быть применена. Скидка не может быть больше 99 и меньше 0.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  112. else if (TB_Count.Text.Length < 1)
  113. {
  114. MessageBox.Show("Укажите количество товара.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  115. }
  116. else if (!regPrice.IsMatch(TB_Count.Text))
  117. {
  118. MessageBox.Show("Неверный формат количества товара. Все символы должны быть целочисленными.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  119. }
  120. else if (Convert.ToInt32(TB_Count.Text) < 1)
  121. {
  122. MessageBox.Show("Стоимость не может быть меньше 1.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  123. }
  124. else if (TB_Title.Text.Length < 1)
  125. {
  126. MessageBox.Show("Заполните поле с названием товара.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  127. }
  128. else if (TB_Description.Text.Length < 1)
  129. {
  130. MessageBox.Show("Заполните поле с описанием.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  131. }
  132. else if (CategoryProd.SelectedItem == null)
  133. {
  134. MessageBox.Show("Категория товара не выбрана.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  135. }
  136. else if (ManufacturedProd.SelectedItem == null)
  137. {
  138. MessageBox.Show("Производитель товара не выбран.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  139. }
  140. else if (ProviderProd.SelectedItem == null)
  141. {
  142. MessageBox.Show("Поставщик товара не выбран.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  143. }
  144. else
  145. {
  146. if (state == true)
  147. {
  148. Product newProduct = new Product()
  149. {
  150. ProductArticleNumber = TB_Articule.Text,
  151. ProductName = TB_Title.Text,
  152. ProductDescription = TB_Description.Text,
  153. ProductCategory = CategoryProd.SelectedIndex + 1,
  154. ProductManufacturer = ManufacturedProd.SelectedIndex + 1,
  155. ProductProvider = ProviderProd.SelectedIndex + 1,
  156. ProductCost = Convert.ToInt32(TB_Price.Text),
  157. ProductQuantityInStock = Convert.ToInt32(TB_Count.Text)
  158. };
  159. if (imActual != -1)
  160. newProduct.ProductPhoto = imagePath[imActual];
  161. if (TB_Discount.Text.Length > 0)
  162. {
  163. newProduct.ProductDiscountAmount = Convert.ToByte(TB_Discount.Text);
  164. }
  165. bool res = false;
  166. foreach (var item in BaseClass.C_Base.Product.ToList())
  167. {
  168. if (item.ProductArticleNumber == newProduct.ProductArticleNumber)
  169. {
  170. MessageBox.Show("Продукт с таким артикулом уже существует.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  171. res = true;
  172. }
  173. }
  174. if (res != true)
  175. {
  176. BaseClass.C_Base.Product.Add(newProduct);
  177. BaseClass.C_Base.SaveChanges();
  178. MessageBoxResult mbr = MessageBox.Show("Продукт добавлен", "Уведомление", MessageBoxButton.OK, MessageBoxImage.Information);
  179. if (mbr == MessageBoxResult.OK)
  180. FrameClass.C_Frame.Navigate(new ProductsPage(user));
  181. }
  182. }
  183. else
  184. {
  185. Product edit = BaseClass.C_Base.Product.FirstOrDefault(x => x.ProductArticleNumber == prEdit.ProductArticleNumber);
  186. edit.ProductArticleNumber = TB_Articule.Text;
  187. edit.ProductName = TB_Title.Text;
  188. edit.ProductDescription = TB_Description.Text;
  189. edit.ProductCategory = CategoryProd.SelectedIndex + 1;
  190. edit.ProductManufacturer = ManufacturedProd.SelectedIndex + 1;
  191. edit.ProductProvider = ProviderProd.SelectedIndex + 1;
  192. edit.ProductCost = Convert.ToDecimal(TB_Price.Text);
  193. edit.ProductQuantityInStock = Convert.ToInt32(TB_Count.Text);
  194. if (resIm != false)
  195. edit.ProductPhoto = imagePath[imActual];
  196. if (TB_Discount.Text.Length > 0)
  197. {
  198. edit.ProductDiscountAmount = Convert.ToByte(TB_Discount.Text);
  199. }
  200. BaseClass.C_Base.SaveChanges();
  201. MessageBoxResult mbr = MessageBox.Show("Продукт изменен", "Уведомление", MessageBoxButton.OK, MessageBoxImage.Information);
  202. if (mbr == MessageBoxResult.OK)
  203. FrameClass.C_Frame.Navigate(new ProductsPage(user));
  204. }
  205. }
  206. }
  207. catch
  208. {
  209. MessageBox.Show("Неизвестная ошибка.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  210. }
  211. }
  212. private void BT_Back_Click(object sender, RoutedEventArgs e)
  213. {
  214. FrameClass.C_Frame.Navigate(new ProductsPage(user));
  215. }
  216. private void BackIm_Click(object sender, RoutedEventArgs e)
  217. {
  218. if (imActual == 0 || imActual == -1)
  219. imActual = imagePath.Count - 1;
  220. else
  221. imActual--;
  222. ImageProd.Source = new BitmapImage(new Uri(imagePath[imActual], UriKind.Relative));
  223. }
  224. private void NextIm_Click(object sender, RoutedEventArgs e)
  225. {
  226. if (imActual == imagePath.Count - 1 || imActual == -1)
  227. imActual = 0;
  228. else
  229. imActual++;
  230. ImageProd.Source = new BitmapImage(new Uri(imagePath[imActual], UriKind.Relative));
  231. }
  232. }
  233. }