AddressesForm.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. using System;
  2. using System.Data;
  3. using System.Windows.Forms;
  4. namespace WindowsFormsApp4
  5. {
  6. public partial class AddressesForm : Form
  7. {
  8. private DataTable addressesTable;
  9. public AddressesForm()
  10. {
  11. InitializeComponent();
  12. AttachEventHandlers();
  13. LoadAddresses();
  14. ConfigureGrid();
  15. }
  16. private void AttachEventHandlers()
  17. {
  18. btnRefresh.Click += BtnRefresh_Click;
  19. btnAdd.Click += BtnAdd_Click;
  20. btnEdit.Click += BtnEdit_Click;
  21. btnDelete.Click += BtnDelete_Click;
  22. btnSetMain.Click += BtnSetMain_Click;
  23. btnBack.Click += BtnBack_Click;
  24. }
  25. private void LoadAddresses()
  26. {
  27. try
  28. {
  29. if (!Session.CurrentUser.ClientId.HasValue)
  30. {
  31. MessageBox.Show("Ошибка: не удалось определить ID клиента",
  32. "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
  33. return;
  34. }
  35. addressesTable = DatabaseHelper.GetClientAddressesWithDetails(Session.CurrentUser.ClientId.Value);
  36. dgvAddresses.DataSource = addressesTable;
  37. ConfigureGrid();
  38. }
  39. catch (Exception ex)
  40. {
  41. MessageBox.Show($"Ошибка загрузки адресов: {ex.Message}", "Ошибка",
  42. MessageBoxButtons.OK, MessageBoxIcon.Error);
  43. }
  44. }
  45. private void ConfigureGrid()
  46. {
  47. if (dgvAddresses.Columns.Count == 0) return;
  48. // Настройка заголовков
  49. if (dgvAddresses.Columns.Contains("address_id"))
  50. dgvAddresses.Columns["address_id"].HeaderText = "ID";
  51. if (dgvAddresses.Columns.Contains("city"))
  52. dgvAddresses.Columns["city"].HeaderText = "Город";
  53. if (dgvAddresses.Columns.Contains("street"))
  54. dgvAddresses.Columns["street"].HeaderText = "Улица";
  55. if (dgvAddresses.Columns.Contains("house"))
  56. dgvAddresses.Columns["house"].HeaderText = "Дом";
  57. if (dgvAddresses.Columns.Contains("building"))
  58. dgvAddresses.Columns["building"].HeaderText = "Корпус";
  59. if (dgvAddresses.Columns.Contains("apartment"))
  60. dgvAddresses.Columns["apartment"].HeaderText = "Квартира";
  61. if (dgvAddresses.Columns.Contains("address_type"))
  62. {
  63. dgvAddresses.Columns["address_type"].HeaderText = "Тип";
  64. // Преобразуем значения типов в читаемый вид
  65. dgvAddresses.Columns["address_type"].DefaultCellStyle.Format = "";
  66. }
  67. if (dgvAddresses.Columns.Contains("priority"))
  68. dgvAddresses.Columns["priority"].HeaderText = "Приоритет";
  69. // Настройка цвета строк
  70. dgvAddresses.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(50, 56, 67);
  71. dgvAddresses.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(203, 232, 87);
  72. dgvAddresses.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(198, 141, 255);
  73. dgvAddresses.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.FromArgb(50, 56, 67);
  74. dgvAddresses.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(198, 141, 255);
  75. dgvAddresses.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(50, 56, 67);
  76. dgvAddresses.EnableHeadersVisualStyles = false;
  77. dgvAddresses.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
  78. }
  79. private void BtnRefresh_Click(object sender, EventArgs e)
  80. {
  81. LoadAddresses();
  82. }
  83. private void BtnAdd_Click(object sender, EventArgs e)
  84. {
  85. AddressEditForm form = new AddressEditForm();
  86. if (form.ShowDialog() == DialogResult.OK)
  87. {
  88. LoadAddresses();
  89. MessageBox.Show("Адрес успешно добавлен", "Успешно",
  90. MessageBoxButtons.OK, MessageBoxIcon.Information);
  91. }
  92. }
  93. private void BtnEdit_Click(object sender, EventArgs e)
  94. {
  95. if (dgvAddresses.CurrentRow == null)
  96. {
  97. MessageBox.Show("Выберите адрес для редактирования", "Ошибка",
  98. MessageBoxButtons.OK, MessageBoxIcon.Warning);
  99. return;
  100. }
  101. int addressId = Convert.ToInt32(dgvAddresses.CurrentRow.Cells["address_id"].Value);
  102. string city = dgvAddresses.CurrentRow.Cells["city"].Value.ToString();
  103. string street = dgvAddresses.CurrentRow.Cells["street"].Value.ToString();
  104. string house = dgvAddresses.CurrentRow.Cells["house"].Value.ToString();
  105. string building = dgvAddresses.CurrentRow.Cells["building"].Value?.ToString();
  106. string apartment = dgvAddresses.CurrentRow.Cells["apartment"].Value?.ToString();
  107. AddressEditForm form = new AddressEditForm(addressId, city, street, house, building, apartment);
  108. if (form.ShowDialog() == DialogResult.OK)
  109. {
  110. LoadAddresses();
  111. MessageBox.Show("Адрес успешно обновлён", "Успешно",
  112. MessageBoxButtons.OK, MessageBoxIcon.Information);
  113. }
  114. }
  115. private void BtnDelete_Click(object sender, EventArgs e)
  116. {
  117. if (dgvAddresses.CurrentRow == null)
  118. {
  119. MessageBox.Show("Выберите адрес для удаления", "Ошибка",
  120. MessageBoxButtons.OK, MessageBoxIcon.Warning);
  121. return;
  122. }
  123. int addressId = Convert.ToInt32(dgvAddresses.CurrentRow.Cells["address_id"].Value);
  124. string addressText = $"{dgvAddresses.CurrentRow.Cells["city"].Value}, {dgvAddresses.CurrentRow.Cells["street"].Value}, {dgvAddresses.CurrentRow.Cells["house"].Value}";
  125. DialogResult result = MessageBox.Show($"Удалить адрес: {addressText}?\nВНИМАНИЕ: Удалить можно только адрес, который не используется в заявках!",
  126. "Подтверждение удаления", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
  127. if (result == DialogResult.Yes)
  128. {
  129. if (DatabaseHelper.DeleteClientAddress(Session.CurrentUser.ClientId.Value, addressId))
  130. {
  131. LoadAddresses();
  132. MessageBox.Show("Адрес успешно удалён", "Успешно",
  133. MessageBoxButtons.OK, MessageBoxIcon.Information);
  134. }
  135. else
  136. {
  137. MessageBox.Show("Ошибка при удалении адреса.\nВозможно, адрес используется в заявках.", "Ошибка",
  138. MessageBoxButtons.OK, MessageBoxIcon.Error);
  139. }
  140. }
  141. }
  142. private void BtnSetMain_Click(object sender, EventArgs e)
  143. {
  144. if (dgvAddresses.CurrentRow == null)
  145. {
  146. MessageBox.Show("Выберите адрес", "Ошибка",
  147. MessageBoxButtons.OK, MessageBoxIcon.Warning);
  148. return;
  149. }
  150. int addressId = Convert.ToInt32(dgvAddresses.CurrentRow.Cells["address_id"].Value);
  151. string addressText = $"{dgvAddresses.CurrentRow.Cells["city"].Value}, {dgvAddresses.CurrentRow.Cells["street"].Value}, {dgvAddresses.CurrentRow.Cells["house"].Value}";
  152. DialogResult result = MessageBox.Show($"Сделать адрес {addressText} основным?",
  153. "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  154. if (result == DialogResult.Yes)
  155. {
  156. if (DatabaseHelper.SetMainAddress(Session.CurrentUser.ClientId.Value, addressId))
  157. {
  158. LoadAddresses();
  159. MessageBox.Show("Основной адрес обновлён", "Успешно",
  160. MessageBoxButtons.OK, MessageBoxIcon.Information);
  161. }
  162. else
  163. {
  164. MessageBox.Show("Ошибка при установке основного адреса", "Ошибка",
  165. MessageBoxButtons.OK, MessageBoxIcon.Error);
  166. }
  167. }
  168. }
  169. private void BtnBack_Click(object sender, EventArgs e)
  170. {
  171. this.Close();
  172. }
  173. }
  174. }