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); }