private void insertHRecords(EPCompanyTreeMaster record)
        {
            int level = -1;

            foreach (EPCompanyTreeH item in parents.Select(record.ParentWGID))
            {
                if (level == -1)
                {
                    level = item.WorkGroupLevel.GetValueOrDefault() + 1;
                }
                EPCompanyTreeH ins = (EPCompanyTreeH)treeH.Cache.CreateCopy(item);
                ins.WorkGroupID    = record.WorkGroupID;
                ins.WorkGroupLevel = level;
                ins.WaitTime      += record.WaitTime;
                treeH.Cache.Insert(ins);
            }
            EPCompanyTreeH self = new EPCompanyTreeH();

            self.WorkGroupID    = record.WorkGroupID;
            self.WorkGroupLevel = level;
            self.ParentWGID     = record.WorkGroupID;
            self.ParentWGLevel  = level;
            self.WaitTime       = 0;
            treeH.Cache.Insert(self);
        }
        private void updateHRecordParent(EPCompanyTreeMaster item)
        {
            PXResultset <EPCompanyTreeH> newParents = parents.Select(item.ParentWGID);
            int parentLevel = -1;

            if (newParents.Count > 0)
            {
                EPCompanyTreeH newParent = newParents[newParents.Count - 1];
                parentLevel = newParent.WorkGroupLevel.GetValueOrDefault();
            }

            int            levelDelta = 0;
            EPCompanyTreeH root       = null;

            foreach (EPCompanyTreeH child in childrens.Select(item.WorkGroupID))
            {
                if (root == null)
                {
                    root       = (EPCompanyTreeH)treeH.Cache.CreateCopy(child);
                    levelDelta = parentLevel + 1 - child.WorkGroupLevel.GetValueOrDefault();
                }

                foreach (EPCompanyTreeH parent in parents.Select(child.WorkGroupID))
                {
                    if (parent.WorkGroupID != parent.ParentWGID &&
                        parent.ParentWGLevel < root.WorkGroupLevel)
                    {
                        treeH.Cache.Delete(parent);
                    }
                    else
                    {
                        EPCompanyTreeH upd = (EPCompanyTreeH)treeH.Cache.CreateCopy(parent);
                        upd.WorkGroupLevel += levelDelta;
                        upd.ParentWGLevel  += levelDelta;
                        treeH.Cache.Update(upd);
                    }
                }

                foreach (EPCompanyTreeH parent in newParents)
                {
                    EPCompanyTreeH ins = (EPCompanyTreeH)treeH.Cache.CreateCopy(parent);
                    ins.WorkGroupID    = child.WorkGroupID;
                    ins.WorkGroupLevel = child.WorkGroupLevel;
                    ins.WaitTime      += child.WaitTime + item.WaitTime;
                    treeH.Cache.Insert(ins);
                }
            }
        }