ReaderMainForm.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using Npgsql;
  2. using System;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Windows.Forms;
  6. namespace WindowsFormsApp4
  7. {
  8. public partial class ReaderMainForm : Form
  9. {
  10. private readonly string connStr = ConfigurationManager.ConnectionStrings["PostgreSQL"].ConnectionString;
  11. public ReaderMainForm()
  12. {
  13. InitializeComponent();
  14. }
  15. private void ReaderMainForm_Load(object sender, EventArgs e)
  16. {
  17. LoadLibraryName();
  18. labelWelcome.Text = $"Читатель: {Session.UserFullName}";
  19. LoadMyLoans();
  20. tabControl.SelectedIndex = 0;
  21. }
  22. private void LoadLibraryName()
  23. {
  24. string query = "SELECT name FROM libraries WHERE id = @libId";
  25. using (var conn = new NpgsqlConnection(connStr))
  26. using (var cmd = new NpgsqlCommand(query, conn))
  27. {
  28. cmd.Parameters.AddWithValue("libId", Session.LibraryId);
  29. conn.Open();
  30. var result = cmd.ExecuteScalar();
  31. labelLibraryName.Text = result != null ? "Библиотека: " + result.ToString() : "Библиотека: Неизвестно";
  32. }
  33. }
  34. private void btnSearch_Click(object sender, EventArgs e)
  35. {
  36. string searchTerm = txtSearch.Text.Trim();
  37. if (string.IsNullOrEmpty(searchTerm) || searchTerm == "Введите название или автора")
  38. {
  39. MessageBox.Show("Введите название книги или фамилию автора");
  40. return;
  41. }
  42. string query = "SELECT * FROM search_books(@search)";
  43. DataTable dt = new DataTable();
  44. using (var conn = new NpgsqlConnection(connStr))
  45. using (var cmd = new NpgsqlCommand(query, conn))
  46. {
  47. cmd.Parameters.AddWithValue("search", searchTerm);
  48. conn.Open();
  49. using (var adapter = new NpgsqlDataAdapter(cmd))
  50. {
  51. adapter.Fill(dt);
  52. }
  53. }
  54. dataGridViewBooks.DataSource = dt;
  55. }
  56. private void LoadMyLoans()
  57. {
  58. string query = @"
  59. SELECT
  60. o.d AS order_id,
  61. b.title AS Название,
  62. a.name || ' ' || a.lastname AS Автор,
  63. o.give_date AS Дата_выдачи,
  64. o.return_date AS План_возврата,
  65. CASE WHEN o.return_date < CURRENT_DATE THEN 'Просрочена' ELSE 'Активна' END AS Статус
  66. FROM orders o
  67. JOIN book_exemplar be ON o.book_exemplar = be.isbn
  68. JOIN book b ON be.book_id = b.id
  69. JOIN authors a ON b.author_id = a.id
  70. WHERE o.user_id = @userId AND o.fact_return_date IS NULL
  71. ORDER BY o.return_date";
  72. DataTable dt = new DataTable();
  73. using (var conn = new NpgsqlConnection(connStr))
  74. using (var cmd = new NpgsqlCommand(query, conn))
  75. {
  76. cmd.Parameters.AddWithValue("userId", Session.UserId);
  77. conn.Open();
  78. using (var adapter = new NpgsqlDataAdapter(cmd))
  79. {
  80. adapter.Fill(dt);
  81. }
  82. }
  83. dataGridViewMyLoans.DataSource = dt;
  84. if (dataGridViewMyLoans.Columns["order_id"] != null)
  85. dataGridViewMyLoans.Columns["order_id"].Visible = false;
  86. }
  87. private void btnExtend_Click(object sender, EventArgs e)
  88. {
  89. if (dataGridViewMyLoans.CurrentRow == null)
  90. {
  91. MessageBox.Show("Выберите книгу для продления", "Ошибка");
  92. return;
  93. }
  94. int orderId = Convert.ToInt32(dataGridViewMyLoans.CurrentRow.Cells["order_id"].Value);
  95. string status = dataGridViewMyLoans.CurrentRow.Cells["Статус"].Value.ToString();
  96. if (status == "Просрочена")
  97. {
  98. MessageBox.Show("Нельзя продлить просроченную книгу. Обратитесь в библиотеку.", "Ошибка");
  99. return;
  100. }
  101. try
  102. {
  103. using (var conn = new NpgsqlConnection(connStr))
  104. {
  105. conn.Open();
  106. string sql = @"
  107. UPDATE orders
  108. SET return_date = return_date + 14,
  109. extended = true
  110. WHERE d = @orderId AND fact_return_date IS NULL";
  111. using (var cmd = new NpgsqlCommand(sql, conn))
  112. {
  113. cmd.Parameters.AddWithValue("orderId", orderId);
  114. int rows = cmd.ExecuteNonQuery();
  115. if (rows > 0)
  116. {
  117. MessageBox.Show("Книга продлена на 14 дней", "Успех");
  118. LoadMyLoans();
  119. }
  120. else
  121. {
  122. MessageBox.Show("Не удалось продлить книгу", "Ошибка");
  123. }
  124. }
  125. }
  126. }
  127. catch (Exception ex)
  128. {
  129. MessageBox.Show($"Ошибка: {ex.Message}", "Ошибка");
  130. }
  131. }
  132. private void btnLogout_Click(object sender, EventArgs e)
  133. {
  134. Session.UserId = 0;
  135. Session.UserRole = null;
  136. Session.UserFullName = null;
  137. Session.LibraryId = null;
  138. this.Close();
  139. }
  140. private void labelWelcome_Click(object sender, EventArgs e)
  141. {
  142. }
  143. }
  144. }