public async Task <AccountStatement> Statement(int accountNumber, StatementDate statementDate) { var accountSummary = await GetAccountSummary(accountNumber); await accountSummary.Validate(accountNumber); var accountTransactionEntity = await _accountTransactionRepository .Get(accountNumber, statementDate.StartDate, statementDate.EndDate); var currency = accountSummary.Balance.Currency; var accountStatement = new AccountStatement() { AccountNumber = accountSummary.AccountNumber, Currency = currency, Date = statementDate, TransactionDetails = accountTransactionEntity.Select(txn => new StatementTransaction() { TransactionType = txn.TransactionType.TryParseEnum <TransactionType>(), Date = txn.Date, Description = txn.Description, Amount = new Money(txn.Amount, currency), CurrentBalance = new Money(txn.CurrentBalance, currency) }) }; return(accountStatement); }
/// <summary> /// used to build context for mapper calls /// </summary> private Parameters BuildContext(string dataset) { Parameters context = new Parameters() { BusinessDate = StatementDate.ToString("yyyy-MM-dd"), Firm = firmId.ToString(), Dataset = dataset }; return(context); }
protected override async Task <AccountStatement> ProcessAsync(ICommand command) { var qMessage = (StatementMessage)command; var monthlyStatement = await _transactionClient.GetStatement(qMessage.AccountNumber, qMessage.Month); var statementDate = new StatementDate(qMessage.Month); const string DateFormat = "dd/MM/yyyy"; var accountStatement = new AccountStatement() { Key = $"{monthlyStatement.AccountNumber}-{qMessage.Month}", Name = qMessage.Name, AccountNumber = monthlyStatement.AccountNumber, Currency = qMessage.Currency, StartDate = statementDate.StartDate.ToString(DateFormat), EndDate = statementDate.EndDate.ToString(DateFormat), // Logic used here to calculate opening & closing balance is not accurate and needs improvement OpeningBalance = monthlyStatement.TransactionDetails.OrderBy(i => i.Date).Select(i => i.CurrentBalance).FirstOrDefault(), ClosingBalance = monthlyStatement.TransactionDetails.OrderByDescending(i => i.Date).Select(i => i.TransactionType == TransactionType.Deposit.ToString() ? (i.CurrentBalance + i.Amount) : (i.CurrentBalance - i.Amount) ).FirstOrDefault(), TransactionDetails = monthlyStatement.TransactionDetails.Select(i => new AccountTransaction() { Date = i.Date.ToString(DateFormat), TransactionDetail = i.Description, Withdrawal = i.TransactionType == TransactionType.Withdrawal.ToString() ? i.Amount.ToString() : string.Empty, Deposit = i.TransactionType == TransactionType.Deposit.ToString() ? i.Amount.ToString() : string.Empty, Balance = i.TransactionType == TransactionType.Deposit.ToString() ? (i.CurrentBalance + i.Amount) : (i.CurrentBalance - i.Amount) }) }; return(accountStatement); }