// TODO: Create AbstractReader.cs that implements IBankEstatementReader and make each reader to implement its own GetStandardBankStatementDTO public StandardBankStatementDTO ProcessBankInformation(IFormFile csvFile) { var bankStatement = new StandardBankStatementDTO(); using var reader = new StreamReader(csvFile.OpenReadStream()); using (var csvReader = new CsvReader(reader, new CultureInfo("pt-BR"))) { csvReader.Configuration.Delimiter = ";"; csvReader.Configuration.IgnoreBlankLines = false; while (csvReader.Read()) { var rowIndex = csvReader.Context.Row; if (rowIndex > 3) { try { if (string.IsNullOrEmpty(csvReader.Context.RawRecord)) { break; } if (int.TryParse(csvReader.GetField(2), out int i)) { var transaction = CreateTransaction(csvReader); bankStatement.Transactions.Add(transaction); } else if (!string.IsNullOrEmpty(csvReader.GetField(1)) && csvReader.Context.Record.Length == 4) { bankStatement.Transactions.Last().Origin = csvReader.GetField(1); } } catch (Exception ex) { _logger.LogWarning(ex, $"{csvFile.FileName}, line: {rowIndex}"); } } else if (rowIndex == 1) { // TODO: encapsulate this block of code ? var accountAndAgencyNumbers = csvReader.GetField(0); var splitFirstLine = accountAndAgencyNumbers.Split("|"); bankStatement.AgencyNumber = splitFirstLine[0].Split(":")[2].Trim(); bankStatement.AccountNumber = splitFirstLine[1].Split(":")[1].Trim().Replace("-", ""); } } }; return(bankStatement); }
private async Task PersistBankEstatementInformation(StandardBankStatementDTO parsedFile, BankAccount bankAccount) { foreach (var data in parsedFile.Transactions) { // TODO: create mapping between Transaction and StandardTransaction var newTransaction = new Transaction( data.Origin, data.Date, data.Amount, bankAccount.Id) { Metadata = data.TransactionUniqueHash }; bankAccount.Transactions.Add(newTransaction); } _bankAccountRepository.Update(bankAccount); Validate.IsTrue(await _uow.CommitAsync(), "Não foi possível salvar as transações lidas"); }
private void RemoveExistentTransactions(StandardBankStatementDTO parsedFile) { parsedFile.Transactions .RemoveAll(t => _transactionRepository.DoesTransactionExists(t.TransactionUniqueHash).Result); }