ReservationEditForm.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using RestaurantApp.DAL;
  2. using RestaurantApp.Models;
  3. using System;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Windows.Forms;
  8. namespace RestaurantApp
  9. {
  10. public partial class ReservationEditForm : Form
  11. {
  12. private ReservationRepository repo = new ReservationRepository();
  13. private OrderRepository orderRepo = new OrderRepository();
  14. private EmployeeRepository empRepo = new EmployeeRepository();
  15. private ClientRepository clientRepo = new ClientRepository();
  16. private Reservation reservation;
  17. private bool isEdit = false;
  18. public ReservationEditForm()
  19. {
  20. InitializeComponent();
  21. isEdit = false;
  22. reservation = new Reservation();
  23. this.Text = "Новое бронирование";
  24. LoadData();
  25. cmbStatus.SelectedIndex = 0;
  26. chkNoClient.CheckedChanged += (s, e) => cmbClient.Enabled = !chkNoClient.Checked;
  27. btnSave.Click += BtnSave_Click;
  28. btnCancel.Click += (s, e) => DialogResult = DialogResult.Cancel;
  29. }
  30. public ReservationEditForm(Reservation existingReservation)
  31. {
  32. InitializeComponent();
  33. isEdit = true;
  34. reservation = existingReservation;
  35. this.Text = "Редактирование бронирования";
  36. LoadData();
  37. LoadReservationData();
  38. btnSave.Click += BtnSave_Click;
  39. btnCancel.Click += (s, e) => DialogResult = DialogResult.Cancel;
  40. }
  41. private void LoadData()
  42. {
  43. // Загружаем столы
  44. var tables = orderRepo.GetTables();
  45. cmbTable.DisplayMember = "info";
  46. cmbTable.ValueMember = "table_id";
  47. cmbTable.DataSource = tables;
  48. // Загружаем официантов
  49. var employees = empRepo.GetWaiters();
  50. cmbEmployee.DisplayMember = "FullName";
  51. cmbEmployee.ValueMember = "EmployeeId";
  52. cmbEmployee.DataSource = employees;
  53. // Загружаем клиентов
  54. var clients = clientRepo.GetAll();
  55. var clientList = clients.Select(c => new { c.ClientId, FullName = $"{c.LastName} {c.FirstName} ({c.Phone})" }).ToList();
  56. cmbClient.DisplayMember = "FullName";
  57. cmbClient.ValueMember = "ClientId";
  58. cmbClient.DataSource = clientList;
  59. // Выбираем текущего пользователя как официанта
  60. if (!string.IsNullOrEmpty(Program.CurrentRole) && Program.CurrentRole == "waiter")
  61. {
  62. var currentEmp = employees.FirstOrDefault(e => e.FullName == Program.CurrentUser);
  63. if (currentEmp != null)
  64. cmbEmployee.SelectedValue = currentEmp.EmployeeId;
  65. }
  66. }
  67. private void LoadReservationData()
  68. {
  69. cmbTable.SelectedValue = reservation.TableId;
  70. if (reservation.ClientId.HasValue)
  71. {
  72. cmbClient.SelectedValue = reservation.ClientId.Value;
  73. chkNoClient.Checked = false;
  74. }
  75. else
  76. {
  77. chkNoClient.Checked = true;
  78. cmbClient.Enabled = false;
  79. }
  80. if (reservation.EmployeeId.HasValue)
  81. cmbEmployee.SelectedValue = reservation.EmployeeId.Value;
  82. dtpReservedAt.Value = reservation.ReservedAt;
  83. numDuration.Value = reservation.DurationMin;
  84. numGuests.Value = reservation.GuestsCount;
  85. cmbStatus.Text = reservation.Status;
  86. txtNotes.Text = reservation.Notes;
  87. }
  88. private void SaveData()
  89. {
  90. reservation.TableId = (int)cmbTable.SelectedValue;
  91. reservation.ClientId = chkNoClient.Checked ? (int?)null : (int?)cmbClient.SelectedValue;
  92. reservation.EmployeeId = (int?)cmbEmployee.SelectedValue;
  93. reservation.ReservedAt = dtpReservedAt.Value;
  94. reservation.DurationMin = (int)numDuration.Value;
  95. reservation.GuestsCount = (int)numGuests.Value;
  96. reservation.Status = cmbStatus.Text;
  97. reservation.Notes = txtNotes.Text;
  98. if (reservation.GuestsCount <= 0)
  99. throw new Exception("Количество гостей должно быть больше 0");
  100. if (isEdit)
  101. repo.Update(reservation);
  102. else
  103. repo.Insert(reservation);
  104. }
  105. private void BtnSave_Click(object sender, EventArgs e)
  106. {
  107. try
  108. {
  109. SaveData();
  110. DialogResult = DialogResult.OK;
  111. Close();
  112. }
  113. catch (Exception ex)
  114. {
  115. MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
  116. }
  117. }
  118. }
  119. }