/// <summary>
        ///
        /// </summary>
        /// <param name="ball"></param>
        /// <returns></returns>
        public bool AddBall(int color)
        {
            if (ColorIds.Contains(color))
            {
                return(false);
            }

            ColorIds.Add(color);

            CandiesMake += candiesPerColor[color];

            return(true);
        }
Exemple #2
0
        public IQueryable <ITask> Where(IQueryable <ITask> tasks)
        {
            #region Фильтры

            tasks = tasks.Where(x => x.BoardId == BoardId);

            if (!IsAllIn(ExecutorIds, _AllUserIds))
            {
                tasks = from t in tasks
                        where ExecutorIds.Contains(t.ExecutorUserId)
                        select t;
            }

            if (!IsAllIn(CreatorIds, _AllUserIds))
            {
                tasks = from t in tasks
                        where CreatorIds.Contains(t.CreatorUserId)
                        select t;
            }

            if (!IsAllIn(ProjectIds, _AllProjectIds))
            {
                tasks = from t in tasks
                        where ProjectIds.Contains(t.ProjectId)
                        select t;
            }

            if (!IsAllIn(ColorIds, _AllColorIds))
            {
                tasks = from t in tasks
                        where ColorIds.Contains(t.ColorId)
                        select t;
            }

            if (!IsAllIn(Statuses, _AllStatuses))
            {
                if (Statuses.Any(x => x == TimezStatus.ArchiveStatusId || x <= 0))
                {
                    throw new ArgumentOutOfRangeException();
                }

                tasks = from t in tasks
                        where Statuses.Contains(t.TaskStatusId)
                        select t;
            }

            if (!string.IsNullOrWhiteSpace(Search))
            {
                tasks = from t in tasks
                        where t.Name.ToUpper().Contains(Search.Trim().ToUpper())
                        select t;
            }

            #endregion

            #region Ограничение по роли пользователя в доске

            UserRole role = _Settings.GetUserRole();
            if (!role.HasTheFlag(UserRole.Owner) && !role.HasTheFlag(UserRole.Observer))
            {
                // владелец и наблюдатель получают все задачи
                // исполнитель и заказчик только свои
                if (role.HasAnyFlag(UserRole.Executor | UserRole.Customer))
                {
                    // есть обе роли, значит нужно оба типа задач
                    tasks = from t in tasks
                            where t.ExecutorUserId == _Settings.UserId ||                          // назначенные на пользователя
                            t.CreatorUserId == _Settings.UserId                                // назначенные пользоватем
                            select t;
                }
                else if (role.HasTheFlag(UserRole.Executor))
                {
                    tasks = from t in tasks
                            where t.ExecutorUserId == _Settings.UserId                             // только назначенные на пользователя
                            select t;
                }
                else if (role.HasTheFlag(UserRole.Customer))
                {
                    tasks = from t in tasks
                            where t.CreatorUserId == _Settings.UserId                             // только назначенные пользоватем
                            select t;
                }
                else
                {
                    throw new AccessDeniedException();
                }
            }

            #endregion

            return(tasks);
        }