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!);
}
}