Example #1
0
        public CsvImportResult ParseCsvFile(StreamReader csvFileReader)
        {
            List <RegisterEntry> entries  = new List <RegisterEntry>();
            List <string>        errorLog = new List <string>();

            using (var csvReader = new CsvReader(csvFileReader))
            {
                csvReader.Configuration.CultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
                int rowNumber = 1; // include the header
                while (csvReader.Read())
                {
                    try
                    {
                        rowNumber++;
                        var record = csvReader.GetRecord <RegisterEntry>();
                        RegisterEntryValidator        validator        = new RegisterEntryValidator();
                        RegisterEntryValidationResult validationResult = validator.ValidateRegisterEntry(record);

                        if (!validationResult.IsValid)
                        {
                            var validationErrors = new List <string>();
                            validationErrors.Add("Error on row " + rowNumber);

                            foreach (var errorMessage in validationResult.ValidationMessages)
                            {
                                validationErrors.Add(errorMessage);
                            }
                            LogErrors(errorLog, validationErrors);

                            continue;
                        }

                        entries.Add(record);
                    }
                    catch (TypeConverterException typeConverterException)
                    {
                        var conversionErrors = new List <string>();
                        conversionErrors.Add("Error on row " + typeConverterException.ReadingContext.Row);
                        conversionErrors.Add("Invalid data:" + typeConverterException.ReadingContext.RawRecord);
                        LogErrors(errorLog, conversionErrors);
                    }
                    catch (HeaderValidationException headerValidationException)
                    {
                        throw new RegisterImportException(headerValidationException.Message)
                              {
                                  ImportErrorMessage = $"Invalid header at index {headerValidationException.HeaderNameIndex}"
                              };
                    }
                }
            }

            return(new CsvImportResult {
                Entries = entries, ErrorLog = errorLog
            });
        }
        public RegisterEntryValidationResult ValidateRegisterEntry(RegisterEntry registerEntry)
        {
            var validationResult = new RegisterEntryValidationResult();

            var errorMessages = new List <string>();

            if (registerEntry.ProviderTypeId < 1 || registerEntry.ProviderTypeId > 3)
            {
                errorMessages.Add("Application route id should be between 1 and 3");
            }

            if (registerEntry.UKPRN < 10000000 || registerEntry.UKPRN > 99999999)
            {
                errorMessages.Add("UKPRN should be between 10000000 and 99999999");
            }

            if (registerEntry.OrganisationTypeId != 0)
            {
                errorMessages.Add("Unsupported organisation type id : " + registerEntry.OrganisationTypeId);
            }

            if (String.IsNullOrWhiteSpace(registerEntry.LegalName))
            {
                errorMessages.Add("Legal Name is required");
            }

            if (registerEntry.Status != "0" && registerEntry.Status != "1" && registerEntry.Status != "2")
            {
                errorMessages.Add("Unsupported status id : " + registerEntry.Status);
            }

            validationResult.IsValid            = (errorMessages.Count == 0);
            validationResult.ValidationMessages = errorMessages;

            return(validationResult);
        }