public async Task <List <EasSubmissionValues> > GetEasSubmissionValuesAsync(IReportServiceContext reportServiceContext, CancellationToken cancellationToken)
        {
            await _getLastEastUpdateLock.WaitAsync(cancellationToken);

            string UkPrn           = reportServiceContext.Ukprn.ToString();
            var    allPaymentTypes = GetAllPaymentTypes();

            try
            {
                cancellationToken.ThrowIfCancellationRequested();
                List <EasSubmissionValues> easSubmissionValues = new List <EasSubmissionValues>();
                var easDbContext  = new EasdbContext(_easConfiguration.EasConnectionString);
                var easSubmission = easDbContext.EasSubmission.Where(x => x.Ukprn == UkPrn)
                                    .OrderByDescending(x => x.UpdatedOn).FirstOrDefault();
                if (easSubmission != null)
                {
                    var easSubmissionValuesList = easDbContext.EasSubmissionValues.Where(x => x.SubmissionId == easSubmission.SubmissionId).ToList();
                    easSubmissionValues = easSubmissionValuesList.Select(x => new EasSubmissionValues()
                    {
                        PaymentTypeName  = GetPaymentNameById(x.PaymentId, allPaymentTypes),
                        PaymentId        = x.PaymentId,
                        CollectionPeriod = x.CollectionPeriod,
                        PaymentValue     = x.PaymentValue
                    }).ToList();
                }

                _loadedEasSubmissionValuesList = easSubmissionValues;
            }
            finally
            {
                _getLastEastUpdateLock.Release();
            }

            return(_loadedEasSubmissionValuesList);
        }
        public async Task <DateTime> GetLastEasUpdate(int ukprn, CancellationToken cancellationToken)
        {
            await _getLastEastUpdateLock.WaitAsync(cancellationToken);

            try
            {
                cancellationToken.ThrowIfCancellationRequested();

                if (!_loadedLastEasUpdate.ContainsKey(ukprn))
                {
                    _loadedLastEasUpdate[ukprn] = DateTime.MinValue;
                }

                var easDbContext  = new EasdbContext(_easConfiguration.EasConnectionString);
                var easSubmission = easDbContext.EasSubmission.Where(x => x.Ukprn == ukprn.ToString())
                                    .OrderByDescending(x => x.UpdatedOn).FirstOrDefault();

                _loadedLastEasUpdate[ukprn] = easSubmission?.UpdatedOn ?? DateTime.MinValue;
            }
            finally
            {
                _getLastEastUpdateLock.Release();
            }

            return(_loadedLastEasUpdate[ukprn]);
        }
        public List <EasPaymentType> GetAllPaymentTypes()
        {
            var easDbContext     = new EasdbContext(_easConfiguration.EasConnectionString);
            var paymentTypesList = easDbContext.PaymentTypes.OrderBy(s => s.PaymentId).ThenBy(s => s.PaymentName).ToList();
            List <EasPaymentType> easPaymentTypeList = paymentTypesList.Select(x => x.ToEasPaymentTypes()).ToList();

            return(easPaymentTypeList);
        }