Без имени.txt 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  1. ///////////////////////////////////////////////////////////////////////////////////////// MainWindows интерфейс
  2. <Grid>
  3. <Grid.RowDefinitions>
  4. <RowDefinition Height="100"/>
  5. <RowDefinition/>
  6. </Grid.RowDefinitions>
  7. <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
  8. <Image Source="\resources\logo.png" Height="80"/>
  9. <TextBlock Text="ООО «Рыбалка»" FontSize="36" HorizontalAlignment="Center" VerticalAlignment="Center"/>
  10. </StackPanel>
  11. <Frame Grid.Row="1" NavigationUIVisibility="Hidden" Name="MainFrame">
  12. </Frame>
  13. </Grid>
  14. ///////////////////////////////////////////////////////////////////////////////////////// Стили
  15. <Style x:Key="PageStyle" TargetType="Page">
  16. <Setter Property="Background" Value="White"/>
  17. <Setter Property="FontSize" Value="24"/>
  18. <Setter Property="FontFamily" Value="Comic Sans MS"/>
  19. </Style>
  20. <Style x:Key="WindowsStyle" TargetType="Window">
  21. <Setter Property="Background" Value="White"/>
  22. <Setter Property="FontSize" Value="24"/>
  23. <Setter Property="FontFamily" Value="Comic Sans MS"/>
  24. </Style>
  25. <Style x:Key="ButtonStyle" TargetType="Button">
  26. <Setter Property="Background" Value="#FF76E383"/>
  27. <Setter Property="Margin" Value="10"/>
  28. <Setter Property="Padding" Value="5"/>
  29. </Style>
  30. ///////////////////////////////////////////////////////////////////////////////////////// Код авторизации
  31. /////////////////////////////////////////////////////////////////////////////////////////XAML
  32. <Grid>
  33. <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
  34. <TextBlock Text="Авторизация" FontSize="32" HorizontalAlignment="Center"/>
  35. <TextBlock Text="Логин:"/>
  36. <TextBox Name="TBLogin"/>
  37. <TextBlock Text="Пароль:"/>
  38. <TextBox Name="TBPassword"/>
  39. <Button Name="BtnLogin" Style="{StaticResource ButtonStyle}" Click="BtnLogin_Click" Content="Авторизоваться"/>
  40. <Button Name="BtnGuest" Style="{StaticResource ButtonStyle}" Click="BtnGuest_Click" Content="Войти как гость"/>
  41. <Button Name="BtnRegistration" Style="{StaticResource ButtonStyle}" Click="BtnRegistration_Click" Content="Зарегистрироваться"/>
  42. <TextBlock x:Name="tbNewCode" FontSize="18" TextWrapping="Wrap" Visibility="Collapsed"/>
  43. </StackPanel>
  44. </Grid>
  45. /////////////////////////////////////////////////////////////////////////////////////////C#
  46. public static User user;
  47. public static bool correctValue;
  48. int kolError;
  49. int countTime;
  50. DispatcherTimer disTimer = new DispatcherTimer();
  51. public Login()
  52. {
  53. InitializeComponent();
  54. user = null;
  55. kolError = 0; // кол-во неудачных входов
  56. correctValue = false; // корректность ввода капчи
  57. disTimer.Interval = new TimeSpan(0, 0, 1); // интервал времени для таймера
  58. disTimer.Tick += new EventHandler(DisTimer_Tick);
  59. }
  60. private void BtnLogin_Click(object sender, RoutedEventArgs e)
  61. {
  62. User user1 = Base.date.User.FirstOrDefault(x => x.UserLogin == TBLogin.Text && x.UserPassword == TBPassword.Text);
  63. if (user1 != null)
  64. {
  65. if (kolError == 0)
  66. {
  67. FrameClass.frame.Navigate(new ListProducts());
  68. }
  69. else
  70. {
  71. correctValue = false;
  72. CAPCHA captcha = new CAPCHA();
  73. captcha.ShowDialog();
  74. if (correctValue) // Если капча пройдена
  75. {
  76. user = user1;
  77. FrameClass.frame.Navigate(new ListProducts());
  78. }
  79. }
  80. }
  81. else
  82. {
  83. MessageBox.Show("Пользователь с таким логиным и паролем не найден!");
  84. correctValue = false;
  85. CAPCHA captcha = new CAPCHA();
  86. captcha.ShowDialog();
  87. kolError++;
  88. if (!correctValue) // Если капча не пройдена
  89. {
  90. BtnLogin.IsEnabled = false;
  91. countTime = 10;
  92. tbNewCode.Text = "Повторно авторизоваться можно через " + countTime + " секунд";
  93. tbNewCode.Visibility = Visibility.Visible;
  94. disTimer.Start();
  95. }
  96. }
  97. }
  98. private void BtnGuest_Click(object sender, RoutedEventArgs e)
  99. {
  100. FrameClass.frame.Navigate(new ListProducts());
  101. }
  102. private void BtnRegistration_Click(object sender, RoutedEventArgs e)
  103. {
  104. FrameClass.frame.Navigate(new Registration());
  105. }
  106. private void DisTimer_Tick(object sender, EventArgs e)
  107. {
  108. if (countTime == 0) // Если 10 секунд закончились
  109. {
  110. BtnLogin.IsEnabled = true;
  111. disTimer.Stop();
  112. tbNewCode.Visibility = Visibility.Collapsed;
  113. }
  114. else
  115. {
  116. tbNewCode.Text = "Повторно авторизоваться можно через " + countTime + " секунд";
  117. }
  118. countTime--;
  119. }
  120. }
  121. ///////////////////////////////////////////////////////////////////////////////////////// Каптча
  122. ///////////////////////////////////////////////////////////////////////////////////////// XAML
  123. <Grid>
  124. <Grid.RowDefinitions>
  125. <RowDefinition Height="1*"/>
  126. <RowDefinition Height="3*"/>
  127. <RowDefinition Height="2*"/>
  128. </Grid.RowDefinitions>
  129. <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
  130. <TextBlock Text="Подтвердите, что вы не робот введя текст с картинки в последовательности слева на право" FontSize="24" TextWrapping="Wrap" TextAlignment="Center"/>
  131. </StackPanel>
  132. <Canvas x:Name="CvField" Width="600" Height="200" Grid.Row="1">
  133. </Canvas>
  134. <StackPanel Grid.Row="2" Orientation="Vertical">
  135. <TextBox x:Name="tbInputField" FontSize="24" Margin="200, 10, 200, 10" MaxLength="50"/>
  136. <Button x:Name="BtnGo" Content="Отправить" Style="{StaticResource ButtonStyle}" Click="BtnGo_Click" HorizontalAlignment="Center" VerticalAlignment="Center"/>
  137. </StackPanel>
  138. </Grid>
  139. /////////////////////////////////////////////////////////////////////////////////////////C#
  140. public string text;
  141. public CAPCHA()
  142. {
  143. InitializeComponent();
  144. Random rand = new Random();
  145. int kolText = 4; // Количество символов в строке
  146. text = "";
  147. for (int i = 0; i < kolText; i++)
  148. {
  149. int j = rand.Next(2); // Выбор 0 - число; 1 - буква
  150. if (j == 0)
  151. {
  152. text = text + rand.Next(9).ToString();
  153. }
  154. else
  155. {
  156. text = text + (char)rand.Next('a', 'z' + 1);
  157. }
  158. }
  159. // Переменные для того, чтобы символы шли по порядку
  160. int widthBegin = 0; // Начало отрезка
  161. int widthEnd = 0; // Конец отрезка
  162. int h = (int)CvField.Width / text.Length; // Шаг разбиения
  163. for (int i = 0; i < text.Length; i++) // Заполнение текста
  164. {
  165. if (i == 0) // Если первое разбиение
  166. {
  167. widthEnd += h;
  168. }
  169. else
  170. {
  171. widthBegin = widthEnd;
  172. widthEnd += h;
  173. }
  174. int height = rand.Next((int)CvField.Height);
  175. int width = rand.Next(widthBegin, widthEnd);
  176. if (height > 170) // Чтобы не выходило за пределы поля (30 - это самое большая высота символа)
  177. {
  178. height -= 30;
  179. }
  180. if (width > 590) // Чтобы не выходило за пределы поля (10 - это самое большая длина символа)
  181. {
  182. widthEnd -= 10;
  183. }
  184. int fontSize = rand.Next(16, 33);
  185. TextBlock txt = new TextBlock()
  186. {
  187. Text = text[i].ToString(),
  188. TextDecorations = TextDecorations.Strikethrough,
  189. Padding = new Thickness(width, height, 0, 0),
  190. FontSize = fontSize,
  191. };
  192. CvField.Children.Add(txt);
  193. }
  194. int kolLine = rand.Next(5, 16); // Рандомное количество линий
  195. for (int i = 0; i < kolLine; i++)
  196. {
  197. SolidColorBrush brush = new SolidColorBrush(Color.FromRgb((byte)rand.Next(256), (byte)rand.Next(256), (byte)rand.Next(256))); // Рандомный RGB цвет
  198. Line l = new Line()
  199. {
  200. X1 = rand.Next((int)CvField.Width),
  201. Y1 = rand.Next((int)CvField.Height),
  202. X2 = rand.Next((int)CvField.Width),
  203. Y2 = rand.Next((int)CvField.Height),
  204. Stroke = brush,
  205. };
  206. CvField.Children.Add(l);
  207. }
  208. }
  209. private void BtnGo_Click(object sender, RoutedEventArgs e)
  210. {
  211. if (tbInputField.Text == text)
  212. {
  213. Login.correctValue = true;
  214. this.Close();
  215. }
  216. else
  217. {
  218. this.Close();
  219. }
  220. }
  221. }
  222. ///////////////////////////////////////////////////////////////////////////////////////// Регистрация
  223. public partial class Registration : Page
  224. {
  225. public Registration()
  226. {
  227. InitializeComponent();
  228. }
  229. private void BtnLogin_Click(object sender, RoutedEventArgs e)
  230. {
  231. FrameClass.frame.Navigate(new Login());
  232. }
  233. private void BtnRegistration_Click(object sender, RoutedEventArgs e)
  234. {
  235. try
  236. {
  237. if(TBSurname.Text.Replace(" ", "").Length == 0)
  238. {
  239. MessageBox.Show("Фамилия не указана");
  240. return;
  241. }
  242. if (TBName.Text.Replace(" ", "").Length == 0)
  243. {
  244. MessageBox.Show("Имя не указано");
  245. return;
  246. }
  247. if (TBPatronomic.Text.Replace(" ", "").Length == 0)
  248. {
  249. MessageBox.Show("Отчество не указано");
  250. return;
  251. }
  252. //Regex regex = new Regex("((?= ^[8])(.{ 11}$))| (?= ^\\+? (7))(.{ 12})$"); // Регулярное выражение для телефона
  253. //DateTime dateTime = new DateTime();
  254. //Console.WriteLine(dateTime); // 01.01.0001 0:00:00
  255. //Console.WriteLine(DateTime.Now); // Текущая дата и время
  256. //Console.WriteLine(DateTime.Today);
  257. //DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25
  258. //Console.WriteLine(date1.AddHours(-3)); // 20.07.2015 15:30:25
  259. //public TimeSpan (int hours, int minutes, int seconds);
  260. //TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1); // 9.23:59:59
  261. Regex regex = new Regex("(?=.*[0-9].*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$&*])^(.{4,6})$"); // Регулярное выражение для проверки пароля (минимум 2 цифры, 1 латинская буква и один спец символ (символов от 4 до 6))
  262. if (regex.IsMatch(TBPassword.Text) == false)
  263. {
  264. MessageBox.Show("Пароль не соответствует требованиям");
  265. return;
  266. }
  267. if (Base.date.User.Where(x => x.UserLogin == TBLogin.Text).ToList().Count > 0)
  268. {
  269. MessageBox.Show("Пользователь с таким логиным уже есть");
  270. return;
  271. }
  272. User user = new User();
  273. user.UserSurname = TBSurname.Text;
  274. user.UserName = TBName.Text;
  275. user.UserPatronymic = TBPatronomic.Text;
  276. user.UserLogin = TBLogin.Text;
  277. user.UserPassword = TBPassword.Text;
  278. user.UserRole = 3;
  279. Base.date.User.Add(user);
  280. Base.date.SaveChanges();
  281. MessageBox.Show("Пользователь зарегистрирован");
  282. FrameClass.frame.Navigate(new Login());
  283. }
  284. catch
  285. {
  286. MessageBox.Show("При регистрации пользоватедля возникла ошибка!");
  287. }
  288. }
  289. }
  290. ///////////////////////////////////////////////////////////////////////////////////////// Список товаров
  291. /////////////////////////////////////////////////////////////////////////////////////////xaml
  292. <Page.Resources>
  293. <BitmapImage x:Key="DefaultImage" UriSource="../resources/picture.png"/>
  294. </Page.Resources>
  295. <Grid>
  296. <Grid.RowDefinitions>
  297. <RowDefinition Height="50"/>
  298. <RowDefinition Height="100"/>
  299. <RowDefinition/>
  300. <RowDefinition Height="100"/>
  301. </Grid.RowDefinitions>
  302. <Grid Grid.Row="0">
  303. <TextBlock x:Name="TBCountField" HorizontalAlignment="Left"/>
  304. <TextBlock x:Name="TBUser" HorizontalAlignment="Right"/>
  305. </Grid>
  306. <Grid Grid.Row="1">
  307. <Grid.ColumnDefinitions>
  308. <ColumnDefinition Width="2*"/>
  309. <ColumnDefinition Width="1*"/>
  310. <ColumnDefinition Width="1*"/>
  311. </Grid.ColumnDefinitions>
  312. <StackPanel Orientation="Vertical" Grid.Column="0" VerticalAlignment="Center">
  313. <TextBlock Text="Поиск: " HorizontalAlignment="Center"/>
  314. <TextBox Name="TBSearch" Margin="5" TextChanged="TBSearch_TextChanged"/>
  315. </StackPanel>
  316. <StackPanel Orientation="Vertical" Grid.Column="1" VerticalAlignment="Center">
  317. <TextBlock Text="Сортировка: " HorizontalAlignment="Center"/>
  318. <ComboBox Name="CBSort" Margin="5" SelectionChanged="CBSort_SelectionChanged">
  319. <ComboBoxItem Content="Без сортировки"/>
  320. <ComboBoxItem Content="По возрастанию стоимости"/>
  321. <ComboBoxItem Content="По убыванию стоимости"/>
  322. </ComboBox>
  323. </StackPanel>
  324. <StackPanel Orientation="Vertical" Grid.Column="2" VerticalAlignment="Center">
  325. <TextBlock Text="Фильтрация: " HorizontalAlignment="Center"/>
  326. <ComboBox Name="CBFilt" Margin="5" SelectionChanged="CBSort_SelectionChanged"/>
  327. </StackPanel>
  328. </Grid>
  329. <ListView Name="LVProducts" Grid.Row="2" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
  330. <ListView.ItemContainerStyle>
  331. <Style TargetType="ListViewItem">
  332. <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
  333. </Style>
  334. </ListView.ItemContainerStyle>
  335. <ListView.ItemTemplate>
  336. <DataTemplate>
  337. <Border BorderBrush="#FF76E383" BorderThickness="4" CornerRadius="10" Background="{Binding BackgroundColor}">
  338. <Grid>
  339. <Grid.ColumnDefinitions>
  340. <ColumnDefinition Width="200"/>
  341. <ColumnDefinition/>
  342. <ColumnDefinition Width="200"/>
  343. </Grid.ColumnDefinitions>
  344. <Image Source="{Binding ImageAbsolute, TargetNullValue={StaticResource DefaultImage}}" Width="180" HorizontalAlignment="Center"/>
  345. <StackPanel Grid.Column="1">
  346. <TextBlock Text="{Binding ProductName}" TextWrapping="Wrap" FontWeight="Bold"/>
  347. <TextBlock Text="{Binding ProductName}" TextWrapping="Wrap"/>
  348. <TextBlock Text="{Binding Manufacturers.ProductManufacturer, StringFormat={}Производитель: {0}}"/>
  349. <TextBlock Text="{Binding ProductCost, StringFormat={}Цена: {0}}"/>
  350. <StackPanel Orientation="Horizontal">
  351. <Button Name="BtnDelete" Uid="{Binding ProductID}" Style="{StaticResource ButtonStyle}" Content="Удалить" Click="BtnDelete_Click" Loaded="BtnDelete_Loaded"/>
  352. <Button Name="BtnUpdate" Uid="{Binding ProductID}" Style="{StaticResource ButtonStyle}" Content="Изменить" Click="BtnUpdate_Click" Loaded="BtnUpdate_Loaded"/>
  353. </StackPanel>
  354. </StackPanel>
  355. <TextBlock Text="{Binding HaveInSclad}" Grid.Column="2" TextWrapping="Wrap"/>
  356. </Grid>
  357. </Border>
  358. </DataTemplate>
  359. </ListView.ItemTemplate>
  360. </ListView>
  361. <Grid Grid.Row="3">
  362. <Button Name="BtnBack" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Left" Content="Назад" VerticalAlignment="Center" Click="BtnBack_Click"/>
  363. <Button Name="BtnAdd" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Center" Content="Добавить" VerticalAlignment="Center" Click="BtnAdd_Click"/>
  364. </Grid>
  365. </Grid>
  366. /////////////////////////////////////////////////////////////////////////////////////////c#
  367. public partial class ListProducts : Page
  368. {
  369. public ListProducts()
  370. {
  371. InitializeComponent();
  372. BtnAdd.Visibility = Visibility.Collapsed;
  373. if (Login.user != null)
  374. {
  375. TBUser.Text = Login.user.UserSurname + " " + Login.user.UserName + " " + Login.user.UserPatronymic;
  376. if (Login.user.Role.RoleName == "Администратор")
  377. {
  378. BtnAdd.Visibility = Visibility.Visible;
  379. }
  380. }
  381. LVProducts.ItemsSource = Base.date.Product.ToList();
  382. TBCountField.Text = Base.date.Product.ToList().Count + " из " + Base.date.Product.ToList().Count;
  383. CBSort.SelectedIndex = 0;
  384. List<Manufacturers> manufacturers = Base.date.Manufacturers.ToList();
  385. CBFilt.Items.Add("Все производители");
  386. foreach(Manufacturers m in manufacturers)
  387. {
  388. CBFilt.Items.Add(m.ProductManufacturer);
  389. }
  390. CBFilt.SelectedIndex = 0;
  391. }
  392. private void BtnBack_Click(object sender, RoutedEventArgs e)
  393. {
  394. FrameClass.frame.Navigate(new Login());
  395. }
  396. private void TBSearch_TextChanged(object sender, TextChangedEventArgs e)
  397. {
  398. Search();
  399. }
  400. private void CBSort_SelectionChanged(object sender, SelectionChangedEventArgs e)
  401. {
  402. Search();
  403. }
  404. private void Search()
  405. {
  406. List<Product> products = Base.date.Product.ToList();
  407. if(TBSearch.Text.Length > 0)
  408. {
  409. products = products.Where(x => x.ProductName.ToLower().Contains(TBSearch.Text.ToLower()) || x.ProductDescription.ToLower().Contains(TBSearch.Text.ToLower()) || x.Manufacturers.ProductManufacturer.ToLower().Contains(TBSearch.Text.ToLower())).ToList();
  410. }
  411. switch(CBSort.SelectedIndex)
  412. {
  413. case 1:
  414. products = products.OrderBy(x => x.ProductCost).ToList();
  415. break;
  416. case 2:
  417. products = products.OrderByDescending(x => x.ProductCost).ToList();
  418. break;
  419. }
  420. if(CBFilt.SelectedIndex > 0)
  421. {
  422. products = products.Where(x => x.Manufacturers.ProductManufacturer == CBFilt.SelectedValue).ToList();
  423. }
  424. LVProducts.ItemsSource = products;
  425. TBCountField.Text = products.Count + " из " + Base.date.Product.ToList().Count;
  426. if(products.Count == 0)
  427. {
  428. MessageBox.Show("Данные не найдены");
  429. }
  430. }
  431. private void BtnDelete_Click(object sender, RoutedEventArgs e)
  432. {
  433. Button button = sender as Button;
  434. int index = Convert.ToInt32(button.Uid);
  435. if(Base.date.OrderProduct.Where(x => x.ProductID == index).ToList().Count == 0)
  436. {
  437. if(MessageBox.Show("Вы точно хотите удалить товар?", "Системное сообщение", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
  438. {
  439. try
  440. {
  441. Product product = Base.date.Product.FirstOrDefault(x => x.ProductID == index);
  442. Base.date.Product.Remove(product);
  443. Base.date.SaveChanges();
  444. LVProducts.ItemsSource = Base.date.Product.ToList();
  445. TBCountField.Text = Base.date.Product.ToList().Count + " из " + Base.date.Product.ToList().Count;
  446. MessageBox.Show("Товар успешно удален");
  447. }
  448. catch
  449. {
  450. MessageBox.Show("При удаление товара возникла ошибка!");
  451. }
  452. }
  453. }
  454. else
  455. {
  456. MessageBox.Show("Товар нельзя удалить так как с ним есть заказ");
  457. }
  458. }
  459. private void BtnUpdate_Click(object sender, RoutedEventArgs e)
  460. {
  461. Button button = sender as Button;
  462. int index = Convert.ToInt32(button.Uid);
  463. Product product = Base.date.Product.FirstOrDefault( x => x.ProductID == index);
  464. FrameClass.frame.Navigate(new AddAndUpdate(product));
  465. }
  466. private void BtnAdd_Click(object sender, RoutedEventArgs e)
  467. {
  468. FrameClass.frame.Navigate(new AddAndUpdate());
  469. }
  470. private void BtnDelete_Loaded(object sender, RoutedEventArgs e)
  471. {
  472. Button button = sender as Button;
  473. button.Visibility = Visibility.Collapsed;
  474. if(Login.user != null)
  475. {
  476. if(Login.user.Role.RoleName == "Администратор")
  477. {
  478. button.Visibility = Visibility.Visible;
  479. }
  480. }
  481. }
  482. private void BtnUpdate_Loaded(object sender, RoutedEventArgs e)
  483. {
  484. Button button = sender as Button;
  485. button.Visibility = Visibility.Collapsed;
  486. if (Login.user != null)
  487. {
  488. if (Login.user.Role.RoleName == "Администратор")
  489. {
  490. button.Visibility = Visibility.Visible;
  491. }
  492. }
  493. }
  494. }
  495. ///////////////////////////////////////////////////////////////////////////////////////// Редактирование
  496. ///////////////////////////////////////////////////////////////////////////////////////// xaml
  497. <Grid>
  498. <Grid.RowDefinitions>
  499. <RowDefinition Height="50"/>
  500. <RowDefinition Height="50"/>
  501. <RowDefinition/>
  502. <RowDefinition Height="100"/>
  503. </Grid.RowDefinitions>
  504. <TextBlock x:Name="TBUser" Grid.Row="0" HorizontalAlignment="Right"/>
  505. <TextBlock x:Name="TBHeader" HorizontalAlignment="Center" FontSize="32" Grid.Row="1"/>
  506. <Grid Grid.Row="2">
  507. <ScrollViewer VerticalScrollBarVisibility="Auto">
  508. <StackPanel>
  509. <StackPanel Orientation="Horizontal" Margin="5">
  510. <StackPanel Orientation="Horizontal">
  511. <TextBlock Text="Наименование: "/>
  512. <TextBox Name="TBName" Width="300"/>
  513. </StackPanel>
  514. <StackPanel Orientation="Horizontal" Name="SPID" Visibility="Collapsed" Margin="10, 0, 0, 0">
  515. <TextBlock Text="ID товара: "/>
  516. <TextBlock Name="TBID"/>
  517. </StackPanel>
  518. </StackPanel>
  519. <StackPanel Orientation="Horizontal" Margin="5">
  520. <TextBlock Text="Категория: "/>
  521. <ComboBox Name="CBCategoria" Width="300"/>
  522. </StackPanel>
  523. <StackPanel Orientation="Horizontal" Margin="5">
  524. <TextBlock Text="Кол-во на складе: "/>
  525. <TextBox Name="TBCountInSclad" Width="300" PreviewTextInput="TBCountInSclad_PreviewTextInput"/>
  526. </StackPanel>
  527. <StackPanel Orientation="Horizontal" Margin="5">
  528. <TextBlock Text="Ед. измерения: "/>
  529. <ComboBox Name="CBUnit" Width="300"/>
  530. </StackPanel>
  531. <StackPanel Orientation="Horizontal" Margin="5">
  532. <TextBlock Text="Поставщик: "/>
  533. <ComboBox Name="CBSuplier" Width="300"/>
  534. </StackPanel>
  535. <StackPanel Orientation="Horizontal" Margin="5">
  536. <TextBlock Text="Стоимость: "/>
  537. <TextBox Name="TBCost" Width="300" PreviewTextInput="TBCost_PreviewTextInput"/>
  538. </StackPanel>
  539. <StackPanel Orientation="Horizontal" Margin="5">
  540. <TextBlock Text="Описание: "/>
  541. <TextBox Name="TBDescription" Width="500" Height="100" TextWrapping="Wrap" AcceptsReturn="True"/>
  542. </StackPanel>
  543. <StackPanel Orientation="Horizontal" Margin="5">
  544. <Image Name="IMPhoto" Height="150"/>
  545. <Button Name="BtnDeletePhoto" Style="{StaticResource ButtonStyle}" Content="Удалить" VerticalAlignment="Center" Click="BtnDeletePhoto_Click"/>
  546. <Button Name="BtnUpdPhoto" Style="{StaticResource ButtonStyle}" Content="Добавить" VerticalAlignment="Center" Click="BtnUpdPhoto_Click"/>
  547. </StackPanel>
  548. </StackPanel>
  549. </ScrollViewer>
  550. </Grid>
  551. <Grid Grid.Row="3">
  552. <Button Name="BtnBack" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Left" Content="Назад" VerticalAlignment="Center" Click="BtnBack_Click"/>
  553. <Button Name="BtnAddAndUpdate" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Center" VerticalAlignment="Center" Click="BtnAddAndUpdate_Click"/>
  554. </Grid>
  555. </Grid>
  556. ///////////////////////////////////////////////////////////////////////////////////////// C#
  557. public partial class AddAndUpdate : Page
  558. {
  559. Product product;
  560. bool newProduct;
  561. string image;
  562. public AddAndUpdate()
  563. {
  564. InitializeComponent();
  565. newProduct = true;
  566. BtnAddAndUpdate.Content = "Добавть";
  567. TBHeader.Text = "Добавление продукта";
  568. image = "\\resources\\picture.png";
  569. IMPhoto.Source = new BitmapImage(new Uri(image, UriKind.Relative));
  570. BtnUpdPhoto.Content = "Добавить";
  571. CreateField();
  572. }
  573. public AddAndUpdate(Product product)
  574. {
  575. InitializeComponent();
  576. newProduct = false;
  577. this.product = product;
  578. BtnAddAndUpdate.Content = "Изменить";
  579. TBHeader.Text = "Изменение продукта";
  580. SPID.Visibility = Visibility.Visible;
  581. TBID.Text = product.ProductID.ToString();
  582. CreateField();
  583. if(product.ProductPhoto != null)
  584. {
  585. image = product.ProductPhoto;
  586. IMPhoto.Source = new BitmapImage(new Uri(Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + image));
  587. BtnUpdPhoto.Content = "Изменить";
  588. }
  589. else
  590. {
  591. image = "\\resources\\picture.png";
  592. IMPhoto.Source = new BitmapImage(new Uri(image, UriKind.Relative));
  593. BtnUpdPhoto.Content = "Добавить";
  594. }
  595. TBName.Text = product.ProductName;
  596. TBDescription.Text = product.ProductDescription;
  597. CBCategoria.SelectedIndex = product.Categorys.ProductCategoryID - 1;
  598. CBUnit.SelectedIndex = product.Units.ProductUnitID - 1;
  599. CBSuplier.SelectedIndex = product.Supliers.ProductSuplierID - 1;
  600. TBCountInSclad.Text = product.ProductQuantityInStock.ToString();
  601. TBCost.Text = product.ProductCost.ToString();
  602. }
  603. private void CreateField()
  604. {
  605. CBCategoria.ItemsSource = Base.date.Categorys.ToList();
  606. CBCategoria.SelectedValuePath = "ProductCategoryID";
  607. CBCategoria.DisplayMemberPath = "ProductCategory";
  608. CBUnit.ItemsSource = Base.date.Units.ToList();
  609. CBUnit.SelectedValuePath = "ProductUnitID";
  610. CBUnit.DisplayMemberPath = "ProductUnit";
  611. CBSuplier.ItemsSource = Base.date.Supliers.ToList();
  612. CBSuplier.SelectedValuePath = "ProductSuplierID";
  613. CBSuplier.DisplayMemberPath = "ProductSuplier";
  614. }
  615. private void BtnBack_Click(object sender, RoutedEventArgs e)
  616. {
  617. FrameClass.frame.Navigate(new ListProducts());
  618. }
  619. private void BtnAddAndUpdate_Click(object sender, RoutedEventArgs e)
  620. {
  621. try
  622. {
  623. if (newProduct)
  624. {
  625. product = new Product();
  626. product.ProductID = Base.date.Product.Max(x => x.ProductID) + 1;
  627. }
  628. product.ProductName = TBName.Text;
  629. product.ProductCategoryID = CBCategoria.SelectedIndex + 1;
  630. product.ProductUnitID = CBUnit.SelectedIndex + 1;
  631. product.ProductSuplierID = CBSuplier.SelectedIndex + 1;
  632. product.ProductQuantityInStock = Convert.ToInt32(TBCountInSclad.Text);
  633. product.ProductCost = Convert.ToDouble(TBCost.Text);
  634. product.ProductDescription = TBDescription.Text;
  635. if (image == "\\resources\\picture.png")
  636. {
  637. product.ProductPhoto = null;
  638. }
  639. else
  640. {
  641. product.ProductPhoto = image;
  642. }
  643. if(newProduct)
  644. {
  645. Base.date.Product.Add(product);
  646. }
  647. Base.date.SaveChanges();
  648. if (newProduct)
  649. {
  650. MessageBox.Show("Товар успешно добавлен");
  651. }
  652. else
  653. {
  654. MessageBox.Show("Товар успешно изменен");
  655. }
  656. FrameClass.frame.Navigate(new ListProducts());
  657. }
  658. catch
  659. {
  660. if(newProduct)
  661. {
  662. MessageBox.Show("При добавление товара возникла ошибка");
  663. }
  664. else
  665. {
  666. MessageBox.Show("При изменение товара возникла ошибка");
  667. }
  668. }
  669. }
  670. private void TBCountInSclad_PreviewTextInput(object sender, TextCompositionEventArgs e)
  671. {
  672. if(!(Char.IsDigit(e.Text, 0)))
  673. {
  674. e.Handled = true;
  675. }
  676. }
  677. private void TBCost_PreviewTextInput(object sender, TextCompositionEventArgs e)
  678. {
  679. if (!(Char.IsDigit(e.Text, 0)) && (e.Text != ","))
  680. {
  681. e.Handled = true;
  682. }
  683. }
  684. private void BtnDeletePhoto_Click(object sender, RoutedEventArgs e)
  685. {
  686. image = "\\resources\\picture.png";
  687. IMPhoto.Source = new BitmapImage(new Uri(image, UriKind.Relative));
  688. BtnUpdPhoto.Content = "Добавить";
  689. }
  690. private void BtnUpdPhoto_Click(object sender, RoutedEventArgs e)
  691. {
  692. try
  693. {
  694. string path;
  695. OpenFileDialog openFileDialog = new OpenFileDialog();
  696. openFileDialog.ShowDialog();
  697. path = openFileDialog.FileName;
  698. if(path != null)
  699. {
  700. string newFilePath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + "\\image\\" + System.IO.Path.GetFileName(path); // Путь куда копировать файл
  701. if (!File.Exists(newFilePath)) // Проверка наличия картинки в папке
  702. {
  703. File.Copy(path, newFilePath);
  704. }
  705. image = "\\image\\" + System.IO.Path.GetFileName(path);
  706. IMPhoto.Source = new BitmapImage(new Uri(Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + image));
  707. BtnUpdPhoto.Content = "Изменить";
  708. }
  709. }
  710. catch
  711. {
  712. MessageBox.Show("При добавлении нового фото возникла ошибка!");
  713. }
  714. }
  715. }
  716. ///////////////////////////////////////////////////////////////////////////////////////// Частичный класс
  717. public string HaveInSclad
  718. {
  719. get
  720. {
  721. if(ProductQuantityInStock > 0)
  722. {
  723. return "Товар есть на складе";
  724. }
  725. return "Товар отсутствует";
  726. }
  727. }
  728. public SolidColorBrush BackgroundColor
  729. {
  730. get
  731. {
  732. if (ProductQuantityInStock > 0)
  733. {
  734. return Brushes.White;
  735. }
  736. return Brushes.Gray;
  737. }
  738. }
  739. public string ImageAbsolute
  740. {
  741. get
  742. {
  743. if(ProductPhoto == null)
  744. {
  745. return null;
  746. }
  747. else
  748. {
  749. return Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + ProductPhoto;
  750. }
  751. }
  752. }
  753. ///////////////////////////////////////////////////////////////////////////////////////// Прочее
  754. DateTime dateTime = new DateTime();
  755. Console.WriteLine(dateTime); // 01.01.0001 0:00:00
  756. Console.WriteLine(DateTime.Now); // Текущая дата и время
  757. Console.WriteLine(DateTime.Today);
  758. DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25
  759. Console.WriteLine(date1.AddHours(-3)); // 20.07.2015 15:30:25
  760. public TimeSpan (int hours, int minutes, int seconds);
  761. TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1); // 9.23:59:59
  762. Regex regex = new Regex("(?=.*[0-9].*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$&*])^(.{4,6})$"); // Регулярное выражение для проверки пароля (минимум 2 цифры, 1 латинская буква и один спец символ (символов от 4 до 6))
  763. Regex regex = new Regex("((?= ^[8])(.{ 11}$))| (?= ^\\+? (7))(.{ 12})$"); // Регулярное выражение для телефона