using System; using System.Data; using System.Windows.Forms; namespace WindowsFormsApp4 { public partial class RequestsForm : Form { private DataTable requestsTable; public RequestsForm() { InitializeComponent(); AttachEventHandlers(); LoadRequests(); ConfigureGrid(); ConfigureButtonsByRole(); } private void AttachEventHandlers() { btnRefresh.Click += BtnRefresh_Click; btnChangeStatus.Click += BtnChangeStatus_Click; btnNewRequest.Click += BtnNewRequest_Click; btnCancelRequest.Click += BtnCancelRequest_Click; btnTakeToWork.Click += BtnTakeToWork_Click; btnAssignManager.Click += BtnAssignManager_Click; btnBack.Click += BtnBack_Click; } private void ConfigureButtonsByRole() { btnChangeStatus.Visible = false; btnNewRequest.Visible = false; btnCancelRequest.Visible = false; btnTakeToWork.Visible = false; btnAssignManager.Visible = false; if (Session.IsClient) { btnNewRequest.Visible = true; btnCancelRequest.Visible = true; lblTitle.Text = "📋 Мои заявки"; Console.WriteLine("Клиент: показаны кнопки Новая заявка и Отменить"); } else if (Session.IsManager) { btnChangeStatus.Visible = true; btnTakeToWork.Visible = true; lblTitle.Text = "📋 Заявки (назначенные мне)"; Console.WriteLine("Менеджер: показаны кнопки Изменить статус и Взять в работу"); } else if (Session.IsAdmin) { btnChangeStatus.Visible = true; btnAssignManager.Visible = true; lblTitle.Text = "📋 Все заявки"; Console.WriteLine("Админ: показаны кнопки Изменить статус и Назначить менеджера"); } } private void LoadRequests() { try { requestsTable = DatabaseHelper.GetRequests( Session.CurrentUser.UserId, Session.CurrentUser.Role, Session.CurrentUser.ClientId, Session.CurrentUser.ManagerId ); MessageBox.Show($"Таблица загружена. Строк: {requestsTable.Rows.Count}", "Отладка"); dgvRequests.DataSource = requestsTable; ConfigureGrid(); dgvRequests.Visible = true; } catch (Exception ex) { MessageBox.Show($"Ошибка загрузки заявок: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void ConfigureGrid() { if (dgvRequests.Columns.Count == 0) return; if (dgvRequests.Columns.Contains("id")) dgvRequests.Columns["id"].HeaderText = "№"; if (dgvRequests.Columns.Contains("client_name")) dgvRequests.Columns["client_name"].HeaderText = "Клиент"; if (dgvRequests.Columns.Contains("manager_name")) dgvRequests.Columns["manager_name"].HeaderText = "Менеджер"; if (dgvRequests.Columns.Contains("request_date")) dgvRequests.Columns["request_date"].HeaderText = "Дата заявки"; if (dgvRequests.Columns.Contains("measurement_datetime")) dgvRequests.Columns["measurement_datetime"].HeaderText = "Дата замера"; if (dgvRequests.Columns.Contains("status")) dgvRequests.Columns["status"].HeaderText = "Статус"; // Настройка цветов dgvRequests.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(50, 56, 67); dgvRequests.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(203, 232, 87); dgvRequests.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(198, 141, 255); dgvRequests.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.FromArgb(50, 56, 67); dgvRequests.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(198, 141, 255); dgvRequests.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(50, 56, 67); dgvRequests.EnableHeadersVisualStyles = false; if (Session.IsClient) { if (dgvRequests.Columns.Contains("client_name")) dgvRequests.Columns["client_name"].Visible = false; if (dgvRequests.Columns.Contains("manager_name")) dgvRequests.Columns["manager_name"].Visible = false; } dgvRequests.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; } private void BtnRefresh_Click(object sender, EventArgs e) { LoadRequests(); } private void BtnChangeStatus_Click(object sender, EventArgs e) { if (dgvRequests.CurrentRow == null) { MessageBox.Show("Выберите заявку", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int requestId = Convert.ToInt32(dgvRequests.CurrentRow.Cells["id"].Value); string currentStatus = dgvRequests.CurrentRow.Cells["status"].Value.ToString(); ChangeStatusForm form = new ChangeStatusForm(requestId, currentStatus); if (form.ShowDialog() == DialogResult.OK) { LoadRequests(); } } private void BtnNewRequest_Click(object sender, EventArgs e) { NewRequestForm form = new NewRequestForm(); if (form.ShowDialog() == DialogResult.OK) { LoadRequests(); MessageBox.Show("Заявка успешно создана!", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void BtnCancelRequest_Click(object sender, EventArgs e) { if (dgvRequests.CurrentRow == null) { MessageBox.Show("Выберите заявку", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int requestId = Convert.ToInt32(dgvRequests.CurrentRow.Cells["id"].Value); string currentStatus = dgvRequests.CurrentRow.Cells["status"].Value.ToString(); if (currentStatus != "new") { MessageBox.Show("Можно отменить только заявку со статусом 'Новая'", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } DialogResult result = MessageBox.Show("Отменить заявку?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { DatabaseHelper.UpdateRequestStatus(requestId, "cancelled"); LoadRequests(); MessageBox.Show("Заявка отменена", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void BtnTakeToWork_Click(object sender, EventArgs e) { if (dgvRequests.CurrentRow == null) { MessageBox.Show("Выберите заявку", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int requestId = Convert.ToInt32(dgvRequests.CurrentRow.Cells["id"].Value); string currentStatus = dgvRequests.CurrentRow.Cells["status"].Value.ToString(); if (currentStatus != "new") { MessageBox.Show("Можно взять в работу только заявку со статусом 'Новая'", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } DialogResult result = MessageBox.Show("Взять заявку в работу?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { DatabaseHelper.AssignManagerToRequest(requestId, Session.CurrentUser.ManagerId.Value); DatabaseHelper.UpdateRequestStatus(requestId, "in_progress"); LoadRequests(); MessageBox.Show("Заявка взята в работу", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void BtnAssignManager_Click(object sender, EventArgs e) { if (dgvRequests.CurrentRow == null) { MessageBox.Show("Выберите заявку", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int requestId = Convert.ToInt32(dgvRequests.CurrentRow.Cells["id"].Value); string currentStatus = dgvRequests.CurrentRow.Cells["status"].Value.ToString(); if (currentStatus != "new") { MessageBox.Show("Можно назначить менеджера только на заявку со статусом 'Новая'", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } AssignManagerForm form = new AssignManagerForm(requestId); if (form.ShowDialog() == DialogResult.OK) { LoadRequests(); MessageBox.Show("Менеджер назначен", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void BtnBack_Click(object sender, EventArgs e) { this.Close(); } } }