using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using PayRollDAL.CustomeCode.Address; using PayRollDAL.DTO.Address; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace PayRollBLL.Address { public class AddressBLL : IAddressBLL { private readonly IAddressDAL _addressDAL; private readonly AutoNumber _autoNumber; public AddressBLL(IAddressDAL addressDAL, AutoNumber autoNumber) { _addressDAL = addressDAL; _autoNumber = autoNumber; } #region Present Address public async Task SaveOrUpdatePresentAddress(AddressDTO PresentAddress, LoginDTO Login) { if (PresentAddress == null) return -1; // Generate number if new if (PresentAddress.AddressId == 0) { var autoNumber = await _autoNumber.GetNumberAsync(1, "ADDRESS", Login); PresentAddress.AddressId = autoNumber.StartNumber; } // Assign standard fields PresentAddress.AddressObjectTypeId = -1399999905; PresentAddress.AddressAddressType = 0; // Present PresentAddress.AddressAddressNature = 0; // Set from your JSON PresentAddress.AddressCreatedById = Login.UserId; PresentAddress.AddressCreatedOn = DateTime.UtcNow; PresentAddress.AddressModifiedById = Login.UserId; PresentAddress.AddressModifiedOn = DateTime.UtcNow; // Set SourceType from JSON (value: 3) PresentAddress.AddressSourceType = 3; // Check if address exists List existingAddresses = await _addressDAL.GetAddressDetailAsync(PresentAddress.AddressObjectTypeId, PresentAddress.AddressObjectId, Login); bool exists = existingAddresses != null && existingAddresses.Any(a => a.AddressAddressType == 0); if (exists) await _addressDAL.UpdateAddress(PresentAddress, Login); else await _addressDAL.SaveAddress(PresentAddress, Login); return PresentAddress.AddressId; } #endregion #region Permanent Address public async Task SaveOrUpdatePermanentAddress(AddressDTO PermanentAddress, LoginDTO Login) { if (PermanentAddress == null) return -1; if (PermanentAddress.AddressId == 0) { var autoNumber = await _autoNumber.GetNumberAsync(1, "ADDRESS", Login); PermanentAddress.AddressId = autoNumber.StartNumber; } PermanentAddress.AddressObjectTypeId = -1399999905; PermanentAddress.AddressAddressType = 1; // Permanent PermanentAddress.AddressAddressNature = 0; PermanentAddress.AddressCreatedById = Login.UserId; PermanentAddress.AddressCreatedOn = DateTime.UtcNow; PermanentAddress.AddressModifiedById = Login.UserId; PermanentAddress.AddressModifiedOn = DateTime.UtcNow; // Set SourceType from JSON (value: 3) PermanentAddress.AddressSourceType = 3; List existingAddresses = await _addressDAL.GetAddressDetailAsync(PermanentAddress.AddressObjectTypeId, PermanentAddress.AddressObjectId, Login); bool exists = existingAddresses != null && existingAddresses.Any(a => a.AddressAddressType == 1); if (exists) await _addressDAL.UpdateAddress(PermanentAddress, Login); else await _addressDAL.SaveAddress(PermanentAddress, Login); return PermanentAddress.AddressId; } #endregion #region Address public async Task SaveAddress(AddressDTO addressDTO, LoginDTO LoginDTO) { try { int initialId = addressDTO.AddressId; int count = 1 + initialId; if (initialId == 0) { AutoNumberDTO autoNumberDTO = await _autoNumber.GetNumberAsync(count, "ADDRESS", LoginDTO); addressDTO.AddressId = autoNumberDTO.StartNumber; await _addressDAL.SaveAddress(addressDTO, LoginDTO); return $"Details saved successfully with AddressId {addressDTO.AddressId}"; } else { await _addressDAL.UpdateAddress(addressDTO, LoginDTO); return $"Details updated successfully with AddressId {addressDTO.AddressId}"; } } catch (Exception) { throw; } } #endregion } }