PIbd-24_Pruidze.I.K_DBproje.../LibraryDBproject/LDBproj/AdditionalForms/EmployeeF.cs

104 lines
3.1 KiB
C#

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