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