| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- using Npgsql;
- using System;
- using System.Configuration;
- using System.Data;
- using System.Windows.Forms;
- namespace WindowsFormsApp4
- {
- public partial class ReaderMainForm : Form
- {
- private readonly string connStr = ConfigurationManager.ConnectionStrings["PostgreSQL"].ConnectionString;
- public ReaderMainForm()
- {
- InitializeComponent();
- }
- private void ReaderMainForm_Load(object sender, EventArgs e)
- {
- LoadLibraryName();
- labelWelcome.Text = $"Читатель: {Session.UserFullName}";
- LoadMyLoans();
- tabControl.SelectedIndex = 0;
- }
- private void LoadLibraryName()
- {
- string query = "SELECT name FROM libraries WHERE id = @libId";
- using (var conn = new NpgsqlConnection(connStr))
- using (var cmd = new NpgsqlCommand(query, conn))
- {
- cmd.Parameters.AddWithValue("libId", Session.LibraryId);
- conn.Open();
- var result = cmd.ExecuteScalar();
- labelLibraryName.Text = result != null ? "Библиотека: " + result.ToString() : "Библиотека: Неизвестно";
- }
- }
- private void btnSearch_Click(object sender, EventArgs e)
- {
- string searchTerm = txtSearch.Text.Trim();
- if (string.IsNullOrEmpty(searchTerm) || searchTerm == "Введите название или автора")
- {
- MessageBox.Show("Введите название книги или фамилию автора");
- return;
- }
- string query = "SELECT * FROM search_books(@search)";
- DataTable dt = new DataTable();
- using (var conn = new NpgsqlConnection(connStr))
- using (var cmd = new NpgsqlCommand(query, conn))
- {
- cmd.Parameters.AddWithValue("search", searchTerm);
- conn.Open();
- using (var adapter = new NpgsqlDataAdapter(cmd))
- {
- adapter.Fill(dt);
- }
- }
- dataGridViewBooks.DataSource = dt;
- }
- private void LoadMyLoans()
- {
- string query = @"
- SELECT
- o.d AS order_id,
- b.title AS Название,
- a.name || ' ' || a.lastname AS Автор,
- o.give_date AS Дата_выдачи,
- o.return_date AS План_возврата,
- CASE WHEN o.return_date < CURRENT_DATE THEN 'Просрочена' ELSE 'Активна' END AS Статус
- FROM orders o
- JOIN book_exemplar be ON o.book_exemplar = be.isbn
- JOIN book b ON be.book_id = b.id
- JOIN authors a ON b.author_id = a.id
- WHERE o.user_id = @userId AND o.fact_return_date IS NULL
- ORDER BY o.return_date";
- DataTable dt = new DataTable();
- using (var conn = new NpgsqlConnection(connStr))
- using (var cmd = new NpgsqlCommand(query, conn))
- {
- cmd.Parameters.AddWithValue("userId", Session.UserId);
- conn.Open();
- using (var adapter = new NpgsqlDataAdapter(cmd))
- {
- adapter.Fill(dt);
- }
- }
- dataGridViewMyLoans.DataSource = dt;
- if (dataGridViewMyLoans.Columns["order_id"] != null)
- dataGridViewMyLoans.Columns["order_id"].Visible = false;
- }
- private void btnExtend_Click(object sender, EventArgs e)
- {
- if (dataGridViewMyLoans.CurrentRow == null)
- {
- MessageBox.Show("Выберите книгу для продления", "Ошибка");
- return;
- }
- int orderId = Convert.ToInt32(dataGridViewMyLoans.CurrentRow.Cells["order_id"].Value);
- string status = dataGridViewMyLoans.CurrentRow.Cells["Статус"].Value.ToString();
- if (status == "Просрочена")
- {
- MessageBox.Show("Нельзя продлить просроченную книгу. Обратитесь в библиотеку.", "Ошибка");
- return;
- }
- try
- {
- using (var conn = new NpgsqlConnection(connStr))
- {
- conn.Open();
- string sql = @"
- UPDATE orders
- SET return_date = return_date + 14,
- extended = true
- WHERE d = @orderId AND fact_return_date IS NULL";
- using (var cmd = new NpgsqlCommand(sql, conn))
- {
- cmd.Parameters.AddWithValue("orderId", orderId);
- int rows = cmd.ExecuteNonQuery();
- if (rows > 0)
- {
- MessageBox.Show("Книга продлена на 14 дней", "Успех");
- LoadMyLoans();
- }
- else
- {
- MessageBox.Show("Не удалось продлить книгу", "Ошибка");
- }
- }
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Ошибка: {ex.Message}", "Ошибка");
- }
- }
- private void btnLogout_Click(object sender, EventArgs e)
- {
- Session.UserId = 0;
- Session.UserRole = null;
- Session.UserFullName = null;
- Session.LibraryId = null;
- this.Close();
- }
- private void labelWelcome_Click(object sender, EventArgs e)
- {
- }
- }
- }
|