Exemplo n.º 1
0
        public void Update(List <IBlockInfo> blockInfos, List <IWohnungInfo> wohnungInfos, IProjektInfo projektInfo, IPariDatabase database)
        {
            ClearAll();

            var projektId = GetProjektId(projektInfo, database);

            GetWohnungRecords(wohnungInfos, projektId);

            // Kategorien aus Datenbank
            GetKategoriesFromDatabase(database, projektId);

            // AutoCAD-Blockinfo
            var blockInfoDict = new Dictionary <string, IBlockInfo>();

            foreach (var blockInfo in blockInfos)
            {
                blockInfoDict[blockInfo.Handle] = blockInfo;
            }

            // Räume aus Datenkbank
            var dbRaume = database.GetRaeume(projektId);

            // Ermitteln der zu löschenden Räume
            foreach (var raumRecord in dbRaume)
            {
                _raumDict[raumRecord.AcadHandle] = raumRecord;
                if (!blockInfoDict.ContainsKey(raumRecord.AcadHandle))
                {
                    DelRaume.Add(raumRecord);
                }
            }

            // updRaume und newRaume
            foreach (var blockInfo in blockInfos)
            {
                IRaumRecord raumRecord;
                if (_raumDict.TryGetValue(blockInfo.Handle, out raumRecord))
                {
                    UpdRaume.Add(raumRecord);
                    var rr2 = raumRecord.ShallowCopy();
                    raumRecord.UpdateValuesFrom(blockInfo);
                    if (!raumRecord.IsEqualTo(rr2))
                    {
                        ChangedRaumRecords.Add(raumRecord);
                        NrOfChangedRaumRecords++;
                    }
                }
                else
                {
                    raumRecord           = _factory.CreateRaumRecord();
                    raumRecord.ProjektId = projektId;
                    NewRaume.Add(raumRecord);
                    raumRecord.UpdateValuesFrom(blockInfo);
                }

                IKategorieRecord kat;
                if (!_dbKatDict.TryGetValue(raumRecord.KatIdentification, out kat))
                {
                    kat           = _factory.CreateKategorie(raumRecord);
                    kat.ProjektId = projektId;
                    NewKats.Add(kat);
                    raumRecord.Kategorie = kat;
                    _dbKatDict.Add(raumRecord.KatIdentification, kat);
                }
                else
                {
                    if (!CompareNutzwert(raumRecord.Nutzwert, kat.Nutzwert))
                    {
                        // create kat because of rnw-handling
                        var tmpkat = _factory.CreateKategorie(raumRecord);
                        kat.RNW      = tmpkat.RNW;
                        kat.Nutzwert = tmpkat.Nutzwert;
                        UpdKats.Add(kat);
                    }
                    DelKats.Remove(kat);
                }

                raumRecord.Kategorie = kat;
            }

            CheckNutzwertPerKatOk();
        }
Exemplo n.º 2
0
        private void WriteAllgemein(int projektId, IProjektInfo pi)
        {
            log.Debug("WriteAllgemein");
            var       targetSheet   = GetWorksheet("ALLGEMEIN");
            const int MAX_COL_INDEX = 4;

            // Überschrift PKW ABSTELLPLÄTZE
            CopyCells(_SheetAllgemein, targetSheet, rowIndex1: 0, colIndex1: 0, rowIndex2: 0, colIndex2: MAX_COL_INDEX, copyColumnWidth: true);


            // raume
            var raeume = _Database.GetRaeume(projektId);

#if !ALTEVARIANTE
            List <IRaumRecord> tops, allgs, pkws;
            SplitRaeume(raeume, out pkws, out tops, out allgs);
            var allgRaeumePerTop = allgs.GroupBy(x => x.Top).OrderBy(x => x.Key, _TopAllgComparer).ToList();
#else
            // alte variante
            var allgRaeumePerTop = raeume.Where(x => IsAllgForSumme(x)).GroupBy(x => x.Top).OrderBy(x => x.Key, _TopAllgComparer).ToList();
#endif

            int    targetRowIndex = 4;
            var    matrix         = new ExcelMatrix(startRowIndex: targetRowIndex, nrOfCols: MAX_COL_INDEX + 1);
            double sumGes         = 0.0;
            foreach (var raumKvp in allgRaeumePerTop)
            {
                var art    = raumKvp.Key;
                var topBez = art.Replace("ALLG", "");
                if (string.IsNullOrEmpty(topBez))
                {
                    topBez = "AUSSENANLAGEN";
                }
                double sumArt = 0.0;

                CopyCells(_SheetAllgemein, targetSheet, rowIndex1: 4, colIndex1: 0, rowIndex2: 5, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex);
                matrix.Add(targetRowIndex, 0, topBez);
                targetRowIndex += 2;
                var  perGesch   = raumKvp.GroupBy(x => x.Lage).OrderBy(x => x.Key, _GeschossSortComparer);
                bool firstGesch = true;
                foreach (var rpg in perGesch)
                {
                    if (firstGesch)
                    {
                        firstGesch = false;
                    }
                    else
                    {
                        targetRowIndex++;
                    }
                    var geschoss = rpg.Key;

                    var sumProGesch = rpg.Sum(x => x.Flaeche);
                    sumGes += sumProGesch;
                    sumArt += sumProGesch;

                    CopyCells(_SheetAllgemein, targetSheet, rowIndex1: 6, colIndex1: 0, rowIndex2: 6, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex);
                    matrix.Add(targetRowIndex, 0, geschoss);

                    var sortedR = rpg.OrderBy(x => x.Raum);
                    foreach (var r in sortedR)
                    {
                        matrix.Add(targetRowIndex, 2, r.Raum);
                        matrix.Add(targetRowIndex, 3, r.Flaeche);
                        matrix.Add(targetRowIndex, 4, "m²");
                        targetRowIndex++;
                        CopyCells(_SheetAllgemein, targetSheet, rowIndex1: 6, colIndex1: 0, rowIndex2: 6, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex);
                    }
                }
                CopyCells(_SheetAllgemein, targetSheet, rowIndex1: 12, colIndex1: 0, rowIndex2: 14, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex);
                targetRowIndex++;

                matrix.Add(targetRowIndex, 2, "Summe");
                matrix.Add(targetRowIndex, 3, sumArt);
                matrix.Add(targetRowIndex, 4, "m²");

                targetRowIndex += 2;
            }
            targetRowIndex += 2;
            CopyCells(_SheetAllgemein, targetSheet, rowIndex1: 39, colIndex1: 0, rowIndex2: 40, colIndex2: MAX_COL_INDEX, copyColumnWidth: false, targetRowIndex1: targetRowIndex);
            matrix.Add(targetRowIndex, 0, "SUMME ALLER ALLGEMEINFLÄCHEN");
            matrix.Add(targetRowIndex, 3, sumGes);
            matrix.Add(targetRowIndex, 4, "m²");
            targetRowIndex++;
            matrix.Add(targetRowIndex, 0, "nicht für Nutzwert relevant");

            matrix.Write(targetSheet);
        }