예제 #1
0
        /// <summary>
        /// Добавляет в ViewData значение key из кук
        /// Нужно для попапа задач, что бы не выбирались не существующие на доске иды
        /// </summary>
        /// <param name="key"></param>
        /// <param name="collection"></param>
        /// <param name="defaultId"></param>
        void AddSelectedFromCookie(string key, IEnumerable <IId> collection, Func <int> defaultId)
        {
            var cookieId = Cookies.GetFromCookies(key).ToNullable <int>();

            if (cookieId.HasValue && collection.Any(x => x.Id == cookieId))
            {
                ViewData.Add(key, cookieId);
            }
            else
            {
                ViewData.Add(key, defaultId());
            }
        }
예제 #2
0
        /// <summary>
        /// Считывание типа события
        /// </summary>
        private EventType GetEventTypes(FormCollection collection)
        {
            EventType eventTypes;

            if (collection != null && collection["X-Requested-With"] != null)
            {
                eventTypes = collection["EventTypes"] == null
                                 ? 0
                                 : (EventType)GetIds(collection["EventTypes"]).Sum();
            }
            else
            {
                // в EventTypes хранятся исключенные события
                eventTypes = (EventType) ~Cookies.GetFromCookies("EventTypes").TryToInt(0);
            }
            return(eventTypes);
        }
예제 #3
0
        /// <summary>
        /// Заполняет модель данными
        /// </summary>
        private void FillTasks(FormCollection collection, int id, string cookiePage, bool isArchive)
        {
            // Получаем данные либо из запроса либо из кук, в зависимости от типа действия
            TaskFilter filter = _FilterUtility.GetCurrentFilter(id, !isArchive, collection);

            if (isArchive && filter.SortType == TasksSortType.ByStatus)
            {
                filter.SortType = TasksSortType.ByName;
            }

            #region Подготавливаем данные

            int page;
            if (collection["Page"] == null)
            {
                page = Cookies.GetFromCookies(cookiePage).TryToInt(1);

                // Сюда попадаем при фильтрации, при пейджинге не попадаем
                // Запоминаем фильтры пользователя
                _FilterUtility.SaveFilterToCookies(id, collection);
            }
            else
            {
                page = collection["Page"].TryToInt(1);
                Cookies.AddToCookie(cookiePage, page.ToString());
            }

            // Данные для отображения
            List <ITask> tasks = isArchive
                                ? Utility.Tasks.GetFromArchive(filter)
                : Utility.Tasks.Get(filter);
            var pagedTasks = new PagedTasks(page, tasks);
            ViewData.Model = pagedTasks.Tasks;

            ViewData.Add("Page", page);
            ViewData.Add("TotalItems", pagedTasks.TotalCount);
            ViewData.Add("isArchive", isArchive);

            #endregion
        }
예제 #4
0
        public PartialViewResult Kanban(int id, FormCollection collection)
        {
            #region Получаем данные либо из запроса либо из кук, в зависимости от типа действия

            TaskFilter        filter  = _FilterUtility.GetCurrentFilter(id, false, collection);
            IEnumerable <int> userIds = filter.ExecutorIds.ToArray();

            if (collection.Count > 0)
            {
                // Сюда попадаем при фильтрации
                // Запоминаем фильтры пользователя
                collection["Statuses"] = string.Empty;
                _FilterUtility.SaveFilterToCookies(id, collection);
            }
            string rawCollapsedStatuses = Cookies.GetFromCookies("CollapsedStatuses");

            // Если просматриваем конкретного пользователя, то и при создании задач используем его.
            // Этот пользователь текущий
            if (userIds.Count() == 1)
            {
                Cookies.AddToCookie("SelectedUser", userIds.First().ToString(CultureInfo.InvariantCulture), false);
            }

            #endregion

            #region Парсим сырые данные

            // Исключенные статусы
            // исключаем архив, так как в канбане его не показываем
            List <int> excludedStatuses = new List <int>();
            if (!rawCollapsedStatuses.IsNullOrEmpty())
            {
                excludedStatuses.AddRange(rawCollapsedStatuses
                                          .UrlDecode()
                                          .Split(new[] { "||" }, StringSplitOptions.RemoveEmptyEntries)
                                          .Select(x => x.ToInt())
                                          .ToList());
            }

            // Данные для отображения
            var statuses = Utility.Statuses.GetByBoard(id);

            IEnumerable <int> needTaskStatuses = statuses
                                                 .Select(x => x.Id)
                                                 .Except(excludedStatuses)
                                                 .ToArray();
            filter.Statuses = needTaskStatuses;
            var tasks = Utility.Tasks.Get(filter);

            #endregion

            #region Подготавливаем данные

            foreach (int status in needTaskStatuses)
            {
                string key  = "status-page-" + status.ToString(CultureInfo.InvariantCulture);
                int    page = Cookies.GetFromCookies(key).TryToInt() ?? 1;
                ViewData.Add(key, page);
            }

            ViewData.Model = statuses;
            ViewData.Add("Tasks", tasks);
            ViewData.Add("CollapsedStatuses", excludedStatuses);

            // Определяем ширину статуса
            // если алгоритм поменяется, поменять в Kanban.js
            float sw         = Cookies.GetFromCookies("document.width").To(1280 - 17);
            float hidenCount = excludedStatuses.Count();
            float count      = statuses.Count() - hidenCount;        // количество развернутых статусов
            sw -= hidenCount * 31;
            float width = sw / count - 1;
            ViewData.Add("StatusWidth", width);

            #endregion

            return(PartialView("Kanban"));
        }
예제 #5
0
        public PartialViewResult Items(int id, FormCollection collection)
        {
            #region Получаем данные фильтра либо из запроса либо из кук, в зависимости от того действия

            List <int> userIds;
            List <int> projectIds;

            List <int>    dummy;
            TasksSortType sortType;
            _FilterUtility.GetCurrentFilter(id, out userIds, out projectIds, out dummy, out sortType, out dummy, collection);
            EventType eventTypes = GetEventTypes(collection);

            if (collection != null && collection.Count > 0 && collection["Page"] == null)
            {
                // Сюда попадаем при фильтрации

                // затираем значение, что бы оно не менялось в куках
                collection["Statuses"] = string.Empty;
                collection["Colors"]   = string.Empty;

                // Запоминаем фильтры пользователя
                _FilterUtility.SaveFilterToCookies(id, collection);

                #region Сохранение типа
                int valueForCoocke = (int)EventType.All;
                if (collection["EventTypes"] != null && !string.IsNullOrEmpty(collection["EventTypes"]))
                {
                    // собираем все выбранные флаги в одно число и сохраняем исключенные
                    var checkedIds = GetIds(collection["EventTypes"]);
                    valueForCoocke = ~checkedIds.Aggregate((current, i) => current | i);
                }
                Cookies.AddToCookie("EventTypes", valueForCoocke.ToString());
                #endregion
            }

            #endregion

            #region
            int page;
            if (collection == null || collection["Page"] == null)
            {
                page = Cookies.GetFromCookies("LogTablePage").TryToInt(1);
            }
            else
            {
                page = collection["Page"].TryToInt(1);
                Cookies.AddToCookie("LogTablePage", page.ToString());
            }

            EventDataFilter filter = new EventDataFilter
            {
                BoardId     = id,
                UserIds     = userIds,
                ProjectIds  = projectIds,
                EventTypes  = eventTypes,
                Page        = page,
                ItemsOnPage = Pager.DefaultItemsOnPage
            };

            int total;
            var data = Utility.Events.Get(filter, out total);
            #endregion

            ViewData.Model = data;
            ViewData.Add("Page", page);
            ViewData.Add("TotalItems", total);

            return(PartialView("Items"));
        }