/// <summary> /// довольно медленно /// может _ratesAsDictionary позволит ускорить? /// </summary> /// <param name="frequency"></param> /// <returns></returns> public List <DiagramPoint> GetBalances(Every frequency) { var root = _db.SeekAccount("Мои"); var result = new List <DiagramPoint>(); var currentDate = new DateTime(2001, 12, 31); // считать надо всегда с самого начала, иначе остаток неправильный будет var currentMoneyBag = new MoneyBag(); foreach (var tran in _db.TransWithTags) { while (currentDate < tran.Timestamp.Date) { if (FunctionsWithEvery.IsLastDayOf(currentDate, frequency)) { var sum = _rateExtractor.GetUsdEquivalent(currentMoneyBag, tran.Timestamp.Date); if (sum != 0) // если вернулся 0 - это гэпы без курсов в начале времен { result.Add(new DiagramPoint(currentDate, (double)sum)); } else { var lastSum = result.Last().CoorYdouble; result.Add(new DiagramPoint(currentDate, lastSum)); } } currentDate = currentDate.AddDays(1); } currentMoneyBag = currentMoneyBag + tran.MoneyBagForAccount(root); } result.Add(new DiagramPoint(currentDate, (double)_rateExtractor.GetUsdEquivalent(currentMoneyBag, currentDate))); return(result); }
private void GroupAllData(Every period) { var groupedData = new SortedList <DateTime, List <double> >(); var onePair = DiagramData.ElementAt(0); for (var p = 1; p < DiagramData.Count; p++) { var pair = DiagramData.ElementAt(p); if (FunctionsWithEvery.IsTheSamePeriod(onePair.Key, pair.Key, period)) { for (var i = 0; i < onePair.Value.Count; i++) { onePair.Value[i] += pair.Value[i]; } } else { groupedData.Add(onePair.Key, onePair.Value); onePair = pair; } } groupedData.Add(onePair.Key, onePair.Value); DiagramData = new SortedList <DateTime, List <double> >(groupedData); }