Example #1
0
 public CardAccountStatementModel GetCardAccountStatement(CardAccountStatementQuery query)
 {
     EnsureIsValid(query);
     try
     {
         var cardAccount  = _deps.CardAccounts.SurelyFind(query.AccountNo);
         var transactions = _deps.Transactions.Query(query.ToDbQuery(cardAccount));
         var statement    = new CardAccountStatementModel
         {
             AccountCurrency  = cardAccount.Currency.ToModel <CurrencyModel>(),
             AccountNo        = cardAccount.AccountNo,
             AccountOwner     = cardAccount.Owner.ToModel <UserNameModel>(),
             CreatedDateUtc   = DateTime.UtcNow,
             DateRange        = query.DateRange,
             StatementBalance = transactions.AsQueryable()
                                .Where(Specs.ForTransaction.CalculatedDeposits || Specs.ForTransaction.CalculatedWithdrawals)
                                .Sum(x => x.AccountAmount),
             StatementDeposits = transactions.AsQueryable()
                                 .Where(Specs.ForTransaction.CalculatedDeposits)
                                 .Sum(x => x.AccountAmount),
             StatementWithdrawals = transactions.AsQueryable()
                                    .Where(Specs.ForTransaction.CalculatedWithdrawals)
                                    .Sum(x => x.AccountAmount),
             Transactions = transactions.Map <CardAccountStatementItemModel>().ToList()
         };
         return(statement);
     }
     catch (Exception ex)
     {
         throw new ServiceException("Can't get card account statement.", ex);
     }
 }
Example #2
0
        public static DbQuery <Transaction> ToDbQuery(this CardAccountStatementQuery query, Account account)
        {
            Argument.NotNull(query, "query");

            return(DbQuery.For <Transaction>()
                   .FilterBy(x => x.CreatedDateUtc >= query.DateRange.LowerBound &&
                             x.CreatedDateUtc <= query.DateRange.UpperBound &&
                             x.AccountNo == account.AccountNo)
                   .SortBy(x => x.OrderByDescending(y => y.CreatedDateUtc)));
        }
Example #3
0
        public IHttpActionResult Statement(string accountNo, DateTime from, DateTime to)
        {
            var query = new CardAccountStatementQuery
            {
                AccountNo = accountNo,
                DateRange = new Range <DateTime>(from.ToUniversalTime(), to.ToUniversalTime())
            };

            return(Ok(_cardAccountService.GetCardAccountStatement(query)));
        }