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