bibliot.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using Npgsql;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Configuration;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. using System.Windows.Forms.DataVisualization.Charting;
  15. using static System.Collections.Specialized.BitVector32;
  16. namespace WindowsFormsApp4
  17. {
  18. public partial class bibliot : Form
  19. {
  20. readonly string connStr = ConfigurationManager.ConnectionStrings["PostgreSQL"].ConnectionString;
  21. public bibliot()
  22. {
  23. InitializeComponent();
  24. }
  25. private void bibliot_Load(object sender, EventArgs e)
  26. {
  27. LoadLibraryInfo();
  28. LoadStats();
  29. LoadActiveLoans();
  30. }
  31. private void LoadLibraryInfo()
  32. {
  33. string query = "SELECT name FROM libraries WHERE id = @libId";
  34. using (var conn = new NpgsqlConnection(connStr))
  35. using (var cmd = new NpgsqlCommand(query, conn))
  36. {
  37. cmd.Parameters.AddWithValue("libId", Session.LibraryId);
  38. conn.Open();
  39. var result = cmd.ExecuteScalar();
  40. labelLibraryName.Text = result != null ? result.ToString() : "Неизвестная библиотека";
  41. }
  42. }
  43. private void LoadStats()
  44. {
  45. string readersQuery = "SELECT COUNT(*) FROM users WHERE library_id = @libId AND role_name = 'reader'";
  46. string debtorsQuery = @"
  47. SELECT COUNT(DISTINCT u.id)
  48. FROM users u
  49. JOIN orders o ON u.id = o.user_id
  50. WHERE u.library_id = @libId
  51. AND u.role_name = 'reader'
  52. AND o.fact_return_date IS NULL
  53. AND o.return_date < CURRENT_DATE";
  54. using (var conn = new NpgsqlConnection(connStr))
  55. {
  56. conn.Open();
  57. using (var cmd = new NpgsqlCommand(readersQuery, conn))
  58. {
  59. cmd.Parameters.AddWithValue("libId", Session.LibraryId);
  60. var readersCount = cmd.ExecuteScalar();
  61. labelReadersCount.Text = readersCount != null ? readersCount.ToString() : "0";
  62. }
  63. using (var cmd = new NpgsqlCommand(debtorsQuery, conn))
  64. {
  65. cmd.Parameters.AddWithValue("libId", Session.LibraryId);
  66. var debtorsCount = cmd.ExecuteScalar();
  67. labelDebtorsCount.Text = debtorsCount != null ? debtorsCount.ToString() : "0";
  68. }
  69. }
  70. }
  71. private void LoadActiveLoans()
  72. {
  73. string query = @"
  74. SELECT
  75. o.d AS order_id,
  76. u.name || ' ' || u.lastname AS reader_name,
  77. b.title AS book_title,
  78. be.isbn AS inventory_number,
  79. o.give_date,
  80. o.return_date,
  81. CASE WHEN o.return_date < CURRENT_DATE THEN 'Просрочено' ELSE 'Активно' END AS status
  82. FROM orders o
  83. JOIN users u ON o.user_id = u.id
  84. JOIN book_exemplar be ON o.book_exemplar = be.isbn
  85. JOIN book b ON be.book_id = b.id
  86. WHERE o.fact_return_date IS NULL
  87. AND u.library_id = @libId
  88. ORDER BY o.return_date";
  89. DataTable dt = new DataTable();
  90. using (var conn = new NpgsqlConnection(connStr))
  91. using (var cmd = new NpgsqlCommand(query, conn))
  92. {
  93. cmd.Parameters.AddWithValue("libId", Session.LibraryId);
  94. conn.Open();
  95. using (var adapter = new NpgsqlDataAdapter(cmd))
  96. {
  97. adapter.Fill(dt);
  98. }
  99. }
  100. dataGridViewActiveLoans.DataSource = dt;
  101. if (dataGridViewActiveLoans.Columns["order_id"] != null)
  102. dataGridViewActiveLoans.Columns["order_id"].Visible = false;
  103. }
  104. private void buttonReturnBook_Click_1(object sender, EventArgs e)
  105. {
  106. ReturnBookForm returnForm = new ReturnBookForm();
  107. returnForm.FormClosed += (s, args) => { LoadStats(); LoadActiveLoans(); };
  108. returnForm.ShowDialog();
  109. }
  110. private void buttonIssueBook_Click_1(object sender, EventArgs e)
  111. {
  112. IssueBookForm issueForm = new IssueBookForm();
  113. issueForm.FormClosed += (s, args) => { LoadStats(); LoadActiveLoans(); };
  114. issueForm.ShowDialog();
  115. }
  116. private void buttonQuickRegister_Click(object sender, EventArgs e)
  117. {
  118. Register regForm = new Register();
  119. regForm.FormClosed += (s, args) => { LoadStats(); LoadActiveLoans(); };
  120. regForm.ShowDialog();
  121. }
  122. private void buttonAddBook_Click(object sender, EventArgs e)
  123. {
  124. using (var addForm = new AddExemplarsForm())
  125. {
  126. addForm.ShowDialog();
  127. }
  128. }
  129. private void btnLogout_Click(object sender, EventArgs e)
  130. {
  131. Session.UserId = 0;
  132. Session.UserRole = null;
  133. Session.UserFullName = null;
  134. Session.LibraryId = null;
  135. this.Close();
  136. }
  137. }
  138. }