Esempio n. 1
0
        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());
        }
Esempio n. 4
0
        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
                });
            }
        }
Esempio n. 5
0
        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
                });
            }
        }
Esempio n. 6
0
        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
                });
            }
        }