コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: AccPack.cs プロジェクト: astormPCR/Ingestion_20
        /// <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);
        }
コード例 #3
0
        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);
        }