public static IList<TaskItemGroup> GetTaskGroups() { IList<TaskItemGroup> retVal = new List<TaskItemGroup>(); SPWeb web; if (SPContext.Current != null) web = SPContext.Current.Web; else web = new SPSite("http://finweb.contoso.com/sites/PMM").OpenWeb(); var list = web.Lists.TryGetList(Constants.LIST_NAME_PROJECT_TASKS); if (list != null) { var dPathsField = list.Fields[Constants.FieldId_DrivingPath] as SPFieldMultiChoice; var dPaths = dPathsField.Choices; var chartTypesField = list.Fields[Constants.FieldId_ShowOn] as SPFieldMultiChoice; var chartTypes = chartTypesField.Choices; dPaths = dPathsField.Choices; foreach (string dPath in dPaths) { var q = new SPQuery(); q.Query += "<Where>" + "<Eq>" + "<FieldRef ID='" + dPathsField.Id + "' />" + "<Value Type='MultiChoice'>" + dPath + "</Value>" + "</Eq>" + //"<OrderBy>" + // "<FieldRef ID='" + startField.Id + "' Ascending='True' />" + //"</OrderBy>" + "</Where>"; int taskCount = -1; var taskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; string previousTitle = string.Empty; Dictionary<string, string> dictTitle = new Dictionary<string, string>(); int totalUnCompletedtaskCount = 0, totalCompletedTaskCount = 0; List<TaskItem> chartItems = new List<TaskItem>(); List<TaskItemGroup> completedTasks = new List<TaskItemGroup>(); SPListItemCollection collection = list.GetItems(q); int completedTaskCount = -1; DateTime? lastUpdate = GetLastUpdateDate(); TaskItemGroup completedTaskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; foreach (SPListItem item in collection) { if (item[Constants.FieldId_Deadline] != null) { if (!dictTitle.ContainsKey(dPath.Split(",".ToCharArray())[0])) { dictTitle.Add(dPath.Split(",".ToCharArray())[0], item[Constants.FieldId_Task].ToString()); } } if (item[Constants.FieldId_ShowOn] != null) { chartItems.Add(BuildTaskItem(dPath, item)); } if (item[Constants.FieldId_PercentComplete] != null && (Convert.ToInt32(item[Constants.FieldId_PercentComplete].ToString().Trim().Trim("%".ToCharArray()).Trim()) < 100)) { totalUnCompletedtaskCount++; taskCount++; if (taskCount == 10) { retVal.Add(taskItemGroup); taskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; taskItemGroup.Title = previousTitle; taskCount = 0; taskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item)); } else { taskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item)); } } else { if (!lastUpdate.HasValue || Convert.ToDateTime(item["ModifiedOn"].ToString()) == lastUpdate.Value) { totalCompletedTaskCount++; completedTaskCount++; if (completedTaskCount == 10) { completedTasks.Add(completedTaskItemGroup); completedTaskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; completedTaskCount = 0; completedTaskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item)); } else { completedTaskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item)); } } } } if (totalUnCompletedtaskCount % 10 != 0) { retVal.Add(taskItemGroup); } if (totalCompletedTaskCount % 10 != 0) { completedTasks.Add(completedTaskItemGroup); if (totalUnCompletedtaskCount == 0) { retVal.Add(taskItemGroup); } } if (taskItemGroup.TaskItems.Count > 0 || (completedTasks.Count > 0 && completedTasks[0].TaskItems != null && completedTasks[0].TaskItems.Count > 0)) { taskItemGroup.CompletedTaskgroups = completedTasks; taskItemGroup.ChartTaskItems = chartItems; taskItemGroup.Charts = new string[chartTypes.Count]; chartTypes.CopyTo(taskItemGroup.Charts, 0); taskItemGroup.Title = dictTitle.ContainsKey(dPath) ? dictTitle[dPath] : "Driving Path template"; } if (dPath != null && dictTitle.ContainsKey(dPath.Split(",".ToCharArray())[0])) { foreach (TaskItemGroup group in retVal) { if (group.DrivingPath == dPath) { group.Title = dictTitle[dPath.Split(",".ToCharArray())[0]]; } if (group.CompletedTaskgroups != null) { foreach (TaskItemGroup completedGroup in group.CompletedTaskgroups) { completedGroup.Title = dictTitle[dPath.Split(",".ToCharArray())[0]]; } } } } } } if (SPContext.Current == null) web.Dispose(); return retVal; }
private void CreateGridSlide(PresentationPart oPPart, int gridSlideIndex, int i, TaskItemGroup group) { Repository.Utility.WriteLog("CreateGridSlide started", System.Diagnostics.EventLogEntryType.Information); try { if (DPSlidePart == null) return; SlidePart gridSlidePart = oPPart.GetSlidePartsInOrder().ToList()[gridSlideIndex + i]; var dataTable = group.TaskItemsDataTable; var table = gridSlidePart.Slide.Descendants<DocumentFormat.OpenXml.Drawing.Table>().FirstOrDefault(); if (table != null && group.TaskItems != null && group.TaskItems.Count > 0) { TableUtilities.PopulateTable(table, group.TaskItems); } //else //{ // DocumentFormat.OpenXml.OpenXmlElement parent = table.Parent; // parent.ReplaceChild(new DocumentFormat.OpenXml.Presentation.Text("No Data Avialable"), table); // //table.Remove(); //} var titleShape = gridSlidePart.Slide.Descendants<DocumentFormat.OpenXml.Presentation.Shape>().ToList(); if (titleShape.Count > 0) { titleShape[0].TextBody = new DocumentFormat.OpenXml.Presentation.TextBody( new DocumentFormat.OpenXml.Drawing.BodyProperties(), new DocumentFormat.OpenXml.Drawing.ListStyle(), new DocumentFormat.OpenXml.Drawing.Paragraph( new DocumentFormat.OpenXml.Drawing.Run( new DocumentFormat.OpenXml.Drawing.RunProperties() { FontSize = 3600 }, new DocumentFormat.OpenXml.Drawing.Text { Text = group.Title }))); } } catch (Exception ex) { Repository.Utility.WriteLog(string.Format("CreateGridSlide had an error and the error message={0}", ex.Message), System.Diagnostics.EventLogEntryType.Information); } Repository.Utility.WriteLog("CreateGridSlide completed", System.Diagnostics.EventLogEntryType.Information); }
private void CreateCompletedSlides(TaskItemGroup group, int completedSlideIndex, PresentationPart oPPart) { Repository.Utility.WriteLog("CreateCompletedSlides started", System.Diagnostics.EventLogEntryType.Information); try { if (CPSlidePart == null) return; if (group.CompletedTaskgroups != null) { IList<TaskItemGroup> CompletedTasks = group.CompletedTaskgroups; if (CompletedTasks != null && CompletedTasks.Count() > 0) { foreach (TaskItemGroup completedTaskgroup in CompletedTasks) { SlidePart completedSlidePart = oPPart.GetSlidePartsInOrder().ToList()[completedSlideIndex]; DocumentFormat.OpenXml.Presentation.TextBody numberPart = (DocumentFormat.OpenXml.Presentation.TextBody)completedSlidePart.Slide.CommonSlideData.ShapeTree.Elements().ToList()[3].Elements().ToList()[2]; int bulletCount = numberPart.Elements<DocumentFormat.OpenXml.Drawing.Paragraph>().Count(); foreach (string task in completedTaskgroup.TaskItems.Select(t => t.Task)) { DocumentFormat.OpenXml.Drawing.Paragraph paragraph = (DocumentFormat.OpenXml.Drawing.Paragraph)numberPart.Elements().ToList()[3].Clone(); for (int i = paragraph.Elements().Count() - 1; i >=1; i--) { if (paragraph.ElementAt(i).GetType() == typeof(DocumentFormat.OpenXml.Drawing.Run)) { paragraph.ElementAt(i).Remove(); } } (paragraph.Elements().ToList()[0] as DocumentFormat.OpenXml.Drawing.Run).Text = new DocumentFormat.OpenXml.Drawing.Text(task); numberPart.Append(paragraph); } //var titleShape = completedSlidePart.Slide.Descendants<DocumentFormat.OpenXml.Presentation.Shape>().ToList(); //if (titleShape.Count > 0) //{ // titleShape[0].TextBody = new DocumentFormat.OpenXml.Presentation.TextBody( // new DocumentFormat.OpenXml.Drawing.BodyProperties(), // new DocumentFormat.OpenXml.Drawing.ListStyle(), // new DocumentFormat.OpenXml.Drawing.Paragraph( // new DocumentFormat.OpenXml.Drawing.Run( // new DocumentFormat.OpenXml.Drawing.RunProperties() { FontSize = 3600 }, // new DocumentFormat.OpenXml.Drawing.Text { Text = group.Title }))); //} DocumentFormat.OpenXml.Presentation.TextBody numPart = (DocumentFormat.OpenXml.Presentation.TextBody)completedSlidePart.Slide.CommonSlideData.ShapeTree.Elements().ToList()[3].Elements().ToList()[2]; for (int i = bulletCount - 2; i >= 0; i--) { ((DocumentFormat.OpenXml.Drawing.Paragraph)numPart.Elements().ToList()[3]).Remove(); } } } } } catch (Exception ex) { Repository.Utility.WriteLog(string.Format("CreateCompletedSlides had an error and the error message={0}", ex.Message), System.Diagnostics.EventLogEntryType.Information); } Repository.Utility.WriteLog("CreateCompletedSlides completed", System.Diagnostics.EventLogEntryType.Information); }
private void CreateChartSlides(TaskGroupData taskData, int lowestSLideIndex, ref int createdCount, PresentationPart oPPart) { Repository.Utility.WriteLog("CreateChartSlides started", System.Diagnostics.EventLogEntryType.Information); try { if (ChartSlidePart == null) return; if (taskData.ChartsData == null || taskData.ChartsData.Keys.Count == 0 || !taskData.ChartsData.Keys.Any(t=>t.StartsWith("Show On"))) { createdCount++; return; } if (taskData.ChartsData != null) { foreach (string key in taskData.ChartsData.Keys) { try { if (key.StartsWith("Show On")) { //Get all Tasks related to Driving path TaskItemGroup newGroup = new TaskItemGroup() { ChartTaskItems = taskData.ChartsData[key] }; var chartDataTable = newGroup.GetChartDataTable(key); #region Charts if (chartDataTable != null) { SlidePart chartSlidePart = oPPart.GetSlidePartsInOrder().ToList()[lowestSLideIndex + createdCount]; if (chartSlidePart.ChartParts.ToList().Count > 0) { createdCount++; var chartPart = chartSlidePart.ChartParts.ToList()[0]; foreach (IdPartPair part in chartPart.Parts) { var spreadsheet = chartPart.GetPartById(part.RelationshipId) as EmbeddedPackagePart; if (spreadsheet != null) { OpenSettings settings = new OpenSettings(); settings.AutoSave = true; using (var oSDoc = SpreadsheetDocument.Open(spreadsheet.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite), true,settings)) { var workSheetPart = oSDoc.WorkbookPart.GetPartsOfType<WorksheetPart>().FirstOrDefault(); var sheetData = workSheetPart.Worksheet.Elements<SheetData>().FirstOrDefault(); for (int i = sheetData.Elements().Count() - 1; i >= 2; i--) { sheetData.ElementAt(i).Remove(); } string reference = workSheetPart.TableDefinitionParts.ElementAt(0).Table.Reference.Value; string length = reference.Split(":".ToCharArray())[1].Replace("I",""); WorkbookUtilities.ReplicateRow(sheetData, 2, chartDataTable.Rows.Count - 1); WorkbookUtilities.LoadSheetData(sheetData, chartDataTable, 1, 0); workSheetPart.TableDefinitionParts.ElementAt(0).Table.Reference.Value = reference.Replace(length, (chartDataTable.Rows.Count + 1).ToString()); BarChartUtilities.LoadChartData(chartPart, chartDataTable); workSheetPart.TableDefinitionParts.ElementAt(0).Table.Save(); workSheetPart.Worksheet.Save(); } break; } } var titleShape = chartSlidePart.Slide.Descendants<DocumentFormat.OpenXml.Presentation.Shape>().ToList(); if (titleShape.Count > 0) { titleShape[0].TextBody = new DocumentFormat.OpenXml.Presentation.TextBody( new DocumentFormat.OpenXml.Drawing.BodyProperties(), new DocumentFormat.OpenXml.Drawing.ListStyle(), new DocumentFormat.OpenXml.Drawing.Paragraph( new DocumentFormat.OpenXml.Drawing.Run( new DocumentFormat.OpenXml.Drawing.RunProperties() { FontSize = 3600 }, new DocumentFormat.OpenXml.Drawing.Text { Text = key.Replace("Show On_", "") }))); } } #endregion } } } catch (Exception ex) { Repository.Utility.WriteLog(string.Format("CreateChartSlides had an error and the error message={0}", ex.Message), System.Diagnostics.EventLogEntryType.Information); continue; } } } } catch (Exception ex) { Repository.Utility.WriteLog(string.Format("CreateChartSlides had an error and the error message={0}", ex.Message), System.Diagnostics.EventLogEntryType.Information); } Repository.Utility.WriteLog("CreateChartSlides completed", System.Diagnostics.EventLogEntryType.Information); }
private static IList<TaskItemGroup> GetupComingTasksData(DataTable tasksDataTable, FiscalUnit month, CustomFieldDataSet dataSet) { if (month.From == DateTime.MinValue && month.To == DateTime.MaxValue) return new List<TaskItemGroup>(); FiscalUnit fiscalUnit = new FiscalUnit() { From = month.From, To = month.To.AddMonths(1) }; Repository.Utility.WriteLog("GetupComingTasksData started", System.Diagnostics.EventLogEntryType.Information); int count = -1; int upComingTaskCount = 0; IList<TaskItemGroup> retVal = new List<TaskItemGroup>(); TaskItemGroup taskData = new TaskItemGroup() { TaskItems = new List<TaskItem>() }; IList<TaskItem> items = new List<TaskItem>(); EnumerableRowCollection<DataRow> collection = tasksDataTable.AsEnumerable() .Where((t => t.Field<bool>("TASK_IS_SUMMARY") == false && t.Field<int>("TASK_PCT_COMP") < 100 && t.Field<DateTime?>("TASK_FINISH_DATE").HasValue && t.Field<DateTime?>("TASK_FINISH_DATE").Value.InCurrentFiscalMonth(fiscalUnit) )).OrderBy(t => t.Field<int>("TASK_ID")); foreach (DataRow item in collection) { count++; upComingTaskCount++; TaskItem taskItem = BuildTaskItem("", item, dataSet); if (count == 10) { retVal.Add(taskData); taskData = new TaskItemGroup { TaskItems = new List<TaskItem>() }; count = -1; taskData.TaskItems.Add(BuildTaskItem("", item, dataSet)); } else { taskData.TaskItems.Add(BuildTaskItem("", item, dataSet)); } } if (count % 10 != 0) { retVal.Add(taskData); } Repository.Utility.WriteLog("GetupComingTasksData completed successfully", System.Diagnostics.EventLogEntryType.Information); return retVal; }
public static TaskGroupData GetTaskGroups(string projectUID) { Repository.Utility.WriteLog("GetTaskGroups started", System.Diagnostics.EventLogEntryType.Information); IList<TaskItemGroup> retVal = new List<TaskItemGroup>(); CustomFieldDataSet customFieldDataSet = DataRepository.ReadCustomFields(); DataAccess dataAccess = new Repository.DataAccess(new Guid(projectUID)); DataSet dataset = dataAccess.ReadProject(null); ProjectDataSet ds = DataRepository.ReadProject(new Guid(projectUID)); DataTable tasksDataTable = dataset.Tables["Task"]; Dictionary<string, IList<TaskItem>> ChartsData = GetChartsData(tasksDataTable, customFieldDataSet); TaskGroupData taskData = new TaskGroupData(); DateTime? projectStatusDate = GetProjectCurrentDate(new Guid(projectUID), ds); FiscalUnit fiscalPeriod = DataRepository.GetFiscalMonth(projectStatusDate); taskData.FiscalPeriod = fiscalPeriod; IList<TaskItemGroup> LateTasksData = GetLateTasksData(tasksDataTable, fiscalPeriod, customFieldDataSet); IList<TaskItemGroup> UpComingTasksData = GetupComingTasksData(tasksDataTable, fiscalPeriod, customFieldDataSet); taskData.TaskItemGroups = retVal; taskData.ChartsData = ChartsData; taskData.LateTaskGroups = LateTasksData; taskData.UpComingTaskGroups = UpComingTasksData; taskData.SPDLSTartToBL = GetSPDLSTartToBLData(new Guid(projectUID), ds); taskData.SPDLFinishToBL = GetSPDLFinishToBLData(new Guid(projectUID), ds); taskData.BEIData = GetBEIData(new Guid(projectUID), ds); if (tasksDataTable != null) { var dPaths = tasksDataTable.AsEnumerable().Where(t => !string.IsNullOrEmpty(t.Field<string>("TASK_DRIVINGPATH_ID"))).Select(t => t.Field<string>("TASK_DRIVINGPATH_ID")).Distinct(); var chartTypes = tasksDataTable.AsEnumerable().Select(t => t.Field<string>("CUSTOMFIELD_DESC")).Distinct(); ; foreach (string dPath in dPaths) { int taskCount = -1; var taskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; string previousTitle = string.Empty; Dictionary<string, string> dictTitle = new Dictionary<string, string>(); int totalUnCompletedtaskCount = 0, totalCompletedTaskCount = 0; List<TaskItem> chartItems = new List<TaskItem>(); List<TaskItemGroup> completedTasks = new List<TaskItemGroup>(); EnumerableRowCollection<DataRow> collection = tasksDataTable.AsEnumerable().Where(t => t.Field<string>("TASK_DRIVINGPATH_ID") != null && t.Field<string>("TASK_DRIVINGPATH_ID").Split(",".ToCharArray()).Contains(dPath)); int completedTaskCount = -1; //DateTime? lastUpdate = GetLastUpdateDate(); TaskItemGroup completedTaskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; foreach (DataRow item in collection) { if (item["TASK_DEADLINE"] != System.DBNull.Value && !string.IsNullOrEmpty(item["TASK_DEADLINE"].ToString())) { if (!dictTitle.ContainsKey(dPath.Split(",".ToCharArray())[0])) { dictTitle.Add(dPath.Split(",".ToCharArray())[0], item["TASK_NAME"].ToString()); } } if (item["CUSTOMFIELD_DESC"] != null) { chartItems.Add(BuildTaskItem(dPath, item, customFieldDataSet)); } if (!string.IsNullOrEmpty(item["TASK_ACT_FINISH"].ToString()) && (Convert.ToDateTime(item["TASK_ACT_FINISH"].ToString())).InCurrentFiscalMonth(fiscalPeriod)) { totalCompletedTaskCount++; completedTaskCount++; if (completedTaskCount == 10) { completedTasks.Add(completedTaskItemGroup); completedTaskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; completedTaskCount = 0; completedTaskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item, customFieldDataSet)); } else { completedTaskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item, customFieldDataSet)); } } else { if (item["TASK_PCT_COMP"] != null && (Convert.ToInt32(item["TASK_PCT_COMP"].ToString().Trim().Trim("%".ToCharArray()).Trim()) < 100)) { totalUnCompletedtaskCount++; taskCount++; if (taskCount == 10) { retVal.Add(taskItemGroup); taskItemGroup = new TaskItemGroup { DrivingPath = dPath, TaskItems = new List<TaskItem>() }; taskItemGroup.Title = previousTitle; taskCount = 0; taskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item, customFieldDataSet)); } else { taskItemGroup.TaskItems.Add(BuildTaskItem(dPath, item, customFieldDataSet)); } } } } if (totalUnCompletedtaskCount % 10 != 0) { retVal.Add(taskItemGroup); } if (totalCompletedTaskCount % 10 != 0) { completedTasks.Add(completedTaskItemGroup); if (totalUnCompletedtaskCount == 0) { retVal.Add(taskItemGroup); } } if (taskItemGroup.TaskItems.Count > 0 || (completedTasks.Count > 0 && completedTasks[0].TaskItems != null && completedTasks[0].TaskItems.Count > 0)) { taskItemGroup.CompletedTaskgroups = completedTasks; taskItemGroup.ChartTaskItems = chartItems; taskItemGroup.Charts = new string[chartTypes.Count()]; chartTypes.ToList().CopyTo(taskItemGroup.Charts, 0); taskItemGroup.Title = dictTitle.ContainsKey(dPath) ? dictTitle[dPath] : "Driving Path template"; } if (dPath != null && dictTitle.ContainsKey(dPath.Split(",".ToCharArray())[0])) { foreach (TaskItemGroup group in retVal) { if (group.DrivingPath == dPath) { group.Title = dictTitle[dPath.Split(",".ToCharArray())[0]]; } if (group.CompletedTaskgroups != null) { foreach (TaskItemGroup completedGroup in group.CompletedTaskgroups) { completedGroup.Title = dictTitle[dPath.Split(",".ToCharArray())[0]]; } } } } } } Repository.Utility.WriteLog("GetTaskGroups completed successfully", System.Diagnostics.EventLogEntryType.Information); return taskData; }