private List<TransactionDto> ReadTransactions(long totalLines, List<string> allLines)
{
var transactions = new List<TransactionDto>();
for (var index = 1; index < totalLines; index++)
{
var line = allLines[index];
if (string.IsNullOrWhiteSpace(line))
{
continue;
}
string[] split = line.Split(',');
TransactionDto transaction;
try
{
transaction = new TransactionDto
{
TransactionType = this.importUtilities.FetchString(split, 0),
Description = this.importUtilities.FetchString(split, 1),
Reference1 = this.importUtilities.FetchString(split, 2),
Reference2 = this.importUtilities.FetchString(split, 3),
Reference3 = this.importUtilities.FetchString(split, 4),
Amount = this.importUtilities.FetchDecimal(split, 5),
Date = this.importUtilities.FetchDate(split, 6),
BudgetBucketCode = this.importUtilities.FetchString(split, 7),
Account = this.importUtilities.FetchString(split, 8),
Id = this.importUtilities.FetchGuid(split, 9)
};
}
catch (InvalidDataException ex)
{
throw new DataFormatException("The Budget Analyser is corrupt. The file has some invalid data in inappropriate columns.", ex);
}
catch (IndexOutOfRangeException ex)
{
throw new DataFormatException("The Budget Analyser is corrupt. The file does not have the correct number of columns.", ex);
}
if (transaction.Date == DateTime.MinValue || transaction.Id == Guid.Empty)
{
// Do not check for Amount == 0 here, sometimes memo transactions can appear with 0.00 or null amounts; which are valid.
throw new DataFormatException(
"The Budget Analyser file does not contain the correct data type for Date and/or Id in row " +
index + 1);
}
transactions.Add(transaction);
}
return transactions;
}