コード例 #1
0
        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;
            }
        }