private int GetSumNutz(List <IRaumZaRecord> raeume) { int gesSumNutzEinz = 0; var raeumeGroupByTop = raeume.GroupBy(x => x.Top); { foreach (var topGroup in raeumeGroupByTop) { var rGbKat = topGroup.GroupBy(x => x.Kategorie); foreach (var katGroup in rGbKat) { IKategorieZaRecord kat = katGroup.Key; double m2 = 0.0; foreach (var raum in katGroup) { m2 += raum.Flaeche; } var nutzEinz = (int)Math.Round(m2 * kat.ActualNutzwert); gesSumNutzEinz += nutzEinz; } } } return(gesSumNutzEinz); }
private void WritePari(int projektId, IProjektInfo pi) { log.Debug("WritePari"); //Excel.Worksheet targetSheet = _WorkBook.Worksheets.Add(); //targetSheet.Name = "Parifizierung"; var targetSheet = GetWorksheet("Parifizierung"); const int MAX_COL_INDEX = 10; // Überschrift Nutzflächenanteile CopyCells(_SheetPari, targetSheet, rowIndex1: 0, colIndex1: 0, rowIndex2: 0, colIndex2: MAX_COL_INDEX, copyColumnWidth: true); // bauvorhaben CopyCells(_SheetPari, targetSheet, rowIndex1: 1, colIndex1: 0, rowIndex2: 1, colIndex2: 0, copyColumnWidth: false); targetSheet.Cells[2, 1] = pi.Bauvorhaben; // räume mit kategorien mit zuabschlaginfo var raeume = _Database.GetRaeumeWithZuAbschlag(projektId).Where(x => IsNwTopName(x.Top)).OrderBy(x => x.Top, _TextNumSortComparer).ToList(); int gesSumNutzEinz = GetSumNutz(raeume); var raeumeGroupByTop = raeume.GroupBy(x => x.Top); // wohnungseigentumsobjekte CopyCells(_SheetPari, targetSheet, rowIndex1: 5, colIndex1: 0, rowIndex2: 1, colIndex2: 0, copyColumnWidth: false); var nrOfWEO = raeumeGroupByTop.Count(); targetSheet.Cells[6, 1] = nrOfWEO + " Wohnungseigentumsobjekte"; // header: Fieldnames CopyCells(_SheetPari, targetSheet, rowIndex1: 6, colIndex1: 0, rowIndex2: 6, colIndex2: MAX_COL_INDEX, copyColumnWidth: false); CopyCells(_SheetPari, targetSheet, rowIndex1: 7, colIndex1: 0, rowIndex2: 7, colIndex2: MAX_COL_INDEX, copyColumnWidth: false); int targetRowIndex = 9; var matrix = new ExcelMatrix(targetRowIndex, MAX_COL_INDEX + 1); foreach (var topGroup in raeumeGroupByTop) { var top = topGroup.Key; // Top-Header CopyCells(_SheetPari, targetSheet, rowIndex1: 9, colIndex1: 0, rowIndex2: 9, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex); matrix.Add(targetRowIndex, 0, top); var wohnTypIndex = targetRowIndex; IWohnungRecord wohnungRec = null; if (_WohnungInfos.TryGetValue(top, out wohnungRec)) { var wohnTyp = wohnungRec.Typ ?? ""; matrix.Add(wohnTypIndex, 10, wohnTyp); } var rGbKat = topGroup.GroupBy(x => x.Kategorie); targetRowIndex += 2; int sumNutzEinz = 0; foreach (var katGroup in rGbKat.OrderBy(x => x.Key, _KatSortComparer)) { IKategorieZaRecord kat = katGroup.Key; //bool isPkw = false; if (wohnungRec == null) { // check pkw string pkwWohnTyp = null; if (GetPkwWohnTyp(kat.Widmung, out pkwWohnTyp)) { //isPkw = true; matrix.Add(wohnTypIndex, 10, pkwWohnTyp); } } double m2 = 0.0; foreach (var raum in katGroup) { m2 += raum.Flaeche; } var nutzEinz = (int)Math.Round(m2 * kat.ActualNutzwert); sumNutzEinz += nutzEinz; // Kategorie CopyCells(_SheetPari, targetSheet, rowIndex1: 11, colIndex1: 0, rowIndex2: 11, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex); matrix.Add(targetRowIndex, 1, kat.Lage); matrix.Add(targetRowIndex, 2, kat.Widmung); matrix.Add(targetRowIndex, 3, m2); matrix.Add(targetRowIndex, 4, "m²"); matrix.Add(targetRowIndex, 5, kat.ActualNutzwert); matrix.Add(targetRowIndex, 7, nutzEinz); targetRowIndex += 1; var begr = kat.Begrundung.Trim(); //if (isPkw) //{ // begr = "als Wohnungseigentumsobjekt"; //} //else if (string.Compare(begr, "als Zuschlag", StringComparison.OrdinalIgnoreCase) == 0) { begr = "als Wohnungseigentumszuschlag"; } else if (string.Compare(begr, "als Zubehör", StringComparison.OrdinalIgnoreCase) == 0) { begr = "als Wohnungseigentumszubehör"; } matrix.Add(targetRowIndex, 2, begr); targetRowIndex += 1; } // Summe // 18-20 wegen Abschlusslinie. Deshalt targetRowIndex - 1 CopyCells(_SheetPari, targetSheet, rowIndex1: 18, colIndex1: 0, rowIndex2: 20, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex - 1); targetRowIndex += 1; matrix.Add(targetRowIndex, 2, "Summe Nutzwert"); matrix.Add(targetRowIndex, 3, top); matrix.Add(targetRowIndex, 7, sumNutzEinz); matrix.Add(targetRowIndex, 8, sumNutzEinz); matrix.Add(targetRowIndex, 9, sumNutzEinz * 2); matrix.Add(targetRowIndex, 10, gesSumNutzEinz * 2); targetRowIndex += 3; } // Summe Gesamt targetRowIndex += 1; CopyCells(_SheetPari, targetSheet, rowIndex1: 20, colIndex1: 0, rowIndex2: 20, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex); matrix.Add(targetRowIndex, 2, "SUMME MINDESTANTEILE"); matrix.Add(targetRowIndex, 7, gesSumNutzEinz); matrix.Add(targetRowIndex, 8, gesSumNutzEinz); matrix.Add(targetRowIndex, 9, gesSumNutzEinz * 2); matrix.Add(targetRowIndex, 10, gesSumNutzEinz * 2); matrix.Write(targetSheet); }