using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.GB5Exception; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using Newtonsoft.Json; using PayRollDAL.DTO.PayPeriod; namespace PayRollBLL.PayPeriod { public class PayPeriodBLL : IPayPeriodBLL { private readonly PayRollDAL.CustomeCode.PayPeriod.IPayPeriodDAL _payPeriodDAL; private readonly AutoNumber _autoNumber; public PayPeriodBLL(PayRollDAL.CustomeCode.PayPeriod.IPayPeriodDAL payPeriodDAL, AutoNumber autoNumber) { _payPeriodDAL = payPeriodDAL; _autoNumber = autoNumber; } public async Task GetSelectListPayPeriodApplicableOu(int FirstNumber, int MaxResult, GB5Shared.DTO.Framework.Criteria.CriteriaDTO CriteriaDTO, GB5Shared.DTO.Framework.Login.LoginDTO LoginDTO) { try { return await _payPeriodDAL.GetSelectListPayPeriodApplicableOu(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListPayPeriod(int FirstNumber, int MaxResult, GB5Shared.DTO.Framework.Criteria.CriteriaDTO CriteriaDTO, GB5Shared.DTO.Framework.Login.LoginDTO LoginDTO, bool IsCount) { try { return await _payPeriodDAL.GetSelectListPayPeriod(FirstNumber, MaxResult, CriteriaDTO, LoginDTO, IsCount); } catch (Exception) { throw; } } public async Task GetSelectListPayPeriodDescendingOrder(int FirstNumber, int MaxResult, GB5Shared.DTO.Framework.Criteria.CriteriaDTO CriteriaDTO, GB5Shared.DTO.Framework.Login.LoginDTO LoginDTO, bool IsCount = false) { try { return await _payPeriodDAL.GetSelectListPayPeriodDescendingOrder(FirstNumber, MaxResult, CriteriaDTO, LoginDTO, IsCount); } catch (Exception) { throw; } } public async Task GetSelectListPayPeriodApplicableOuDependMultiPayConfig(int FirstNumber, int MaxResult, GB5Shared.DTO.Framework.Criteria.CriteriaDTO CriteriaDTO, GB5Shared.DTO.Framework.Login.LoginDTO LoginDTO) { try { return await _payPeriodDAL.GetSelectListPayPeriodApplicableOuDependMultiPayConfig(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task GetPayPeriod(int PayPeriodId, GB5Shared.DTO.Framework.Login.LoginDTO LoginDTO) { try { PayPeriodDTO PayPeriodDTO = await _payPeriodDAL.GetPayPeriod(PayPeriodId, LoginDTO); return JsonConvert.SerializeObject(PayPeriodDTO); } catch (Exception) { throw; } } public async Task Save(PayPeriodDTO PayPeriodDTO, GB5Shared.DTO.Framework.Login.LoginDTO LoginDTO) { try { if (PayPeriodDTO.PayPeriodId == 0) { AutoNumberDTO autoNumberDTO = await _autoNumber.GetNumberAsync(1, "PAYPERIOD", LoginDTO); PayPeriodDTO.PayPeriodId = autoNumberDTO.StartNumber; PayPeriodDTO.PayPeriodCreatedById = LoginDTO.UserId; PayPeriodDTO.PayPeriodCreatedOn = DateTime.UtcNow; PayPeriodDTO.PayPeriodModifiedById = LoginDTO.UserId; PayPeriodDTO.PayPeriodModifiedOn = DateTime.UtcNow; await _payPeriodDAL.SavePayPeriod(PayPeriodDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {PayPeriodDTO.PayPeriodId}"; } else { bool payProcessed = await _payPeriodDAL.CheckPayProcessExistsForPayPeriod(PayPeriodDTO.PayPeriodId, LoginDTO); if (payProcessed) { throw new MethodNotAllowedException("Pay processing already exists for this pay period; update is not allowed."); } PayPeriodDTO.PayPeriodModifiedById = LoginDTO.UserId; PayPeriodDTO.PayPeriodModifiedOn = DateTime.UtcNow; await _payPeriodDAL.UpdatePayPeriod(PayPeriodDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {PayPeriodDTO.PayPeriodId}"; } } catch (Exception) { throw; } } } }