Esempio n. 1
0
        // 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);
        }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
 private void RemoveExistentTransactions(StandardBankStatementDTO parsedFile)
 {
     parsedFile.Transactions
     .RemoveAll(t => _transactionRepository.DoesTransactionExists(t.TransactionUniqueHash).Result);
 }