public IHttpActionResult Get()
        {
            try
            {
                // get expensegroupstatusses & map to DTO's
                var expenseGroupStatusses = _repository.GetAllAsQueryable().ToList()
                                            .Select(egs => _expenseMasterDataFactory.CreateExpenseGroupStatus(egs));

                return(Ok(expenseGroupStatusses));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Пример #2
0
        public IHttpActionResult Get(string sort = "id", string fields = null, string status = null, string userId = null, int pageSize = 5, int pageIndex = 1)
        {
            try
            {
                pageSize = Math.Min(pageSize, MaxPageSize);

                List <string> listOfFields = new List <string>();

                var includeExpenses = false;

                if (fields != null)
                {
                    listOfFields    = fields.ToLower().Split(',').ToList();
                    includeExpenses = listOfFields.Any(f => f.Contains("expenses"));
                }

                IQueryable <Repository.Entities.ExpenseGroup> expenseGroups = null;

                expenseGroups = includeExpenses ?
                                _repository.GetExpenseGroupsWithExpenses().ApplySort(sort) :
                                _repository.GetAllAsQueryable().ApplySort(sort);

                if (status != null)
                {
                    var expenseGroupStatus = _statusRepository.GetAllAsQueryable().FirstOrDefault(egs => string.Equals(egs.Description, status, StringComparison.CurrentCultureIgnoreCase));
                    if (expenseGroupStatus != null)
                    {
                        var statusId =
                            expenseGroupStatus.Id;

                        expenseGroups = expenseGroups.Where(eg => eg.ExpenseGroupStatusId == statusId);
                    }
                    else
                    {
                        return(BadRequest());
                    }
                }

                if (userId != null)
                {
                    expenseGroups = expenseGroups.Where(eg => eg.UserId == userId);
                }

                if (expenseGroups == null || !expenseGroups.Any())
                {
                    return(NotFound());
                }
                else
                {
                    var numberOfResults = expenseGroups.Count();
                    var numberOfPages   = CalculatePageNumbers(numberOfResults, pageSize);

                    expenseGroups = expenseGroups.Skip((pageIndex - 1) * pageSize).Take(pageSize);

                    var prevLink =
                        pageIndex > 1 ?
                        _urlHelper.Link("ExpenseGroupsList",
                                        new
                    {
                        pageIndex = pageIndex - 1,
                        pageSize  = pageSize,
                        fields    = fields,
                        sort      = sort,
                        status    = status,
                        userId    = userId
                    }, Request) : "";

                    var nextLink =
                        pageIndex < numberOfPages?
                        _urlHelper.Link("ExpenseGroupsList",
                                        new
                    {
                        pageIndex = pageIndex + 1,
                        fields    = fields,
                        pageSize  = pageSize,
                        sort      = sort,
                        status    = status,
                        userId    = userId
                    }, Request) : "";

                    var paginationHeader = new
                    {
                        currentPage      = pageIndex,
                        pageSize         = pageSize,
                        totalCount       = numberOfResults,
                        totalPages       = numberOfPages,
                        previousPageLink = prevLink,
                        nextPageLink     = nextLink
                    };

                    HttpContext.Current.Response.AddHeader("X-Pagination",
                                                           Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader));

                    return
                        (Ok(
                             expenseGroups.ToList()
                             .Select(expGrp => _expenseGroupFactory.CreateDataShapedObject(expGrp, listOfFields))));
                }
            }
            catch (Exception ex)
            {
                return(InternalServerError());
            }
        }