示例#1
0
        // Upload account statement file (mt940, camt053)
        // http://www.mikesdotnetting.com/article/288/asp-net-5-uploading-files-with-asp-net-mvc-6
        public IReadOnlyList <MessageDataset> ImportAccountStatementFile(string filePath)
        {
            var messages = new List <MessageDataset>();
            var accountStatementResults = accountStatementService.ReadFile(filePath, Encoding.UTF8);

            var accountList = accountRepository.GetAccountList().Select(a => a.BankAccountNumber).ToList();

            foreach (var accountStatementResult in accountStatementResults)
            {
                var account = accountStatementResult.AccountStatement;

                if (accountStatementResult.IsSuccess == false)
                {
                    messages.Add(new MessageDataset($"Account {account.AccountNumber} NICHT importiert: {accountStatementResult.Error}", MessageStatus.Error));
                }

                if (accountStatementResult.AccountStatement.Transactions.Any() == false)
                {
                    continue;
                }

                var message = new MessageDataset($"Konto {account.AccountNumber}");
                messages.Add(message);

                // only accounts that are in select mandator
                if (accountList.Contains(account.AccountNumber))
                {
                    var transactionsThisYear = account.Transactions
                                               .Where(t => t.BookingDate.Year == settingsService.GetYear())
                                               .Select(
                        t => new BankTransactionDataset
                    {
                        Id          = t.Id,
                        Value       = (decimal)t.Value,
                        ValueDate   = t.ValueDate,
                        BookingDate = t.BookingDate,
                        Text        = t.Text,
                        Debtor      = t.Debtor,
                        Creditor    = t.Creditor
                    })
                                               .ToList();
                    var count = bankTransactionRepository.SaveBankTransactionList(account.AccountNumber, transactionsThisYear);
                    accountRepository.SaveBankAccountBalance(account.AccountNumber, (decimal)account.EndBalance.Value);

                    var status = count == account.Transactions.Count ? MessageStatus.Success : MessageStatus.Info;
                    message.Add($"{count} von {account.Transactions.Count} Transaktion(en) importiert.", status);

                    // not imported transactions
                    var notImportedTransactions = account.Transactions.Where(t => transactionsThisYear.Select(tt => tt.Id).Contains(t.Id) == false);
                    foreach (var trx in notImportedTransactions)
                    {
                        message.Add($"Transaktion wegen BookingDatum {trx.BookingDate} nicht importiert: {trx.Text}", MessageStatus.Warning);
                    }
                }
                else
                {
                    message.Add($"Falscher Mandant: {account.Transactions.Count} Transaktion(en) nicht importiert.", MessageStatus.Warning);
                }
            }

            return(messages);
        }