Ejemplo n.º 1
0
        public override async Task <AggregateOverallResponse> AggregateOverall(AggregateOverallRequest request, ServerCallContext context)
        {
            var headers = context.RequestHeaders.SelectCustom();

            Transaction[] transactions;

            switch (request.Subject)
            {
            case ReportSubject.Cards:
                transactions = await dataFetcher.GetCardsTransactions(headers, request.TimestampFrom, request.TimestampTo);

                break;

            case ReportSubject.Loans:
                transactions = await dataFetcher.GetLoansTransactions(headers, request.TimestampFrom, request.TimestampTo);

                break;

            case ReportSubject.Payments:
                transactions = await dataFetcher.GetPaymentsTransactions(headers, request.TimestampFrom, request.TimestampTo);

                break;

            case ReportSubject.Transactions:
                transactions = await dataFetcher.GetTransactions(headers, request.TimestampFrom, request.TimestampTo);

                break;

            default:
                throw new InvalidOperationException("Unknown subject of report.");
            }

            var data = new OverallReportData
            {
                From         = request.TimestampFrom.ToDateTime(),
                To           = request.TimestampTo.ToDateTime(),
                Granularity  = request.Granularity,
                Subject      = request.Subject,
                Aggregations = request.Aggregations.ToArray(),
                Transactions = transactions
            };

            var report = ReportGenerator.AggregateOverall(data);

            return(new AggregateOverallResponse {
                Report = report
            });
        }
Ejemplo n.º 2
0
        public static string AggregateOverall(OverallReportData data)
        {
            var withTimestamps = data.Transactions.Select(t => new TransactionWithTimestamp {
                Timestamp = t.Timestamp.ToDateTime(), Transaction = t
            });
            var periods = GroupByPeriods(data.Granularity, withTimestamps);

            var portions = new List <OverallReportPortion>();

            foreach (var period in periods)
            {
                foreach (var aggregation in data.Aggregations)
                {
                    var value = Aggregate(period, aggregation);
                    portions.Add(new OverallReportPortion {
                        Period = period.Key, Value = value, Aggregation = aggregation
                    });
                }
            }

            return(ReportCsvSerializer.SerializerOverallReport(data, portions.ToArray()));
        }
Ejemplo n.º 3
0
        public static string SerializerOverallReport(OverallReportData data, OverallReportPortion[] portions)
        {
            var sb = new StringBuilder();

            sb.AppendLine($"Raport całościowy dla; {data.Subject}");
            sb.AppendLine($"Zakres od; {data.From?.ToString() ?? "-"}");
            sb.AppendLine($"Zakres do; {data.To?.ToString() ?? "-"}");
            sb.AppendLine($"Granularność; {data.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());
        }