117 lines
3.4 KiB
C#
117 lines
3.4 KiB
C#
using LDBproject.Entities.Enums;
|
|
using LDBproject.Entities;
|
|
using LDBproject.Repositories;
|
|
|
|
namespace LDBproject.AdditionalForms;
|
|
|
|
public partial class BookF : Form
|
|
{
|
|
private readonly IBookRep _bookRepository;
|
|
private int? _bookID;
|
|
|
|
public BookF(IBookRep bookR)
|
|
{
|
|
InitializeComponent();
|
|
_bookRepository = bookR ?? throw new ArgumentNullException(nameof(bookR));
|
|
|
|
StatusCbox.DataSource = Enum.GetValues(typeof(BookStat));
|
|
|
|
// Populate the checkbox list with enum values as before
|
|
foreach (var elem in Enum.GetValues(typeof(Genres)))
|
|
{
|
|
GenresChBoxList.Items.Add(elem);
|
|
}
|
|
}
|
|
|
|
public int ID
|
|
{
|
|
set
|
|
{
|
|
try
|
|
{
|
|
var book = _bookRepository.GetBookByID(value);
|
|
|
|
if (book == null)
|
|
{
|
|
throw new InvalidDataException(nameof(book));
|
|
}
|
|
|
|
// Clear all checkboxes
|
|
for (int i = 0; i < GenresChBoxList.Items.Count; i++)
|
|
{
|
|
GenresChBoxList.SetItemChecked(i, false);
|
|
}
|
|
|
|
// Check the checkboxes based on the book's GenreIDs
|
|
foreach (Genres genre in Enum.GetValues(typeof(Genres)))
|
|
{
|
|
if ((genre & book.GenreMask) != 0)
|
|
{
|
|
int index = GenresChBoxList.Items.IndexOf(genre);
|
|
if (index != -1)
|
|
{
|
|
GenresChBoxList.SetItemChecked(index, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
TitleTb.Text = book.Title;
|
|
AuthorTb.Text = book.Author;
|
|
YearNud.Value = book.PublishYear;
|
|
StatusCbox.SelectedItem = book.Status;
|
|
|
|
_bookID = value;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, "BookF [ Error : wrong data ]", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SaveBtn_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (string.IsNullOrWhiteSpace(TitleTb.Text)
|
|
|| GenresChBoxList.CheckedItems.Count == 0
|
|
|| StatusCbox.SelectedIndex < 1)
|
|
{
|
|
throw new Exception("BookF [ Blank spaces were left, not enough information ]");
|
|
}
|
|
|
|
if (_bookID.HasValue)
|
|
{
|
|
_bookRepository.UpdateBook(CreateBook(_bookID.Value));
|
|
}
|
|
else
|
|
{
|
|
_bookRepository.AddBook(CreateBook(0));
|
|
}
|
|
|
|
Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, "BookF [ Error : while saving ]",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void DiscardBtn_Click(object sender, EventArgs e) => Close();
|
|
|
|
private Book CreateBook(int id)
|
|
{
|
|
Genres selectedGenres = Genres.None;
|
|
foreach (var item in GenresChBoxList.CheckedItems)
|
|
{
|
|
if (item is Genres genre)
|
|
selectedGenres |= genre;
|
|
}
|
|
|
|
return Book.AddBook(id, TitleTb.Text, AuthorTb.Text,
|
|
(int)YearNud.Value, selectedGenres, (BookStat)StatusCbox.SelectedItem!);
|
|
}
|
|
}
|