public ObservableCollection <Obj> UpdateOpenningModelHasSynchToListObject(Document document, Handling handling)
        {
            ObservableCollection <Obj> objs = new ObservableCollection <Obj>();
            // ServerNormalStatus
            IClassify ServerNormalStatus = handling.ServerNormalStatus;
            CompareClassifyLocalStatus     compareClassifyLocalStatusNomal = ServerNormalStatus.Data;
            List <ComparisonCoupleElement> deletedLocal = compareClassifyLocalStatusNomal.DeletedLocal;

            FindAndAddListComparisonCoupleElement(document, deletedLocal, objs);
            List <ComparisonCoupleElement> normalLocal = compareClassifyLocalStatusNomal.NormalLocal;

            FindAndAddListComparisonCoupleElement(document, normalLocal, objs);
            // ServerPendingCreateStatus
            IClassify ServerPendingCreateStatus = handling.ServerPendingCreateStatus;
            CompareClassifyLocalStatus compareClassifyLocalStatusPendingCreate = ServerPendingCreateStatus.Data;

            deletedLocal = compareClassifyLocalStatusPendingCreate.DeletedLocal;
            FindAndAddListComparisonCoupleElement(document, deletedLocal, objs);
            normalLocal = compareClassifyLocalStatusPendingCreate.NormalLocal;
            FindAndAddListComparisonCoupleElement(document, normalLocal, objs);
            // ServerPendingDeleteStatus
            IClassify ServerPendingDeleteStatus = handling.ServerPendingDeleteStatus;
            CompareClassifyLocalStatus compareClassifyLocalStatusPendingDelete = ServerPendingDeleteStatus.Data;

            deletedLocal = compareClassifyLocalStatusPendingDelete.DeletedLocal;
            FindAndAddListComparisonCoupleElement(document, deletedLocal, objs);
            normalLocal = compareClassifyLocalStatusPendingDelete.NormalLocal;
            FindAndAddListComparisonCoupleElement(document, normalLocal, objs);
            return(objs);
        }
        private void UpdatePendingCreateStatus(Transaction transaction, Handling handling)
        {
            IClassify classifyNomalStatus = handling.ServerPendingCreateStatus;
            CompareClassifyLocalStatus compareClassifyLocalStatusNomal = classifyNomalStatus.Data;
            //get local status
            IEnumerable <ComparisonCoupleElement> deletedLocal = compareClassifyLocalStatusNomal.DeletedLocal;

            foreach (ComparisonCoupleElement comparisonCoupleElement in deletedLocal)
            {
                // tuân theo sever
                if (comparisonCoupleElement.Action == Model.Action.PULL)
                {
                    LoadFammilyInstance(transaction, comparisonCoupleElement);
                }
            }
        }
        private void UpdateNomalStatus(Transaction transaction, Handling handling)
        {
            IClassify classifyNomalStatus = handling.ServerNormalStatus;
            CompareClassifyLocalStatus compareClassifyLocalStatusNomal = classifyNomalStatus.Data;
            //get local status
            IEnumerable <ComparisonCoupleElement> deletedLocal = compareClassifyLocalStatusNomal.DeletedLocal;

            foreach (ComparisonCoupleElement comparisonCoupleElement in deletedLocal)
            {
                // tuân theo sever
                if (comparisonCoupleElement.Action == Model.Action.PULL)
                {
                    LoadFammilyInstance(transaction, comparisonCoupleElement);
                }
            }
            IEnumerable <ComparisonCoupleElement> nomalLocal = compareClassifyLocalStatusNomal.NormalLocal;

            foreach (ComparisonCoupleElement comparisonCoupleElement in nomalLocal)
            {
                if (!comparisonCoupleElement.IsSameShapeAndLocation())
                {
                    if (comparisonCoupleElement.Action == Model.Action.PULL &&
                        Common.IsValidGuid(comparisonCoupleElement.IdRevitElement))
                    {
                        if (comparisonCoupleElement.IsSameTypeGeometry())
                        {
                            Element element = _doc.GetElement(comparisonCoupleElement.IdRevitElement);
                            UpdateGeometryAndDirection(transaction, element, comparisonCoupleElement);
                        }
                        else
                        {
                            Element element = _doc.GetElement(comparisonCoupleElement.IdRevitElement);
                            transaction.Start("Delete Opening");
                            _doc.Delete(element.Id);
                            transaction.Commit();
                            LoadFammilyInstance(transaction, comparisonCoupleElement);
                        }
                    }
                }
            }
        }
        private void UpdatePendingDeleteStatus(Transaction transaction, Handling handling)
        {
            transaction.Start("delete element");
            IClassify classifyNomalStatus = handling.ServerPendingDeleteStatus;
            CompareClassifyLocalStatus compareClassifyLocalStatusNomal = classifyNomalStatus.Data;
            //get local status
            IEnumerable <ComparisonCoupleElement> nomalLocal = compareClassifyLocalStatusNomal.NormalLocal;

            foreach (ComparisonCoupleElement comparisonCoupleElement in nomalLocal)
            {
                if (!comparisonCoupleElement.IsSameShapeAndLocation())
                {
                    if (comparisonCoupleElement.Action == Model.Action.PULL &&
                        Common.IsValidGuid(comparisonCoupleElement.IdRevitElement))
                    {
                        Element element = _doc.GetElement(comparisonCoupleElement.IdRevitElement);
                        _doc.Delete(element.Id);
                    }
                }
            }
            transaction.Commit();
        }