using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using PayRollDAL.CustomeCode.Village; using PayRollDAL.DTO.Village; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PayRollBLL.Village { public class VillageBLL : IVillageBLL { private readonly IVillageDAL _VillageDAL; private readonly AutoNumber _AutoNumber; private readonly IQueryExecutor _QueryExecutor; public VillageBLL(IVillageDAL villageDAL, AutoNumber autoNumber, IQueryExecutor queryExecutor) { _VillageDAL = villageDAL; _AutoNumber = autoNumber; _QueryExecutor = queryExecutor; } // ── Picklist ────────────────────────────────────────────────────── public async Task GetSelectListVillage(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO, bool IsCount = false) { return await _VillageDAL .GetSelectListVillage(FirstNumber, MaxResult, CriteriaDTO, LoginDTO, IsCount) .ConfigureAwait(false); } // ── Get single record ───────────────────────────────────────────── public async Task GetVillage(int VillageId, LoginDTO LoginDTO) { return await _VillageDAL.GetVillage(VillageId, LoginDTO).ConfigureAwait(false); } // ── Save (insert or update) ─────────────────────────────────────── public async Task SaveVillage(VillageDTO VillageDTO, LoginDTO LoginDTO) { if (VillageDTO == null) throw new ArgumentNullException(nameof(VillageDTO)); bool isNew = VillageDTO.VillageId == 0; AutoNumberDTO? autoNumberDTO = null; var trans = await _QueryExecutor.BeginTransactionAsync(LoginDTO).ConfigureAwait(false); try { if (isNew) { autoNumberDTO = await _AutoNumber.GetNumberAsync(1, "VILLAGE", LoginDTO) .ConfigureAwait(false); VillageDTO.VillageId = autoNumberDTO.StartNumber; VillageDTO.VillageCreatedById = LoginDTO.UserId; VillageDTO.VillageCreatedOn = DateTime.UtcNow; } VillageDTO.VillageModifiedById = LoginDTO.UserId; VillageDTO.VillageModifiedOn = DateTime.UtcNow; int rows = isNew ? await _VillageDAL.SaveVillage(VillageDTO, LoginDTO, trans).ConfigureAwait(false) : await _VillageDAL.UpdateVillage(VillageDTO, LoginDTO, trans).ConfigureAwait(false); await _QueryExecutor.CommitAsync(trans).ConfigureAwait(false); if (rows <= 0) return isNew ? "Failed to save village." : "Failed to update village."; return isNew ? $"Details Saved Successfully With Id :{VillageDTO.VillageId}" : $"Details Updated Successfully With Id :{VillageDTO.VillageId}"; } catch (Exception) { await _QueryExecutor.RollbackAsync(trans).ConfigureAwait(false); if (autoNumberDTO != null) await _AutoNumber.RollbackAutoNumber("VILLAGE", autoNumberDTO.StartNumber, LoginDTO) .ConfigureAwait(false); throw; } } // ── Delete ──────────────────────────────────────────────────────── public async Task DeleteVillage(int VillageId, LoginDTO LoginDTO) { return await _VillageDAL.DeleteVillage(VillageId, LoginDTO).ConfigureAwait(false); } } }