public async Task <IHttpActionResult> GetProtocols(
            int customerId,
            [FromUri] SearchProtocolDto request,
            string language = null,
            bool isBrief    = true
            )
        {
            var result = await protocolsControllerHelper.GetProtocols(customerId, request, isBrief);

            return(Ok(result));
        }
예제 #2
0
        /// <summary>
        /// Gets the protocols.
        /// </summary>
        /// <param name="customerId"></param>
        /// <param name="request">The request.</param>
        /// <param name="isBrief">if set to <c>true</c> [is brief].</param>
        /// <returns></returns>
        public async Task <PagedResultDto <ProtocolResponseDto> > GetProtocols(
            int customerId,
            SearchProtocolDto request,
            bool isBrief
            )
        {
            var protocols = await protocolService.GetProtocols(customerId, request);

            var result = Mapper.Map <PagedResult <Protocol>, PagedResultDto <ProtocolResponseDto> >(
                protocols,
                o => o.Items.Add("isBrief", isBrief)
                );

            result.Results = result.Results.OrderBy(e => e.Name.Value).ToList();

            return(result);
        }
예제 #3
0
        /// <summary>
        /// Gets the protocols.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <PagedResult <Protocol> > GetProtocols(int customerId, SearchProtocolDto request = null)
        {
            Expression <Func <Protocol, bool> > expression = p => !p.IsDeleted && p.CustomerId == customerId;

            if (request != null)
            {
                if (request.CreatedAfter.HasValue)
                {
                    expression = expression.And(p => p.CreatedUtc >= request.CreatedAfter.Value);
                }

                if (request.UpdatedAfter.HasValue)
                {
                    expression = expression.And(p => p.UpdatedUtc >= request.UpdatedAfter.Value);
                }

                if (request.CreatedBefore.HasValue)
                {
                    expression = expression.And(p => p.CreatedUtc < request.CreatedBefore.Value);
                }

                if (request.UpdatedBefore.HasValue)
                {
                    expression = expression.And(p => p.UpdatedUtc < request.UpdatedBefore.Value);
                }

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

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

                    expression = expression.And(tagsExpression);
                }

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

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

            return(await protocolRepository
                   .FindPagedAsync(
                       expression,
                       o => o.OrderBy(e => e.Id),
                       new List <Expression <Func <Protocol, object> > >
            {
                e => e.Tags,
                e => e.NameLocalizedStrings,
                e => e.ProtocolElements,
                e => e.ProtocolElements.Select(pe => pe.Element),
                e => e.ProtocolElements.Select(pe => pe.Branches),
                e => e.ProtocolElements.Select(pe => pe.NextProtocolElement),
                e => e.ProtocolElements.Select(pe => pe.Element.Tags)
            },
                       request != null?request.Skip : (int?)null,
                       request != null?request.Take : (int?)null
                       ));
        }