//
        // Used for Issues
        public static IssueMemberQueryList GetIssuesForMembersOnProjectInSpecificRange(this IQueryable<Issue> query,
            IEnumerable<KeyIdValueString> projects,
            IEnumerable<KeyIdValueString> filters,
            int projectId,
            IssuesSortBy sortBy,
            int currentPage, int take)
        {
            return new IssueMemberQueryList
                   {
                       ProjectsData = new IssueProjectsData
                                      {
                                          Projects = projects,
                                          ProjectSelectedId = projectId,
                                          Filters = filters
                                      },
                       Requests = new IssueRequestsData<IssueMemberQueryTuple>
                                  {
                                      RequestsInfo = new IssueRequestsInfo
                                                     {
                                                         CurrentPage = currentPage,
                                                         Take = take,
                                                         Total = query.Count(i => i.Project.ProjectID == projectId)
                                                     },

                                      Requests = query.Where(i => i.Project.ProjectID == projectId)
                                          .ApplySort(sortBy)
                                          .Skip(( currentPage - 1 )*take)
                                          .Take(take)
                                          .Select(i => new IssueMemberQueryTuple
                                                       {
                                                           IssueId = i.IssueID,
                                                           CreatedAt = i.CreatedDate,
                                                           ShortDescription = i.ShortDescription,
                                                           MemberSolvingName = i.Member != null ? i.Member.Name : null,
                                                           Priority = (PriorityEnum) i.Priority,
                                                           Type = (TypeEnum) i.Type,
                                                           State = (StateEnum) i.State,
                                                           ProjectName = i.Project.Name,
                                                           NumComments = i.Comments.Count(),
                                                           ReportedByClient = i.Client.Name
                                                       })
                                          .ToList()
                                  }
                   };
        }
    public static IOrderedQueryable <Issue> Convert(IQueryable <Issue> query, IssuesSortBy sortBy)
    {
        switch (sortBy)
        {
        case IssuesSortBy.Date:
            return(query.OrderByDescending(i => i.CreatedDate));

        case IssuesSortBy.Priority:
            return(query.OrderByDescending(i => i.Priority));

        case IssuesSortBy.Type:
            return(query.OrderByDescending(i => i.Type));

        case IssuesSortBy.State:
            return(query.OrderByDescending(i => i.State));

        default:
            throw new ArgumentOutOfRangeException("sortBy");
        }
    }
示例#3
0
 public static String GetByKey(IssuesSortBy key)
 {
     return Container[key];
 }
示例#4
0
        // OK
        public PartialViewResult IndexPartial(int projectId, IssuesSortBy sortBy, int currentPage = 1, int take = DefaultTake)
        {
            if (User.IsInRole(LoginService.Admin)){
                var adminService = _queryService.GetIssuesForAdmin(currentPage, take, projectId, sortBy);
                return PartialView("_IndexMembersRequests", adminService.Requests);
            }

            if (User.IsInRole(LoginService.Member)){
                var memberService = _queryService.GetIssuesForMember(currentPage, take, projectId, sortBy);
                return PartialView("_IndexMembersRequests", memberService.Requests);
            }

            var clientService = _queryService.GetIssuesForClient(currentPage, take, projectId, sortBy);
            return PartialView("_IndexClientsRequests", clientService.Requests);
        }
 /// <summary>
 ///     Aplica sorts de um enumerado num IQueryable
 /// </summary>
 /// <param name="issue"></param>
 /// <param name="sortBy">A coluna que se pretende ordenar</param>
 /// <returns></returns>
 public static IOrderedQueryable<Issue> ApplySort(this IQueryable<Issue> issue,
     IssuesSortBy sortBy)
 {
     return Cache[sortBy](issue);
 }
示例#6
0
        public IssueMemberQueryList GetIssuesForMember(int currentPage, int take, int projectId, IssuesSortBy sortBy)
        {
            Member dbMember = GetDbMember();

            //
            // Os membros veem os issues em que têm projectos em que
            // sao responsaveis e trabalhadores podem filtrar pelos mesmos

            var myProjectsIds = _db.Query<Member>()
                                   .GetProjectsIdsWhereIamResponsableOrWork(dbMember.UserID);

            if(myProjectsIds.Count() > 0)
            {
                if(projectId == -1){
                    projectId = myProjectsIds.First();
                }

                if(!myProjectsIds.Any(pid => pid == projectId))
                    throw new HijackedException("You are not assigned to this project");
            }

            var memberProjectsKivs = _db.Query<Project>().ToKeyIdValueString(myProjectsIds);
            var filtersKivs = EnumUtils.GetIssuesSortValues().ToKivs();

            return _db.Query<Issue>().GetIssuesForMembersOnProjectInSpecificRange(
                memberProjectsKivs, filtersKivs, projectId, sortBy, currentPage, take
            );
        }
示例#7
0
        public IssueClientQueryList GetIssuesForClient(int currentPage, int take, int projectId, IssuesSortBy sortBy)
        {
            Client dbClient = GetDbClient();

            //
            // Os clientes veem os issues em que têm projectos
            // e podem filtrar pelos mesmos

            var myProjectsKivs = _db.Query<Project>().ToKeyIdValueString(dbClient.UserID);
            var filtersKivs = EnumUtils.GetIssuesSortValues().ToKivs();

            if (myProjectsKivs.Count() > 0) {
                if (projectId == -1){
                    projectId = myProjectsKivs.First().Id;
                }

                if (!myProjectsKivs.Any(kivs => kivs.Id == projectId))
                    throw new HijackedException("You are not assigned to this project");
            }

            return _db.Query<Issue>().GetIssuesForClientsOnProjectInSpecificRange(
                myProjectsKivs, filtersKivs, projectId, sortBy, currentPage, take
            );
        }
示例#8
0
        public IssueMemberQueryList GetIssuesForAdmin(int currentPage, int take, int projectId, IssuesSortBy sortBy)
        {
            GetDbAdmin();

            //
            // Os admins veem todos os issues disponiveis no sistema
            // e podem filtrar por qualquer projecto.

            var projectsKivs = _db.Query<Project>().ToKeyIdValueString();
            var filtersKivs = EnumUtils.GetIssuesSortValues().ToKivs();

            if (projectId == -1 && projectsKivs.Count() > 0)
                projectId = projectsKivs.First().Id;

            return _db.Query<Issue>().GetIssuesForMembersOnProjectInSpecificRange(
                projectsKivs, filtersKivs, projectId, sortBy, currentPage, take
            );
        }