Example #1
0
 private IObservable <ChartSegment[]> getChartSegmentsForWorkspace(IProjectsSummary projectsSummary, long workspaceId)
 => projectsSummary.ProjectsSummaries
 .Select(s => s.ProjectId)
 .SelectNonNulls()
 .Apply(ids => searchProjects(workspaceId, ids.ToArray()))
 .Select(projectsInReport => getChartSegmentsForProjectsInReport(projectsSummary, projectsInReport))
 .SelectMany(segmentsObservable => segmentsObservable.Merge())
 .ToArray()
 .Select(s => s.OrderByDescending(c => c.Percentage).ToArray());
Example #2
0
        private IObservable <long[]> getProjectIdsNotSynced(IProjectsSummary response)
        {
            var summaryProjectIds = response.ProjectsSummaries
                                    .Select(s => s.ProjectId)
                                    .SelectNonNulls()
                                    .ToArray();

            return(projectsIdsNotInDatabase(summaryProjectIds));
        }
Example #3
0
 private IObservable <ProjectSummaryReport> summaryReportFromResponse(IProjectsSummary response, long workspaceId)
 => response.ProjectsSummaries
 .Select(s => s.ProjectId)
 .SelectNonNulls()
 .Apply(ids => searchProjects(workspaceId, ids.ToArray()))
 .Select(projectsInReport =>
 {
     var totalSeconds = response.ProjectsSummaries.Select(s => s.TrackedSeconds).Sum();
     return(response.ProjectsSummaries
            .Select(summary => chartFromSummary(summary, projectsInReport, totalSeconds)));
 })
 .Select(segments =>
         new ProjectSummaryReport(segments.OrderByDescending(c => c.Percentage).ToArray()));
Example #4
0
        private IObservable <ProjectSummaryReport> summaryReportFromResponse(IProjectsSummary response, long workspaceId)
        {
            var summarySegments     = getChartSegmentsForWorkspace(response, workspaceId);
            var projectIdsNotSynced = getProjectIdsNotSynced(response);

            var result = Observable.CombineLatest(
                summarySegments,
                projectIdsNotSynced,
                (segments, ids) => new ProjectSummaryReport(segments, ids.Length)
                );

            return(result);
        }
Example #5
0
 private IObservable <ProjectSummaryReport> summaryReportFromResponse(IProjectsSummary response, long workspaceId)
 => response.ProjectsSummaries
 .Select(s => s.ProjectId)
 .SelectNonNulls()
 .Apply(ids => searchProjects(workspaceId, ids.ToArray()))
 .Select(projectsInReport =>
 {
     var totalSeconds = response.ProjectsSummaries.Select(s => s.TrackedSeconds).Sum();
     return(response.ProjectsSummaries
            .Select(summary =>
     {
         var project = projectsInReport.FirstOrDefault(p => p.Id == summary.ProjectId);
         return findClient(project)
         .Select(client => chartFromSummary(summary, project, client, totalSeconds));
     }));
 })
 .SelectMany(segmentsObservable => segmentsObservable.Merge())
 .ToArray()
 .Select(segments => segments.OrderByDescending(c => c.Percentage).ToArray())
 .Select(segments => new ProjectSummaryReport(segments));
Example #6
0
        private IEnumerable <IObservable <ChartSegment> > getChartSegmentsForProjectsInReport(IProjectsSummary projectsSummary, IList <IProject> projectsInReport)
        {
            var totalSeconds = projectsSummary.ProjectsSummaries.Select(s => s.TrackedSeconds).Sum();

            return(projectsSummary.ProjectsSummaries
                   .Select(summary =>
            {
                var project = projectsInReport.FirstOrDefault(p => p.Id == summary.ProjectId);
                return findClient(project)
                .Select(client => chartFromSummary(summary, project, client, totalSeconds));
            }));
        }