private ProjectReport ToProjectReport(ProjectEntity project, DateTime?beginDate = null, DateTime?endDate = null) { var timeRecordsWithoutResources = LoadTimeRecordsWithoutResources(project.Id, project.Versions.Select(i => i.ExternalId), beginDate, endDate).ToArray(); return(new ProjectReport { Project = project .ToProjectModel(timeRecordsWithoutResources.Sum(i => i.Hours), beginDate, endDate), SelfCost = project.Issues.SelectMany(issue => issue.TimeRecords).GroupBy(timeRecords => timeRecords.Employee) .Select(timeRecordsGroup => timeRecordsGroup.Key.SelfRate * timeRecordsGroup.Sum(i => i.Hours)) .Sum(), Payments = project.Payments .Select(payment => payment.ToPaymentRecord()) .ToArray(), Resources = project.SoldResources .Where(i => i.ProjectVersion == null) .Select(resource => resource.ToResourceModel(beginDate, endDate)) .ToArray(), EmployeesWithoutResource = GetEmployeesWithoutResource(null, timeRecordsWithoutResources) .ToArray(), ProjectVerisons = project.Versions .Select(projectVersion => projectVersion.ToProjectVerison(GetEmployeesWithoutResource(projectVersion.ExternalId, timeRecordsWithoutResources), beginDate, endDate)) .ToArray() }); }