using System; using System.Data; using System.Windows.Forms; using Npgsql; namespace PhotoStudioApp { public partial class MainForm : Form { private int _userId; private string _role; private string _login; private string _connectionString; public MainForm(int userId, string role, string login, string connectionString) { InitializeComponent(); _userId = userId; _role = role; _login = login; _connectionString = connectionString; // Настройка доступных кнопок в зависимости от роли if (_role == "client") { btnAdd.Enabled = false; btnDelete.Enabled = false; btnEdit.Enabled = false; btnServices.Enabled = false; btnClients.Enabled = false; } LoadOrders(); } private void LoadOrders() { using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString)) { conn.Open(); string sql; if (_role == "admin") { sql = "select * from v_orders_with_total order by order_date desc"; } else { sql = @" select o.order_id, s.service_name, o.order_date, s.price as total_amount from orders o join services s on o.service_id = s.service_id join clients c on o.client_id = c.client_id join users u on c.user_id = u.user_id where u.login = @login"; } NpgsqlCommand cmd = new NpgsqlCommand(sql, conn); if (_role != "admin") { cmd.Parameters.AddWithValue("@login", _login); } NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt); // Скрываем столбцы с ID из отображения if (dt.Columns.Contains("client_id")) dt.Columns.Remove("client_id"); if (dt.Columns.Contains("employee_id")) dt.Columns.Remove("employee_id"); if (dt.Columns.Contains("service_id")) dt.Columns.Remove("service_id"); dgvOrders.DataSource = dt; if (dgvOrders.Columns.Contains("order_id")) { dgvOrders.Columns["order_id"].Visible = false; } } } private void btnAdd_Click(object sender, EventArgs e) { if (_role == "client") { MessageBox.Show("Клиент не может добавлять заказы."); return; } OrderForm orderForm = new OrderForm(_connectionString); orderForm.ShowDialog(); LoadOrders(); } private void btnEdit_Click(object sender, EventArgs e) { if (_role == "client") { MessageBox.Show("Клиент не может редактировать заказы."); return; } if (dgvOrders.SelectedRows.Count > 0) { DataRowView rowView = dgvOrders.SelectedRows[0].DataBoundItem as DataRowView; if (rowView != null) { int orderId = (int)rowView["order_id"]; OrderForm orderForm = new OrderForm(_connectionString, orderId); orderForm.ShowDialog(); LoadOrders(); } } else { MessageBox.Show("Выберите заказ для редактирования"); } } private void btnDelete_Click(object sender, EventArgs e) { if (_role == "client") { MessageBox.Show("Клиент не может удалять заказы."); return; } if (dgvOrders.SelectedRows.Count > 0) { DataRowView rowView = dgvOrders.SelectedRows[0].DataBoundItem as DataRowView; if (rowView != null) { int orderId = (int)rowView["order_id"]; if (MessageBox.Show("Удалить заказ?", "Подтверждение", MessageBoxButtons.YesNo) == DialogResult.Yes) { using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString)) { conn.Open(); string sql = "delete from orders where order_id = @orderId"; NpgsqlCommand cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.AddWithValue("@orderId", orderId); cmd.ExecuteNonQuery(); MessageBox.Show("Заказ удалён"); LoadOrders(); } } } } else { MessageBox.Show("Выберите заказ для удаления"); } } private void btnSearch_Click(object sender, EventArgs e) { string serviceName = Microsoft.VisualBasic.Interaction.InputBox("Введите название услуги", "Поиск", "wedding"); if (!string.IsNullOrEmpty(serviceName)) { using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString)) { conn.Open(); string sql; if (_role == "admin") { sql = "select * from get_orders_by_service_today(@serviceName)"; } else { sql = @" select o.order_id, s.service_name, o.order_date, s.price as total_amount from orders o join services s on o.service_id = s.service_id join clients c on o.client_id = c.client_id join users u on c.user_id = u.user_id where s.service_name = @serviceName and u.login = @login"; } NpgsqlCommand cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.AddWithValue("@serviceName", serviceName); if (_role != "admin") { cmd.Parameters.AddWithValue("@login", _login); } NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt); // Скрываем столбцы с ID if (dt.Columns.Contains("client_id")) dt.Columns.Remove("client_id"); if (dt.Columns.Contains("employee_id")) dt.Columns.Remove("employee_id"); if (dt.Columns.Contains("service_id")) dt.Columns.Remove("service_id"); dgvOrders.DataSource = dt; if (dgvOrders.Columns.Contains("order_id")) { dgvOrders.Columns["order_id"].Visible = false; } } } } private void btnReport_Click(object sender, EventArgs e) { DateTime start = DateTime.Now.AddDays(-30); DateTime end = DateTime.Now; using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString)) { conn.Open(); string sql; if (_role == "admin") { sql = "select * from v_orders_with_total where order_date between @start and @end"; } else { sql = @" select o.order_id, s.service_name, o.order_date, s.price as total_amount from orders o join services s on o.service_id = s.service_id join clients c on o.client_id = c.client_id join users u on c.user_id = u.user_id where o.order_date between @start and @end and u.login = @login"; } NpgsqlCommand cmd = new NpgsqlCommand(sql, conn); cmd.Parameters.AddWithValue("@start", start); cmd.Parameters.AddWithValue("@end", end); if (_role != "admin") { cmd.Parameters.AddWithValue("@login", _login); } NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt); // Скрываем столбцы с ID if (dt.Columns.Contains("client_id")) dt.Columns.Remove("client_id"); if (dt.Columns.Contains("employee_id")) dt.Columns.Remove("employee_id"); if (dt.Columns.Contains("service_id")) dt.Columns.Remove("service_id"); dgvOrders.DataSource = dt; if (dgvOrders.Columns.Contains("order_id")) { dgvOrders.Columns["order_id"].Visible = false; } } } private void btnServices_Click(object sender, EventArgs e) { if (_role == "client") { MessageBox.Show("Клиент не может управлять услугами."); return; } ServiceForm serviceForm = new ServiceForm(_connectionString); serviceForm.ShowDialog(); } private void btnClients_Click(object sender, EventArgs e) { if (_role == "client") { MessageBox.Show("Клиент не может управлять клиентами."); return; } ClientForm clientForm = new ClientForm(_connectionString); clientForm.ShowDialog(); } private void btnLogout_Click(object sender, EventArgs e) { this.Close(); LoginForm loginForm = new LoginForm(); loginForm.Show(); } } }