Guest User

Untitled

a guest
Feb 21st, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.06 KB | None | 0 0
  1.         public static IEnumerable<ReportProjectModel> Create(int reportId, IEnumerable<int> userIds, DateTime startDate, DateTime endDate)
  2.         {
  3.             _context = FollowUpConnectionFactory.GetConnection();
  4.  
  5.             var reportProjects = _context.ReportProjects.Where(r => r.ReportID == reportId);
  6.  
  7.             var projects = new List<Project>();
  8.             foreach (var reportProject in reportProjects)
  9.             {
  10.                 if (reportProject.Project == null)
  11.                     projects.AddRange(_context.Projects.Where(p => p.ClientID == reportProject.ClientID));
  12.                 else
  13.                     projects.Add(reportProject.Project);
  14.             }
  15.  
  16.            var rawData = from p in projects
  17.                                      join a in _context.Articles on p.ProjectID equals a.ArticleID
  18.                                      join w in _context.WorkSpecifications on p.ProjectID equals w.ProjectID
  19.                                      join u in _context.Users on w.UserID equals u.UserID
  20.                                      join wh in _context.WorkHours on w.WorkSpecificationID equals wh.WorkSpecificationID
  21.                                      orderby p.ProjectName, a.ArticleName, w.WorkDate, u.FirstName
  22.                                      where
  23.                                          userIds.Contains(u.UserID)
  24.                                          && wh.Hours > 0
  25.                                          && w.WorkDate <= endDate
  26.                                          && w.WorkDate >= startDate
  27.                                       let firstOrDefault = wh.Article.Prices.FirstOrDefault(pr => pr.StartDate <= wh.WorkSpecification.WorkDate
  28.                                                 && (pr.EndDate ?? DateTime.MaxValue) >= wh.WorkSpecification.WorkDate)
  29.                                       where firstOrDefault != null
  30.                                       select new
  31.                                                 {
  32.                                                     BillableHours = wh.BillableHours ?? wh.Hours,
  33.                                                     Id = p.ProjectID,
  34.                                                     ProjectHours = wh.Hours,
  35.                                                     ProjectName = p.ProjectName,
  36.                                                     ProjectPrice = (wh.BillableHours ?? wh.Hours)* firstOrDefault.PricePerHour,
  37.                                                     ReportUserModels = new
  38.                                                                            {
  39.                                                                                BillableHours = wh.BillableHours ?? wh.Hours,
  40.                                                                                Id = u.UserID,
  41.                                                                                PriceForPeriod = (wh.BillableHours ?? wh.Hours) * firstOrDefault.PricePerHour,
  42.                                                                                UserName = u.FirstName + " " + u.LastName,
  43.                                                                                WorkedHours = wh.Hours
  44.                                                                            }
  45.                                                 };
  46.  
  47.             var result = from rpm in rawData
  48.                          group rpm by new {rpm.Id, rpm.ProjectName}
  49.                          into project
  50.                          select new ReportProjectModel
  51.                                     {
  52.                                         Id = project.Key.Id,
  53.                                         ProjectName = project.Key.ProjectName,
  54.  
  55.                                         BillableHours = project.Sum(p => p.BillableHours),
  56.                                         ProjectHours = project.Sum(p => p.ProjectHours),
  57.                                         ProjectPrice = project.Sum(p => p.ProjectPrice),
  58.  
  59.                                         ReportUserModels = project.GroupBy(p => new { p.ReportUserModels.Id, p.ReportUserModels.UserName }, p => p.ReportUserModels)
  60.                                                                   .Select(rum => new ReportUserModel
  61.                                                                     {
  62.                                                                         Id = rum.Key.Id,
  63.                                                                         UserName = rum.Key.UserName,
  64.                                                                         PriceForPeriod = rum.Sum(oneUser => oneUser.PriceForPeriod),
  65.                                                                         BillableHours = rum.Sum(oneUser => oneUser.BillableHours),
  66.                                                                         WorkedHours = rum.Sum(oneUser => oneUser.WorkedHours)
  67.                                                                     })
  68.                                     };
  69.            
  70.  
  71. #if DEBUG
  72.             result = result.ToArray();
  73. #endif
  74.  
  75.                 return result;
  76.  
  77.         }
Add Comment
Please, Sign In to add comment