using FrameworkDAL.CustomCode.Checking; using FrameworkDAL.DTO.Checking; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; using System.ComponentModel.DataAnnotations; namespace FrameworkBLL.Checking { public class CheckingBLL : ICheckingBLL { private readonly ICheckingDAL _CheckingDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CheckingBLL(ICheckingDAL CheckingDAL, AutoNumber autoNumber, IValidation IValidation) { _CheckingDAL = CheckingDAL; _AutoNumber = autoNumber; _Validation = IValidation; } public async Task GetChecking(int CheckingId, LoginDTO LoginDTO) { try { return await _CheckingDAL.GetChecking(CheckingId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveChecking(CheckingDTO CheckingDTO, LoginDTO LoginDTO) { if (CheckingDTO == null) throw new ArgumentNullException(nameof(CheckingDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(CheckingDTO.CheckingCode, nameof(CheckingDTO.CheckingCode)); await _Validation.NotEmpty(CheckingDTO.CheckingName, nameof(CheckingDTO.CheckingName)); CheckingDTO.CheckingModifiedById = LoginDTO.UserId; CheckingDTO.CheckingModifiedOn = DateTime.UtcNow; int count = 1; if (CheckingDTO.CheckingId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "Checking", LoginDTO); CheckingDTO.CheckingId = autoNumberDTO.StartNumber; CheckingDTO.CheckingCreatedById = LoginDTO.UserId; CheckingDTO.CheckingCreatedOn = DateTime.UtcNow; await _CheckingDAL.SaveChecking(CheckingDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {CheckingDTO.CheckingId}"; } else { await _CheckingDAL.UpdateChecking(CheckingDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {CheckingDTO.CheckingId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && CheckingDTO.CheckingId > 0) await _AutoNumber.RollbackAutoNumber("Checking", CheckingDTO.CheckingId, LoginDTO); throw; } } public async Task GetSelectListChecking(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _CheckingDAL.GetSelectListChecking(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteChecking(int CheckingId, LoginDTO LoginDTO) { try { return await _CheckingDAL.DeleteChecking(CheckingId, LoginDTO); } catch (Exception) { throw; } } } }