Example #1
0
        public string GetString(MonthExchangeRateReport report)
        {
            var sb = new StringBuilder();

            this.AddHeader(report, sb);
            sb.Append("Week periods:");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);

            foreach (var week in report.ByWeek)
            {
                sb.Append($"{week.WeekStart.Day}...{week.WeekEndDate.Day}: ");

                foreach (var info in week.Infos)
                {
                    sb.Append($"{info.Code} - max: {info.MaxRate}, min: {info.MinRate}, median: {info.MedianRate}; ");
                }

                if (!week.Infos.Any())
                {
                    sb.Append("There is no existing data");
                }

                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);
            }

            return(sb.ToString());
        }
        public virtual async Task <MonthExchangeRateReport> GetMonthReport(DateTime month)
        {
            var model = new MonthExchangeRateReport
            {
                ReportDate = month
            };

            var weekExchangeRateStatistics = new List <WeekExchangeRateStatistic>();

            var startDate = new DateTime(month.Year, month.Month, 1);
            var endDate   = startDate.AddMonths(1).AddDays(-1);

            while (startDate < endDate)
            {
                var currentEndDate = startDate.AddDays((int)DayOfWeek.Saturday - (int)startDate.DayOfWeek + 1);

                if (currentEndDate > endDate)
                {
                    currentEndDate = endDate;
                }

                // TODO: распараллелить?
                weekExchangeRateStatistics.Add(new WeekExchangeRateStatistic
                {
                    WeekStart   = startDate,
                    WeekEndDate = currentEndDate,
                    Infos       = await this.GetInfos(startDate, currentEndDate)
                });
                startDate = currentEndDate.AddDays(1);
            }

            model.ByWeek = weekExchangeRateStatistics;

            return(model);
        }
Example #3
0
 protected internal virtual void AddHeader(MonthExchangeRateReport report, StringBuilder sb)
 {
     sb.Append("Year: ");
     sb.Append(report.ReportDate.Year);
     sb.Append(", month: ");
     sb.Append(report.ReportDate.ToString("MMMM"));
     sb.Append(Environment.NewLine);
     sb.Append(Environment.NewLine);
 }