Exemplo n.º 1
0
        public IEnumerable <FormTemplateDTO> Get(Guid?projectId, FormTemplateDiscriminators discriminator)
        {
            var surveyProvider = new SurveyProvider(OrgUser, UnitOfWork, false);
            var templates      = surveyProvider.GetAllProjectTemplates(projectId, discriminator);

            var result = new List <FormTemplateDTO>();

            foreach (var template in templates)
            {
                var dto = Mapper.Map <FormTemplateDTO>(template);

                if (OrgUser != null)
                {
                    var assignment = UnitOfWork.FormTemplatesRepository.GetUserAssignment(template, OrgUser.Id);
                    Mapper.Map(assignment, dto);
                }
                else
                {
                    dto.CanView   = true;
                    dto.CanEdit   = true;
                    dto.CanAdd    = true;
                    dto.CanDelete = true;
                }

                result.Add(dto);
            }

            return(result);
        }
Exemplo n.º 2
0
        public List <FilledFormDTO> GetUserSurveys(OrgUser orgUser, FormTemplateDiscriminators discriminator, Guid?projectId = null)
        {
            var result = new List <FilledFormDTO>();

            var surveys = UnitOfWork.FilledFormsRepository
                          .AllAsNoTracking
                          .Where(x => x.FormTemplate.Discriminator == discriminator);

            if (projectId.HasValue && projectId != Guid.Empty)
            {
                if (orgUser.Type != OrgUserTypesRepository.Administrator)
                {
                    var threadAssignments = UnitOfWork.ThreadAssignmentsRepository
                                            .AllAsNoTracking
                                            .Where(x => x.OrgUserId == orgUser.Id)
                                            .ToList();

                    var projectFound = threadAssignments.Any(x => x.FormTemplate.ProjectId == projectId);
                    var assignment   = orgUser.Assignments.SingleOrDefault(a => a.ProjectId == projectId);

                    if (!projectFound)
                    {
                        if (assignment == null || !assignment.CanView)
                        {
                            return(null);
                        }
                    }
                }

                surveys = surveys.Where(s => s.ProjectId == projectId);

                result = surveys
                         .ToList()
                         .OrderByDescending(x => x.Date)
                         .Select(s => Mapper.Map <FilledFormDTO>(s))
                         .ToList();
            }
            else
            {
                // return all projects that this user has a case or thread assignment for.
                var caseSurveys   = surveys.Where(s => s.Project.Assignments.Any(a => a.OrgUserId == orgUser.Id && a.CanView));
                var threadSurveys = surveys.Where(s => s.FormTemplate.Assignments.Any(a => a.OrgUserId == orgUser.Id && a.CanView));

                var joinedSurveys = new List <FilledForm>();
                joinedSurveys.AddRange(caseSurveys.ToList());
                joinedSurveys.AddRange(threadSurveys.ToList());
                joinedSurveys = joinedSurveys.Distinct().ToList();

                result = joinedSurveys
                         .ToList()
                         .OrderByDescending(x => x.Date)
                         .Select(s => Mapper.Map <FilledFormDTO>(s))
                         .ToList()
                         .Distinct()
                         .ToList();
            }

            return(result);
        }
Exemplo n.º 3
0
        public IEnumerable <FormTemplate> GetAllProjectTemplates(Guid?projectId, FormTemplateDiscriminators discriminator)
        {
            var templates = Enumerable.Empty <FormTemplate>().AsQueryable();

            // uncomment the following lines and replace it with the code-block below it,
            // if you'd like to include SHARED FORMS in the result.

            //if (this.User != null)
            //{
            //    templates = OnlyCanBeAccessedByUser(UOW.FormTemplatesRepository
            //        .AllIncludingNoTracking(f => f.Project, t => t.MetricGroups.Select(g => g.Metrics)));

            //    var assignments = UOW.AssignmentsRepository.AllAsNoTracking;
            //    if (projectId == null)
            //        assignments = assignments.Where(a => a.OrgUserId == User.Id);
            //    else
            //        assignments = assignments.Where(a => a.ProjectId == projectId && a.OrgUserId == User.Id);

            //    templates = templates.Where(t => assignments.Any(a => a.ProjectId == t.ProjectId || t.ProjectId == null));
            //}
            //else
            //    templates = UOW.FormTemplatesRepository
            //        .AllIncludingNoTracking(f => f.Project, t => t.MetricGroups.Select(g => g.Metrics))
            //        .Where(t => projectId == null || t.ProjectId == null || t.ProjectId == projectId);

            // exclude Shared Forms from the result.
            if (this.User != null)
            {
                templates = OnlyCanBeAccessedByUser(UOW.FormTemplatesRepository
                                                    .AllIncludingNoTracking(f => f.Project, t => t.MetricGroups.Select(g => g.Metrics)));

                var assignments = UOW.AssignmentsRepository.AllAsNoTracking;
                if (projectId == null)
                {
                    assignments = assignments.Where(a => a.OrgUserId == User.Id);
                }
                else
                {
                    assignments = assignments.Where(a => a.ProjectId == projectId && a.OrgUserId == User.Id);
                }

                templates = templates.Where(t => assignments.Any(a => a.ProjectId == t.ProjectId));
            }
            else
            {
                templates = UOW.FormTemplatesRepository
                            .AllIncludingNoTracking(f => f.Project, t => t.MetricGroups.Select(g => g.Metrics))
                            .Where(t => projectId == null || t.ProjectId == projectId);
            }

            var result = templates.Where(t => t.Discriminator == discriminator).ToList();

            return(PostLoadFilters(result));
        }
Exemplo n.º 4
0
        public List <FilledFormDTO> GetAllSurveys(FormTemplateDiscriminators discriminator, Guid?projectId = null)
        {
            var surveys = UnitOfWork.FilledFormsRepository
                          .AllAsNoTracking
                          .Where(x => x.FormTemplate.Discriminator == discriminator);

            if (projectId.HasValue && projectId != Guid.Empty)
            {
                surveys = surveys.Where(s => s.ProjectId == projectId);
            }

            var result = surveys
                         .ToList()
                         .OrderByDescending(x => x.Date)
                         .Select(s => Mapper.Map <FilledFormDTO>(s))
                         .ToList();

            return(result);
        }
Exemplo n.º 5
0
        public async Task <IHttpActionResult> Get(FormTemplateDiscriminators discriminator, Guid?projectId = null)
        {
            if (projectId.HasValue && projectId == Guid.Empty)
            {
                return(BadRequest("project id is empty"));
            }

            if (CurrentUser is OrgUser)
            {
                var cacheKey     = string.Empty;
                var orgAdminRole = "Organisation administrator";

                var isOrgAdmin = await ServiceContext.UserManager.IsInRoleAsync(CurrentOrgUser.Id, orgAdminRole);

                if (isOrgAdmin)
                {
                    cacheKey = projectId.HasValue ?
                               $"{CACHE_KEY}_{ORG_ADMIN_KEY}_{discriminator}_{projectId}_{CurrentOrgUser.Id}" :
                               $"{CACHE_KEY}_{ORG_ADMIN_KEY}_{discriminator}_{CurrentOrgUser.Id}";
                }
                else
                {
                    cacheKey = projectId.HasValue ?
                               $"{CACHE_KEY}_{discriminator}_{projectId}_{CurrentOrgUser.Id}" :
                               $"{CACHE_KEY}_{discriminator}_{CurrentOrgUser.Id}";
                }

                var cacheEntry = MemoryCacher.GetValue(cacheKey);
                if (cacheEntry == null)
                {
                    var templates = FormTemplatesService.Get(projectId, discriminator).ToList();
                    MemoryCacher.Add(cacheKey, templates, DateTimeOffset.UtcNow.AddMinutes(1));

                    return(Ok(templates));
                }
                else
                {
                    var result = (List <FormTemplateDTO>)cacheEntry;
                    return(new CachedResult <List <FormTemplateDTO> >(result, TimeSpan.FromMinutes(1), this));
                }
            }

            // else if current user is SuperUser
            var _cacheKey = projectId.HasValue ?
                            $"{CACHE_KEY}_{ADMIN_KEY}_{discriminator}_{projectId}" :
                            $"{CACHE_KEY}_{ADMIN_KEY}_{discriminator}";

            var _cacheEntry = MemoryCacher.GetValue(_cacheKey);

            if (_cacheEntry == null)
            {
                var templates = FormTemplatesService.Get(projectId, discriminator).ToList();
                MemoryCacher.Add(_cacheKey, templates, DateTimeOffset.UtcNow.AddMinutes(1));

                return(Ok(templates));
            }
            else
            {
                var response = (List <FormTemplateDTO>)_cacheEntry;
                return(new CachedResult <List <FormTemplateDTO> >(response, TimeSpan.FromMinutes(1), this));
            }
        }
Exemplo n.º 6
0
        public async Task <IHttpActionResult> Get(FormTemplateDiscriminators discriminator, Guid?projectId = null)
        {
            //TODO: refactor to api/projects/{projectId}/surveys
            var surveyService = new SurveyService(UnitOfWork);

            if (CurrentUser is OrgUser)
            {
                var isOrgAdmin = await ServiceContext.UserManager.IsInRoleAsync(CurrentOrgUser.Id, Role.ORG_ADMINSTRATOR);

                var cacheKey = string.Empty;

                if (isOrgAdmin)
                {
                    cacheKey = projectId.HasValue ?
                               $"{CACHE_KEY}_{ORG_ADMIN_KEY}_{discriminator}_{projectId}_{CurrentOrgUser.Id}" :
                               $"{CACHE_KEY}_{ORG_ADMIN_KEY}_{discriminator}_{CurrentOrgUser.Id}";
                }
                else
                {
                    cacheKey = projectId.HasValue ?
                               $"{CACHE_KEY}_{discriminator}_{projectId}_{CurrentOrgUser.Id}" :
                               $"{CACHE_KEY}_{discriminator}_{CurrentOrgUser.Id}";
                }

                var cacheEntry = MemoryCacher.GetValue(cacheKey);
                if (cacheEntry == null)
                {
                    var userSurveys = surveyService.GetUserSurveys(CurrentOrgUser, discriminator, projectId);
                    if (userSurveys == null)
                    {
                        return(Unauthorized());
                    }

                    MemoryCacher.Add(cacheKey, userSurveys, DateTimeOffset.UtcNow.AddMinutes(1));

                    return(Ok(userSurveys));
                }
                else
                {
                    var result = (List <FilledFormDTO>)cacheEntry;
                    return(new CachedResult <List <FilledFormDTO> >(result, TimeSpan.FromMinutes(1), this));
                }
            }

            // else if current user is SuperUser
            var _cacheKey = projectId.HasValue ?
                            $"{CACHE_KEY}_{ADMIN_KEY}_{discriminator}_{projectId}" :
                            $"{CACHE_KEY}_{ADMIN_KEY}_{discriminator}";

            var _cacheEntry = MemoryCacher.GetValue(_cacheKey);

            if (_cacheEntry == null)
            {
                var surveys = surveyService.GetAllSurveys(discriminator, projectId);
                MemoryCacher.Add(_cacheKey, surveys, DateTimeOffset.UtcNow.AddMinutes(1));

                return(Ok(surveys));
            }
            else
            {
                var result = (List <FilledFormDTO>)_cacheEntry;
                return(new CachedResult <List <FilledFormDTO> >(result, TimeSpan.FromMinutes(1), this));
            }
        }