public async Task<StatementModel> LoadAsync(string fileName, Account account)
{
try
{
this.importUtilities.AbortIfFileDoesntExist(fileName);
}
catch (FileNotFoundException ex)
{
throw new KeyNotFoundException(ex.Message, ex);
}
var transactions = new List<Transaction>();
var firstTime = true;
foreach (var line in await ReadLinesAsync(fileName))
{
if (firstTime)
{
// File contains column headers
firstTime = false;
continue;
}
if (string.IsNullOrWhiteSpace(line))
{
continue;
}
string[] split = line.Split(',');
var transaction = new Transaction
{
Account = account,
Description = this.importUtilities.FetchString(split, DescriptionIndex),
Reference1 = this.importUtilities.FetchString(split, Reference1Index),
Reference2 = this.importUtilities.FetchString(split, Reference2Index),
Reference3 = this.importUtilities.FetchString(split, Reference3Index),
Amount = this.importUtilities.FetchDecimal(split, AmountIndex),
Date = this.importUtilities.FetchDate(split, DateIndex)
};
transaction.TransactionType = FetchTransactionType(split, transaction.Amount);
transactions.Add(transaction);
}
var statement = new StatementModel(this.logger)
{
StorageKey = fileName,
LastImport = DateTime.Now
}.LoadTransactions(transactions);
return statement;
}