using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using Dapr.Client; using GB5Shared.DaprCache; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using GB5Shared.Validation; using PayRollDAL.CustomeCode.VisitorPass; using PayRollDAL.DTO.VisitorPass; namespace PayRollBLL.VisitorPass { public class VisitorPassBLL : IVisitorPassBLL { private readonly IVisitorPassDAL _VisitorPassDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; private readonly IQueryExecutor _QueryExecutor; private readonly VoucherNumberService _voucherNumberService; public VisitorPassBLL(IVisitorPassDAL IVisitorPassDAL, AutoNumber AutoNumber, IValidation Validation, IQueryExecutor QueryExecutor, VoucherNumberService voucherNumberService) { _VisitorPassDAL = IVisitorPassDAL; _AutoNumber = AutoNumber; _Validation = Validation; _QueryExecutor = QueryExecutor; _voucherNumberService = voucherNumberService; } public async Task GetVisitorPass(int VisitorPassId, LoginDTO LoginDTO) { try { return await _VisitorPassDAL.GetVisitorPass(VisitorPassId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListVisitorPass(int FirstNumber, int MaxResult, int ShowCompleted, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _VisitorPassDAL.GetSelectListVisitorPass(FirstNumber, MaxResult, ShowCompleted, CriteriaDTO, LoginDTO); } catch (Exception ex) { throw new Exception("Error in GetSelectListVisitorPass", ex); } } public async Task SaveVisitorPass(VisitorPassDTO VisitorPassDTO, LoginDTO LoginDTO) { if (VisitorPassDTO == null) throw new ArgumentNullException(nameof(VisitorPassDTO)); AutoNumberDTO? autoNumberDTO = null; try { //await _Validation.NotEmpty(VisitorPassDTO.VisitorPassPassNumber, nameof(VisitorPassDTO.VisitorPassPassNumber)); VisitorPassDTO.VisitorPassModifiedById = LoginDTO.UserId; VisitorPassDTO.VisitorPassModifiedOn = DateTime.UtcNow; if (VisitorPassDTO.VisitorPassId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(1, "VISITORPASS", LoginDTO); VisitorPassDTO.VisitorPassId = autoNumberDTO.StartNumber; string? passNumber = await _voucherNumberService.GetNextVoucherNumberAsync(VisitorPassDTO.BIZTransactionTypeId, VisitorPassDTO.VisitorPassPassDate, LoginDTO, transaction: null); if (passNumber != null) VisitorPassDTO.VisitorPassPassNumber = passNumber; VisitorPassDTO.VisitorPassCreatedById = LoginDTO.UserId; VisitorPassDTO.VisitorPassCreatedOn = DateTime.UtcNow; //int childId = VisitorPassDTO.VisitorPassId + 1; int minDetailId = await _VisitorPassDAL.GetMinVisitorPassDetailId(LoginDTO); minDetailId--; int minPunchId = await _VisitorPassDAL.GetMinVisitorPunchId(LoginDTO); minPunchId--; if (VisitorPassDTO.VisitorPassDetailArray != null) { foreach (var detail in VisitorPassDTO.VisitorPassDetailArray) { detail.VisitorPassDetailId = minDetailId--; detail.VisitorPassId = VisitorPassDTO.VisitorPassId; } } if (VisitorPassDTO.VisitorPunchArray != null) { foreach (var punch in VisitorPassDTO.VisitorPunchArray) { punch.VisitorPunchId = minPunchId--; punch.VisitorPassId = VisitorPassDTO.VisitorPassId; } } await _VisitorPassDAL.SaveVisitorPass(VisitorPassDTO, LoginDTO); return $"VisitorPass saved successfully with PassNumber {VisitorPassDTO.VisitorPassPassNumber}."; } else { int childId = VisitorPassDTO.VisitorPassId + 1; if (VisitorPassDTO.VisitorPassDetailArray != null) { foreach (var detail in VisitorPassDTO.VisitorPassDetailArray) { if (detail.VisitorPassDetailId == 0) { detail.VisitorPassDetailId = childId++; detail.VisitorPassId = VisitorPassDTO.VisitorPassId; } } } if (VisitorPassDTO.VisitorPunchArray != null) { foreach (var punch in VisitorPassDTO.VisitorPunchArray) { if (punch.VisitorPunchId == 0) { punch.VisitorPunchId = childId++; punch.VisitorPassId = VisitorPassDTO.VisitorPassId; } } } await _VisitorPassDAL.UpdateVisitorPass(VisitorPassDTO, LoginDTO); return $"VisitorPass updated successfully with PassNumber {VisitorPassDTO.VisitorPassPassNumber}."; } } catch { if (autoNumberDTO != null && VisitorPassDTO.VisitorPassId > 0) { await _AutoNumber.RollbackAutoNumber("VISITORPASS", VisitorPassDTO.VisitorPassId, LoginDTO); } throw; } } public async Task DeleteVisitorPass(int VisitorPassId, LoginDTO LoginDTO) { try { return await _VisitorPassDAL.DeleteVisitorPass(VisitorPassId, LoginDTO); } catch (Exception) { throw; } } } }