using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.EntityHandler; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using PayRollDAL.CustomeCode.AdvanceRepayment; using PayRollDAL.DTO.AdvanceRepayment; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; using static GB5Shared.GB5Constant.Constant; namespace PayRollBLL.AdvanceRepayment { public class AdvanceRepaymentBLL : IAdvanceRepaymentBLL { private readonly IAdvanceRepaymentDAL _AdvanceRepaymentDAL; private readonly AutoNumber _AutoNumber; private readonly IQueryExecutor _QueryExecutor; private readonly BaseEntityAppService _baseEntityAppService; public AdvanceRepaymentBLL(IAdvanceRepaymentDAL IAdvanceRepaymentDAL, AutoNumber autoNumber, IQueryExecutor IQueryExecutor, BaseEntityAppService baseEntityAppService) { _AdvanceRepaymentDAL = IAdvanceRepaymentDAL; _AutoNumber = autoNumber; _QueryExecutor = IQueryExecutor; _baseEntityAppService = baseEntityAppService; } public async Task GetAdvanceRepayment(int AdvanceRepaymentId, LoginDTO LoginDTO) { try { return await _AdvanceRepaymentDAL.GetAdvanceRepayment(AdvanceRepaymentId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListAdvanceRepayment(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _AdvanceRepaymentDAL.GetSelectListAdvanceRepayment(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception ex) { throw new Exception("Error in GetSelectListAdvanceRepayment", ex); } } public async Task GetAdvanceRepaymentList(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _AdvanceRepaymentDAL.GetAdvanceRepaymentList(CriteriaDTO, LoginDTO); } catch (Exception ex) { throw new Exception("Error in GetAdvanceRepaymentList", ex); } } public async Task SaveAdvanceRepayment(AdvanceRepaymentDTO AdvanceRepaymentDTO, LoginDTO LoginDTO) { try { if (AdvanceRepaymentDTO == null) throw new ArgumentNullException(nameof(AdvanceRepaymentDTO)); bool isNew = AdvanceRepaymentDTO.AdvanceRepaymentId == 0; // Pre-Transaction : Auto Number var AdvanceRepaymentAutoNumber = await _AutoNumber.GetAutoNumber( 1, AUTONUMBERCONSTANT.ADVANCEREPAYMENT, LoginDTO); var Trans = await _QueryExecutor.BeginTransactionAsync(LoginDTO); try { await _baseEntityAppService.ExecuteSaveAsync( EntityConstant.ADVANCEREPAYMENT, EventTypeConstant.PRSADVANCEREPAYMENTSAVE, AdvanceRepaymentDTO, LoginDTO, async tx => { if (isNew) { AdvanceRepaymentDTO.AdvanceRepaymentId = AdvanceRepaymentAutoNumber.StartNumber; AdvanceRepaymentDTO.AdvanceRepaymentCreatedById = LoginDTO.UserId; AdvanceRepaymentDTO.AdvanceRepaymentCreatedOn = DateTime.UtcNow; } AdvanceRepaymentDTO.AdvanceRepaymentModifiedById = LoginDTO.UserId; AdvanceRepaymentDTO.AdvanceRepaymentModifiedOn = DateTime.UtcNow; int Result; if (isNew) { Result = await _AdvanceRepaymentDAL.SaveAdvanceRepayment(AdvanceRepaymentDTO, LoginDTO, tx); } else { Result = await _AdvanceRepaymentDAL.UpdateAdvanceRepayment(AdvanceRepaymentDTO, LoginDTO, tx); } return Result; }, null, BIZTRANSACTIONCLASSCONSTANT.ADVANCEREPAYMENT, BizTransactionConstant.ADVANCEREPAYMENT, Trans, isNew); await _QueryExecutor.CommitAsync(Trans); if (isNew) { return SuccessResponse.SaveSuccessMessage + AdvanceRepaymentDTO.AdvanceRepaymentRepaymentNumber; } else { return SuccessResponse.UpdateSuccessMessage + AdvanceRepaymentDTO.AdvanceRepaymentRepaymentNumber; } } catch (Exception) { await _QueryExecutor.RollbackAsync(Trans); throw; } } catch (Exception) { throw; } } public async Task DeleteAdvanceRepayment(int AdvanceRepaymentId, LoginDTO LoginDTO) { try { return await _AdvanceRepaymentDAL.DeleteAdvanceRepayment(AdvanceRepaymentId, LoginDTO); } catch (Exception) { throw; } } } }