public PaymentCategoryCostsModel GetCostsByPaymentCategory(PaymentCategoryCostsQuery query) { EnsureIsValid(query); try { var card = _deps.UserCards.SurelyFind(query.CardId); var groups = _deps.CardPayments.Query(query.ToCardPaymentQuery()).GroupBy(x => x.Category); var model = new PaymentCategoryCostsModel { Card = card.ToModel<CardNameModel>(), Currency = card.Account.Currency.ToModel<CurrencyModel>(), Data = groups.Select(x => new PaymentCategoryCostsItemModel() { Category = x.First().ToModel<PaymentCategoryModel>(), Amount = - x.Sum(y => y.Withdrawal.AccountAmount) }).ToList() }; model.Total = model.Data.Sum(x => x.Amount); return model; } catch (Exception ex) { throw new ServiceException("Can't get costs by payment category.", ex); } }
public PaymentCategoryCostsModel GetCostsByPaymentCategory(PaymentCategoryCostsQuery query) { EnsureIsValid(query); try { var card = _deps.UserCards.SurelyFind(query.CardId); var groups = _deps.CardPayments.Query(query.ToCardPaymentQuery()).GroupBy(x => x.Category); var model = new PaymentCategoryCostsModel { Card = card.ToModel <CardNameModel>(), Currency = card.Account.Currency.ToModel <CurrencyModel>(), Data = groups.Select(x => new PaymentCategoryCostsItemModel() { Category = x.First().ToModel <PaymentCategoryModel>(), Amount = -x.Sum(y => y.Withdrawal.AccountAmount) }).ToList() }; model.Total = model.Data.Sum(x => x.Amount); return(model); } catch (Exception ex) { throw new ServiceException("Can't get costs by payment category.", ex); } }
public static DbQuery <CardPayment> ToCardPaymentQuery(this PaymentCategoryCostsQuery query) { return(DbQuery.For <CardPayment>() .FilterBy(x => x.Card.Id == query.CardId) .AndFilterBy(x => x.CompletedDateUtc.HasValue && x.CompletedDateUtc >= query.From && x.CompletedDateUtc <= query.To)); }
public IHttpActionResult GetCostsByPaymentCategory([FromUri] PaymentCategoryCostsQuery query) { var stats = _paymentStatisticsService.GetCostsByPaymentCategory(query); return(Ok(stats)); }