using AdminDAL.CustomCode.FinanceBook; using AdminDAL.DTO.FinanceBook; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.Resource.GB5Solution; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.ResponseStandard; using System; using System.Threading.Tasks; namespace AdminBLL.FinanceBook { public class FinanceBookBLL : IFinanceBookBLL { private readonly IFinanceBookDAL _FinanceBookDAL; private readonly AutoNumber _AutoNumber; public FinanceBookBLL(IFinanceBookDAL FinanceBookDAL, AutoNumber AutoNumber) { _FinanceBookDAL = FinanceBookDAL; _AutoNumber = AutoNumber; } /// /// Retrieves a single FinanceBook record by its unique identifier. /// /// The ID of the FinanceBook to retrieve. /// The current user's login details. /// A JSON string representing the FinanceBook details. public async Task GetFinanceBook(int FinanceBookId, LoginDTO LoginDTO) { try { return await _FinanceBookDAL.GetFinanceBook(FinanceBookId, LoginDTO); } catch (Exception) { throw; } } /// /// Inserts a new FinanceBook record or updates an existing one. /// Applies business rules such as auto-number assignment for new records. /// /// The FinanceBook data to save or update. /// The current user's login details. /// A message string indicating success and the FinanceBook ID. public async Task SaveFinanceBook(FinanceBookDTO FinanceBookDTO, LoginDTO LoginDTO) { try { int initialId = FinanceBookDTO.FinanceBookId; int count = 1 + initialId; if (initialId == 0) { AutoNumberDTO autoNumberDTO = await _AutoNumber.GetNumberAsync(count, "FinanceBook", LoginDTO); FinanceBookDTO.FinanceBookId = autoNumberDTO.StartNumber; await _FinanceBookDAL.SaveFinanceBook(FinanceBookDTO, LoginDTO); return $"{AdminResource.SavedSuccessfully} FinanceBookId {FinanceBookDTO.FinanceBookId}"; } else { await _FinanceBookDAL.UpdateFinanceBook(FinanceBookDTO, LoginDTO); return $"{AdminResource.UpdatedSuccessfully} FinanceBookId {FinanceBookDTO.FinanceBookId}"; } } catch (Exception) { throw; } } /// /// Retrieves a list of FinanceBook records based on filter criteria. /// Typically used for populating dropdowns or selection lists in the UI. /// /// Filter criteria for selecting FinanceBooks. /// The current user's login details. /// A JSON string representing the list of FinanceBooks. public async Task GetSelectListFinanceBook(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _FinanceBookDAL.GetSelectListFinanceBook(CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } /// /// Deletes a FinanceBook record by its unique identifier. /// /// The ID of the FinanceBook to delete. /// The current user's login details. /// A message string indicating success or failure of the delete operation. public async Task DeleteFinanceBook(int FinanceBookId, LoginDTO LoginDTO) { try { return await _FinanceBookDAL.DeleteFinanceBook(FinanceBookId, LoginDTO); } catch (Exception) { throw; } } } }