private static bool RequestMatchesParameters(GetApprenticeshipEventsRequest x, DateTime toDateTime, DateTime fromDateTime, int fromEventId, int pageNumber, int pageSize)
 {
     return(x.ToDateTime.ToString("yyyyMMddHHmmss") == toDateTime.ToString("yyyyMMddHHmmss") &&
            x.FromDateTime.ToString("yyyyMMddHHmmss") == fromDateTime.ToString("yyyyMMddHHmmss") &&
            x.FromEventId == fromEventId &&
            x.PageNumber == pageNumber &&
            x.PageSize == pageSize);
 }
        public async Task <IEnumerable <ApprenticeshipEventView> > GetEvents(string fromDate, string toDate, int pageSize, int pageNumber, long fromEventId)
        {
            try
            {
                _logger.Info($"Getting Apprenticeship Events for period: {fromDate ?? "(all)"} - {toDate ?? "(all)"}, from eventId = {(fromEventId == 0 ? "(all)" : fromEventId.ToString())}");

                fromDate = fromDate ?? new DateTime(2000, 1, 1).ToString("yyyyMMddHHmmss");
                toDate   = toDate ?? DateTime.MaxValue.ToString("yyyyMMddHHmmss");

                var request = new GetApprenticeshipEventsRequest
                {
                    FromDateTime = fromDate.ParseDateTime(),
                    ToDateTime   = toDate.ParseDateTime(),
                    PageSize     = pageSize,
                    PageNumber   = pageNumber,
                    FromEventId  = fromEventId
                };

                var response = await _mediator.SendAsync(request);

                return(response.Data.Select(x => new ApprenticeshipEventView
                {
                    Id = x.Id,
                    CreatedOn = x.CreatedOn,
                    Event = x.Event,
                    ApprenticeshipId = x.ApprenticeshipId,
                    PaymentStatus = (PaymentStatus)x.PaymentStatus,
                    PausedOnDate = x.PausedOnDate,
                    StoppedOnDate = x.StoppedOnDate,
                    AgreementStatus = (AgreementStatus)x.AgreementStatus,
                    ProviderId = x.ProviderId,
                    LearnerId = x.LearnerId,
                    EmployerAccountId = x.EmployerAccountId,
                    TrainingType = (TrainingTypes)x.TrainingType,
                    TrainingId = x.TrainingId,
                    TrainingStartDate = x.TrainingStartDate,
                    TrainingEndDate = x.TrainingEndDate,
                    TrainingTotalCost = x.TrainingTotalCost,
                    PaymentOrder = x.PaymentOrder,
                    LegalEntityId = x.LegalEntityId,
                    LegalEntityName = x.LegalEntityName,
                    LegalEntityOrganisationType = x.LegalEntityOrganisationType,
                    AccountLegalEntityPublicHashedId = x.AccountLegalEntityPublicHashedId,
                    EffectiveFrom = x.EffectiveFrom,
                    EffectiveTo = x.EffectiveTo,
                    DateOfBirth = x.DateOfBirth,
                    PriceHistory = x.PriceHistory.Select(MapPriceHistory),
                    TransferSenderId = x.TransferSenderId,
                    TransferSenderName = x.TransferSenderName ?? string.Empty,
                    TransferApprovalStatus = (TransferApprovalStatus?)x.TransferApprovalStatus,
                    TransferApprovalActionedOn = x.TransferApprovalActionedOn
                }));
            }
            catch (ValidationException ex)
            {
                _logger.Warn(ex, "Invalid request");
                throw;
            }
            catch (Exception ex)
            {
                _logger.Error(ex, ex.Message);
                throw;
            }
        }