MainForm.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. using System;
  2. using System.Data;
  3. using System.Windows.Forms;
  4. using Npgsql;
  5. namespace PhotoStudioApp
  6. {
  7. public partial class MainForm : Form
  8. {
  9. private int _userId;
  10. private string _role;
  11. private string _login;
  12. private string _connectionString;
  13. public MainForm(int userId, string role, string login, string connectionString)
  14. {
  15. InitializeComponent();
  16. _userId = userId;
  17. _role = role;
  18. _login = login;
  19. _connectionString = connectionString;
  20. // Настройка доступных кнопок в зависимости от роли
  21. if (_role == "client")
  22. {
  23. btnAdd.Enabled = false;
  24. btnDelete.Enabled = false;
  25. btnEdit.Enabled = false;
  26. btnServices.Enabled = false;
  27. btnClients.Enabled = false;
  28. }
  29. LoadOrders();
  30. }
  31. private void LoadOrders()
  32. {
  33. using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString))
  34. {
  35. conn.Open();
  36. string sql;
  37. if (_role == "admin")
  38. {
  39. sql = "select * from v_orders_with_total order by order_date desc";
  40. }
  41. else
  42. {
  43. sql = @"
  44. select
  45. o.order_id,
  46. s.service_name,
  47. o.order_date,
  48. s.price as total_amount
  49. from orders o
  50. join services s on o.service_id = s.service_id
  51. join clients c on o.client_id = c.client_id
  52. join users u on c.user_id = u.user_id
  53. where u.login = @login";
  54. }
  55. NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
  56. if (_role != "admin")
  57. {
  58. cmd.Parameters.AddWithValue("@login", _login);
  59. }
  60. NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd);
  61. DataTable dt = new DataTable();
  62. adapter.Fill(dt);
  63. // Скрываем столбцы с ID из отображения
  64. if (dt.Columns.Contains("client_id")) dt.Columns.Remove("client_id");
  65. if (dt.Columns.Contains("employee_id")) dt.Columns.Remove("employee_id");
  66. if (dt.Columns.Contains("service_id")) dt.Columns.Remove("service_id");
  67. dgvOrders.DataSource = dt;
  68. if (dgvOrders.Columns.Contains("order_id"))
  69. {
  70. dgvOrders.Columns["order_id"].Visible = false;
  71. }
  72. }
  73. }
  74. private void btnAdd_Click(object sender, EventArgs e)
  75. {
  76. if (_role == "client")
  77. {
  78. MessageBox.Show("Клиент не может добавлять заказы.");
  79. return;
  80. }
  81. OrderForm orderForm = new OrderForm(_connectionString);
  82. orderForm.ShowDialog();
  83. LoadOrders();
  84. }
  85. private void btnEdit_Click(object sender, EventArgs e)
  86. {
  87. if (_role == "client")
  88. {
  89. MessageBox.Show("Клиент не может редактировать заказы.");
  90. return;
  91. }
  92. if (dgvOrders.SelectedRows.Count > 0)
  93. {
  94. DataRowView rowView = dgvOrders.SelectedRows[0].DataBoundItem as DataRowView;
  95. if (rowView != null)
  96. {
  97. int orderId = (int)rowView["order_id"];
  98. OrderForm orderForm = new OrderForm(_connectionString, orderId);
  99. orderForm.ShowDialog();
  100. LoadOrders();
  101. }
  102. }
  103. else
  104. {
  105. MessageBox.Show("Выберите заказ для редактирования");
  106. }
  107. }
  108. private void btnDelete_Click(object sender, EventArgs e)
  109. {
  110. if (_role == "client")
  111. {
  112. MessageBox.Show("Клиент не может удалять заказы.");
  113. return;
  114. }
  115. if (dgvOrders.SelectedRows.Count > 0)
  116. {
  117. DataRowView rowView = dgvOrders.SelectedRows[0].DataBoundItem as DataRowView;
  118. if (rowView != null)
  119. {
  120. int orderId = (int)rowView["order_id"];
  121. if (MessageBox.Show("Удалить заказ?", "Подтверждение", MessageBoxButtons.YesNo) == DialogResult.Yes)
  122. {
  123. using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString))
  124. {
  125. conn.Open();
  126. string sql = "delete from orders where order_id = @orderId";
  127. NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
  128. cmd.Parameters.AddWithValue("@orderId", orderId);
  129. cmd.ExecuteNonQuery();
  130. MessageBox.Show("Заказ удалён");
  131. LoadOrders();
  132. }
  133. }
  134. }
  135. }
  136. else
  137. {
  138. MessageBox.Show("Выберите заказ для удаления");
  139. }
  140. }
  141. private void btnSearch_Click(object sender, EventArgs e)
  142. {
  143. string serviceName = Microsoft.VisualBasic.Interaction.InputBox("Введите название услуги", "Поиск", "wedding");
  144. if (!string.IsNullOrEmpty(serviceName))
  145. {
  146. using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString))
  147. {
  148. conn.Open();
  149. string sql;
  150. if (_role == "admin")
  151. {
  152. sql = "select * from get_orders_by_service_today(@serviceName)";
  153. }
  154. else
  155. {
  156. sql = @"
  157. select
  158. o.order_id,
  159. s.service_name,
  160. o.order_date,
  161. s.price as total_amount
  162. from orders o
  163. join services s on o.service_id = s.service_id
  164. join clients c on o.client_id = c.client_id
  165. join users u on c.user_id = u.user_id
  166. where s.service_name = @serviceName
  167. and u.login = @login";
  168. }
  169. NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
  170. cmd.Parameters.AddWithValue("@serviceName", serviceName);
  171. if (_role != "admin")
  172. {
  173. cmd.Parameters.AddWithValue("@login", _login);
  174. }
  175. NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd);
  176. DataTable dt = new DataTable();
  177. adapter.Fill(dt);
  178. // Скрываем столбцы с ID
  179. if (dt.Columns.Contains("client_id")) dt.Columns.Remove("client_id");
  180. if (dt.Columns.Contains("employee_id")) dt.Columns.Remove("employee_id");
  181. if (dt.Columns.Contains("service_id")) dt.Columns.Remove("service_id");
  182. dgvOrders.DataSource = dt;
  183. if (dgvOrders.Columns.Contains("order_id"))
  184. {
  185. dgvOrders.Columns["order_id"].Visible = false;
  186. }
  187. }
  188. }
  189. }
  190. private void btnReport_Click(object sender, EventArgs e)
  191. {
  192. DateTime start = DateTime.Now.AddDays(-30);
  193. DateTime end = DateTime.Now;
  194. using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString))
  195. {
  196. conn.Open();
  197. string sql;
  198. if (_role == "admin")
  199. {
  200. sql = "select * from v_orders_with_total where order_date between @start and @end";
  201. }
  202. else
  203. {
  204. sql = @"
  205. select
  206. o.order_id,
  207. s.service_name,
  208. o.order_date,
  209. s.price as total_amount
  210. from orders o
  211. join services s on o.service_id = s.service_id
  212. join clients c on o.client_id = c.client_id
  213. join users u on c.user_id = u.user_id
  214. where o.order_date between @start and @end
  215. and u.login = @login";
  216. }
  217. NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
  218. cmd.Parameters.AddWithValue("@start", start);
  219. cmd.Parameters.AddWithValue("@end", end);
  220. if (_role != "admin")
  221. {
  222. cmd.Parameters.AddWithValue("@login", _login);
  223. }
  224. NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd);
  225. DataTable dt = new DataTable();
  226. adapter.Fill(dt);
  227. // Скрываем столбцы с ID
  228. if (dt.Columns.Contains("client_id")) dt.Columns.Remove("client_id");
  229. if (dt.Columns.Contains("employee_id")) dt.Columns.Remove("employee_id");
  230. if (dt.Columns.Contains("service_id")) dt.Columns.Remove("service_id");
  231. dgvOrders.DataSource = dt;
  232. if (dgvOrders.Columns.Contains("order_id"))
  233. {
  234. dgvOrders.Columns["order_id"].Visible = false;
  235. }
  236. }
  237. }
  238. private void btnServices_Click(object sender, EventArgs e)
  239. {
  240. if (_role == "client")
  241. {
  242. MessageBox.Show("Клиент не может управлять услугами.");
  243. return;
  244. }
  245. ServiceForm serviceForm = new ServiceForm(_connectionString);
  246. serviceForm.ShowDialog();
  247. }
  248. private void btnClients_Click(object sender, EventArgs e)
  249. {
  250. if (_role == "client")
  251. {
  252. MessageBox.Show("Клиент не может управлять клиентами.");
  253. return;
  254. }
  255. ClientForm clientForm = new ClientForm(_connectionString);
  256. clientForm.ShowDialog();
  257. }
  258. private void btnLogout_Click(object sender, EventArgs e)
  259. {
  260. this.Close();
  261. LoginForm loginForm = new LoginForm();
  262. loginForm.Show();
  263. }
  264. }
  265. }