private void GatherData()
        {
            //Enhancment Slot Data
            SlotModel = new EnhancementSlotModel();
            SlotModel.Initialize(SlotId);

            //Enhancement Data
            EnhancementModels = EnhancementModel.GetAll(SlotId);
            if (EnhancementModels.Count == 0)
            {
                //we need to add an enhancement as one was never assigned and all slots should have at least 1 enhancement.
                AddEnhancementModel();
            }

            //Enhancement Rank Data
            RankModels = new List <List <EnhancementRankModel> >();
            foreach (EnhancementModel model in EnhancementModels)
            {
                List <EnhancementRankModel> sublist = new List <EnhancementRankModel>();
                sublist = EnhancementRankModel.GetAll(model.Id);
                RankModels.Add(sublist);
                if (RankModels[RankModels.Count - 1].Count == 0)
                {
                    AddRankModel(RankModels.Count - 1);
                }
            }
        }
        private void AddRankModel(int enhancementIndex)
        {
            EnhancementRankModel tempRankModel;
            int rankCount;

            if (RankModels.Count >= enhancementIndex)
            {
                rankCount = 0;
            }
            else
            {
                rankCount = RankModels[enhancementIndex].Count;
            }

            tempRankModel = new EnhancementRankModel();
            tempRankModel.EnhancementId = EnhancementModels[enhancementIndex].Id;
            tempRankModel.Description   = "Enter description here";
            tempRankModel.Rank          = (byte)(rankCount + 1);

            if (RankModels.Count == enhancementIndex)
            {
                List <EnhancementRankModel> sublist = new List <EnhancementRankModel>();
                sublist.Add(tempRankModel);
                RankModels.Add(sublist);
            }

            else
            {
                RankModels[enhancementIndex].Add(tempRankModel);
            }
        }
        private void buttonDuplicateRecord_Click(object sender, EventArgs e)
        {
            string selection;
            EnhancementTreeModel newTreeModel = new EnhancementTreeModel();
            List <EnhancementTreeRequirementModel> newTreeRequirementModels            = new List <EnhancementTreeRequirementModel>();
            List <EnhancementSlotModel>            newSlotModels                       = new List <EnhancementSlotModel>();
            List <EnhancementModel>                newEnhancementModels                = new List <EnhancementModel>();
            List <EnhancementRankModel>            newEnhancementRankModels            = new List <EnhancementRankModel>();
            List <EnhancementRankModifierModel>    newEnhancementRankModifierModels    = new List <EnhancementRankModifierModel>();
            List <EnhancementRankRequirementModel> newEnhancementRankRequirementModels = new List <EnhancementRankRequirementModel>();
            Guid oldSlotId;
            Guid oldEnhancementId;
            Guid oldRankId;
            Guid oldModifierId;
            Guid oldRequirementId;

            //Copy the Tree Model First
            newTreeModel.Initialize(TreeModel.Id);
            newTreeModel.ConvertToNewRecord();
            newTreeModel.Name = TreeModel.Name + "Duplicate";
            newTreeModel.Save();

            //Copy the Tree Requirement Models
            newTreeRequirementModels = EnhancementTreeRequirementModel.GetAll(TreeModel.Id);
            foreach (EnhancementTreeRequirementModel etrm in newTreeRequirementModels)
            {
                etrm.ConvertToNewRecord();
                etrm.EnhancementTreeId = newTreeModel.Id;
                etrm.Save();
            }

            //Copy the Slot Models
            newSlotModels = EnhancementSlotModel.GetAll(TreeModel.Id);
            foreach (EnhancementSlotModel slot in newSlotModels)
            {
                oldSlotId = slot.Id;
                slot.ConvertToNewRecord();
                slot.EnhancementTreeId = newTreeModel.Id;
                slot.Save();
                //Copy the Enhancements for this Slot Model.
                newEnhancementModels = EnhancementModel.GetAll(oldSlotId);
                foreach (EnhancementModel em in newEnhancementModels)
                {
                    oldEnhancementId = em.Id;
                    em.ConvertToNewRecord();
                    em.EnhancementSlotId = slot.Id;
                    em.Save();
                    //Copy the Enhancement Ranks for this Enhancement.
                    newEnhancementRankModels = EnhancementRankModel.GetAll(oldEnhancementId);
                    foreach (EnhancementRankModel erm in newEnhancementRankModels)
                    {
                        oldRankId = erm.Id;
                        erm.ConvertToNewRecord();
                        erm.EnhancementId = em.Id;
                        erm.Save();
                        //Copy the Enhancement Rank Modifier Models
                        newEnhancementRankModifierModels = EnhancementRankModifierModel.GetAll(oldRankId);
                        foreach (EnhancementRankModifierModel ermm in newEnhancementRankModifierModels)
                        {
                            oldModifierId = ermm.Id;
                            ermm.ConvertToNewRecord();
                            ermm.EnhancementRankId = erm.Id;
                            ermm.Save();
                        }
                        //Copy the Enhancement Rank Requirement Models
                        newEnhancementRankRequirementModels = EnhancementRankRequirementModel.GetAll(oldRankId);
                        foreach (EnhancementRankRequirementModel errm in newEnhancementRankRequirementModels)
                        {
                            oldRequirementId = errm.Id;
                            errm.ConvertToNewRecord();
                            errm.EnhancementRankId = erm.Id;
                            errm.Save();
                        }
                    }
                }
            }

            //Now lets update our screen with the new record
            selection = newTreeModel.Name;
            EnhancementTreeListBox.Items.Clear();
            PopulateEnhancementTreeListBox();
            //AllowChangeEvents = false;
            EnhancementTreeListBox.SelectedItem = selection;
            //AllowChangeEvents = true;

            //Now we can reset our flags
            RecordChanged = false;
            NewRecord     = false;
        }