示例#1
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);
        }
        public List <Mandant> GetAenlicheMandanten(DateTime erfassungsJahr, List <BenchmarkingGruppenTyp> benchmarkingGruppenTypList)
        {
            var currentMandantDetails = mandantDetailsService.GetMandantDetailsByJahr(erfassungsJahr);

            MandantDetails   mandantDetails   = null;
            Mandant          mandant          = null;
            ErfassungsPeriod erfassungsPeriod = null;
            var queryOver = transactionScopeProvider.CurrentTransactionScope.Session
                            .QueryOver(() => mandantDetails)
                            .JoinAlias(() => mandantDetails.ErfassungsPeriod, () => erfassungsPeriod)
                            .Where(() => mandantDetails.IsCompleted)
                            .Where(() => erfassungsPeriod.IsClosed)
                            .Where(() => erfassungsPeriod.Erfassungsjahr == erfassungsJahr);

            queryOver = BuildGroupping(queryOver, benchmarkingGruppenTypList, currentMandantDetails);

            var aenlicheMandanten = queryOver.Select(md => md.Mandant).List <Mandant>().ToList();

            var kengrosseMandantId = transactionScopeProvider.Queryable <KenngroessenFruehererJahre>()
                                     .Where(k => k.Jahr == erfassungsJahr.Year).Select(k => k.Mandant.Id).ToList();

            queryOver = transactionScopeProvider.CurrentTransactionScope.Session
                        .QueryOver(() => mandantDetails)
                        .JoinAlias(() => mandantDetails.ErfassungsPeriod, () => erfassungsPeriod)
                        .JoinAlias(() => mandantDetails.Mandant, () => mandant)
                        .Where(() => mandantDetails.IsCompleted) // Safety check
                        .Where(() => !erfassungsPeriod.IsClosed) // You can only get the data from the current erfassungsPeriod is calculation with KenngroessenFruehererJahre
                        .WhereRestrictionOn(() => mandant.Id).IsIn(kengrosseMandantId);

            queryOver = BuildGroupping(queryOver, benchmarkingGruppenTypList, currentMandantDetails);

            aenlicheMandanten.AddRange(queryOver.Select(md => md.Mandant).List <Mandant>().ToList());

            return(aenlicheMandanten);
        }
示例#3
0
        public void CopyMandantenDetailsData(ErfassungsPeriod closedPeriod)
        {
            mandantDetailsService.CreateCopy(closedPeriod);

            MandantDetails mandantDetails = mandantDetailsService.GetEntitiesBy(closedPeriod).Single();

            switch (closedPeriod.NetzErfassungsmodus)
            {
            case NetzErfassungsmodus.Summarisch:
                mandantDetails.NetzLaenge = netzSummarischDetailService.GetEntitiesBy(closedPeriod).Sum(nsd => nsd.Fahrbahnlaenge);
                break;

            case NetzErfassungsmodus.Tabellarisch:
                mandantDetails.NetzLaenge = strassenabschnittService.GetEntitiesBy(closedPeriod).Sum(sa => (decimal?)sa.Laenge) ?? 0;
                break;

            case NetzErfassungsmodus.Gis:
                mandantDetails.NetzLaenge = strassenabschnittGISService.GetEntitiesBy(closedPeriod).Sum(sa => (decimal?)sa.Laenge) ?? 0;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            //NetzLaenge's unit is km
            mandantDetails.NetzLaenge /= 1000m;

            transactionScopeProvider.Update(mandantDetails);
        }
示例#4
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 RangeModel GetRange(BenchmarkingGruppenTyp benchmarkingGruppenTyp, MandantDetails currentMandantDetails)
        {
            var dataBaseEigenschaftTyp = benchmarkingGruppenTyp.ToDataBaseEigenschaftTyp();

            var wert = GetBenchmarkingGruppenWert(currentMandantDetails, benchmarkingGruppenTyp);
            var benchmarkingGruppenConfigurations = transactionScopeProvider.Queryable <BenchmarkingGruppenConfiguration>().Where(bgc => bgc.EigenschaftTyp == dataBaseEigenschaftTyp);

            return(new RangeModel
            {
                BenchmarkingGruppen = benchmarkingGruppenTyp,
                UntereInclusieveGrenzwert = benchmarkingGruppenConfigurations.Where(bgc => bgc.Grenzwert <= wert).OrderByDescending(bgc => bgc.Grenzwert).Select(bgc => (decimal?)bgc.Grenzwert).FirstOrDefault(),
                ObereExclusiveGrenzwert = benchmarkingGruppenConfigurations.Where(bgc => bgc.Grenzwert > wert).OrderBy(bgc => bgc.Grenzwert).Select(bgc => (decimal?)bgc.Grenzwert).FirstOrDefault(),
            });
        }
        private decimal GetBenchmarkingGruppenWert(MandantDetails mandantDetailsModel, BenchmarkingGruppenTyp benchmarkingGruppenTyp)
        {
            switch (benchmarkingGruppenTyp)
            {
            case BenchmarkingGruppenTyp.NetzGroesse:
                return(mandantDetailsModel.NetzLaenge);

            case BenchmarkingGruppenTyp.EinwohnerGroesse:
                return(mandantDetailsModel.Einwohner ?? 0);

            case BenchmarkingGruppenTyp.MittlereHoehenlageSiedlungsgebieteGroesse:
                return(mandantDetailsModel.MittlereHoehenlageSiedlungsgebiete ?? 0);

            case BenchmarkingGruppenTyp.SteuerertragGroesse:
                return(mandantDetailsModel.Steuerertrag ?? 0);

            default:
                throw new ArgumentOutOfRangeException("benchmarkingGruppenTyp");
            }
        }
示例#7
0
        public BenchmarkingData CalculateInventarBenchmarkingData <TEntity>(ErfassungsPeriod closedPeriod, MandantDetails mandantDetails, List <TEntity> strassenEntities, Func <TEntity, decimal> getLaenge)
            where TEntity : IBelastungskategorieHolder, IFlaecheFahrbahnUndTrottoirHolder
        {
            var flaecheProBelastungskategorie = belastungskategorieService.AlleBelastungskategorie.ToDictionary(b => b, b => 0m);

            decimal wbw = 0m;
            decimal wvl = 0m;

            foreach (var entity in strassenEntities)
            {
                var bk = flaecheProBelastungskategorie.Keys.Single(b => b.Id == entity.Belastungskategorie.Id);
                flaecheProBelastungskategorie[bk] += entity.FlaecheFahrbahn;

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

                wbw += wiederbeschaffungswert;
                wvl += wertverlustII;
            }

            decimal laengeSum  = strassenEntities.Sum(getLaenge);
            decimal flaecheSum = strassenEntities.Sum(e => e.FlaecheFahrbahn);

            var benchmarkingData = GetBenchmarkingData(closedPeriod, mandantDetails, wvl, wbw, laengeSum, flaecheSum);

            foreach (var bdd in benchmarkingData.BenchmarkingDataDetails)
            {
                var value = flaecheProBelastungskategorie.Single(f => f.Key.Id == bdd.Belastungskategorie.Id);
                bdd.FahrbahnflaecheAnteil = Percent(value.Value, flaecheSum);
            }

            return(benchmarkingData);
        }
示例#8
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);
        }
示例#9
0
        public BenchmarkingData CalculateBenchmarkingDataForGisModus(ErfassungsPeriod closedPeriod, MandantDetails mandantDetails)
        {
            var strassenabschnittenGis   = strassenabschnittGISService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant).Where(sa => sa.Strasseneigentuemer == EigentuemerTyp.Gemeinde);
            var zustandsabschnittenGis   = zustandsabschnittGISService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant).Where(za => za.StrassenabschnittGIS.Strasseneigentuemer == EigentuemerTyp.Gemeinde);
            var realisierteMassnahmenGis = realisierteMassnahmeGISModelService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant);

            return(CalculateBenchmarkingDataForStrassenModus(closedPeriod, mandantDetails, strassenabschnittenGis, zustandsabschnittenGis, realisierteMassnahmenGis));
        }
示例#10
0
        public BenchmarkingData CalculateBenchmarkingDataForTabellarischeModus(ErfassungsPeriod closedPeriod, MandantDetails mandantDetails)
        {
            var strassenabschnitten   = strassenabschnittService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant).Where(sa => sa.Strasseneigentuemer == EigentuemerTyp.Gemeinde);
            var zustandsabschnitten   = zustandsabschnittService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant).Where(za => za.Strassenabschnitt.Strasseneigentuemer == EigentuemerTyp.Gemeinde);
            var realisierteMassnahmen = realisierteMassnahmeService.GetEntitiesBy(closedPeriod, mandantDetails.Mandant);

            return(CalculateBenchmarkingDataForStrassenModus(closedPeriod, mandantDetails, strassenabschnitten, zustandsabschnitten, realisierteMassnahmen));
        }
示例#11
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);
        }
        private IQueryOver <MandantDetails, MandantDetails> BuildGroupping(IQueryOver <MandantDetails, MandantDetails> queryOver, IEnumerable <BenchmarkingGruppenTyp> benchmarkingGruppenTypList, MandantDetails currentMandantDetails)
        {
            foreach (var benchmarkingGruppenTyp in benchmarkingGruppenTypList)
            {
                switch (benchmarkingGruppenTyp)
                {
                case BenchmarkingGruppenTyp.NetzGroesse:
                    queryOver = BuildQueryOver(md => md.NetzLaenge, queryOver, benchmarkingGruppenTyp, currentMandantDetails);
                    break;

                case BenchmarkingGruppenTyp.EinwohnerGroesse:
                    queryOver = BuildQueryOver(md => md.Einwohner, queryOver, benchmarkingGruppenTyp, currentMandantDetails);
                    break;

                case BenchmarkingGruppenTyp.Gemeinde:
                    queryOver = queryOver.Where(md => md.Gemeindetyp == currentMandantDetails.Gemeindetyp);
                    break;

                case BenchmarkingGruppenTyp.MittlereHoehenlageSiedlungsgebieteGroesse:
                    queryOver = BuildQueryOver(md => md.MittlereHoehenlageSiedlungsgebiete, queryOver,
                                               benchmarkingGruppenTyp, currentMandantDetails);
                    break;

                case BenchmarkingGruppenTyp.OeffentlicheVerkehrsmittel:
                    queryOver =
                        queryOver.Where(
                            md => md.OeffentlicheVerkehrsmittel == currentMandantDetails.OeffentlicheVerkehrsmittel);
                    break;

                case BenchmarkingGruppenTyp.SteuerertragGroesse:
                    queryOver = BuildQueryOver(md => md.Steuerertrag, queryOver, benchmarkingGruppenTyp, currentMandantDetails);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            return(queryOver);
        }
        private IQueryOver <MandantDetails, MandantDetails> BuildQueryOver <TProperty>(Expression <Func <MandantDetails, TProperty> > expression, IQueryOver <MandantDetails, MandantDetails> queryOver, BenchmarkingGruppenTyp benchmarkingGruppenTyp, MandantDetails currentMandantDetails)
        {
            string propertyName = ExpressionHelper.GetPropertyName(expression);
            var    rangeModel   = benchmarkingGruppenConfigurationService.GetRange(benchmarkingGruppenTyp, currentMandantDetails);

            if (rangeModel.UntereInclusieveGrenzwert.HasValue)
            {
                queryOver = queryOver.Where(Restrictions.Ge(propertyName, Convert <TProperty>(rangeModel.UntereInclusieveGrenzwert.Value)));
            }

            if (rangeModel.ObereExclusiveGrenzwert.HasValue)
            {
                queryOver = queryOver.Where(Restrictions.Lt(propertyName, Convert <TProperty>(rangeModel.ObereExclusiveGrenzwert.Value)));
            }

            return(queryOver);
        }
示例#14
0
        public static Mandant CreateMandant(ISession session, string mandantName, string ownerId, NetzErfassungsmodus netzErfassungsmodus = NetzErfassungsmodus.Summarisch, MandantDetails mandantDetails = null, string mandantBezeichnung = null)
        {
            var mandant = new Mandant
            {
                MandantBezeichnung = mandantBezeichnung ?? mandantName,
                MandantName        = mandantName,
                OwnerId            = ownerId
            };

            session.Save(mandant);
            var erfassungsPeriod = CreateErfassungsPeriod(session, mandant, netzErfassungsmodus);

            var netzSummarisch = new NetzSummarisch
            {
                ErfassungsPeriod       = erfassungsPeriod,
                MittleresErhebungsJahr = null,
                Mandant = erfassungsPeriod.Mandant
            };

            session.Save(netzSummarisch);

            foreach (Belastungskategorie belastungskategorie in session.Query <Belastungskategorie>())
            {
                session.Save(new NetzSummarischDetail
                {
                    NetzSummarisch      = netzSummarisch,
                    Belastungskategorie = belastungskategorie
                });
            }

            foreach (GlobalWiederbeschaffungswertKatalog globalWiederbeschaffungswertKatalog in session.Query <GlobalWiederbeschaffungswertKatalog>())
            {
                session.Save(new WiederbeschaffungswertKatalog
                {
                    AlterungsbeiwertI     = globalWiederbeschaffungswertKatalog.AlterungsbeiwertI,
                    AlterungsbeiwertII    = globalWiederbeschaffungswertKatalog.AlterungsbeiwertII,
                    GesamtflaecheFahrbahn = globalWiederbeschaffungswertKatalog.GesamtflaecheFahrbahn,
                    FlaecheTrottoir       = globalWiederbeschaffungswertKatalog.FlaecheTrottoir,
                    FlaecheFahrbahn       = globalWiederbeschaffungswertKatalog.FlaecheFahrbahn,

                    IsCustomized = false,

                    Belastungskategorie = globalWiederbeschaffungswertKatalog.Belastungskategorie,

                    ErfassungsPeriod = erfassungsPeriod,
                    Mandant          = mandant,
                });
            }


            foreach (string globalMassnahmenvorschlagKatalogtyp in session.Query <GlobalMassnahmenvorschlagKatalog>().Select(gmvk => gmvk.Parent.Typ).Distinct())
            {
                foreach (GlobalMassnahmenvorschlagKatalog globalMassnahmenvorschlagKatalog in session.Query <GlobalMassnahmenvorschlagKatalog>().Where(gmvk => gmvk.Parent.Typ == globalMassnahmenvorschlagKatalogtyp))
                {
                    session.Save(new MassnahmenvorschlagKatalog
                    {
                        DefaultKosten       = globalMassnahmenvorschlagKatalog.DefaultKosten,
                        IsCustomized        = false,
                        Belastungskategorie = globalMassnahmenvorschlagKatalog.Belastungskategorie,
                        Parent           = globalMassnahmenvorschlagKatalog.Parent,
                        ErfassungsPeriod = erfassungsPeriod,
                        Mandant          = mandant,
                    });
                }
            }

            if (mandantDetails == null)
            {
                session.Save(new MandantDetails
                {
                    DifferenzHoehenlageSiedlungsgebiete = 10,
                    Einwohner       = 2000,
                    Gemeindeflaeche = 30000,
                    Gemeindetyp     = session.Query <GemeindeKatalog>().FirstOrDefault(),
                    MittlereHoehenlageSiedlungsgebiete = 400,
                    OeffentlicheVerkehrsmittel         = session.Query <OeffentlicheVerkehrsmittelKatalog>().FirstOrDefault(),
                    Siedlungsflaeche = 500000,
                    Steuerertrag     = 7,
                    NetzLaenge       = 0,

                    IsCompleted = true,

                    Mandant          = mandant,
                    ErfassungsPeriod = erfassungsPeriod
                });
            }
            else
            {
                mandantDetails.Mandant          = mandant;
                mandantDetails.ErfassungsPeriod = erfassungsPeriod;
                session.Save(mandantDetails);
            }

            return(mandant);
        }