Example #1
0
 public IActionResult GetWorkingHoursByProject([FromQuery] ProjectActivitiesOwnerParameters ownerParams)
 {
     if (ownerParams.ProjectId == 0 || ownerParams.DateFormatSelected.Length == 0)
     {
         return(BadRequest("Please check owner parameters. Project and DateFormat must be selected"));
     }
     return(Ok(_reportFacade.GetWorkingHoursByOwnerParams(ownerParams)));
 }
        public dynamic GetWorkingHoursByOwnerParams(ProjectActivitiesOwnerParameters ownerParams)
        {
            if (ownerParams.DateFormatSelected == "dd")
            {
                var query = from p in _appDbContext.Project
                            join pi in _appDbContext.Projectinfo
                            on p.ProjectId equals pi.ProjectId into q1
                            from pi in q1
                            where p.ProjectId == ownerParams.ProjectId
                            group new { p.ProjectId, p.Name, pi.HoursWorked, pi.Date } by new { p.ProjectId, p.Name, pi.Date } into q
                    select new
                {
                    ProjectId = q.Key.ProjectId,
                    Name      = q.Key.Name,
                    Date      = q.Key.Date,
                    Day       = q.Key.Date.Day,
                    q.Key.Date.Month,
                    q.Key.Date.Year,
                    ProjectWorkingHours = q.Sum(c => c.HoursWorked)
                };

                return(query.OrderBy(c => c.Month).ThenBy(c => c.Day).ToList());
            }
            else if (ownerParams.DateFormatSelected == "mm")
            {
                var query = from p in _appDbContext.Project
                            join pi in _appDbContext.Projectinfo
                            on p.ProjectId equals pi.ProjectId into q1
                            from pi in q1.DefaultIfEmpty()
                            where p.ProjectId == ownerParams.ProjectId
                            group new { p.ProjectId, p.Name, pi.HoursWorked, pi.Date } by new { p.ProjectId, p.Name, pi.Date.Month, pi.Date.Year } into q
                    select new
                {
                    ProjectId = q.Key.ProjectId,
                    Name      = q.Key.Name,
                    q.Key.Month,
                    q.Key.Year,
                    ProjectWorkingHours = q.Sum(c => c.HoursWorked)
                };
                return(query.ToList().OrderBy(c => c.Month));
            }
            else if (ownerParams.DateFormatSelected == "ww")
            {
                var query = from p in _appDbContext.Project
                            join pi in _appDbContext.Projectinfo
                            on p.ProjectId equals pi.ProjectId into q1
                            from pi in q1.DefaultIfEmpty()
                            where p.ProjectId == ownerParams.ProjectId
                            group new { p.ProjectId, p.Name, pi.HoursWorked, pi.Date } by new { p.ProjectId, p.Name, pi.Date, pi.Date.Month, pi.Date.Year } into q
                    select new
                {
                    ProjectId  = q.Key.ProjectId,
                    Name       = q.Key.Name,
                    WeekNumber = ReportFacade.GetWeekNumberOfMonth(q.Key.Date),
                    q.Key.Month,
                    q.Key.Year,
                    ProjectWorkingHours = q.Sum(c => c.HoursWorked)
                };
                var queryResult = query.ToList();


                Dictionary <int, ReportModelHelper> modelDic = new Dictionary <int, ReportModelHelper>();

                for (int i = 0; i < queryResult.Count(); i++)
                {
                    int projectId   = queryResult.ElementAt(i).ProjectId;
                    int weekNumber  = queryResult.ElementAt(i).WeekNumber;
                    int monthNumber = queryResult.ElementAt(i).WeekNumber;

                    ReportModelHelper model = new ReportModelHelper()
                    {
                        WeekNumber        = queryResult.ElementAt(i).WeekNumber,
                        Year              = queryResult.ElementAt(i).Year,
                        Month             = queryResult.ElementAt(i).Month,
                        TotalWorkingHours = queryResult
                                            .Where(c => c.WeekNumber == weekNumber)

                                            .Sum(c => c.ProjectWorkingHours)
                    };

                    if (!modelDic.ContainsKey(model.WeekNumber))
                    {
                        modelDic.Add(model.WeekNumber, model);
                    }
                }

                return(modelDic.Select(c => c.Value).OrderBy(x => x.Month).ThenBy(c => c.WeekNumber).ToList());
            }
            return(null);
        }