Beispiel #1
0
        public BenchmarkingData CalculateZustandsBenchmarkingData <TEntity>(BenchmarkingData benchmarkingData, List <TEntity> zustandEntities, Func <TEntity, DateTime?> getAufnahmeDatum, Func <TEntity, decimal?> getZustandsindex)
            where TEntity : IBelastungskategorieHolder, IFlaecheFahrbahnUndTrottoirHolder
        {
            benchmarkingData.ZustandsindexNetz = null;
            var entitiesWithZustandsindex = zustandEntities.Where(e => getZustandsindex(e).HasValue).ToList();

            if (entitiesWithZustandsindex.Any())
            {
                benchmarkingData.ZustandsindexNetz = Divide(entitiesWithZustandsindex.Sum(e => getZustandsindex(e).Value *e.FlaecheFahrbahn), entitiesWithZustandsindex.Sum(e => e.FlaecheFahrbahn));
            }

            benchmarkingData.MittleresAlterDerZustandsaufnahmenNetz = null;
            var entitiesWithAufnahmeDatum = zustandEntities.Where(e => getAufnahmeDatum(e).HasValue).ToList();

            if (entitiesWithAufnahmeDatum.Any())
            {
                benchmarkingData.MittleresAlterDerZustandsaufnahmenNetz = DateTime.FromBinary((long)(Divide(entitiesWithAufnahmeDatum.Sum(e => getAufnahmeDatum(e).Value.Ticks *e.FlaecheFahrbahn), entitiesWithAufnahmeDatum.Sum(e => e.FlaecheFahrbahn))));
            }

            foreach (var bdd in benchmarkingData.BenchmarkingDataDetails)
            {
                var entitiesForBelastungskategorie = zustandEntities.Where(e => e.Belastungskategorie.Id == bdd.Belastungskategorie.Id && getZustandsindex(e).HasValue).ToList();
                if (entitiesForBelastungskategorie.Any())
                {
                    bdd.Zustandsindex = Divide(entitiesForBelastungskategorie.Sum(e => getZustandsindex(e).Value *e.FlaecheFahrbahn), entitiesWithAufnahmeDatum.Where(e => e.Belastungskategorie.Id == bdd.Belastungskategorie.Id).Sum(e => e.FlaecheFahrbahn));
                }
            }

            return(benchmarkingData);
        }
Beispiel #2
0
        private BenchmarkingData GetBenchmarkingData(ErfassungsPeriod closedPeriod, MandantDetails mandantDetails, decimal wvl, decimal wbw, decimal laengeSum, decimal flaecheSum)
        {
            var benchmarkingData = new BenchmarkingData
            {
                CalculatedAt       = timeService.Now,
                NeedsRecalculation = false,
                GesamtlaengeDesStrassennetzesProSiedlungsflaeche = Divide(ToKiloMeter(laengeSum), (mandantDetails.Siedlungsflaeche ?? 0)),
                GesamtlaengeDesStrassennetzesProEinwohner        = Divide(laengeSum, mandantDetails.Einwohner ?? 0),
                FahrbahnflaecheProSiedlungsflaeche       = Divide(flaecheSum, (mandantDetails.Siedlungsflaeche ?? 0)),
                FahrbahnflaecheProEinwohner              = Divide(flaecheSum, mandantDetails.Einwohner ?? 0),
                GesamtstrassenflaecheProSiedlungsflaeche = Percent(flaecheSum, ToSquareMeter(mandantDetails.Siedlungsflaeche ?? 0)),
                GesamtstrassenflaecheProEinwohner        = Divide(flaecheSum, mandantDetails.Einwohner ?? 0),
                WiederbeschaffungswertProFahrbahn        = Divide(wbw, flaecheSum),
                WiederbeschaffungswertProEinwohner       = Divide(wbw, mandantDetails.Einwohner ?? 0),
                WertverlustProFahrbahn  = Divide(wvl, flaecheSum),
                WertverlustProEinwohner = Divide(wvl, mandantDetails.Einwohner ?? 0),
                Mandant          = closedPeriod.Mandant,
                ErfassungsPeriod = closedPeriod
            };

            benchmarkingData.BenchmarkingDataDetails = belastungskategorieService.AlleBelastungskategorie.Select(b =>
                                                                                                                 new BenchmarkingDataDetail
            {
                Belastungskategorie = b,
                BenchmarkingData    = benchmarkingData
            }).ToList();

            return(benchmarkingData);
        }
Beispiel #3
0
        private BenchmarkingData CalculateBenchmarkingDataForStrassenModus <TStrassenabschnittEntity, TZustandsabschnittEntity, TRealisierteMassnahmeEntity>(ErfassungsPeriod closedPeriod, MandantDetails mandantDetails, IQueryable <TStrassenabschnittEntity> strassenabschnitten, IQueryable <TZustandsabschnittEntity> zustandsabschnitten, IQueryable <TRealisierteMassnahmeEntity> realisierteMassnahmen)
            where TStrassenabschnittEntity : StrassenabschnittBase
            where TZustandsabschnittEntity : ZustandsabschnittBase
            where TRealisierteMassnahmeEntity : RealisierteMassnahmeBase
        {
            BenchmarkingData benchmarkingData = CalculateInventarBenchmarkingData(closedPeriod, mandantDetails, strassenabschnitten.ToList(), sa => sa.Laenge);

            CalculateZustandsBenchmarkingData(benchmarkingData, zustandsabschnitten.ToList(), za => za.Aufnahmedatum, za => za.Zustandsindex);
            CalculateRealisierteMassnahmenBenchmarkingData(closedPeriod, benchmarkingData, mandantDetails, realisierteMassnahmen.ToList(), strassenabschnitten.ToList());
            return(benchmarkingData);
        }
Beispiel #4
0
        public BenchmarkingData CalculateBenchmarkingDataForSummarischeModus(ErfassungsPeriod closedPeriod, MandantDetails mandantDetails)
        {
            var netzSummarischDetails            = netzSummarischDetailService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant).Fetch(nsd => nsd.NetzSummarisch).ToList();
            var realisierteMassnahmeSummarsichen = realisierteMassnahmeSummarsichService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant).ToList();

            BenchmarkingData benchmarkingData = CalculateInventarBenchmarkingData(closedPeriod, mandantDetails, netzSummarischDetails, nsd => nsd.Fahrbahnlaenge);

            CalculateZustandsBenchmarkingData(benchmarkingData, netzSummarischDetails.ToList(), nsd => nsd.NetzSummarisch.MittleresErhebungsJahr, za => za.MittlererZustand);

            CalculateRealisierteMassnahmenBenchmarkingData(closedPeriod, benchmarkingData, mandantDetails, realisierteMassnahmeSummarsichen.ToList(), netzSummarischDetails);
            return(benchmarkingData);
        }
Beispiel #5
0
        public BenchmarkingData CalculateRealisierteMassnahmenBenchmarkingData <TEntity, TStrassenEntity>(
            ErfassungsPeriod closedPeriod,
            BenchmarkingData benchmarkingData,
            MandantDetails mandantDetails,
            List <TEntity> realisierteMassnahmenEntities, List <TStrassenEntity> strassenEntities)
            where TEntity : IBelastungskategorieHolder, IRealisierteFlaecheHolder, IRealisierteMassnahmeKostenHolder
            where TStrassenEntity : IBelastungskategorieHolder, IFlaecheFahrbahnUndTrottoirHolder
        {
            var realisierteMassnahmenDataProBelastungskategorie = belastungskategorieService.AlleBelastungskategorie.ToDictionary(b => b, b => new RealisierteMassnahmeData {
                Fleache = 0m, Wbw = 0m, Wertverlust = 0m, Kosten = 0m
            });

            foreach (var entity in strassenEntities)
            {
                var bk = realisierteMassnahmenDataProBelastungskategorie.Keys.Single(b => b.Id == entity.Belastungskategorie.Id);

                var wieder = GetWieder(bk, closedPeriod);
                var wiederbeschaffungswert = GetWiederbeschaffungswert(entity, wieder);
                var wertverlustII          = wiederbeschaffungswert * wieder.AlterungsbeiwertII / 100;

                realisierteMassnahmenDataProBelastungskategorie[bk].Wbw         += wiederbeschaffungswert;
                realisierteMassnahmenDataProBelastungskategorie[bk].Wertverlust += wertverlustII;
            }

            foreach (var entity in realisierteMassnahmenEntities)
            {
                var bk = realisierteMassnahmenDataProBelastungskategorie.Keys.Single(b => b.Id == entity.Belastungskategorie.Id);
                realisierteMassnahmenDataProBelastungskategorie[bk].Fleache   += entity.RealisierteFlaeche;
                realisierteMassnahmenDataProBelastungskategorie[bk].Kosten    += entity.Kosten;
                realisierteMassnahmenDataProBelastungskategorie[bk].WbwKosten += entity.WbwKosten;
            }

            decimal sumKosten      = realisierteMassnahmenDataProBelastungskategorie.Values.Sum(r => r.Kosten);
            decimal sumFleache     = realisierteMassnahmenDataProBelastungskategorie.Values.Sum(r => r.Fleache);
            decimal sumWbw         = realisierteMassnahmenDataProBelastungskategorie.Values.Sum(r => r.Wbw);
            decimal sumWertverlust = realisierteMassnahmenDataProBelastungskategorie.Values.Sum(r => r.Wertverlust);

            benchmarkingData.RealisierteMassnahmenProFahrbahn                   = Divide(sumKosten, sumFleache);
            benchmarkingData.RealisierteMassnahmenProEinwohner                  = Divide(sumKosten, mandantDetails.Einwohner ?? 0);
            benchmarkingData.RealisierteMassnahmenProWertverlustNetz            = Percent(sumKosten, sumWertverlust);
            benchmarkingData.RealisierteMassnahmenProWiederbeschaffungswertNetz = Percent(sumKosten, sumWbw);

            foreach (var bdd in benchmarkingData.BenchmarkingDataDetails)
            {
                var r = realisierteMassnahmenDataProBelastungskategorie.Single(f => f.Key.Id == bdd.Belastungskategorie.Id);
                bdd.RealisierteMassnahmenProWiederbeschaffungswertNetz = Percent(r.Value.WbwKosten, r.Value.Wbw);
            }

            return(benchmarkingData);
        }
        public BenchmarkingData GetForCurrentMandant(DateTime jahrDateTime)
        {
            var q = transactionScopeProvider.Queryable <MandantDetails>()
                    .OrderBy(b => b.Id)
                    .Where(
                d =>
                d.ErfassungsPeriod.Erfassungsjahr.Year == jahrDateTime.Year &&
                d.Mandant.Id == securityService.GetCurrentMandant().Id);
            var result = ForMandantList(q);
            BenchmarkingData benchmarkingData = kenngroessenFruehererJahreBenchmarkingDataService.GetForCurrentMandant(jahrDateTime);

            if (benchmarkingData != null)
            {
                result.Add(benchmarkingData);
            }
            return(result.First());
        }
        public BenchmarkingData GetForCurrentMandant(DateTime jahrDateTime)
        {
            var result = new List <BenchmarkingData>();

            var mandantIds = new[] { securityService.GetCurrentMandant().Id };

            GetFromBenchmarkingData(result, jahrDateTime, mandantIds);

            BenchmarkingData benchmarkingData = kenngroessenFruehererJahreBenchmarkingDataService.GetForCurrentMandant(jahrDateTime);

            if (benchmarkingData != null)
            {
                result.Add(benchmarkingData);
            }

            return(result.Single());
        }