public PerformanceIndicatorWeekData(PerformanceIndicatorWeekDataLink link, double actual) { base.Link = link.Link; base.IndicatorId = link.IndicatorId; base.WeekNumber = link.WeekNumber; base.Year = link.Year; m_actual = actual; }
public bool Equals(PerformanceIndicatorWeekDataLink other) { // credit: http://stackoverflow.com/a/10454552/677735 if (other == null) { return(false); } return (( this.IndicatorId.Equals(other.IndicatorId) && this.Year.Equals(other.Year) && this.WeekNumber.Equals(other.WeekNumber) ) && ( this.Link == other.Link || this.Link != null && this.Link.Equals(other.Link) )); }
public void addWeekValue(int year, int weekNumber, IO.Swagger.Model.CorporateStructureLink link, int indicatorId, double actual) { PerformanceIndicatorWeekDataLink dataLink = new PerformanceIndicatorWeekDataLink(); dataLink.Year = year; dataLink.WeekNumber = weekNumber; dataLink.Link = new IO.Swagger.Model.CorporateStructureLink(link.ProductID, link.GeoAreaID, link.CustomerID, link.CompetitorID, link.SupplierID, link.PartnerID, link.OtherPlayerID, link.CompanyLegalEntityID, link.CompanyFunctionID); dataLink.IndicatorId = indicatorId; if (m_weeklyValues.ContainsKey(dataLink)) { m_weeklyValues[dataLink] += actual; } else { m_weeklyValues.Add(dataLink, actual); } }
private void calculateWeeklyLevelRows() { /* * Iterate all indicators and every used corporatefilter value * and generate "sum" row for this filter */ int minYear = m_weeklyValues.Keys.Min(x => x.Year); int maxYear = m_weeklyValues.Keys.Max(x => x.Year); List <int> distinctIndicators = m_weeklyValues.Keys.Select(x => x.IndicatorId).Distinct().ToList(); foreach (int indicatorId in distinctIndicators) { for (int selYear = minYear; selYear <= maxYear; selYear++) { for (int selWeek = 1; selWeek <= 52; selWeek++) { if (m_weeklyValues.Keys.Where(x => x.Year == selYear && x.WeekNumber == selWeek && x.IndicatorId == indicatorId).Count() == 0) { continue; } PerformanceIndicatorWeekDataLink topLevelLink = new PerformanceIndicatorWeekDataLink(); topLevelLink.Year = selYear; topLevelLink.WeekNumber = selWeek; topLevelLink.IndicatorId = indicatorId; topLevelLink.Link = new IO.Swagger.Model.CorporateStructureLink(null, null, null, null, null, null, null, null, null); double totalValue = 0; foreach (PerformanceIndicatorWeekDataLink entryWithSomething in m_weeklyValues.Keys.Where(x => x.Year == selYear && x.WeekNumber == selWeek && x.IndicatorId == indicatorId && (x.Link.CompanyFunctionID != 0 || x.Link.CompanyLegalEntityID != 0 || x.Link.CompetitorID != 0 || x.Link.CustomerID != 0 || x.Link.GeoAreaID != 0 || x.Link.OtherPlayerID != 0 || x.Link.PartnerID != 0 || x.Link.ProductID != 0 || x.Link.SupplierID != 0) )) { totalValue += m_weeklyValues[entryWithSomething]; } if (m_weeklyValues.ContainsKey(topLevelLink)) { m_weeklyValues[topLevelLink] += totalValue; } else { m_weeklyValues.Add(topLevelLink, totalValue); } List <PerformanceIndicatorWeekDataLink> thisPeriodValues = m_weeklyValues.Keys.Where(x => x.Year == selYear && x.WeekNumber == selWeek && x.IndicatorId == indicatorId).ToList(); foreach (PerformanceIndicatorWeekDataLink entryWithSomething in thisPeriodValues) { if (entryWithSomething.Link.GeoAreaID != null) { PerformanceIndicatorWeekDataLink entryWithoutOtherLinks = new PerformanceIndicatorWeekDataLink(); entryWithoutOtherLinks.Year = selYear; entryWithoutOtherLinks.WeekNumber = selWeek; entryWithoutOtherLinks.IndicatorId = indicatorId; entryWithoutOtherLinks.Link = new IO.Swagger.Model.CorporateStructureLink(null, entryWithSomething.Link.GeoAreaID, null, null, null, null, null, null, null); if (!m_weeklyValues.ContainsKey(entryWithoutOtherLinks)) { totalValue = 0; foreach (PerformanceIndicatorWeekDataLink entryWithGeoAreaSet in m_weeklyValues.Keys.Where(x => x.Year == selYear && x.WeekNumber == selWeek && x.IndicatorId == indicatorId && x.Link.GeoAreaID == entryWithSomething.Link.GeoAreaID)) { totalValue += m_weeklyValues[entryWithGeoAreaSet]; } m_weeklyValues.Add(entryWithoutOtherLinks, totalValue); } } if (entryWithSomething.Link.PartnerID != null) { PerformanceIndicatorWeekDataLink entryWithoutOtherLinks = new PerformanceIndicatorWeekDataLink(); entryWithoutOtherLinks.Year = selYear; entryWithoutOtherLinks.WeekNumber = selWeek; entryWithoutOtherLinks.IndicatorId = indicatorId; entryWithoutOtherLinks.Link = new IO.Swagger.Model.CorporateStructureLink(null, null, null, null, null, entryWithSomething.Link.PartnerID, null, null, null); if (!m_weeklyValues.ContainsKey(entryWithoutOtherLinks)) { totalValue = 0; foreach (PerformanceIndicatorWeekDataLink entryWithPartnerSet in m_weeklyValues.Keys.Where(x => x.Year == selYear && x.WeekNumber == selWeek && x.IndicatorId == indicatorId && x.Link.PartnerID == entryWithSomething.Link.PartnerID)) { totalValue += m_weeklyValues[entryWithPartnerSet]; } m_weeklyValues.Add(entryWithoutOtherLinks, totalValue); } } } } } } }