private ImportedBankTransaction Import(string[] splittedLine) { ImportedBankTransaction pkoTransaction = null; if (splittedLine.Any()) { foreach (var typeImporter in typeImporters) { try { var transaction = typeImporter.Import(splittedLine); if (transaction != null) { if (pkoTransaction != null) { throw new ImportException($"Too many importers for type {splittedLine.Index(2)}"); } pkoTransaction = transaction; } } catch (InvalidImportRowException exception) { logger.LogWarning(exception.Message, exception); } } if (pkoTransaction == null) { logger.LogWarning($"No importer exists for type {splittedLine.Index(2)}"); } } return(pkoTransaction); }
public static IEnumerable <ImportedBankTransaction> ImportBy(this IEnumerable <string[]> lines, IEnumerable <IIngTypeImporter> typeImporters) { var list = new List <ImportedBankTransaction>(lines.Count()); Parallel.ForEach(lines, splittedLine => { ImportedBankTransaction importedTransaction = null; if (splittedLine.Any()) { foreach (var typeImporter in typeImporters) { var transaction = typeImporter.Import(splittedLine); if (transaction != null) { if (importedTransaction != null) { throw new ImportException($"Too many importers for type {splittedLine.Index(2)}"); } importedTransaction = transaction; } } } list.Add(importedTransaction); }); return(list); }
public void Should_import_transactions(string[] splittedLine, ImportedBankTransaction expectedResult) { //act var result = Sut.Import(splittedLine); //assert result.Should().BeEquivalentTo(expectedResult); }
public async Task <BankTransaction> AddToDatabase(ImportedBankTransaction transaction, Guid userId) { BankTransaction databaseTransaction = null; var groupDbModel = MapGroup(transaction.TransactionType); var bankDbModel = new Bank { Id = Guid.NewGuid(), Name = transaction.BankName }; using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { using var context = contextFactory.GetContext(); var user = await userService.GetById(userId); context.Attach(user); var existingGroup = await context.BankTransactionTypes.SingleOrDefaultAsync(t => t.Name == groupDbModel.Name && t.User.Id == userId); var group = existingGroup ?? groupDbModel; group.User = user; var existingBank = await context.Banks.SingleOrDefaultAsync(b => b.Name == transaction.BankName); var bank = existingBank ?? bankDbModel; databaseTransaction = MapTransaction(transaction); databaseTransaction.BankTransactionType = group; databaseTransaction.User = user; databaseTransaction.Bank = bank; var existingTransaction = await ExistingTransaction(context, databaseTransaction, existingGroup, userId); if (existingTransaction == null) { await context.AddAsync(databaseTransaction); await context.SaveChangesAsync(); logger.LogDebug("Added transaction {transaction} to database", transaction.Title); } else { return(existingTransaction); } scope.Complete(); } return(databaseTransaction); }
private BankTransaction MapTransaction(ImportedBankTransaction transaction) { return(new BankTransaction { Id = Guid.NewGuid(), Amount = transaction.Amount, Currency = transaction.Currency, Extensions = transaction.Extensions, OperationDate = transaction.OperationDate, Title = transaction.Title, TransactionDate = transaction.TransactionDate, Order = transaction.Order }); }
public TransactionSavedEvent(Guid userId, ImportedBankTransaction transaction, BankTransaction databaseTransaction) { UserId = userId; Transaction = transaction; DatabaseTransaction = databaseTransaction; }