private void EnsureJahrInPoLists(JahresInterval jahresInterval) { if (!diagramPos.ContainsKey(jahresInterval.JahrBis)) { diagramPos[jahresInterval.JahrBis] = new List <DiagramPo>(); } if (!tablePos.ContainsKey(jahresInterval.JahrBis)) { tablePos[jahresInterval.JahrBis] = new List <TablePo>(); } }
private DiagramPo CreateDiagramPo(ZustandsindexTyp z, JahresInterval jahresInterval) { return(new DiagramPo { ZustandsindexTyp = z, ZustandsindexTypBezeichnung = LocalizationService.GetLocalizedEnum(z), ColorCode = z.ToColorCode(), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis }); }
private void CalculateTablePos(JahresInterval jahresInterval, RealisiertenMassnahmenWertverlustZustandsindexProJahrGrafischeDiagramPo diagramPo) { var currentJahr = ErfassungsPeriodService.GetCurrentErfassungsPeriod().Erfassungsjahr.Year; tablePos[jahresInterval.JahrBis].Add(new TablePo { CurrentJahr = currentJahr, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, Value = diagramPo.RealisierteMassnahmen, Bezeichnung = reportLocalizationService.RealisiertenMassnahmen, FormatString = FormatStrings.ReportNoDecimalFormat, ColorCode = "#800080", LegendUrl = reportLegendImageService.GetLegendUrl("RM"), SortOrder = 10 }); tablePos[jahresInterval.JahrBis].Add(new TablePo { CurrentJahr = currentJahr, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, Value = diagramPo.WertVerlust, Bezeichnung = reportLocalizationService.WV, FormatString = FormatStrings.ReportNoDecimalFormat, ColorCode = "#6495ED", LegendUrl = reportLegendImageService.GetLegendUrl("RWV"), SortOrder = 10 }); tablePos[jahresInterval.JahrBis].Add(new TablePo { CurrentJahr = currentJahr, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, Value = diagramPo.MittlererZustandindex, Bezeichnung = reportLocalizationService.MittlererZustandsindex, ColorCode = "#FF0000", FormatString = FormatStrings.ReportShortDecimalFormat, LegendUrl = reportLegendImageService.GetLegendUrl("Mittlerer"), SortOrder = 20 }); }
private TablePo CreateTablePo(JahresInterval jahresInterval, decimal?decimalValue, Func <decimal?, string> format, string zustandsindexTypBezeichnung, int sortOrder, int currentYear, ZustandsindexTyp zustandsindexTyp = ZustandsindexTyp.Unbekannt) { return(new TablePo { CurrentJahr = currentYear, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, DecimalValue = decimalValue, Format = format, ZustandsindexTyp = zustandsindexTyp, ZustandsindexTypBezeichnung = zustandsindexTypBezeichnung, SortOrder = sortOrder, LegendImageUrl = reportLegendImageService.GetLegendUrlForEnum(zustandsindexTyp) }); }
private void CalculatePosForKenngroessenFruehererJahre(ErfassungsPeriod erfassungsPeriod, KenngroessenFruehererJahre kenngroessenFruehererJahre, JahresInterval jahresInterval) { var diagramPo = new RealisiertenMassnahmenWertverlustZustandsindexProJahrGrafischeDiagramPo() { JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, WertVerlust = kenngroessenFruehererJahre.KenngroesseFruehereJahrDetails.Sum(d => (GetWiederbeschaffungswert(d, wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod)) * wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod).AlterungsbeiwertII / 100) / 1000m), MittlererZustandindex = kenngroessenFruehererJahre.KenngroesseFruehereJahrDetails.Average(d => d.MittlererZustand) ?? 0, RealisierteMassnahmen = kenngroessenFruehererJahre.KostenFuerWerterhaltung / 1000m }; EnsureJahrInPoLists(jahresInterval); diagramPos[jahresInterval.JahrBis].Add(diagramPo); CalculateTablePos(jahresInterval, diagramPo); }
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 DiagramPo CreateWiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPo(Belastungskategorie belastungskategorie, JahresInterval jahresInterval) { return(new DiagramPo { ColorCode = belastungskategorie.ColorCode, JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, BelastungskategorieId = belastungskategorie.Id, BelastungskategorieBezeichnung = LocalizationService.GetLocalizedBelastungskategorieTyp(belastungskategorie.Typ), BelastungskategorieReihenfolge = belastungskategorie.Reihenfolge, BelastungskategorieTyp = belastungskategorie.Typ }); }
private Dictionary <Guid, DiagramPo> GetWiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos(JahresInterval jahresInterval) { return(belastungskategorieService.AlleBelastungskategorie .Select(bk => CreateWiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPo(bk, jahresInterval)) .ToDictionary(po => po.BelastungskategorieId, po => po)); }
private void CalculatePosForJahr <T>(ErfassungsPeriod erfassungsPeriod, List <T> entityList, JahresInterval jahresInterval, Func <T, WiederbeschaffungswertKatalogModel, decimal> getWiederBeschaffungswert, Func <T, Belastungskategorie> getBelastungskategorie, Func <T, decimal> getFlaeche) { if (!diagramPos.ContainsKey(jahresInterval.JahrBis)) { diagramPos[jahresInterval.JahrBis] = new List <DiagramPo>(); } if (!tablePos.ContainsKey(jahresInterval.JahrBis)) { tablePos[jahresInterval.JahrBis] = new List <TablePo>(); } var wiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos = GetWiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos(jahresInterval); foreach (var netzSummarischDetail in entityList) { var belastungskategorie = getBelastungskategorie(netzSummarischDetail); var wieder = wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(belastungskategorie, erfassungsPeriod); var wiederbeschaffungswert = getWiederBeschaffungswert(netzSummarischDetail, wieder); var diagramPo = wiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos[belastungskategorie.Id]; //Note: divided by 1 000 (1000m2) diagramPo.FlaecheFahrbahn += getFlaeche(netzSummarischDetail) / 1000m; //Note: divided by 1 000 000 (Mio. CHF) infro from sample excel diagramPo.WiederBeschaffungsWert += wiederbeschaffungswert / 1000000m; //Note: divided by 1 000 (kCHF) diagramPo.WertVerlust += (wiederbeschaffungswert * wieder.AlterungsbeiwertII / 100) / 1000; } diagramPos[jahresInterval.JahrBis].AddRange(wiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos.Values); var currentJahr = ErfassungsPeriodService.GetCurrentErfassungsPeriod().Erfassungsjahr.Year; var wiederbeschaffungswertUndWertverlustProJahrGrafischeTablePos = wiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos.Values .Select(po => new TablePo { CurrentJahr = currentJahr, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, Value = po.FlaecheFahrbahn, Bezeichnung = po.BelastungskategorieBezeichnung + " " + reportLocalizationService.TausendQuadratMeter, ColorCode = po.ColorCode, LegendUrl = reportLegendImageService.GetLegendUrl(po.BelastungskategorieTyp), SortOrder = belastungskategorieService.AlleBelastungskategorie.IndexOf(belastungskategorieService.AlleBelastungskategorie.Single(bk => bk.Id == po.BelastungskategorieId)) }); tablePos[jahresInterval.JahrBis].AddRange(wiederbeschaffungswertUndWertverlustProJahrGrafischeTablePos); tablePos[jahresInterval.JahrBis].Add(new TablePo { CurrentJahr = currentJahr, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, Value = wiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos.Values.Sum(po => po.FlaecheFahrbahn), Bezeichnung = reportLocalizationService.GesamtFlaeche, SortOrder = 10 }); tablePos[jahresInterval.JahrBis].Add(new TablePo { CurrentJahr = currentJahr, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, Value = wiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos.Values.Sum(po => po.WertVerlust), Bezeichnung = reportLocalizationService.WV, ColorCode = "#8b0000", LegendUrl = reportLegendImageService.GetLegendUrl("WV"), SortOrder = 20 }); tablePos[jahresInterval.JahrBis].Add(new TablePo { CurrentJahr = currentJahr, AktualString = LocalizationService.GetLocalizedText("CurrentShort"), JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, Value = wiederbeschaffungswertUndWertverlustProJahrGrafischeDiagramPos.Values.Sum(po => po.WiederBeschaffungsWert), Bezeichnung = reportLocalizationService.WBW, LegendUrl = reportLegendImageService.GetLegendUrl("WBW"), ColorCode = "#cd48ff", SortOrder = 30 }); }
private void CalculatePosForKenngroessenFruehererJahre(ErfassungsPeriod erfassungsPeriod, KenngroessenFruehererJahre kenngroessenFruehererJahre, JahresInterval jahresInterval) { CalculatePosForJahr(erfassungsPeriod, kenngroessenFruehererJahre.KenngroesseFruehereJahrDetails.ToList(), jahresInterval, GetWiederbeschaffungswert, kgfjd => kgfjd.Belastungskategorie, kfjd => kfjd.Fahrbahnflaeche); }
private void CalculatePosForSummarischeModus(ErfassungsPeriod erfassungsPeriod, List <NetzSummarischDetail> netzSummarischDetailList, JahresInterval jahresInterval) { CalculatePosForJahr(erfassungsPeriod, netzSummarischDetailList, jahresInterval, GetWiederbeschaffungswert, nsd => nsd.Belastungskategorie, nsd => nsd.Fahrbahnflaeche); }
private void CalculatePosForStrassenModus <T>(ErfassungsPeriod erfassungsPeriod, IQueryable <T> queryable, Parameter parameter, JahresInterval jahresInterval) where T : StrassenabschnittBase { var strassenabschnittList = filtererFactory .CreateFilterer <T>(parameter) .Filter(queryable) .Fetch(sa => sa.Belastungskategorie) .ToList(); CalculatePosForJahr(erfassungsPeriod, strassenabschnittList, jahresInterval, GetWiederbeschaffungswert, sa => sa.Belastungskategorie, sa => sa.FlaecheFahrbahn); }
private void CalculatePosForSummarischeModus(ErfassungsPeriod erfassungsPeriod, JahresInterval jahresInterval) { var netzSummarischDetailList = netzSummarischDetailService.GetEntitiesBy(erfassungsPeriod).Fetch(nsd => nsd.Belastungskategorie).ToList(); var diagramPo = new RealisiertenMassnahmenWertverlustZustandsindexProJahrGrafischeDiagramPo() { JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, WertVerlust = netzSummarischDetailList.Sum(d => (GetWiederbeschaffungswert(d, wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod)) * wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod).AlterungsbeiwertII / 100) / 1000m), MittlererZustandindex = netzSummarischDetailList.Average(d => d.MittlererZustand), RealisierteMassnahmen = (transactionScopeProvider.Queryable <RealisierteMassnahmeSummarsich>().Where(r => r.ErfassungsPeriod == erfassungsPeriod).Sum(s => s.KostenFahrbahn) ?? 0) / 1000m }; EnsureJahrInPoLists(jahresInterval); diagramPos[jahresInterval.JahrBis].Add(diagramPo); CalculateTablePos(jahresInterval, diagramPo); }
private void CalculatePosForStrassenModusGIS(ErfassungsPeriod erfassungsPeriod, RealisiertenMassnahmenWertverlustZustandsindexProJahrGrafischeParameter parameter, JahresInterval jahresInterval) { var strassenabschnittList = filtererFactory .CreateFilterer <StrassenabschnittGIS>(parameter) .Filter(transactionScopeProvider.Queryable <StrassenabschnittGIS>().Fetch(s => s.Belastungskategorie) .Where(e => e.ErfassungsPeriod == erfassungsPeriod)) .Select(s => new StrasenabschnittGISReportPO { Id = s.Id, Trottoir = s.Trottoir, Laenge = s.Laenge, BreiteFahrbahn = s.BreiteFahrbahn, BreiteTrottoirLinks = s.BreiteTrottoirLinks, BreiteTrottoirRechts = s.BreiteTrottoirRechts, Belastungskategorie = s.Belastungskategorie }) .ToList(); IEnumerable <Guid> strabsIds = strassenabschnittList.Select(i => i.Id).ToArray(); var zustandabscnitten = transactionScopeProvider.Queryable <ZustandsabschnittGIS>() .Where(z => strabsIds.Contains(z.StrassenabschnittGIS.Id)) .Select(s => new { s.Laenge, s.StrassenabschnittGIS.BreiteFahrbahn, s.Zustandsindex }) .ToArray(); var diagramPo = new RealisiertenMassnahmenWertverlustZustandsindexProJahrGrafischeDiagramPo() { JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, WertVerlust = strassenabschnittList.Sum(d => (GetWiederbeschaffungswert(d, wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod)) * wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod).AlterungsbeiwertII / 100) / 1000m), MittlererZustandindex = SafeDevide(zustandabscnitten.Sum(d => (d.Laenge * d.BreiteFahrbahn) * d.Zustandsindex), zustandabscnitten.Sum(z => z.Laenge * z.BreiteFahrbahn)), RealisierteMassnahmen = (transactionScopeProvider.Queryable <RealisierteMassnahmeGIS>().Where(r => r.ErfassungsPeriod == erfassungsPeriod).ToArray().Sum(s => (s.KostenFahrbahn ?? 0) + (s.KostenTrottoirLinks ?? 0) + (s.KostenTrottoirRechts ?? 0))) / 1000m }; EnsureJahrInPoLists(jahresInterval); diagramPos[jahresInterval.JahrBis].Add(diagramPo); CalculateTablePos(jahresInterval, diagramPo); }
private void CalculatePosForStrassenModus(ErfassungsPeriod erfassungsPeriod, RealisiertenMassnahmenWertverlustZustandsindexProJahrGrafischeParameter parameter, JahresInterval jahresInterval) { var strassenabschnittList = filtererFactory .CreateFilterer <Strassenabschnitt>(parameter) .Filter(transactionScopeProvider.Queryable <Strassenabschnitt>() .Where(e => e.ErfassungsPeriod == erfassungsPeriod)) .Fetch(sa => sa.Belastungskategorie) .FetchMany(sa => sa.Zustandsabschnitten) .ToList(); var diagramPo = new RealisiertenMassnahmenWertverlustZustandsindexProJahrGrafischeDiagramPo() { JahrVon = jahresInterval.JahrVon, JahrBis = jahresInterval.JahrBis, WertVerlust = strassenabschnittList.Sum(d => (GetWiederbeschaffungswert(d, wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod)) * wiederbeschaffungswertKatalogService.GetWiederbeschaffungswertKatalogModel(d.Belastungskategorie, erfassungsPeriod).AlterungsbeiwertII / 100) / 1000m), MittlererZustandindex = SafeDevide(strassenabschnittList.SelectMany(s => s.Zustandsabschnitten).Sum(d => (d.FlaecheFahrbahn ?? 0) * d.Zustandsindex), strassenabschnittList.SelectMany(s => s.Zustandsabschnitten).Sum(z => z.FlaecheFahrbahn) ?? 0m), RealisierteMassnahmen = (transactionScopeProvider.Queryable <RealisierteMassnahme>().Where(r => r.ErfassungsPeriod == erfassungsPeriod).ToArray().Sum(s => (s.KostenFahrbahn ?? 0) + (s.KostenTrottoirLinks ?? 0) + (s.KostenTrottoirRechts ?? 0))) / 1000m }; EnsureJahrInPoLists(jahresInterval); diagramPos[jahresInterval.JahrBis].Add(diagramPo); CalculateTablePos(jahresInterval, diagramPo); }