using LDBproject.Entities.Enums; using LDBproject.Entities; using LDBproject.Repositories; namespace LDBproject.AdditionalForms; public partial class EmployeeF : Form { private readonly ILibrarianRep _libRepository; private int? _librarianID; public EmployeeF(ILibrarianRep librarianR) { InitializeComponent(); _libRepository = librarianR ?? throw new ArgumentNullException(nameof(librarianR)); foreach (var elem in Enum.GetValues(typeof(Genres))) { GenresCheckedBL.Items.Add(elem); } } public int ID { set { try { var librarian = _libRepository.GetCardByID(value); if (librarian == null) { throw new InvalidDataException(nameof(librarian)); } // Uncheck all genres in the checklist box for (int i = 0; i < GenresCheckedBL.Items.Count; i++) { GenresCheckedBL.SetItemChecked(i, false); } // Check the genres that are in the bitmask foreach (Genres genre in Enum.GetValues(typeof(Genres))) { if ((genre & librarian.GenreMask) != 0 && genre != Genres.None) { int index = GenresCheckedBL.Items.IndexOf(genre); if (index != -1) { GenresCheckedBL.SetItemChecked(index, true); } } } FIOEnterTb.Text = librarian.FIO; _librarianID = value; } catch (Exception ex) { MessageBox.Show(ex.Message, "EmployeeF [ Error : while setting ID ]", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } private void SaveBtn_Click(object sender, EventArgs e) { try { if (string.IsNullOrWhiteSpace(FIOEnterTb.Text) || GenresCheckedBL.CheckedItems.Count == 0) { throw new Exception("EmployeeF [ Blank spaces were left, not enough information ]"); } if (_librarianID.HasValue) { _libRepository.ChangeCardInfo(CreateWorker(_librarianID.Value)); } else { _libRepository.AddCard(CreateWorker(0)); } Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "EmployeeF [ Error : while saving data ]", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void CancelBtn_Click(object sender, EventArgs e) => Close(); private LibrarianCard CreateWorker(int id) { Genres selectedGenres = Genres.None; foreach (var item in GenresCheckedBL.CheckedItems) { if (item is Genres genre) selectedGenres |= genre; } return LibrarianCard.AddWorker(id, FIOEnterTb.Text, selectedGenres); } }