Пример #1
0
        public ActionResult QueryLayoutTreeUpdatePartial(AvrTreeElement treeElement)
        {
            //TODO выводим ошибки ввода куда?
            if (ModelState.IsValid)
            {
                //проверим, были ли изменения
                if (treeElement.ID > 0)
                {
                    List <AvrTreeElement> tree = GetQueryTree();
                    AvrTreeElement        elem = tree.FirstOrDefault(c => c.ID == treeElement.ID);
                    if ((elem != null) && treeElement.IsEqual(elem))
                    {
                        //TODO в противном случае надо показать диалог подтверждения сохранения
                        return(PartialView("QueryLayoutTreePartial", GetQueryTree()));
                    }
                }

                long id = 0;
                using (DbManagerProxy manager = DbManagerFactory.Factory.Create())
                {
                    try
                    {
                        manager.BeginTransaction();
                        if (treeElement.IsLayout)
                        {
                            AvrQueryLayoutTreeDbHelper.SaveLayoutMetadata(
                                ModelUserContext.CurrentLanguage
                                , treeElement.ID
                                , treeElement.DefaultName
                                , treeElement.NationalName
                                , (long)DBGroupInterval.gitDateYear
                                , treeElement.QueryID
                                , treeElement.DescriptionID
                                , treeElement.Description
                                , treeElement.DescriptionEnglish
                                , treeElement.ReadOnly
                                , treeElement.IsShared
                                );
                            AvrQueryLayoutTreeDbHelper.SaveLayoutLocation(treeElement.ID,
                                                                          treeElement.ParentID != treeElement.QueryID
                                    ? treeElement.ParentID
                                    : null);
                            id = treeElement.ID;
                        }
                        else if (treeElement.IsFolder)
                        {
                            if (treeElement.ParentID == treeElement.QueryID)
                            {
                                treeElement.ParentID = null;
                            }
                            AvrQueryLayoutTreeDbHelper.SaveFolder(treeElement.ID, treeElement.ParentID,
                                                                  treeElement.QueryID,
                                                                  treeElement.DefaultName, treeElement.NationalName);
                            id = treeElement.ID;
                        }

                        //long publishedId = 0;
                        //var eventType = EventType.AVRLayoutFolderPublishedLocal; //только для инициализации
                        //if (id > 0)
                        //{
                        //    if (treeElement.IsPublished && !treeElement.ReadOnly)
                        //    {
                        //        PublishRoutines(treeElement.ID, manager, treeElement.ElementType, true, out publishedId, out eventType);
                        //    }
                        //    else if (!treeElement.IsPublished && treeElement.ReadOnly && treeElement.GlobalID.HasValue)
                        //    {
                        //        PublishRoutines(treeElement.GlobalID.Value, manager, treeElement.ElementType, false, out publishedId,
                        //            out eventType);
                        //    }
                        //}
                        manager.CommitTransaction();

                        if (id > 0)
                        {
                            if (treeElement.IsPublished && !treeElement.ReadOnly)
                            {
                                PublishUnpublish(treeElement.ID, treeElement.ElementType, true);
                            }
                            else if (!treeElement.IsPublished && treeElement.ReadOnly && treeElement.GlobalID.HasValue)
                            {
                                PublishUnpublish(treeElement.ID, treeElement.ElementType, false);
                            }
                        }
                        //if (publishedId > 0)
                        //{
                        //    EidssEventLog.Instance.CreateProcessedEvent(eventType,
                        //        publishedId > 0 ? publishedId : 0, 0,
                        //        EidssUserContext.User.ID,
                        //        manager.Transaction);
                        //}
                    }
                    catch (Exception)
                    {
                        manager.RollbackTransaction();
                        throw;
                    }
                }

                /* TODO вызов обрушивает систему
                 * LookupManager.ClearByTable("Layout");
                 * LookupManager.ClearByTable("LayoutFolder");
                 * LookupManager.ClearByTable("Query");
                 * LookupManager.ClearAndReloadOnIdle();*/
            }

            RefreshTree();
            return(PartialView("QueryLayoutTreePartial", GetQueryTree()));
        }
Пример #2
0
        public ActionResult QueryLayoutTreeAddPartial(AvrTreeElement newNode)
        {
            //делаем дочерний элемент
            HttpCookie cc     = Request.Cookies["newElementType"];
            string     errStr = String.Empty;

            if ((cc != null) && AvrPermissions.InsertPermission && !IsFolderDepthTooBig(newNode))
            {
                bool createFolder = (newNode.IsFolder || (newNode.IsQuery && cc.Value == "folder"));
                bool createLayout = (newNode.IsLayout || (newNode.IsQuery && cc.Value == "layout"));
                if (createFolder || createLayout)
                {
                    newNode.ElementType = createFolder ? AvrTreeElementType.Folder : AvrTreeElementType.Layout;

                    using (DbManagerProxy manager = DbManagerFactory.Factory.Create())
                    {
                        try
                        {
                            manager.BeginTransaction();
                            long nodeId   = NewId();
                            long?parentId = newNode.ParentID != newNode.QueryID ? newNode.ParentID : null;
                            if (createFolder)
                            {
                                AvrQueryLayoutTreeDbHelper.SaveFolder(
                                    nodeId
                                    , parentId
                                    , newNode.QueryID
                                    , newNode.DefaultName
                                    , newNode.NationalName);
                            }
                            else
                            {
                                AvrQueryLayoutTreeDbHelper.SaveLayoutMetadata(
                                    ModelUserContext.CurrentLanguage
                                    , nodeId
                                    , newNode.DefaultName
                                    , newNode.NationalName
                                    , (long)DBGroupInterval.gitDateYear
                                    , newNode.QueryID
                                    , NewId()
                                    , newNode.Description
                                    , newNode.DescriptionEnglish
                                    , false
                                    , newNode.IsShared
                                    );
                                AvrQueryLayoutTreeDbHelper.SaveLayoutLocation(nodeId, parentId);
                            }
                            //long publishedId = 0;
                            //var eventType = EventType.AVRLayoutFolderPublishedLocal; //только для инициализации
                            //if (newNode.IsPublished)
                            //{
                            //    PublishRoutines(nodeId, manager,
                            //        createFolder ? AvrTreeElementType.Folder : AvrTreeElementType.Layout,
                            //        true, out publishedId, out eventType);
                            //}

                            manager.CommitTransaction();
                            if (newNode.IsPublished)
                            {
                                PublishUnpublish(nodeId,
                                                 createFolder ? AvrTreeElementType.Folder : AvrTreeElementType.Layout,
                                                 true);
                            }
                            //if (publishedId > 0)
                            //{
                            //    EidssEventLog.Instance.CreateProcessedEvent(eventType,
                            //        publishedId > 0 ? publishedId : 0, 0,
                            //        EidssUserContext.User.ID,
                            //        manager.Transaction);
                            //}
                        }
                        catch (Exception exc)
                        {
                            errStr = exc.Message;
                            //TODO куда писать ошибки?
                            manager.RollbackTransaction();
                            throw;
                        }
                    }
                }
            }
            else
            {
                errStr = "error";
            }
            if (errStr.Length == 0)
            {
                RefreshTree();
            }
            return(PartialView("QueryLayoutTreePartial", GetQueryTree()));
        }