private void UpdateInfoInDb(List <GanttChartItem> data, int sprintDay)
        {
            var query = (from t in dbGanttChart.AuxITGanttChart_Items
                         select t.bscmProjectsID).ToList();

            foreach (var item in data)
            {
                if (query.Contains(item.itemID))
                {
                    AuxITGanttChart_Items foundItem = dbGanttChart.AuxITGanttChart_Items.Find(item.itemID);
                    foundItem.OCLT           = item.rankingStatus;
                    foundItem.developer      = item.developer;
                    foundItem.plannedStartWW = item.plannedStartWorkWeek;
                    foundItem.plannedEndWW   = item.plannedEndWorkWeek;
                    foundItem.actualStartWW  = item.actualStartWorkWeek;
                    foundItem.actualEndWW    = item.actualEndWorkWeek;
                    foundItem.needDateWW     = item.deadlineWorkWeek;

                    foundItem.plannedStartDate = getSprintDateFromWorkWeek(item.plannedStartWorkWeek, sprintDay);
                    foundItem.plannedEndDate   = getSprintDateFromWorkWeek(item.plannedEndWorkWeek, sprintDay);
                    foundItem.actualStartDate  = getSprintDateFromWorkWeek(item.actualStartWorkWeek, sprintDay);
                    foundItem.actualEndDate    = getSprintDateFromWorkWeek(item.actualEndWorkWeek, sprintDay);
                    foundItem.needDateDate     = getSprintDateFromWorkWeek(item.deadlineWorkWeek, sprintDay);

                    foundItem.developerWorkload      = item.developerWorkload;
                    foundItem.numberOfHoursInASprint = item.numberOfHoursInSprint;
                }
                else
                {
                    AuxITGanttChart_Items temp = new AuxITGanttChart_Items();
                    temp.bscmProjectsID = item.itemID;
                    temp.OCLT           = item.rankingStatus;
                    temp.developer      = item.developer;
                    temp.plannedStartWW = item.plannedStartWorkWeek;
                    temp.plannedEndWW   = item.plannedEndWorkWeek;
                    temp.actualStartWW  = item.actualStartWorkWeek;
                    temp.actualEndWW    = item.actualEndWorkWeek;
                    temp.needDateWW     = item.deadlineWorkWeek;

                    temp.plannedStartDate = getSprintDateFromWorkWeek(item.plannedStartWorkWeek, sprintDay);
                    temp.plannedEndDate   = getSprintDateFromWorkWeek(item.plannedEndWorkWeek, sprintDay);
                    temp.actualStartDate  = getSprintDateFromWorkWeek(item.actualStartWorkWeek, sprintDay);
                    temp.actualEndDate    = getSprintDateFromWorkWeek(item.actualEndWorkWeek, sprintDay);
                    temp.needDateDate     = getSprintDateFromWorkWeek(item.deadlineWorkWeek, sprintDay);

                    temp.developerWorkload      = item.developerWorkload;
                    temp.numberOfHoursInASprint = item.numberOfHoursInSprint;

                    dbGanttChart.AuxITGanttChart_Items.Add(temp);
                }
            }
            dbGanttChart.SaveChanges();
        }
        public ActionResult GanttChart(int numOfSprintsBefore = 5, int numOfSprintsAfter = 26)
        {
            int numberOfHoursInASprint = 72; //default
            int numberOfSprintsBefore  = numOfSprintsBefore;
            int numberOfSprintsAfter   = numOfSprintsAfter;

            PopulateViewBagWorkWeekRange(numberOfSprintsBefore, numberOfSprintsAfter);

            //Query gantt chart items
            var query = (from t1 in db142.MSP_EpmProject_UserView
                         where programNames.Contains(t1.Program) && t1.State_of_Project == "Active"
                         select new GanttChartItem
            {
                itemUID = t1.ProjectUID.ToString(),
                itemID = t1.Project_ID,
                itemName = t1.ProjectTitle,
                PAC = t1.Program
            });

            var listOfGanttChartItem = query.ToList <GanttChartItem>();

            var queryIssuesRankings = (from t in dbPrioritization.IssuesRankings
                                       where t.overallRank != 0 && t.ITHR.StartsWith("a")
                                       select t).ToList();

            var queryGanttChartDetails = (from t in dbGanttChart.AuxITGanttChart_Items
                                          select t).ToList();

            for (int i = 0; i < listOfGanttChartItem.Count(); i++)
            {
                string itemID = listOfGanttChartItem[i].itemID;

                IssuesRanking         result           = queryIssuesRankings.Find(x => x.bscmProjectsID == itemID);
                AuxITGanttChart_Items resultGanttChart = queryGanttChartDetails.Find(x => x.bscmProjectsID == itemID);

                if (result != null)
                {
                    listOfGanttChartItem[i].overallRank   = result.overallRank;
                    listOfGanttChartItem[i].rankingStatus = result.overallRank.ToString();
                    listOfGanttChartItem[i].ITHR          = Int32.Parse(result.ITHR.Split('-')[1]);
                    if (resultGanttChart != null)
                    {
                        numberOfHoursInASprint = resultGanttChart.numberOfHoursInASprint;

                        listOfGanttChartItem[i].rankingStatus = resultGanttChart.OCLT;

                        listOfGanttChartItem[i].developer            = resultGanttChart.developer;
                        listOfGanttChartItem[i].plannedStartWorkWeek = resultGanttChart.plannedStartWW;
                        listOfGanttChartItem[i].plannedEndWorkWeek   = resultGanttChart.plannedEndWW;
                        listOfGanttChartItem[i].actualStartWorkWeek  = resultGanttChart.actualStartWW;
                        listOfGanttChartItem[i].actualEndWorkWeek    = resultGanttChart.actualEndWW;
                        listOfGanttChartItem[i].deadlineWorkWeek     = resultGanttChart.needDateWW;
                        listOfGanttChartItem[i].developerWorkload    = resultGanttChart.developerWorkload;
                    }
                }
                else
                {
                    listOfGanttChartItem.RemoveAt(i);
                    i--;
                }
            }

            listOfGanttChartItem.Sort();

            ViewBag.numberOfHoursInASprint = numberOfHoursInASprint;
            ViewBag.numberOfSprintsBefore  = numberOfSprintsBefore;
            ViewBag.numberOfSprintsAfter   = numberOfSprintsAfter;

            return(View(listOfGanttChartItem));
        }