using System.Collections.Generic; using System; using System.Linq; using CalculationBackend.Model.Tables; namespace CalculationBackend.Model.ImportExport { public class SiaRecordGGroup { public List Records { get; set; } = new List(); public List Unterpositionen { get; set; } = new List(); public string Kapitelnummer { get; set; } public string Leistungsposition { get; set; } public string? Positionstext { get; set; } public string? Überschrift { get; set; } public string? Mengeneinheit { get; set; } public decimal? Menge { get; set; } public decimal? Preis { get; set; } public class Unterposition { public string? Objektgliederung { get; set; } public string? Positionslage { get; set; } public string? Mengenart { get; set; } public string? VorzeichenMenge { get; set; } public decimal? Menge { get; set; } public string? VorzeichenPreis { get; set; } public decimal? Preis { get; set; } public string? KagCode { get; set; } } public SiaRecordGGroup(List list) { this.Records = list; this.Kapitelnummer = Records.First().Kapitelnummer; this.Leistungsposition = Records.First().Leistungsposition; if (!Records.TrueForAll(r => r.Kapitelnummer == Records.First().Kapitelnummer)) { throw new Exception("Diese Records haben nicht die gleiche Kapitelnummer."); } if (!Records.TrueForAll(r => r.Leistungsposition == this.Leistungsposition)) { throw new Exception("Diese Records haben nicht die gleiche Leistungsposition."); } if (Records.Any(r => r.Recordtyp == "1")) { var r = Records.Single(r => r.Recordtyp == "1"); this.Überschrift = r.Positionstext + " " + r.SpezielleCodierungen; } if (Records.Any(r => r.Recordtyp == "2")) this.Überschrift = Records.Single(r => r.Recordtyp == "2").Positionstext; if (Records.Any(r => r.Recordtyp == "3")) this.Positionstext = Records.Where(r => r.Recordtyp == "3").Select(r => r.Positionstext).Aggregate((current, next) => current + "\n" + next); if (Records.Any(r => r.Recordtyp == "5")) this.Mengeneinheit = Records.Single(r => r.Recordtyp == "5").Mengeneinheit; if (Records.Any(r => r.Recordtyp == "6")) { this.Unterpositionen = Records .Where(r => r.Recordtyp == "6") .Select(r => { return new Unterposition() { Objektgliederung = r.Objektgliederung, Positionslage = r.Positionslage, Mengenart = r.Mengenart, VorzeichenMenge = r.VorzeichenMenge, Menge = r.getMenge(), VorzeichenPreis = r.VorzeichenPreis, Preis = r.getPreis(), KagCode = r.KagCode, }; }).ToList(); this.Preis = this.Unterpositionen.Sum(u => u.Preis); this.Menge = this.Unterpositionen.Sum(u => u.Menge); } } public override string ToString() { string ret = String.Format("kn: {0,-3} {1,21}\n", Kapitelnummer, "lp: " + Leistungsposition); ret += (" " + Überschrift).PadLeft(30, '=') + "\n"; //foreach (var up in Unterpositionen) //{ // ret += up.Variablennummer.PadLeft(30, '-') + "\n"; // ret += $"{up.Text}\n"; //} //ret += "==============================\n"; //ret += $"{Mengenart} {KagCode} {VorzeichenMenge}{Menge} {Mengeneinheit}\n"; return ret + "\n\n"; } } }