public async Task <RollupTaskToProjectView> GetTaskToProjectRollupViewById(long?projectId)
        {
            RollupTaskToProjectView view = await(from e in _dbContext.ProjectManagementProject
                                                 join f in _dbContext.ProjectManagementTask
                                                 on e.ProjectId equals f.ProjectId
                                                 where e.ProjectId == projectId
                                                 group f by f.ProjectId into pg

                                                 select new RollupTaskToProjectView
            {
                ProjectId          = projectId ?? 0,
                EstimatedHours     = pg.Sum(e => e.EstimatedHours),
                ActualDays         = pg.Sum(e => e.ActualDays),
                EstimatedDays      = pg.Sum(e => e.EstimatedDays),
                ActualHours        = pg.Sum(e => e.ActualHours),
                ActualStartDate    = pg.Min(e => e.ActualStartDate),
                ActualEndDate      = pg.Max(e => e.ActualEndDate),
                EstimatedStartDate = pg.Min(e => e.EstimatedStartDate),
                EstimatedEndDate   = pg.Max(e => e.EstimatedEndDate),
                Cost      = pg.Sum(e => e.Cost),
                ItemCount = pg.Count()
            }).FirstOrDefaultAsync <RollupTaskToProjectView>();

            return(view);
        }
        public async Task TestTaskToProjectRollup()
        {
            ProjectManagementModule  pmMod   = new ProjectManagementModule();
            ProjectManagementProject project = await pmMod.Project.Query().GetEntityById(1);

            ProjectManagementMilestone milestone = await pmMod.Milestone.Query().GetEntityById(1);

            Udc udc = await pmMod.Udc.Query().GetEntityById(21);

            ChartOfAccount account = await pmMod.ChartOfAccount.Query().GetEntityById(4);


            ProjectManagementTaskView view = new ProjectManagementTaskView()
            {
                Wbs                = "1.3",
                TaskName           = "test rollup",
                Description        = "task to project rollup",
                EstimatedStartDate = DateTime.Parse("12/1/2019"),
                EstimatedHours     = 1,
                EstimatedEndDate   = DateTime.Parse("12/31/2019"),
                ActualStartDate    = DateTime.Parse("12/23/2019"),
                ActualHours        = 1,
                ActualEndDate      = DateTime.Parse("12/23/2020"),
                Cost               = 31,
                MileStoneId        = milestone.MilestoneId,
                MilestoneName      = milestone.MilestoneName,
                StatusXrefId       = udc.XrefId,
                EstimatedCost      = 29,
                ActualDays         = 1,
                EstimatedDays      = 1,
                ProjectId          = project.ProjectId,
                AccountId          = account.AccountId,
                Account            = account.Account,
                ProjectName        = project.ProjectName,
            };

            NextNumber nnNextNumber = await pmMod.ProjectManagementTask.Query().GetNextNumber();

            view.TaskNumber = nnNextNumber.NextNumberValue;

            ProjectManagementTask projectManagementTask = await pmMod.ProjectManagementTask.Query().MapToEntity(view);

            pmMod.ProjectManagementTask.AddProjectManagementTask(projectManagementTask).Apply();


            RollupTaskToProjectView rollup = await pmMod.Project.Query().GetTaskToProjectRollupViewById(milestone.MilestoneId);


            ProjectManagementTask newProjectManagementTask = await pmMod.ProjectManagementTask.Query().GetEntityByNumber(view.TaskNumber);

            if (rollup.Cost < 3000)
            {
                Assert.True(false);
            }

            pmMod.ProjectManagementTask.DeleteProjectManagementTask(newProjectManagementTask).Apply();
        }