Ejemplo n.º 1
0
        public async Task <IHttpActionResult> Get(string id, bool includeAllUsers = false)
        {
            var query = new GetTimeEntryQuery()
            {
                IncludeAllUsers = includeAllUsers,
                QueryString     = $"?$filter=Id eq guid'{id}'"
            };

            try
            {
                var timeEntries = await timeEntryService.GetTimeEntries(query);

                if (!timeEntries.Results.Any())
                {
                    return(NotFound());
                }
                else
                {
                    return(Ok(timeEntries.Results.First()));
                }
            }
            catch (ValidationException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (AuthorizationException)
            {
                return(this.StatusCode(System.Net.HttpStatusCode.Forbidden));
            }
        }
Ejemplo n.º 2
0
        public async Task <IHttpActionResult> GetAll()
        {
            var queryString = HttpContext.Current.Request.QueryString;

            var rawQueryString = HttpUtility.UrlDecode(Request.RequestUri.Query);
            var orderBy        = queryString["$orderby"];

            var query = new GetTimeEntryQuery()
            {
                IncludeAllUsers = true,
                OrderBy         = orderBy,
                QueryString     = rawQueryString
            };

            var pageSize = queryString["$top"];
            int pageSizeInt;

            if (int.TryParse(pageSize, out pageSizeInt))
            {
                query.PageSize = pageSizeInt;
            }

            try
            {
                var timeEntries = await timeEntryService.GetTimeEntries(query);

                return(Ok(timeEntries));
            }
            catch (ValidationException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (AuthorizationException)
            {
                return(this.StatusCode(System.Net.HttpStatusCode.Forbidden));
            }
        }
Ejemplo n.º 3
0
        async Task <PagedResult <TimeEntryWithOwnerName> > ITimeEntryService.GetTimeEntries(GetTimeEntryQuery query)
        {
            Check.NotNull(query, errorMessage: "Query must be specified.");

            var currentPrincipal = await currentUserResolver.ResolveCurrentClaimsPrincipalAsync();

            var operation = query.IncludeAllUsers ? Operation.ReadAll : Operation.Read;
            await authorizationService.AuthorizeResourceType(currentPrincipal, operation, typeof(TimeEntry));

            var timeEntries = timeEntryRepository.GetTimeEntries();

            var currentUser = await currentUserResolver.ResolveAsync();

            if (operation == Operation.Read)
            {
                timeEntries = timeEntries.Where(te => te.OwnerId == currentUser.Id);
            }

            if (string.IsNullOrWhiteSpace(query.OrderBy))
            {
                timeEntries = timeEntries.OrderBy(te => te.Date);
            }

            var pagedResult = new PagedResult <TimeEntryWithOwnerName>();

            if (!string.IsNullOrEmpty(query.QueryString))
            {
                try
                {
                    var queryParserResult = await queryParser.ApplyQuery(timeEntries, query.QueryString);

                    timeEntries            = queryParserResult.Results;
                    pagedResult.TotalCount = queryParserResult.TotalCount;
                }
                catch (Exception e)
                {
                    throw new ValidationException("Invalid query string.", e);
                }
            }

            var pageSize = Constants.MaxPageSize;

            if (query.PageSize.HasValue && query.PageSize < Constants.MaxPageSize)
            {
                pageSize = query.PageSize.Value;
            }

            timeEntries = timeEntries.Take(pageSize);

            var preferredWorkingHourIndex = new Dictionary <string, double>();

            foreach (var te in timeEntries)
            {
                var key = te.Date.Date.ToShortDateString() + "|" + te.OwnerId;
                if (!preferredWorkingHourIndex.ContainsKey(key))
                {
                    preferredWorkingHourIndex.Add(key, 0);
                }

                preferredWorkingHourIndex[key] += te.Duration;
            }

            var timeEntriesWithOwnerName = new List <TimeEntryWithOwnerName>();

            foreach (var te in timeEntries)
            {
                var key = te.Date.Date.ToShortDateString() + "|" + te.OwnerId;
                timeEntriesWithOwnerName.Add(new TimeEntryWithOwnerName(te)
                {
                    IsUnderPreferredWorkingHourPerDay = preferredWorkingHourIndex[key] < te.Owner.PreferredWorkingHourPerDay
                });
            }

            pagedResult.Results = timeEntriesWithOwnerName.ToArray();
            return(pagedResult);
        }