private void AddPhoenixKlemme(List <Terminal> terminals, ref int lineNo, ReihenklemmeInfo klemme)
        {
            var terminal = new Terminal {
                LineNumber = lineNo++, ArticleNumber = klemme.ArticleNo, ArticleName = klemme.ArticleName
            };

            terminals.Add(terminal);
        }
        private bool TryWriteEndBracketToCsv(CsvWriter csv, ref int lineNo, ReihenklemmeInfo reihenklemmeInfo)
        {
            if (string.IsNullOrEmpty(reihenklemmeInfo.ArticleNo))
            {
                return(false);
            }

            csv.WriteRecord(
                new EndBracket
            {
                LineNumber    = lineNo++,
                ArticleNumber = reihenklemmeInfo.ArticleNo,
                ArticleName   = reihenklemmeInfo.ArticleName,
            });
            csv.NextRecord();

            return(true);
        }
        private void CreateExportData(CsvWriter csv, PlanData data, TrageschieneKonfiguration tragschienenKonfiguration, ref int lineNo)
        {
            var outNodes      = data.treeNodeDatas.Values.OfType <TreeNodeDataOut>().ToList();
            var nodesToExport = outNodes
                                .Where(x => tragschienenKonfiguration.Klemmleisten
                                       .Contains(x.klemmleiste)) // nur die angegebenen Klemmleisten exportieren
                                                                 //.OrderBy( x => tragschienenKonfiguration.IndexOf(x.klemmleiste))       // die Reihenfolge wird durch die Konfiguration definiert.
                                .OrderBy(x => x.KlemmleisteNummer)
                                .ThenBy(x => x.klemmenBlockNummer)
                                .ToList();

            if (!nodesToExport.Any())
            {
                return;
            }


            WriteTrageschieneToCsv(csv, ref lineNo, data, tragschienenKonfiguration);
            WriteFreeSpacingToCsv(csv, ref lineNo);


            string           letzteKlemmleiste      = string.Empty;
            ReihenklemmeInfo klemmeKlemmleistenEnde = null; // Klemme die am Ende einer Klemmleiste hinzugefügt werden muss
            string           klemmeMarking          = string.Empty;
            int position = 1;

            var terminals = new List <Terminal>();

            foreach (var nodeData in nodesToExport)
            {
                if (letzteKlemmleiste != nodeData.klemmleiste)
                {
                    WriteKlemmleisteToCsv(csv, ref lineNo, terminals, klemmeKlemmleistenEnde);

                    terminals = new List <Terminal>();

                    // für 230V Klemmleisten werden Einspeiseklemme und Sammelschienenträger hinzugefügt
                    if (nodeData.Type == "out")
                    {
                        // Einspeiseklemme sofort hinzufügen
                        AddPhoenixKlemme(terminals, ref lineNo, CreateKlemmeFromConfig(_reihenklemmenCfg["PhoenixEinspeiseklemme"])); // _reihenklemmenCfg["Einspeiseklemme"]);

                        // Sammelschienenträger merken wir uns bis zum Ende der Klemmleiste
                        klemmeKlemmleistenEnde = CreateKlemmeFromConfig(_reihenklemmenCfg["PhoenixSammelschienenträger"]); //reihenklemmenCfg["Sammelschienenträger"];
                    }
                    else
                    {
                        // ansonsten beschriften wir die erste Klemme mit dem Namend er Klemmleiste
                        klemmeMarking = nodeData.klemmleiste;
                    }
                }
                letzteKlemmleiste = nodeData.klemmleiste;


                int currentKlemmeNrInLeiste = 0;
                var reihenklemmen           = _reihenklemmenCreator.CreateReihenklemmen(nodeData, ref currentKlemmeNrInLeiste);

                if (!reihenklemmen.Any())
                {
                    continue;
                }

                for (int idx = 0; idx < reihenklemmen.Count; idx++)
                {
                    var currentKlemme = reihenklemmen[idx];

                    AddPhoenixKlemme(terminals, ref lineNo, currentKlemme);
                    klemmeMarking = string.Empty;
                }
            }

            WriteKlemmleisteToCsv(csv, ref lineNo, terminals, klemmeKlemmleistenEnde);
        }
        private void WriteKlemmleisteToCsv(CsvWriter csv, ref int lineNo, List <Terminal> terminals, ReihenklemmeInfo klemmeKlemmleistenEnde)
        {
            if (!terminals.Any())
            {
                return;
            }

            if (lineNo > 1)
            {
                WriteFreeSpacingToCsv(csv, ref lineNo);
            }


            if (klemmeKlemmleistenEnde != null)
            {
                AddPhoenixKlemme(terminals, ref lineNo, klemmeKlemmleistenEnde);
            }

            // Clipfix zum Start
            TryWriteEndBracketToCsv(csv, ref lineNo, CreateKlemmeFromConfig(_reihenklemmenCfg["PhoenixKlemmenleisteStart"]));

            csv.WriteRecords(terminals);

            // Clipfix zum Ende
            TryWriteEndBracketToCsv(csv, ref lineNo, CreateKlemmeFromConfig(_reihenklemmenCfg["PhoenixKlemmenleisteEnde"]));
        }