private IEnumerable <UserReportPortion> AggregateUserTransactions(Models.Card card, Transaction[] allTransactions, Granularity granularity)
        {
            var transactions   = allTransactions.Where(t => t.CardId == card.Id).ToArray();
            var withTimestamps = transactions.Select(t => new TransactionWithTimestamp {
                Timestamp = t.Timestamp.ToDateTime(), Transaction = t
            });
            var portions = Aggregations.GroupByPeriods(granularity, withTimestamps);

            foreach (var portion in portions)
            {
                var debits = portion.Sum(p => (float?)p.Transaction.Amount) ?? 0;
                yield return(new UserReportPortion {
                    Period = portion.Key, Debits = debits, Element = card.Number
                });
            }
        }
        private IEnumerable <UserReportPortion> AggregateUserTransactions(Models.Account account, Transaction[] allTransactions, Granularity granularity)
        {
            var transactions   = allTransactions.Where(t => t.Sender == account.Id || t.Recipient == account.Id);
            var withTimestamps = transactions.Select(t => new TransactionWithTimestamp {
                Timestamp = t.Timestamp.ToDateTime(), Transaction = t
            });
            var portions = Aggregations.GroupByPeriods(granularity, withTimestamps);

            foreach (var portion in portions)
            {
                var incomes = portion.Where(p => p.Transaction.Recipient == account.Id).Sum(p => (float?)p.Transaction.Amount) ?? 0;
                var debits  = portion.Where(p => p.Transaction.Sender == account.Id).Sum(p => (float?)p.Transaction.Amount) ?? 0;
                yield return(new UserReportPortion {
                    Period = portion.Key, Debits = debits, Incomes = incomes, Element = account.Number
                });
            }
        }