public async Task <IHttpActionResult> GetScaleAnswerSets(
            int customerId,
            [FromUri] TagsSearchDto model,
            string language = null
            )
        {
            var result = await scaleAnswerSetHelper.Find(customerId, model);

            return(Ok(result));
        }
示例#2
0
        public async Task <IHttpActionResult> GetQuestionElements(
            int customerId,
            [FromUri] TagsSearchDto model,
            string language = null,
            bool isBrief    = true
            )
        {
            var result = await questionElementHelper.Find(customerId, model, isBrief);

            return(Ok(result));
        }
        /// <summary>
        /// Returns question elements by criteria.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="searchRequest">The search request.</param>
        /// <returns></returns>
        public async Task <PagedResult <QuestionElement> > Find(int customerId, TagsSearchDto searchRequest = null)
        {
            Expression <Func <QuestionElement, bool> > expression = q => !q.IsDeleted && q.CustomerId == customerId;

            if (searchRequest != null)
            {
                if (searchRequest.Tags != null && searchRequest.Tags.Any())
                {
                    Expression <Func <QuestionElement, bool> > tagsExpression = PredicateBuilder.False <QuestionElement>();

                    foreach (var tag in searchRequest.Tags)
                    {
                        tagsExpression = tagsExpression.Or(se => se.Tags.Any(t => t.Name.ToLower() == tag.ToLower()));
                    }

                    expression = expression.And(tagsExpression);
                }

                if (!string.IsNullOrEmpty(searchRequest.Q))
                {
                    var currentLanguage =
                        string.IsNullOrEmpty(careElementContext.Language)
                        ? careElementContext.DefaultLanguage
                        : careElementContext.Language;

                    expression = expression
                                 .And(q => q.LocalizedStrings.Any(ls => ls.Language.Equals(currentLanguage)));

                    var terms = searchRequest.Q.Split(' ').Where(r => !string.IsNullOrWhiteSpace(r));

                    foreach (var term in terms)
                    {
                        expression = expression.And(q => q.LocalizedStrings.Any(ls => ls.Value.Contains(term)));
                    }
                }
            }

            return(await questionElementRepository.FindPagedAsync(
                       expression,
                       o => o.OrderBy(e => e.Id),
                       new List <Expression <Func <QuestionElement, object> > >
            {
                e => e.Tags,
                e => e.AnswerSet,
                e => e.LocalizedStrings,
                e => e.QuestionElementToScaleAnswerChoices,
                e => e.QuestionElementToSelectionAnswerChoices
            },
                       searchRequest != null?searchRequest.Skip : (int?)null,
                       searchRequest != null?searchRequest.Take : (int?)null
                       ));
        }
        /// <summary>
        /// Finds the specified keyword.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="searchRequest">The search request.</param>
        /// <returns></returns>
        public async Task <PagedResult <ScaleAnswerSet> > Find(int customerId, TagsSearchDto searchRequest = null)
        {
            Expression <Func <ScaleAnswerSet, bool> > expression = s => !s.IsDeleted && s.CustomerId == customerId;

            if (searchRequest != null)
            {
                if (searchRequest.Tags != null && searchRequest.Tags.Any())
                {
                    Expression <Func <ScaleAnswerSet, bool> > tagsExpression = PredicateBuilder.False <ScaleAnswerSet>();

                    foreach (var tag in searchRequest.Tags)
                    {
                        tagsExpression = tagsExpression.Or(se => se.Tags.Any(t => t.Name.ToLower() == tag.ToLower()));
                    }

                    expression = expression.And(tagsExpression);
                }

                if (!string.IsNullOrEmpty(searchRequest.Q))
                {
                    var terms = searchRequest.Q.Split(' ').Where(r => !string.IsNullOrWhiteSpace(r));

                    foreach (var term in terms)
                    {
                        expression = expression.And(s => s.Name.Contains(term));
                    }
                }
            }

            return(await scaleAnswerSetRepository.FindPagedAsync(
                       expression,
                       o => o.OrderBy(e => e.Id),
                       new List <Expression <Func <ScaleAnswerSet, object> > >
            {
                e => e.Tags,
                e => e.QuestionElements,
                e => e.LowLabelScaleAnswerSetStrings.Select(l => l.AudioFileMedia.Tags),
                e => e.LowLabelScaleAnswerSetStrings.Select(l => l.AudioFileMedia.LocalizedStrings),
                e => e.MidLabelScaleAnswerSetStrings.Select(l => l.AudioFileMedia.Tags),
                e => e.MidLabelScaleAnswerSetStrings.Select(l => l.AudioFileMedia.LocalizedStrings),
                e => e.HighLabelScaleAnswerSetStrings.Select(l => l.AudioFileMedia.Tags),
                e => e.HighLabelScaleAnswerSetStrings.Select(l => l.AudioFileMedia.LocalizedStrings)
            },
                       searchRequest != null?searchRequest.Skip : (int?)null,
                       searchRequest != null?searchRequest.Take : (int?)null
                       ));
        }
        /// <summary>
        /// Returns list of Assessment elements for specified customer.
        /// </summary>
        /// <param name="customerId"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <PagedResult <AssessmentElement> > GetAll(int customerId, TagsSearchDto request = null)
        {
            Expression <Func <AssessmentElement, bool> > expression = m => !m.IsDeleted && m.CustomerId == customerId;

            // TODO: Code below should be removed when initialization of default data will be implemented in correct way
            var assessments = await this.assessmentElementsRepository.FindAsync(expression);

            if (!assessments.Any())
            {
                await this.InitDefaultAssessmentElements(customerId);
            }

            // TODO: Code above should be removed when initialization of default data will be implemented in correct way
            if (request != null)
            {
                if (request.Tags != null && request.Tags.Any())
                {
                    foreach (var tag in request.Tags)
                    {
                        expression = expression.Or(m => m.Tags.Any(t => t.Name.ToLower() == tag.ToLower()));
                    }
                }

                if (!string.IsNullOrEmpty(request.Q))
                {
                    var terms = request.Q.Split(' ').Where(r => !string.IsNullOrWhiteSpace(r));

                    foreach (var term in terms)
                    {
                        expression = expression.And(m => m.Name.Contains(term));
                    }
                }
            }

            return(await assessmentElementsRepository
                   .FindPagedAsync(
                       expression,
                       m => m.OrderBy(e => e.AssessmentTypeString).ThenBy(e => e.Name),
                       null,
                       request != null?request.Skip : (int?)null,
                       request != null?request.Take : (int?)null
                       ));
        }
        /// <summary>
        /// Returns list of Assessment elements models for specified customer.
        /// Copies data from CI customer to specified if required customer didn't have any Assessment elements.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <PagedResultDto <AssessmentResponseDto> > GetAll(int customerId, TagsSearchDto request)
        {
            var result = await AssessmentElementsService.GetAll(customerId, request);

            return(Mapper.Map <PagedResult <AssessmentElement>, PagedResultDto <AssessmentResponseDto> >(result));
        }
示例#7
0
        /// <summary>
        /// Returns model with search results.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="criteria">The criteria.</param>
        /// <param name="isBrief">if set to <c>true</c> [is brief].</param>
        /// <returns></returns>
        public async Task <PagedResultDto <QuestionElementResponseDto> > Find(int customerId, TagsSearchDto criteria, bool isBrief)
        {
            var result = await questionElementService.Find(customerId, criteria);

            return(Mapper.Map <PagedResult <QuestionElement>, PagedResultDto <QuestionElementResponseDto> >(
                       result,
                       o => o.Items.Add("isBrief", isBrief)
                       ));
        }
        public async Task <IHttpActionResult> Get(int customerId, [FromUri] TagsSearchDto request)
        {
            var result = await assessmentElementsHelper.GetAll(customerId, request);

            return(Ok(result));
        }
示例#9
0
        /// <summary>
        /// Finds the specified model.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public async Task <PagedResultDto <ScaleAnswerSetResponseDto> > Find(int customerId, TagsSearchDto model = null)
        {
            var result = await scaleAnswerSetService.Find(customerId, model);

            return(Mapper.Map <PagedResult <ScaleAnswerSet>, PagedResultDto <ScaleAnswerSetResponseDto> >(result));
        }