using AccountsDAL.CustomCode.AccountReports.AccountOutstanding; using AccountsDAL.DTO.Account; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.Telemetry; namespace AccountsBLL.AccountReports.AccountOutstanding { public class AccountOutstandingKpiBLL : IAccountOutstandingKpiBLL { private readonly IAccountOutstandingKpiDAL _accountOutstandingKpiDAL; private readonly IAccountReportAccessControlBLL _accessControlBLL; public AccountOutstandingKpiBLL(IAccountOutstandingKpiDAL accountOutstandingKpiDAL, IAccountReportAccessControlBLL accessControlBLL) { _accountOutstandingKpiDAL = accountOutstandingKpiDAL; _accessControlBLL = accessControlBLL; } public async Task GetOutstandingKpiSummary(CriteriaDTO criteriaDTO, int menuId, LoginDTO loginDTO) { try { GB5Trace.Step("parse-criteria-account-outstanding-kpi", new { menuId }); var criteria = AccountReportCriteriaParser.Parse(criteriaDTO, loginDTO); await _accessControlBLL.EnforceForAsOnDateAsync(criteria, maxResult: 1, menuId, loginDTO).ConfigureAwait(false); GB5Trace.Step("query-account-outstanding-kpi", new { menuId }); return await _accountOutstandingKpiDAL.GetOutstandingKpiSummary(criteria, loginDTO).ConfigureAwait(false); } catch (Exception ex) { GB5Trace.MarkFailed("account-outstanding-kpi-failed", ex); throw; } } } }