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); }
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); }
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); }
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); }
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()); }