/// <summary>
        /// Поставляет во вьюмодель список ид-шников типов, параметр надо ли уточнять этот список и список наименований каталогов в соответствии с выбранными темами
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public virtual ActionResult PostPersonThemes(IndividualPersonThemesModel model)
        {
            /*
             *      (сервер) по темам набираем типы
             *      (сервер) если хотя бы для одной темы есть два типа (имеется двусмысленность), то параметр "надо ли уточнять" = 1, иначе 0.
             *      (сервер) возвращаем модель с параметром надо ли уточнять, списком ид-шников типов и список имен каталогов.
             */
            var personTypes = new List <PersonType>();

            var needToClarify = false;

            foreach (var personTypesByThemeID in model.PersonThemes.Select(t => Repository.PersonTypes.GetListByThemeId(t.ID)).Where(personTypesByThemeID => personTypesByThemeID != null))
            {
                if (personTypesByThemeID.Count > 1)
                {
                    needToClarify = true;
                }

                personTypes.AddRange(personTypesByThemeID);
            }

            var sc = new StringCollection();

            var themeCatalogList = new List <ThemeCatalog>();

            foreach (var personTheme in model.PersonThemes)
            {
                var personTypeList = Repository.PersonTypes.GetListByThemeId(personTheme.ID);
                var tc             = new ThemeCatalog();
                tc.Theme = personTheme.Name;

                if (personTypeList.Count > 0)
                {
                    tc.Catalog = Repository.Catalogs.GetInstance(personTypeList[0].CatalogID).CatalogName;
                }

                themeCatalogList.Add(tc);
            }

            foreach (
                var c in
                personTypes.Select(t => Repository.Catalogs.GetInstance(t.CatalogID)).Where(
                    c => c != null).Where(c => !sc.Contains(c.CatalogName)))
            {
                sc.Add(c.CatalogName);
            }

            return(JsonModel(new { NeedToClarify = needToClarify, PersonTypes = personTypes.ToArray(), Catalogs = sc, ThemeCatalogs = themeCatalogList }, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// Поставляет во вьюмодель массив наименований каталогов в соответствии с выбранными типами лиц
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public virtual ActionResult SetPersonTypeIDs(IndividualPersonTypeIDModel model)
        {
            var sc = new StringCollection();

            var themeCatalogList = new List <ThemeCatalog>();

            for (var index = 0; index < model.PersonTypeIDs.Count; index++)
            {
                var pt = Repository.PersonTypes.GetInstance(model.PersonTypeIDs.ToArray()[index]);

                if (pt == null)
                {
                    continue;
                }
                var c = Repository.Catalogs.GetInstance(pt.CatalogID);

                if (c == null)
                {
                    continue;
                }
                if (!sc.Contains(c.CatalogName))
                {
                    sc.Add(c.CatalogName);
                }

                var themeCatalog = new ThemeCatalog
                {
                    Catalog = c.CatalogName,
                    Theme   =
                        Repository.PersonThemes.GetInstance(pt.PersonThemeID).Name
                };

                themeCatalogList.Add(themeCatalog);
            }

            return(JsonModel(new { Catalogs = sc, ThemeCatalogs = themeCatalogList }, JsonRequestBehavior.AllowGet));
        }