OrdersPage.xaml.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using ComputerShopWpf.Services;
  7. using Npgsql;
  8. namespace ComputerShopWpf.Views
  9. {
  10. public partial class OrdersPage : Page
  11. {
  12. private readonly DatabaseService _database = new DatabaseService();
  13. private int _selectedOrderId;
  14. public OrdersPage()
  15. {
  16. InitializeComponent();
  17. ApplyRole();
  18. LoadOrders();
  19. }
  20. private void ApplyRole()
  21. {
  22. StatusComboBox.IsEnabled = UserSession.CanEditOrders();
  23. UpdateStatusButton.IsEnabled = UserSession.CanEditOrders();
  24. }
  25. private void LoadOrders()
  26. {
  27. try
  28. {
  29. DataTable table = _database.ExecuteSelect(
  30. "SELECT * FROM v_orders_full_info ORDER BY order_date DESC;");
  31. OrdersDataGrid.ItemsSource = table.DefaultView;
  32. SelectedOrderTextBlock.Text = UserSession.CanEditOrders()
  33. ? "Выберите заказ для изменения статуса"
  34. : "Просмотр заказов";
  35. }
  36. catch (Exception ex)
  37. {
  38. ShowDatabaseError(ex);
  39. }
  40. }
  41. private void RefreshButton_Click(object sender, RoutedEventArgs e)
  42. {
  43. LoadOrders();
  44. }
  45. private void UpdateStatusButton_Click(object sender, RoutedEventArgs e)
  46. {
  47. if (!UserSession.CanEditOrders())
  48. {
  49. MessageBox.Show("У вас нет прав для изменения заказов.", "Заказы", MessageBoxButton.OK, MessageBoxImage.Warning);
  50. return;
  51. }
  52. if (_selectedOrderId == 0)
  53. {
  54. MessageBox.Show("Выберите заказ.", "Заказы", MessageBoxButton.OK, MessageBoxImage.Information);
  55. return;
  56. }
  57. string status = GetSelectedStatus();
  58. if (string.IsNullOrWhiteSpace(status))
  59. {
  60. MessageBox.Show("Выберите статус.", "Заказы", MessageBoxButton.OK, MessageBoxImage.Warning);
  61. return;
  62. }
  63. try
  64. {
  65. _database.ExecuteNonQuery(
  66. "UPDATE orders SET status = @status WHERE order_id = @order_id;",
  67. new Dictionary<string, object>
  68. {
  69. { "@status", status },
  70. { "@order_id", _selectedOrderId }
  71. });
  72. LoadOrders();
  73. }
  74. catch (Exception ex)
  75. {
  76. ShowDatabaseError(ex);
  77. }
  78. }
  79. private void ShowItemsButton_Click(object sender, RoutedEventArgs e)
  80. {
  81. DataRowView row = OrdersDataGrid.SelectedItem as DataRowView;
  82. if (row == null)
  83. {
  84. MessageBox.Show("Выберите заказ.", "Заказы", MessageBoxButton.OK, MessageBoxImage.Information);
  85. return;
  86. }
  87. int orderId = Convert.ToInt32(row["order_id"]);
  88. string orderInfo = "Заказ №" + orderId + ", клиент: " + Convert.ToString(row["client_name"]);
  89. NavigationService.Navigate(new OrderItemsPage(orderId, orderInfo));
  90. }
  91. private void OrdersDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
  92. {
  93. DataRowView row = OrdersDataGrid.SelectedItem as DataRowView;
  94. if (row == null)
  95. {
  96. return;
  97. }
  98. _selectedOrderId = Convert.ToInt32(row["order_id"]);
  99. SelectedOrderTextBlock.Text = "Выбран заказ №" + _selectedOrderId + ", клиент: " + Convert.ToString(row["client_name"]);
  100. SelectStatus(Convert.ToString(row["status"]));
  101. }
  102. private string GetSelectedStatus()
  103. {
  104. ComboBoxItem item = StatusComboBox.SelectedItem as ComboBoxItem;
  105. return item == null ? null : Convert.ToString(item.Content);
  106. }
  107. private void SelectStatus(string status)
  108. {
  109. for (int i = 0; i < StatusComboBox.Items.Count; i++)
  110. {
  111. ComboBoxItem item = StatusComboBox.Items[i] as ComboBoxItem;
  112. if (item != null && Convert.ToString(item.Content) == status)
  113. {
  114. StatusComboBox.SelectedIndex = i;
  115. return;
  116. }
  117. }
  118. }
  119. private static void ShowDatabaseError(Exception ex)
  120. {
  121. PostgresException postgresException = ex as PostgresException;
  122. if (postgresException != null)
  123. {
  124. MessageBox.Show("Ошибка PostgreSQL: " + postgresException.MessageText, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  125. return;
  126. }
  127. NpgsqlException npgsqlException = ex as NpgsqlException;
  128. if (npgsqlException != null)
  129. {
  130. MessageBox.Show("Ошибка подключения к базе данных: " + npgsqlException.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  131. return;
  132. }
  133. MessageBox.Show("Ошибка: " + ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
  134. }
  135. }
  136. }