private static IEnumerable <IGrouping <string, Transaction> > GroupByPeriods(ReportGranularity granularity, IEnumerable <Transaction> transactions) { switch (granularity) { case ReportGranularity.Day: return(transactions.GroupBy(t => t.Timestamp.ToString("yyyy-MM-dd"))); case ReportGranularity.Week: return(transactions.GroupBy(t => $"{GetDate(t.Timestamp, 1)} do {GetDate(t.Timestamp, 7)}")); case ReportGranularity.Month: return(transactions.GroupBy(t => t.Timestamp.ToString("yyyy-MM"))); case ReportGranularity.Year: return(transactions.GroupBy(t => t.Timestamp.ToString("yyyy"))); case ReportGranularity.All: return(transactions.GroupBy(t => "All time")); default: throw new InvalidOperationException("Unknown granularity"); } }
public static string SerializerUserActivityReport(string userId, DateTime?from, DateTime?to, ReportGranularity granularity, AggregatedUserActivityReportEvent portions) { var sb = new StringBuilder(); sb.AppendLine($"Raport aktywności użytkownika; {userId}"); sb.AppendLine($"Zakres od; {from?.ToString() ?? "-"}"); sb.AppendLine($"Zakres do; {to?.ToString() ?? "-"}"); sb.AppendLine($"Granularność; {granularity}"); sb.WriteAccountsData(portions.AccountsPortions.ToArray()); sb.WriteCardsData(portions.CardsPortions.ToArray()); sb.WritePaymentsData(portions.PaymentsPortions.ToArray()); sb.WriteLoansData(portions.LoansPortions.ToArray()); return(sb.ToString()); }
public static string SerializerOverallReport(ReportSubject subject, DateTime?from, DateTime?to, ReportGranularity granularity, OverallReportPortion[] portions) { var sb = new StringBuilder(); sb.AppendLine($"Raport całościowy dla; {subject}"); sb.AppendLine($"Zakres od; {from?.ToString() ?? "-"}"); sb.AppendLine($"Zakres do; {to?.ToString() ?? "-"}"); sb.AppendLine($"Granularność; {granularity}"); var groupedPortions = portions.GroupBy(p => p.Period); var ordered = groupedPortions.OrderBy(p => p.Key); foreach (var portion in ordered) { sb.AppendLine(portion.Key); foreach (var aggregation in portion) { sb.WriteAggragation(portion.Key, aggregation.Value, aggregation.Aggregation); } } return(sb.ToString()); }
private static IEnumerable <UserReportPortion> AggregateUserCardTransactions(Card card, IEnumerable <Transaction> allTransactions, ReportGranularity granularity) { var transactions = allTransactions.Where(t => t.CardId == card.Id); var portions = GroupByPeriods(granularity, transactions); foreach (var portion in portions) { var debits = portion.Sum(p => (float?)p.Amount) ?? 0; yield return(new UserReportPortion { Period = portion.Key, Debits = debits, Element = card.Number }); } }
private static IEnumerable <UserReportPortion> AggregateUserPaymentsTransactions(Payment payment, IEnumerable <Transaction> allTransactions, ReportGranularity granularity) { var transactions = allTransactions.Where(p => p.PaymentId == payment.Id); var portions = GroupByPeriods(granularity, transactions); foreach (var portion in portions) { var debits = portion.Sum(p => (float?)p.Amount) ?? 0; yield return(new UserReportPortion { Period = portion.Key, Debits = debits, Element = payment.Name }); } }
private static IEnumerable <UserReportPortion> AggregateUserAccountsTransactions(Account account, IEnumerable <Transaction> allTransactions, ReportGranularity granularity) { var transactions = allTransactions.Where(t => t.Sender == account.Id || t.Recipient == account.Id); var portions = GroupByPeriods(granularity, transactions); foreach (var portion in portions) { var incomes = portion.Where(p => p.Recipient == account.Id).Sum(p => (float?)p.Amount) ?? 0; var debits = portion.Where(p => p.Sender == account.Id).Sum(p => (float?)p.Amount) ?? 0; yield return(new UserReportPortion { Period = portion.Key, Debits = debits, Incomes = incomes, Element = account.Number }); } }