public IObservable <ITimeEntriesTotals> GetTotals(
            long userId, long workspaceId, DateTimeOffset startDate, DateTimeOffset endDate)
        {
            if (endDate.Date - startDate.Date > maximumRange)
            {
                throw new ArgumentOutOfRangeException(nameof(endDate));
            }

            var parameters = new TimeEntriesTotalsParameters(userId, startDate, endDate);
            var json       = serializer.Serialize(parameters, SerializationReason.Post, null);

            return(Observable.Create <ITimeEntriesTotals>(async observer =>
            {
                var response = await SendRequest <TotalsResponse>(endPoints.Totals(workspaceId), credentials.Header, json);

                var totals = new TimeEntriesTotals
                {
                    StartDate = startDate,
                    EndDate = endDate,
                    Resolution = response.Resolution,
                    Groups = response.Graph.Select(group => new TimeEntriesTotalsGroup
                    {
                        Total = TimeSpan.FromSeconds(group.Seconds),
                        Billable = TimeSpan.FromSeconds(group.BillableSeconds)
                    }).ToArray <ITimeEntriesTotalsGroup>()
                };

                observer.OnNext(totals);
                observer.OnCompleted();

                return () => { };
            }));
        }
Esempio n. 2
0
        public async Task <ITimeEntriesTotals> GetTotals(
            long userId, long workspaceId, DateTimeOffset startDate, DateTimeOffset endDate)
        {
            if (endDate.Date - startDate.Date > maximumRange)
            {
                throw new ArgumentOutOfRangeException(nameof(endDate));
            }

            var parameters = new TimeEntriesTotalsParameters(userId, startDate, endDate);
            var json       = serializer.Serialize(parameters, SerializationReason.Post);
            var endPoint   = endPoints.Totals(workspaceId);
            var totals     = await
                             SendRequest <TotalsResponse>(endPoint, credentials.Header, json)
                             .ConfigureAwait(false);

            return(new TimeEntriesTotals
            {
                StartDate = startDate,
                EndDate = endDate,
                Resolution = totals.Resolution,
                Groups = totals.Graph.Select(group => new TimeEntriesTotalsGroup
                {
                    Total = TimeSpan.FromSeconds(group.Seconds),
                    Billable = TimeSpan.FromSeconds(group.BillableSeconds)
                }).ToArray <ITimeEntriesTotalsGroup>()
            });
        }