// 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); }