using AdminDAL.CustomCode.BIZTransaction; using AdminDAL.CustomCode.OrganizationUnit; using AdminDAL.DTO.BIZTransactionType; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AdminBLL.BIZTransaction { public class BIZTransactionBLL : IBIZTransactionBLL { private readonly IBIZTransactionDAL _BIZTransactionDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public BIZTransactionBLL(IBIZTransactionDAL IBIZTransactionDAL, AutoNumber AutoNumber, IValidation Validation) { _BIZTransactionDAL = IBIZTransactionDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetBIZTransaction(int BIZTransactionId, LoginDTO LoginDTO) { try { return await _BIZTransactionDAL.GetBIZTransaction(BIZTransactionId, LoginDTO); } catch (Exception) { throw; } } public async Task> GetSelectListBIZTransaction(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) => await _BIZTransactionDAL.GetSelectListBIZTransaction(FirstNumber, MaxResult, CriteriaDTO, LoginDTO).ConfigureAwait(false); public async Task GetSelectListBIZTransactionCount(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) => await _BIZTransactionDAL.GetSelectListBIZTransactionCount(CriteriaDTO, LoginDTO).ConfigureAwait(false); public async Task> GetBIZTransactionDetail(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) => await _BIZTransactionDAL.GetBIZTransactionDetail(FirstNumber, MaxResult, CriteriaDTO, LoginDTO).ConfigureAwait(false); public async Task GetBIZTransactionDetailCount(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) => await _BIZTransactionDAL.GetBIZTransactionDetailCount(CriteriaDTO, LoginDTO).ConfigureAwait(false); public async Task SaveBIZTransaction(BIZTransactionDTO BIZTransactionDTO, LoginDTO LoginDTO) { if (BIZTransactionDTO == null) throw new ArgumentNullException(nameof(BIZTransactionDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(BIZTransactionDTO.BIZTransactionCode, nameof(BIZTransactionDTO.BIZTransactionCode)); await _Validation.NotEmpty(BIZTransactionDTO.BIZTransactionName, nameof(BIZTransactionDTO.BIZTransactionName)); BIZTransactionDTO.BIZTransactionModifiedById = LoginDTO.UserId; BIZTransactionDTO.BIZTransactionModifiedOn = DateTime.UtcNow; int initialId = BIZTransactionDTO.BIZTransactionId; int count = 1 + initialId; if (initialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "BIZTRANSACTION", LoginDTO); BIZTransactionDTO.BIZTransactionId = AutoNumberDTO.StartNumber; BIZTransactionDTO.BIZTransactionCreatedById = LoginDTO.UserId; BIZTransactionDTO.BIZTransactionCreatedOn = DateTime.UtcNow; await _BIZTransactionDAL.SaveBIZTransaction(BIZTransactionDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {BIZTransactionDTO.BIZTransactionId}"; } else { await _BIZTransactionDAL.UpdateBIZTransaction(BIZTransactionDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {BIZTransactionDTO.BIZTransactionId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && BIZTransactionDTO.BIZTransactionId > 0) await _AutoNumber.RollbackAutoNumber("BIZTRANSACTION", BIZTransactionDTO.BIZTransactionId, LoginDTO); throw; } } public async Task DeleteBIZTransaction (int BIZTransactionId, LoginDTO LoginDTO) { try { return await _BIZTransactionDAL.DeleteBIZTransaction(BIZTransactionId, LoginDTO); } catch (Exception) { throw; } } } }