private void createMenue(SingleChoiceAction action)
        {
            IObjectSpace os        = this.ObjectSpace;
            DetailView   curView   = (DetailView)View;
            boAnlage     curAnlage = os.GetObjectByKey <boAnlage>(((boAnlage)curView.CurrentObject).Oid);

            action.Items.Clear();
            switch (action.Id)
            {
            case ("doAddMessung"):
            {
                boAnlagenArt curArt = os.GetObjectByKey <boAnlagenArt>(curAnlage.AnlagenArt.Oid);
                action.ImageName = "system_monitor";
                if (curArt.lstMesstypen != null)
                {
                    foreach (boMesstyp messtyp in curArt.lstMesstypen)
                    {
                        ChoiceActionItem curItem = new ChoiceActionItem(messtyp.Oid.ToString(), messtyp.Bezeichnung, messtyp);
                        curItem.ImageName = "system_monitor";
                        action.Items.Add(curItem);
                    }
                }
                break;
            }
            }
        }
        public void doAddAnlage_Execute(object sender, SingleChoiceActionExecuteEventArgs e)
        {
            //IObjectSpace os = this.ObjectSpace;
            IObjectSpace   os              = Application.CreateObjectSpace();
            DetailView     curView         = (DetailView)View;
            boLiegenschaft curLiegenschaft = os.GetObjectByKey <boLiegenschaft>(((boLiegenschaft)curView.CurrentObject).Oid);
            //allgemein -> Auswahl der Parameter und dann DetailView öffnen
            ChoiceActionItem currentSelection = e.SelectedChoiceActionItem;
            boAnlage         mainUnit;

            if (currentSelection.ParentItem != null)
            {
                boAnlage     result      = null;
                boAnlagenArt selectedArt = os.GetObjectByKey <boAnlagenArt>(((boAnlagenArt)currentSelection.Data).Oid);
                if (currentSelection.ParentItem.Data.GetType() == typeof(LgHaustechnikKomponente))
                {
                    //1. Anlage zu einer bestehenden Komponente hinzufügen
                    LgHaustechnikKomponente curKomponente = os.GetObjectByKey <LgHaustechnikKomponente>(((LgHaustechnikKomponente)currentSelection.ParentItem.Data).Oid);
                    if (curKomponente != null)
                    {
                        //gibt es eine Hauptanlage?
                        mainUnit = curKomponente.lstAnlagen.Where(t => t.ParentAnlage == null).FirstOrDefault();
                        if (mainUnit != null)
                        {
                            //welche Anlagenart?
                            result = os.CreateObject <boAnlage>();
                            result.Liegenschaft          = curLiegenschaft;
                            result.HaustechnikKomponente = curKomponente;
                            result.ParentAnlage          = os.GetObjectByKey <boAnlage>(mainUnit.Oid);
                        }
                        //die Hauptanlage der Komponente finden

                        result.AnlagenArt = selectedArt;
                    }
                }

                //2. Anlage zur Liegenschaft hinzufügen
                //Wenn ein Item gewählt wurde das als Data die Gruppe hat:

                if (currentSelection.ParentItem.Data.GetType() == typeof(boLiegenschaft))
                {
                    result = os.CreateObject <boAnlage>();
                    result.Liegenschaft = curLiegenschaft;
                    if (currentSelection.Data.GetType() == typeof(boAnlagenKategorie))
                    {
                        result.AnlagenKategorie = os.GetObjectByKey <boAnlagenKategorie>(((boAnlagenKategorie)currentSelection.Data).Oid);
                    }
                    else
                    {
                        result.AnlagenArt = selectedArt;
                    }
                }
                if (result != null)
                {
                    DetailView dv = Application.CreateDetailView(os, result);
                    e.ShowViewParameters.CreatedView = dv;
                }
            }
        }
        protected override void OnActivated()
        {
            base.OnActivated();
            // Perform various tasks depending on the target View.



            curView = (DetailView)View;

            curAnlage = (boAnlage)curView.CurrentObject;
            // XPObjectSpace os = (XPObjectSpace)curView.ObjectSpace;
            if (curAnlage != null)
            {
                if (curAnlage.Typ != null)
                {
                    fiHerstellerProdukt curProdukt = curView.ObjectSpace.GetObjectByKey <fiHerstellerProdukt>(curAnlage.Typ.Oid);
                    if (curProdukt != null)
                    {
                        curAnlage.generateAnlagenparameter(curProdukt);
                        curAnlage.Save();
                        curView.ObjectSpace.CommitChanges();
                    }
                }
                if (curAnlage.AnlagenArt != null)
                {
                    boAnlagenArt curAnlagenart = curView.ObjectSpace.GetObjectByKey <boAnlagenArt>(curAnlage.AnlagenArt.Oid);
                    if (curAnlagenart != null)
                    {
                        curAnlage.generateAnlagenparameter(curAnlagenart);
                        curAnlage.Save();
                        curView.ObjectSpace.CommitChanges();
                    }
                }

                createStatusAction();
                if (!curView.ObjectSpace.IsNewObject(curAnlage))
                //if (curAnlage.AnlagenArt != null)
                {
                    createMenue(doAddKomponente);
                }

                curAnlage.checkAnlagenActions();
                curAnlage.Save();
                curView.ObjectSpace.CommitChanges();

                curAnlage.checkProduktActions();
                curAnlage.Save();
                curView.ObjectSpace.CommitChanges();


                this.View.Refresh();
            }
        }
        private void createMenue(SingleChoiceAction action)
        {
            #region Anlagen hinzufügen
            IObjectSpace                    os               = this.ObjectSpace;
            DetailView                      curView          = (DetailView)View;
            boLiegenschaft                  curLiegenschaft  = os.GetObjectByKey <boLiegenschaft>(((boLiegenschaft)curView.CurrentObject).Oid);
            IList <boAnlagenArt>            lstAnlagenArten  = os.GetObjects <boAnlagenArt>(new BinaryOperator("Aktiv", true, BinaryOperatorType.Equal));
            IList <LgHaustechnikKomponente> lstLgKomponenten = null;
            if (curLiegenschaft != null)
            {
                if (curLiegenschaft.lstHaustechnikKomponenten != null)
                {
                    lstLgKomponenten = curLiegenschaft.lstHaustechnikKomponenten;
                }
            }
            switch (action.Id)
            {
            case ("doDeleteAnlagenGruppe"):
                doDeleteAnlagenGruppe.Items.Clear();
                foreach (LgHaustechnikKomponente item in curLiegenschaft.lstHaustechnikKomponenten)
                {
                    ChoiceActionItem curActionItem = new ChoiceActionItem();

                    curActionItem.Caption = (item.Bezeichnung != null)?item.Bezeichnung:item.BezeichnungIntern;
                    curActionItem.Data    = item;
                    doDeleteAnlagenGruppe.Items.Add(curActionItem);
                }
                break;

            //ANlagengruppe hinzufügen
            case ("doAddHaustechnikKomponente"):
                #region Technikeinheiten

                IList <fiTechnikeinheit> lstTechnikeinheiten = os.GetObjects <fiTechnikeinheit>(new BinaryOperator("Aktiv", true, BinaryOperatorType.Equal));
                //erst die Basisanlagen durchgehen
                var lstBasisanlagen = (from fiTechnikeinheit item in lstTechnikeinheiten
                                       select item.Basisanlage).ToList();
                var groupedList = lstTechnikeinheiten.GroupBy(t => t.Basisanlage).Select(t => t);

                /*
                 * var groupedList = item.Debitorenposition.lstBuchungspositionen.GroupBy(t => t.ArtikelNummer).Select(t => t);
                 */
                foreach (var group in groupedList)
                {
                    var title = group.Key;

                    //jede Grupppe als Basis hinzufügen
                    ChoiceActionItem curGroupItem = new ChoiceActionItem(title.ToString(), null);
                    foreach (var item in group)
                    {
                        curGroupItem.Items.Add(new ChoiceActionItem(((fiTechnikeinheit)item).Oid.ToString(), ((fiTechnikeinheit)item).Bezeichnung, (fiTechnikeinheit)item));
                    }
                    this.doAddHaustechnikKomponente.Items.Add(curGroupItem);
                }

                #endregion
                break;

            case ("doAddAnlage"):
                //this.doAddAnlage.Items.Add(new ChoiceActionItem("-Komponenten-", null));
                doAddAnlage.Items.Clear();

                if (lstLgKomponenten != null)
                {
                    foreach (LgHaustechnikKomponente htEntry in lstLgKomponenten)
                    {
                        ChoiceActionItem mainItem = new ChoiceActionItem(htEntry.Oid.ToString(), String.Format("{0} - {1}", htEntry.Systembezeichnung, htEntry.Bezeichnung), htEntry);
                        mainItem.ImageName  = "control_panel_16";
                        mainItem.BeginGroup = true;


                        //hier nur die Anlagenarten die erlaubt sind
                        //htEntry.Technikeinheit.lstAnlagenarten
                        //gibt es noch andere Definitionen für die Technikeinheiten??
                        //Technikeinheit
                        //alle anlagenarten mit der gleichen Basisanlage
                        boAnlagenArt curBasisAnlage = os.GetObjectByKey <boAnlagenArt>(htEntry.Technikeinheit.Basisanlage.Oid);
                        //alle Technikeinheiten mit der selben Basisanlage
                        IList <fiTechnikeinheit> lstRelatedEinheiten = os.GetObjects <fiTechnikeinheit>(new BinaryOperator("Basisanlage.Oid", htEntry.Technikeinheit.Basisanlage.Oid, BinaryOperatorType.Equal));

                        List <boAnlagenArt> lstAllowedArten = new List <boAnlagenArt>();
                        foreach (fiTechnikeinheit einheit in lstRelatedEinheiten)
                        {
                            foreach (boAnlagenArt art in einheit.lstAnlagenarten)
                            {
                                if (!lstAllowedArten.Contains(art))
                                {
                                    lstAllowedArten.Add(art);
                                }
                            }
                        }
                        //die Liste der Anlagenarten erstellen

                        //foreach (boAnlagenArt allowedArt in htEntry.Technikeinheit.lstAnlagenarten)
                        //die Gruppen die aktiv sind als mainitem setzen

                        foreach (boAnlagenArt allowedArt in lstAllowedArten)
                        {
                            ChoiceActionItem curItem = new ChoiceActionItem(allowedArt.Oid.ToString(), allowedArt.Bezeichnung, allowedArt);
                            curItem.ImageName = "control_panel_16";

                            mainItem.Items.Add(curItem);
                        }
                        /// mainItem.Items.Add(new ChoiceActionItem)
                        this.doAddAnlage.Items.Add(mainItem);
                    }
                }
                else
                {
                    try
                    {
                        //hier die Gruppen einbauen
                        ChoiceActionItem mainItemAnlagenArten = new ChoiceActionItem(curLiegenschaft.Oid.ToString(), "-Anlagenarten-", curLiegenschaft);
                        mainItemAnlagenArten.ImageName  = "gear_in_16";
                        mainItemAnlagenArten.BeginGroup = true;

                        IList <boAnlagenKategorie> lstAnlagenGruppen = os.GetObjects <boAnlagenKategorie>(new BinaryOperator("Aktiv", true, BinaryOperatorType.Equal));
                        //für jede Gruppe ein MainItem erstellen und dann die Arten dazu durchparsen

                        foreach (boAnlagenKategorie anlGruppe in lstAnlagenGruppen)
                        {
                            ChoiceActionItem groupItem = new ChoiceActionItem(anlGruppe.Oid.ToString(), anlGruppe.Bezeichnung, curLiegenschaft);
                            groupItem.ImageName = "interface_preferences";
                            if (anlGruppe.lstAnlagenarten != null)
                            {
                                foreach (boAnlagenArt anlagenArt in anlGruppe.lstAnlagenarten)
                                {
                                    ChoiceActionItem curAnlagenItem = new ChoiceActionItem(anlagenArt.Oid.ToString(), anlagenArt.Bezeichnung, anlagenArt);
                                    curAnlagenItem.ImageName = "gear_in_16";

                                    groupItem.Items.Add(curAnlagenItem);
                                }
                            }
                            mainItemAnlagenArten.Items.Add(groupItem);
                        }
                        //

                        this.doAddAnlage.Items.Add(mainItemAnlagenArten);
                        #endregion
                    }
                    catch
                    {
                    }
                }

                break;
            }
        }