public MediatorResponse <byte[]> GetRegisteredCandidatesReportBytes(ReportRegisteredCandidatesParameters parameters)
        {
            try
            {
                var reportResult = _reportingRepo.ReportRegisteredCandidates(parameters.Type, parameters.FromDate.Date, parameters.ToDate.Date, parameters.AgeRange, parameters.Region, parameters.LocalAuthority, parameters.MarketMessagesOnly);

                var headerBuilder = new StringBuilder();
                headerBuilder.AppendLine("PROTECT,,,,,,,,,,,,,,,,,,");
                headerBuilder.AppendLine(",,,,,,,,,,,,,,,,,,,");
                headerBuilder.AppendLine(",,,,,,,,,,,,,,,,,,,");

                var bytes = parameters.IncludeCandidateIds
                    ? GetCsvBytes
                            <ReportRegisteredCandidatesResultItem, ReportRegisteredCandidatesWithIdsResultItemClassMap>(
                    reportResult, headerBuilder.ToString())
                    : GetCsvBytes
                            <ReportRegisteredCandidatesResultItem, ReportRegisteredCandidatesResultItemClassMap>(
                    reportResult, headerBuilder.ToString());
                return(GetMediatorResponse(ReportingMediatorCodes.ReportCodes.Ok, bytes));
            }
            catch (Exception ex)
            {
                _logService.Warn(ex);
                return(GetMediatorResponse(ReportingMediatorCodes.ReportCodes.Error, new byte[0]));
            }
        }
        public ActionResult ValidateRegisteredCandidatesCsv(ReportRegisteredCandidatesParameters parameters)
        {
            var validationResponse = _reportingMediator.ValidateRegisteredCandidatesParameters(parameters);

            switch (validationResponse.Code)
            {
            case ReportingMediatorCodes.ReportCodes.Ok:
                return(View("RegisteredCandidatesCsv", validationResponse.ViewModel));

            case ReportingMediatorCodes.ReportCodes.ValidationError:
            default:
                ModelState.Clear();
                validationResponse.ValidationResult.AddToModelStateWithSeverity(ModelState, string.Empty);
                return(View("RegisteredCandidatesCsv", validationResponse.ViewModel));
            }
        }
        public ActionResult DownloadRegisteredCandidatesCsv(ReportRegisteredCandidatesParameters parameters)
        {
            var response = _reportingMediator.GetRegisteredCandidatesReportBytes(parameters);

            switch (response.Code)
            {
            case ReportingMediatorCodes.ReportCodes.Ok:
                return(File(response.ViewModel, "text/csv", "RegisteredCandidatesCsv.csv"));

            case ReportingMediatorCodes.ReportCodes.Error:
                SetUserMessage(response.Message);
                return(View("RegisteredCandidatesCsv", parameters));

            default:
                throw new InvalidMediatorCodeException(response.Code);
            }
        }
        public MediatorResponse <ReportRegisteredCandidatesParameters> GetRegisteredCandidatesReportParams()
        {
            var result = new ReportRegisteredCandidatesParameters();

            try
            {
                var regions = _reportingRepo.GeoRegionsIncludingAll();
                result.RegionList = regions.ToListItemList();
                var localAuthorities = _reportingRepo.GetLocalAuthorities();
                result.LocalAuthoritiesList = localAuthorities.ToListItemList();
                return(GetMediatorResponse(ReportingMediatorCodes.ReportCodes.Ok, result));
            }
            catch (Exception ex)
            {
                _logService.Warn(ex);
                return(GetMediatorResponse(ReportingMediatorCodes.ReportCodes.Error, result));
            }
        }
        public MediatorResponse <ReportRegisteredCandidatesParameters> ValidateRegisteredCandidatesParameters(ReportRegisteredCandidatesParameters parameters)
        {
            var response = GetRegisteredCandidatesReportParams();

            if (response.Code == ReportingMediatorCodes.ReportCodes.Error)
            {
                return(response);
            }

            parameters.RegionList           = response.ViewModel.RegionList;
            parameters.LocalAuthoritiesList = response.ViewModel.LocalAuthoritiesList;

            var validationResult = _reportDateRangeValidator.Validate(parameters);

            parameters.IsValid = validationResult.IsValid;
            if (!validationResult.IsValid)
            {
                return(GetMediatorResponse(ReportingMediatorCodes.ReportCodes.ValidationError, parameters, validationResult));
            }

            return(GetMediatorResponse(ReportingMediatorCodes.ReportCodes.Ok, parameters, validationResult));
        }