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 }); } }