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());
private IObservable <long[]> getProjectIdsNotSynced(IProjectsSummary response) { var summaryProjectIds = response.ProjectsSummaries .Select(s => s.ProjectId) .SelectNonNulls() .ToArray(); return(projectsIdsNotInDatabase(summaryProjectIds)); }
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()));
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); }
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));
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)); })); }