Пример #1
0
        public ActionResult QueryLayoutTree()
        {
            AvrQueryLayoutTreeDbHelper.InitWarnings();
            List <AvrTreeElement> model = RefreshTree();

            return(View(model));
        }
Пример #2
0
        public IMenuAction RegisterAllAvrReports()
        {
            AvrReportsCategory.SmallIconIndex = (int)MenuIconsSmall.LaunchAVR;

            string avrPermissions = PermissionHelper.SelectPermission(EIDSSPermissionObject.AVRReport);

            if (EidssUserContext.User.HasPermission(avrPermissions))
            {
                int order = 0;
                foreach (KeyValuePair <long, string> pair in GetAvrQueries())
                {
                    order += 100;
                    long   queryId   = pair.Key;
                    string queryName = pair.Value;

                    EidssUserContext.CheckUserLoggedIn();
                    List <AvrTreeElement> layouts         = AvrQueryLayoutTreeDbHelper.ReLoadLayouts(true, queryId);
                    List <AvrTreeElement> readOnlyLayouts = layouts.Where(l => l.ReadOnly).ToList();
                    if (readOnlyLayouts.Count == 0)
                    {
                        continue;
                    }
                    List <AvrTreeElement> folders = AvrQueryLayoutTreeDbHelper.ReLoadFolders(true, queryId);

                    DeleteAvrEmptyFolders(readOnlyLayouts, folders);

                    IMenuAction queryMenuAction = AddEmptyAvrMenuAction(AvrReportsCategory, queryName, order);

                    CreateAvrFoldersLayoutsMenu(queryMenuAction, readOnlyLayouts, folders);
                }
            }

            return(AvrReportsCategory);
        }
Пример #3
0
        private List <AvrTreeElement> RefreshTree()
        {
            LookupManager.ClearAndReload("LayoutFolder");
            LookupManager.ClearAndReload("Layout");
            LookupManager.ClearAndReload("Query");
            LookupManager.ClearAndReloadOnIdle();
            var model = AvrQueryLayoutTreeDbHelper.LoadQueriesLayoutsFolders();

            Session["QueryTree"] = model;
            return(model);
        }
Пример #4
0
 public void TestCopyLayoutNameTest()
 {
     using (new CultureInfoTransaction(new CultureInfo("ru-RU")))
     {
         var layout = new AvrTreeElement(-1, m_TestQueryId, null, AvrTreeElementType.Layout,
                                         m_TestQueryId, "asdfghj", "фывапр", "", false);
         string xml = AvrQueryLayoutTreeDbHelper.GetCopyLayoutNameXml(layout);
         Assert.IsNotNull(xml);
         Assert.AreEqual(
             @"<?xml version=""1.0"" encoding=""UTF-16""?><ROOT><LayoutName LanguageId=""en""  Translation=""Copy of asdfghj"" /><LayoutName LanguageId=""ru""  Translation=""Копия  фывапр"" /></ROOT>",
             xml);
     }
 }
Пример #5
0
        public void GetQueriesInfoTest()
        {
            const string queryCountSQL = @"select count (*) from tasQuery where blnSubQuery = 0";

            lock (m_LayoutDB.Connection)
            {
                EidssUserContext.CheckUserLoggedIn();

                LookupManager.ClearByTable("Query");
                LookupManager.ClearAndReloadOnIdle();
                int queryCount       = GetCount(queryCountSQL);
                int actualQueryCount = AvrQueryLayoutTreeDbHelper.ReLoadQueries().Count;
                Assert.AreEqual(queryCount, actualQueryCount);
            }
        }
Пример #6
0
        public ActionResult QueryLayoutTreeMovePartial(long id, long?parentId)
        {
            /*
             * Правила:
             * 1) Query (корневой узел) переносить нельзя
             * 2) Layout можно присоединять только к Folder и Query
             * 3) Folder можно присоединять только к Folder и Query, но целевой Folder не может быть дочерним к перетаскиваемому.
             * 4) Объекты можно переносить только в рамках одного Query
             * 5) Published layout cannot be moved
             */

            List <AvrTreeElement> tree = GetQueryTree();
            AvrTreeElement        node = tree.SingleOrDefault(c => c.ID == id);

            if (node != null && !node.IsQuery && parentId.HasValue && !node.IsPublished)
            {
                AvrTreeElement newParent = tree.SingleOrDefault(c => c.ID == parentId.Value);
                if (newParent != null && node.QueryID == newParent.QueryID && !newParent.IsLayout)
                {
                    long?pid = newParent.IsQuery ? null : (long?)newParent.ID;
                    if (node.IsLayout)
                    {
                        AvrQueryLayoutTreeDbHelper.SaveLayoutLocation(node.ID, pid);
                    }
                    else if (node.IsFolder)
                    {
                        // check if it is moving to the children or if there is published layout in it
                        bool can = true;
                        if (newParent.IsFolder)
                        {
                            can = CanMoveFolder(tree, node.ID, parentId.Value);
                        }

                        if (can)
                        {
                            AvrQueryLayoutTreeDbHelper.SaveFolder(node.ID, pid,
                                                                  node.QueryID,
                                                                  node.DefaultName,
                                                                  node.NationalName);
                        }
                    }
                    RefreshTree();
                }
            }
            return(PartialView("QueryLayoutTreePartial", GetQueryTree()));
        }
Пример #7
0
        internal static Dictionary <long, string> GetAvrQueries()
        {
            List <AvrTreeElement>     queries = AvrQueryLayoutTreeDbHelper.ReLoadQueries(true);
            Dictionary <long, string> result  = queries.ToDictionary(query => query.QueryID, query => query.NationalName);

            return(result);
            //
//            DataView view = LookupBinder.GetQueryDataView(false);
//            view.Sort = "intOrder, QueryName";
//
//            foreach (DataRowView row in view)
//            {
//                var queryId = (long)row["idflQuery"];
//                string queryName = row["QueryName"].ToString();
//
//                result.Add(queryId, queryName);
//            }
        }
Пример #8
0
        public void GetLayoutInfoTest()
        {
            string layoutCountSQL =
                string.Format(@"select count (*) from tasLayout where idflQuery = {0}  and (idfPerson = {1}  or blnShareLayout=1)",
                              BaseReportTests.QueryId, (long)EidssUserContext.User.EmployeeID);
            string folderCountSQL = @"select count (*) from tasLayoutFolder where idflQuery = " + BaseReportTests.QueryId;

            lock (m_LayoutDB.Connection)
            {
                EidssUserContext.CheckUserLoggedIn();

                PresenterFactory.SharedPresenter.SharedModel.SelectedQueryId = BaseReportTests.QueryId;

                int layoutCount = GetCount(layoutCountSQL);
                int folderCount = GetCount(folderCountSQL);

                LookupManager.ClearAndReloadOnIdle();
                int actualLayoutCount = AvrQueryLayoutTreeDbHelper.LoadLayouts(false, BaseReportTests.QueryId).Count;
                Assert.AreEqual(layoutCount, actualLayoutCount);

                int actualFolderCount = AvrQueryLayoutTreeDbHelper.LoadFolders(false, BaseReportTests.QueryId).Count;
                Assert.AreEqual(folderCount, actualFolderCount);
            }
        }
Пример #9
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()));
        }
Пример #10
0
        public JsonResult EditTreeNode(AvrTreeElement node, FormCollection coll)
        {
            bool   isNew = node.ID == 0;
            string errstr;
            string mesText = "Error";

            bool isLayout;

            Boolean.TryParse(coll["IsLayout"], out isLayout);
            string nationalName = isLayout ? Translator.GetString("LayoutNameNational") : Translator.GetString("FolderNameNational");
            string defaultName  = isLayout ? Translator.GetString("LayoutNameEnglish") : Translator.GetString("FolderNameEnglish");

            bool isEnglish;

            Boolean.TryParse(coll["IsEnglish"], out isEnglish);

            bool isValid = true;

            if (String.IsNullOrEmpty(node.DefaultName))
            {
                isValid = false;
                mesText = String.Format(Translator.GetBvMessageString("ErrMandatoryFieldRequired"), defaultName);
            }
            else if (!isEnglish && String.IsNullOrEmpty(node.NationalName))
            {
                isValid = false;
                mesText = String.Format(Translator.GetBvMessageString("ErrMandatoryFieldRequired"), nationalName);
            }

            if (isValid)
            {
                if (isNew)
                {
                    HttpCookie cc = Request.Cookies["newElementType"];
                    if (cc != null)
                    {
                        bool createFolder = (node.IsFolder || (node.IsQuery && cc.Value == "folder"));
                        bool createLayout = (node.IsLayout || (node.IsQuery && cc.Value == "layout"));
                        if (createFolder)
                        {
                            node.ElementType = AvrTreeElementType.Folder;
                        }
                        else if (createLayout)
                        {
                            node.ElementType = AvrTreeElementType.Layout;
                        }
                    }
                }
                errstr  = AvrQueryLayoutTreeDbHelper.ValidateElementName(node, isNew);
                mesText = String.IsNullOrEmpty(errstr) ? Translator.GetBvMessageString("Save data?") : errstr;
            }
            else
            {
                errstr = "error";
            }

            // show confirmation
            return(new JsonResult
            {
                JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                Data = new
                {
                    result = errstr.Length > 0 ? "EXISTS" : "ASK",
                    messageText = mesText,
                    yesFunction = String.Format("treeList.UpdateEdit();"),
                    noFunction = String.Empty,
                    errorString = mesText
                }
            });
        }
Пример #11
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()));
        }
Пример #12
0
        public void CreateModifyDeleteFoldersTest()
        {
            lock (m_SyncLock)
            {
                EidssUserContext.CheckUserLoggedIn();

                PresenterFactory.SharedPresenter.SharedModel.SelectedQueryId = m_TestQueryId;

                List <AvrTreeElement> original = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId);

                AvrTreeElement folder1 = CreateFolderItem(null, "Folder1", "Nat f1");
                AvrQueryLayoutTreeDbHelper.SaveFolder(folder1.ID, folder1.ParentID, m_TestQueryId, folder1.DefaultName, folder1.NationalName);
                AvrTreeElement folder2 = CreateFolderItem(null, "Folder2", "Nat f2");
                AvrQueryLayoutTreeDbHelper.SaveFolder(folder2.ID, folder2.ParentID, m_TestQueryId, folder2.DefaultName, folder2.NationalName);
                AvrTreeElement folder3 = CreateFolderItem(null, "Folder3", "Nat f3");
                AvrQueryLayoutTreeDbHelper.SaveFolder(folder3.ID, folder3.ParentID, m_TestQueryId, folder3.DefaultName, folder3.NationalName);

                LookupManager.ClearAndReloadOnIdle();

                List <AvrTreeElement> saved1 = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId);
                Assert.AreEqual(original.Count + 3, saved1.Count, "some folders not saved");

                AvrTreeElement savedFolder1 = saved1.Find(ById(folder1.ID));
                Assert.IsNotNull(savedFolder1);
                AvrTreeElement savedFolder2 = saved1.Find(ById(folder2.ID));
                Assert.IsNotNull(savedFolder2);
                AvrTreeElement savedFolder3 = saved1.Find(ById(folder3.ID));
                Assert.IsNotNull(savedFolder3);

                Assert.AreEqual(m_TestQueryId, savedFolder1.ParentID);
                Assert.AreEqual(m_TestQueryId, savedFolder2.ParentID);
                Assert.AreEqual(m_TestQueryId, savedFolder3.ParentID);

                AvrQueryLayoutTreeDbHelper.SaveFolder(savedFolder2.ID, savedFolder1.ID,
                                                      m_TestQueryId, savedFolder2.DefaultName, savedFolder2.NationalName);
                AvrQueryLayoutTreeDbHelper.SaveFolder(savedFolder3.ID, savedFolder2.ID,
                                                      m_TestQueryId, savedFolder3.DefaultName, savedFolder3.NationalName);

                LookupManager.ClearAndReloadOnIdle();

                List <AvrTreeElement> saved2 = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId);

                AvrTreeElement updatedFolder2 = saved2.Find(ById(folder2.ID));
                Assert.IsNotNull(updatedFolder2);
                AvrTreeElement updatedFolder3 = saved2.Find(ById(folder3.ID));
                Assert.IsNotNull(updatedFolder3);
                Assert.AreEqual(folder1.ID, updatedFolder2.ParentID);
                Assert.AreEqual(folder2.ID, updatedFolder3.ParentID);

                int oldFoldersCount = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId).Count;

                // delete saved folders

                using (var avrDbService = new Folder_DB())
                {
                    Assert.IsTrue(avrDbService.Delete(folder3.ID),
                                  string.Format("could not delete folder '{0}' because of '{1}'", folder3.ID, avrDbService.LastError));
                    Assert.IsTrue(avrDbService.Delete(folder2.ID),
                                  string.Format("could not delete folder '{0}' because of '{1}'", folder2.ID, avrDbService.LastError));
                    Assert.IsTrue(avrDbService.Delete(folder1.ID),
                                  string.Format("could not delete folder '{0}' because of '{1}'", folder1.ID, avrDbService.LastError));
                }

                LookupManager.ClearAndReloadOnIdle();

                Assert.AreEqual(oldFoldersCount - 3, AvrQueryLayoutTreeDbHelper.ReLoadFolders(false, m_TestQueryId).Count);
            }
        }
Пример #13
0
        public void UpdateFoldersTest()
        {
            lock (m_SyncLock)
            {
                PresenterFactory.SharedPresenter.SharedModel.SelectedQueryId = m_TestQueryId;
                long layoutId = CreateLayout();
                try
                {
                    List <AvrTreeElement> original = AvrQueryLayoutTreeDbHelper.LoadQueries();
                    original.AddRange(AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId));
                    EidssUserContext.CheckUserLoggedIn();
                    original.AddRange(AvrQueryLayoutTreeDbHelper.LoadLayouts(false, m_TestQueryId));
                    var final = new List <AvrTreeElement>(original);

                    AvrTreeElement layout = original.Find(ById(layoutId));
                    Assert.IsNotNull(layout);

                    AvrTreeElement folder1 = CreateFolderItem(null, "Folder1", "Nat f1");
                    AvrQueryLayoutTreeDbHelper.SaveFolder(folder1.ID, folder1.ParentID, m_TestQueryId, folder1.DefaultName,
                                                          folder1.NationalName);

                    AvrTreeElement folder2 = CreateFolderItem(folder1.ID, "Folder2", "Nat f2");
                    AvrQueryLayoutTreeDbHelper.SaveFolder(folder2.ID, folder2.ParentID, m_TestQueryId, folder2.DefaultName,
                                                          folder2.NationalName);

                    AvrTreeElement folder3 = CreateFolderItem(folder2.ID, "Folder3", "Nat f3");
                    AvrQueryLayoutTreeDbHelper.SaveFolder(folder3.ID, folder3.ParentID, m_TestQueryId, folder3.DefaultName,
                                                          folder3.NationalName);

                    final.AddRange(new[] { folder1, folder2, folder3 });
                    layout.ParentID = folder1.ID;

                    LookupManager.ClearAndReloadOnIdle();
                    List <AvrTreeElement> saved = AvrQueryLayoutTreeDbHelper.LoadQueries();
                    saved.AddRange(AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId));
                    EidssUserContext.CheckUserLoggedIn();
                    saved.AddRange(AvrQueryLayoutTreeDbHelper.LoadLayouts(false, m_TestQueryId));

                    AvrTreeElement newFolder1 = saved.Find(ById(folder1.ID));
                    Assert.IsNotNull(newFolder1);
                    AvrTreeElement newFolder2 = saved.Find(ById(folder2.ID));
                    Assert.IsNotNull(newFolder2);
                    AvrTreeElement newFolder3 = saved.Find(ById(folder3.ID));
                    Assert.IsNotNull(newFolder3);
                    AvrTreeElement newLayout = saved.Find(ById(layoutId));
                    Assert.IsNotNull(newLayout);
                    Assert.AreEqual(m_TestQueryId, newFolder1.ParentID);
                    Assert.AreEqual(newFolder1.ID, newFolder2.ParentID);
                    Assert.AreEqual(newFolder2.ID, newFolder3.ParentID);
                    Assert.AreEqual(m_TestQueryId, newLayout.ParentID);
                    newLayout.ParentID = m_TestQueryId;
                    layout.ParentID    = m_TestQueryId;

                    LookupManager.ClearAndReloadOnIdle();
                    int oldFoldersCount = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId).Count;

                    // delete saved folders

                    using (var avrDbService = new Folder_DB())
                    {
                        Assert.IsTrue(avrDbService.Delete(folder3.ID),
                                      string.Format("could not delete folder '{0}' because of '{1}'", folder3.ID, avrDbService.LastError));
                        Assert.IsTrue(avrDbService.Delete(folder2.ID),
                                      string.Format("could not delete folder '{0}' because of '{1}'", folder2.ID, avrDbService.LastError));
                        Assert.IsTrue(avrDbService.Delete(folder1.ID),
                                      string.Format("could not delete folder '{0}' because of '{1}'", folder1.ID, avrDbService.LastError));
                    }
                    LookupManager.ClearAndReloadOnIdle();
                    Assert.AreEqual(oldFoldersCount - 3, AvrQueryLayoutTreeDbHelper.ReLoadFolders(false, m_TestQueryId).Count);
                }
                finally
                {
                    DeleteLayout(layoutId);
                }
            }
        }