private void CalculatePosForErfassungsPeriod <TZustandsabschnittBase, TStrassenabschnittBase>(TZustandsabschnittBase[] zustandsabschnittList, JahresInterval jahresInterval, ErfassungsPeriod erfassungsPeriod) where TStrassenabschnittBase : StrassenabschnittBase where TZustandsabschnittBase : ZustandsabschnittBase { var zustandsspiegelProJahrGrafischeDiagramPos = Enum.GetValues(typeof(ZustandsindexTyp)) .OfType <ZustandsindexTyp>() .Where(z => z != ZustandsindexTyp.Unbekannt) .Select(z => CreateDiagramPo(z, jahresInterval)) .ToDictionary(po => po.ZustandsindexTyp, po => po); decimal totalUnknowZustandsindexTypFlaeche = 0; decimal mittlereZustandsindexWithFlaeche = 0; decimal mittlererAufnahmedatumTickMultipliedWithFlaeche = 0; foreach (var zustandsabschnitt in zustandsabschnittList) { var zustandsindexTyp = ZustandsindexCalculator.GetTyp(zustandsabschnitt.Zustandsindex); zustandsspiegelProJahrGrafischeDiagramPos[zustandsindexTyp].FlaecheFahrbahn += (zustandsabschnitt.FlaecheFahrbahn ?? 0); mittlereZustandsindexWithFlaeche += zustandsabschnitt.Zustandsindex * (zustandsabschnitt.FlaecheFahrbahn ?? 0); mittlererAufnahmedatumTickMultipliedWithFlaeche += zustandsabschnitt.Aufnahmedatum.Ticks * (zustandsabschnitt.FlaecheFahrbahn ?? 0); } var currentJahr = ErfassungsPeriodService.GetCurrentErfassungsPeriod().Erfassungsjahr.Year; diagramPos[jahresInterval.JahrBis] = zustandsspiegelProJahrGrafischeDiagramPos.Values.ToList(); var totalKnownZustandsindexTypFlaeche = zustandsspiegelProJahrGrafischeDiagramPos.Values.Sum(po => po.FlaecheFahrbahn); var totalFlaeche = totalKnownZustandsindexTypFlaeche + totalUnknowZustandsindexTypFlaeche; var totalStrasseFlaeche = transactionScopeProvider.Queryable <TStrassenabschnittBase>() .Where(z => z.ErfassungsPeriod == erfassungsPeriod) .Sum(g => g.Laenge * g.BreiteFahrbahn); var zustandsspiegelProJahrGrafischeTablePos = zustandsspiegelProJahrGrafischeDiagramPos.Values .Select(po => CreateTablePo(jahresInterval, GetPerzent(po.FlaecheFahrbahn, totalKnownZustandsindexTypFlaeche), FormatHelper.ToReportNoDecimalPercentString, LocalizationService.GetLocalizedEnum(po.ZustandsindexTyp), (int)po.ZustandsindexTyp, currentJahr, po.ZustandsindexTyp)); tablePos[jahresInterval.JahrBis] = zustandsspiegelProJahrGrafischeTablePos.ToList(); PercentPartitioningCorrector.Corrigate(tablePos[jahresInterval.JahrBis].Cast <IPercentHolder>().ToList()); var mittlererAufnahmedatum = (mittlererAufnahmedatumTickMultipliedWithFlaeche == 0 || totalFlaeche == 0) ? (decimal?)null : (decimal.Divide(mittlererAufnahmedatumTickMultipliedWithFlaeche, totalFlaeche)); tablePos[jahresInterval.JahrBis].Add(CreateTablePo(jahresInterval, mittlererAufnahmedatum, d => FormatHelper.ToReportDateTimeString(d, "-"), reportLocalizationService.MittleresAlterDerZustandsaufnahmen, -10, currentJahr)); var netzAnteil = GetPerzent(totalKnownZustandsindexTypFlaeche, totalStrasseFlaeche); tablePos[jahresInterval.JahrBis].Add(CreateTablePo(jahresInterval, netzAnteil, FormatHelper.ToReportNoDecimalPercentString, reportLocalizationService.NetzAnteil, -20, currentJahr)); var mittlererZustandsindex = (mittlereZustandsindexWithFlaeche == 0 || totalFlaeche == 0) ? 0 : decimal.Divide(mittlereZustandsindexWithFlaeche, totalFlaeche); tablePos[jahresInterval.JahrBis].Add(CreateTablePo(jahresInterval, mittlererZustandsindex, FormatHelper.ToReportDecimalString, reportLocalizationService.MittlererZustandsindex, -30, currentJahr)); }
private void CalculateMittleresAlterForBelastungskategorien <TZustandsabschnitt>(List <TZustandsabschnitt> zustandsabschnittBaseList) where TZustandsabschnitt : ZustandsabschnittBase { foreach (var zustandsabschnitt in zustandsabschnittBaseList) { var belastungskategorieId = zustandsabschnitt.StrassenabschnittBase.Belastungskategorie.Id; var belastungskategorieDictionary = diagramPos[belastungskategorieId]; belastungskategorieDictionary[FlaecheTyp.Fahrbahn][ZustandsindexCalculator.GetTyp(zustandsabschnitt.Zustandsindex)].Value += zustandsabschnitt.FlaecheFahrbahn ?? 0; belastungskategorieDictionary[FlaecheTyp.Trottoir][zustandsabschnitt.ZustandsindexTrottoirLinks].Value += zustandsabschnitt.FlaceheTrottoirLinks ?? 0; belastungskategorieDictionary[FlaecheTyp.Trottoir][zustandsabschnitt.ZustandsindexTrottoirRechts].Value += zustandsabschnitt.FlaceheTrottoirRechts ?? 0; if (!mittleresAlterForBelastungskategorien.ContainsKey(belastungskategorieId)) { mittleresAlterForBelastungskategorien[belastungskategorieId] = new Dictionary <FlaecheTyp, decimal> { { FlaecheTyp.Fahrbahn, 0 }, { FlaecheTyp.Trottoir, 0 } } } ; mittleresAlterForBelastungskategorien[belastungskategorieId][FlaecheTyp.Fahrbahn] += (zustandsabschnitt.FlaecheFahrbahn ?? 0) * zustandsabschnitt.Aufnahmedatum.Ticks; mittleresAlterForBelastungskategorien[belastungskategorieId][FlaecheTyp.Trottoir] += (zustandsabschnitt.FlaecheTrottoir) * zustandsabschnitt.Aufnahmedatum.Ticks; } }