private static void AddToGanttDataList(List <GanttData> ganttData, TaskGroupSummary taskGroupSummary, Guid?parentId)
        {
            ganttData.Add(new GanttData()
            {
                Id        = taskGroupSummary.Id.ToString(),
                Text      = taskGroupSummary.LongName,
                StartDate = (!taskGroupSummary.ChildTaskGroups.Any() && !taskGroupSummary.ChildTasks.Any()) ? taskGroupSummary.StartDate.ToString("yyyy-MM-dd HH:mm") : null,
                Duration  = (!taskGroupSummary.ChildTaskGroups.Any() && !taskGroupSummary.ChildTasks.Any()) ? Convert.ToInt64((taskGroupSummary.CompletionDate - taskGroupSummary.StartDate).TotalDays) : 0,
                Parent    = parentId != null ? parentId.ToString() : string.Empty,
                Progress  = taskGroupSummary.PercentageComplete,
                Open      = true
            });

            foreach (var childTask in taskGroupSummary.ChildTasks)
            {
                ganttData.Add(new GanttData()
                {
                    Id        = childTask.Id.ToString(),
                    Text      = childTask.Title,
                    StartDate = childTask.StartDate.ToString("yyyy-MM-dd HH:mm"),
                    Duration  = childTask.Completed ? Convert.ToInt64((childTask.CompletedOnDate - childTask.StartDate).TotalDays)  : Convert.ToInt64((childTask.CompletionDate - childTask.StartDate).TotalDays),
                    Parent    = childTask.TaskGroupHeaderId.ToString(),
                    Progress  = childTask.Completed ? 1.0 : 0
                });
            }

            foreach (var childTaskGroup in taskGroupSummary.ChildTaskGroups)
            {
                AddToGanttDataList(ganttData, childTaskGroup, taskGroupSummary.Id);
            }
        }
        public static GanttDataModel GenerateGanttDataModel(TaskGroupSummary taskGroupSummary)
        {
            var ganttDataModel = new GanttDataModel();

            var ganttData = new List <GanttData>();
            var ganttList = new List <GanttLink>();

            AddToGanttDataList(ganttData, taskGroupSummary, null);

            ganttDataModel.Data  = ganttData.ToArray();
            ganttDataModel.Links = ganttList.ToArray();

            return(ganttDataModel);
        }
        private void UpdatePercentages(TaskGroupSummary taskSummary)
        {
            double childTaskCompletion      = 0;
            double childTaskGroupCompletion = 0;

            if (taskSummary.ChildTasks.Any())
            {
                childTaskCompletion = Convert.ToDouble(taskSummary.ChildTasks.Where(c => c.Completed).Count()) / Convert.ToDouble(taskSummary.ChildTasks.Count());
            }

            if (taskSummary.ChildTaskGroups.Any())
            {
                for (int iCount = 0; iCount < taskSummary.ChildTaskGroups.Count; iCount++)
                {
                    UpdatePercentages(taskSummary.ChildTaskGroups[iCount]);

                    childTaskGroupCompletion += taskSummary.ChildTaskGroups[iCount].PercentageComplete;
                }
            }

            if (taskSummary.ChildTasks.Any() && taskSummary.ChildTaskGroups.Any())
            {
                taskSummary.PercentageComplete = (childTaskCompletion + childTaskGroupCompletion) / (taskSummary.ChildTaskGroups.Count + 1);
            }
            else if (taskSummary.ChildTasks.Any())
            {
                taskSummary.PercentageComplete = childTaskCompletion;
            }
            else
            {
                taskSummary.PercentageComplete = childTaskGroupCompletion / taskSummary.ChildTaskGroups.Count;
            }

            if (Double.IsNaN(taskSummary.PercentageComplete))
            {
                taskSummary.PercentageComplete = 0.0;
            }
        }
        public async Task <IActionResult> OnGetAsync()
        {
            var accessToken = await HttpContext.GetTokenAsync("access_token");

            await PageConstructor(SaveStates.IGNORE, accessToken);

            if (!await _apiHelper.AuthCheck(accessToken, User.FindFirst("sub").Value))
            {
                return(RedirectToPage("/Logout"));
            }

            taskGroupSummary = new TaskGroupSummary();
            clientSummary    = new ClientSummary();

            if (!string.IsNullOrWhiteSpace(Id))
            {
                var response = await _apiHelper.MakeAPICallAsync(accessToken, HttpMethod.Get, APITypes.TASK, $"TaskGroup/GetTaskGroupSummary/{Id}");

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    taskGroupSummary = response.ContentAsType <TaskGroupSummary>();
                }
                else
                {
                    return(RedirectToPage("/TaskGroup/TaskGroups"));
                }
            }
            else
            {
                return(RedirectToPage("/TaskGroup/TaskGroups"));
            }

            if (taskGroupSummary != null)
            {
                await GetFileLinks(accessToken);

                var response = await _apiHelper.MakeAPICallAsync(accessToken, HttpMethod.Get, APITypes.CLIENT, $"Client/GetClientSummary/{taskGroupSummary.ClientHeaderId}");

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    clientSummary = response.ContentAsType <ClientSummary>();
                }

                GanttDataModel = GanttHelper.GenerateGanttDataModel(taskGroupSummary);
            }
            else
            {
                GanttDataModel = new GanttDataModel()
                {
                    Data  = new GanttData[0],
                    Links = new GanttLink[0]
                };
            }

            var userList = await GetUsernames(accessToken);

            //Temporary fix for adding language code data to partial pages.
            taskGroupSummary.langQueryList = taskGroupSummarylangQueryList;
            taskGroupSummary.MainUserName  = userList.Users.Where(u => u.Id == taskGroupSummary.MainUserId).FirstOrDefault().FullName;

            foreach (var childTaskGroupSummary in taskGroupSummary.ChildTaskGroups)
            {
                childTaskGroupSummary.langQueryList = taskGroupSummarylangQueryList;
                childTaskGroupSummary.MainUserName  = userList.Users.Where(u => u.Id == childTaskGroupSummary.MainUserId).FirstOrDefault().FullName;

                foreach (var childTaskSummary in childTaskGroupSummary.ChildTasks)
                {
                    childTaskSummary.langQueryList = taskSummarylangQueryList;
                    childTaskSummary.MainUserName  = userList.Users.Where(u => u.Id == childTaskSummary.MainUserId).FirstOrDefault().FullName;
                }
            }

            foreach (var childTaskSummary in taskGroupSummary.ChildTasks)
            {
                childTaskSummary.langQueryList = taskGroupSummarylangQueryList;
                childTaskSummary.MainUserName  = userList.Users.Where(u => u.Id == childTaskSummary.MainUserId).FirstOrDefault().FullName;
            }

            GanttJSON = JsonSerializer.Serialize(GanttDataModel);

            SaveMessageModel = await _apiHelper.GenerateSaveMessageModel(accessToken);

            return(Page());
        }