private static void ConfigureMyWorkViews() { SPWeb configWeb = Utils.GetConfigWeb(); List <MyWorkGridView> myWorkGridViews = MyWork.GetGlobalViews(configWeb).ToList(); MyWorkGridView defaultView = myWorkGridViews.FirstOrDefault(view => view.Id.Equals("dv")); if (defaultView != null) { if (!defaultView.Cols.Split(',').Any(col => col.Split(':')[0].ToLower().Equals("workingon"))) { defaultView.Cols = defaultView.Cols + ",WorkingOn:95"; MyWork.SaveGlobalViews(defaultView, configWeb); } } myWorkGridViews = MyWork.GetGlobalViews(configWeb).ToList(); bool workingOnViewExists = myWorkGridViews.Any(view => view.Name.Trim().ToLower().Equals("working on it")); if (!workingOnViewExists) { MyWorkGridView workingOnView = myWorkGridViews.FirstOrDefault(view => view.Id.Equals("dv")); if (workingOnView != null) { workingOnView.Name = "Working On It"; workingOnView.Id = workingOnView.Name.Md5().ToLower(); workingOnView.Filters = "0|WorkingOn:1:11"; workingOnView.Default = false; MyWork.SaveGlobalViews(workingOnView, configWeb); } } }
/// <summary> /// Configures the default columns. /// </summary> /// <param name="spList">The sp list.</param> /// <param name="datePattern">The date pattern.</param> /// <param name="currencyFormat">The currency format.</param> /// <param name="spWeb">The sp web.</param> /// <param name="workDayStartHour">The work day start hour.</param> /// <param name="workDayEndHour">The work day end hour.</param> /// <param name="ganttExclude">The gantt exclude.</param> /// <param name="layoutXml">The layout XML.</param> /// <param name="defaultColumns">The default columns.</param> private static void ConfigureDefaultColumns(SPList spList, string datePattern, string currencyFormat, SPWeb spWeb, short workDayStartHour, short workDayEndHour, string ganttExclude, ref XDocument layoutXml, ref List <string> defaultColumns) { try { foreach (string col in new[] { "LeftCols", "Cols", "RightCols" }) { XElement colElement = layoutXml.Root.Element(col); if (colElement == null) { continue; } foreach (XElement cElement in colElement.Elements("C")) { XAttribute nameAttribute = cElement.Attribute("Name"); if (nameAttribute == null) { continue; } string colName = nameAttribute.Value; if (defaultColumns.Contains(colName)) { continue; } defaultColumns.Add(colName); if (!spList.Fields.ContainsFieldWithInternalName(colName)) { continue; } SPField spField = spList.Fields.GetFieldByInternalName(colName); string relatedGridType = Utils.GetRelatedGridType(spField); string format = Utils.GetFormat(spField); format = MyWork.GetRelatedGridFormat(relatedGridType, format, spField, spWeb); if (spField.Type == SPFieldType.Number) { if (((SPFieldNumber)spField).ShowAsPercentage) { format = ",#0%"; } } if (spField.Type == SPFieldType.Currency) { cElement.Add(new XAttribute("Format", currencyFormat)); } else if (relatedGridType.Equals("Date")) { cElement.Add(new XAttribute("Format", datePattern)); } else if (!string.IsNullOrEmpty(format)) { cElement.Add(new XAttribute("Format", format)); } } if (col.Equals("RightCols")) { colElement.Add(new XElement("C", new XAttribute("Name", "G"), new XAttribute("GanttExclude", ganttExclude), new XAttribute("GanttNewStart", string.Format("1/1/2000 {0}:00", workDayStartHour)), new XAttribute("GanttNewEnd", string.Format("1/1/2000 {0}:00", workDayEndHour)))); } } } catch (Exception exception) { throw new APIException((int)Errors.ConfigureDefaultColumns, exception.GetBaseException().Message); } }
// Private Methods (5) /// <summary> /// Configures the columns. /// </summary> /// <param name="spWeb">The sp web.</param> /// <param name="currencyFormat">The currency format.</param> /// <param name="headerElement">The header element.</param> /// <param name="colsElement">The cols element.</param> /// <param name="datePattern">The date pattern.</param> /// <param name="defaultColumns">The default columns.</param> /// <param name="fields">The fields.</param> /// <param name="spList">The sp list.</param> private static void ConfigureColumns(SPWeb spWeb, string currencyFormat, ref XElement headerElement, ref XElement colsElement, string datePattern, List <string> defaultColumns, IEnumerable <string> fields, SPList spList) { try { foreach (string field in fields) { if (defaultColumns.Contains(field)) { continue; } if (!spList.Fields.ContainsFieldWithInternalName(field)) { continue; } SPField spField = spList.Fields.GetFieldByInternalName(field); if (spField.InternalName.Equals("Title")) { continue; } string relatedGridType = Utils.GetRelatedGridType(spField); string format = Utils.GetFormat(spField); format = MyWork.GetRelatedGridFormat(relatedGridType, format, spField, spWeb); var cElement = new XElement("C"); string gridSafeFieldName = Utils.ToGridSafeFieldName(spField.InternalName); switch (spField.Type) { case SPFieldType.User: case SPFieldType.Lookup: gridSafeFieldName += "Text"; break; case SPFieldType.Choice: relatedGridType = "Html"; break; } if (defaultColumns.Contains(gridSafeFieldName)) { continue; } cElement.Add(new XAttribute("Name", gridSafeFieldName)); cElement.Add(new XAttribute("Type", relatedGridType)); if (relatedGridType.Equals("Icon")) { cElement.Add(new XAttribute("IconAlign", "Center")); } if (spField.Type == SPFieldType.Number) { if (((SPFieldNumber)spField).ShowAsPercentage) { format = ",#0%"; } } if (spField.Type == SPFieldType.Currency) { cElement.Add(new XAttribute("Format", currencyFormat)); } else if (relatedGridType.Equals("Date")) { cElement.Add(new XAttribute("Format", datePattern)); } else if (!string.IsNullOrEmpty(format)) { cElement.Add(new XAttribute("Format", format)); } cElement.Add(new XAttribute("Visible", 0)); colsElement.Add(cElement); headerElement.Add(new XAttribute(gridSafeFieldName, spField.Title)); } } catch (Exception exception) { throw new APIException((int)Errors.ConfigureColumns, exception.GetBaseException().Message); } }
// Protected Methods (1) /// <summary> /// Sends the tool part content to the specified HtmlTextWriter object, which writes the content to be rendered on the client. /// </summary> /// <param name="output">The HtmlTextWriter object that receives the tool part content.</param> protected override void RenderToolPart(HtmlTextWriter output) { var myWorkWebPart = (MyWorkWebPart)ParentToolPane.SelectedWebPart; string myWorkWebPartHtmlCode = Resources.MyWorkToolPart.Replace("_ID__", UniqueID.Md5()); #region Get Settings string selectedLists = string.Empty; if (myWorkWebPart.SelectedLists != null) { IOrderedEnumerable <string> selLists = (myWorkWebPart.SelectedLists.Where( selectedList => !string.IsNullOrEmpty(selectedList)) .Select( selectedList => string.Format(@"'{0}'", selectedList))).ToList() .OrderBy( l => l); selectedLists = string.Join(",", selLists.ToArray()); } string selectedFields = string.Empty; if (myWorkWebPart.SelectedFields != null) { IOrderedEnumerable <string> selFields = (myWorkWebPart.SelectedFields.Where( selectedField => !string.IsNullOrEmpty(selectedField)) .Select( selectedField => string.Format( @"{{InternalName:'{0}',PrettyName:'{1}'}}", selectedField, selectedField.ToPrettierName()))).ToList(). OrderBy( f => f); selectedFields = string.Join(",", selFields.ToArray()); } List <myworksettings.MWList> myWorkLists = myworksettings.GetMyWorkListsFromDb(_web, MyWork.GetArchivedWebs( _web.Site.ID)); var includedMWLists = new List <string>(); List <myworksettings.MWList> excludedMWLists = myWorkLists.ToList(); if (myWorkWebPart.MyWorkSelectedLists.Count() > 0) { foreach ( myworksettings.MWList myWorkList in myWorkLists.Where(myWorkList => myWorkWebPart.MyWorkSelectedLists.Contains(myWorkList.Name))) { includedMWLists.Add(string.Format(@"{{Id:'{0}',Name:'{1}'}}", myWorkList.Id, myWorkList.Name)); excludedMWLists.Remove(myWorkList); } } else { includedMWLists = excludedMWLists.Select(excludedMWList => string.Format(@"{{Id:'{0}',Name:'{1}'}}", excludedMWList.Id, excludedMWList.Name)).ToList(); excludedMWLists = new List <myworksettings.MWList>(); } string includedMyWorkLists = string.Join(",", includedMWLists.ToArray()); IEnumerable <string> excludedLists = excludedMWLists.Select( excludedMWList => string.Format(@"{{Id:'{0}',Name:'{1}'}}", excludedMWList.Id, SPHttpUtility.HtmlEncode(excludedMWList.Name))); string excludedMyWorkLists = string.Join(",", excludedLists.ToArray()); string crossSiteUrls = string.Empty; if (myWorkWebPart.CrossSiteUrls != null) { IOrderedEnumerable <string> crossSites = myWorkWebPart.CrossSiteUrls.Where( crossSiteUrl => !string.IsNullOrEmpty(crossSiteUrl)) .Select( crossSiteUrl => string.Format(@"'{0}'", crossSiteUrl)) .OrderBy(s => s); crossSiteUrls = string.Join(",", crossSites.ToArray()); } var defaultGlobalViews = new List <string>(); bool defaultViewFound = false; List <MyWorkGridView> myWorkGridViews = MyWork.GetGlobalViews(Utils.GetConfigWeb()).OrderBy(v => v.Name).ToList(); foreach (MyWorkGridView myWorkGridView in myWorkGridViews) { bool defaultView = myWorkWebPart.DefaultGlobalView.Equals(myWorkGridView.Id); if (defaultView) { defaultViewFound = true; } defaultGlobalViews.Add(string.Format(@"{{Id:'{0}',Name:'{1}',Default:{2}}}", myWorkGridView.Id, myWorkGridView.Name, defaultView.Lc())); } defaultGlobalViews.Insert(0, string.Format(@"{{Id:'',Name:'Do Not Set View',Default:{0}}}", (!defaultViewFound).Lc())); string objDefaultGlobalViews = string.Join(",", defaultGlobalViews.ToArray()); bool agoFilterEnabled = false; int agoFilterDays = 0; bool afterFilterEnabled = false; int afterFilterDays = 0; bool indicatorActive = true; int indicatorDays = 2; if (!string.IsNullOrEmpty(myWorkWebPart.DueDayFilter)) { string[] filters = myWorkWebPart.DueDayFilter.Split('|'); bool.TryParse(filters[0], out agoFilterEnabled); int.TryParse(filters[1], out agoFilterDays); bool.TryParse(filters[2], out afterFilterEnabled); int.TryParse(filters[3], out afterFilterDays); } if (!string.IsNullOrEmpty(myWorkWebPart.NewItemIndicator)) { string[] settings = myWorkWebPart.NewItemIndicator.Split('|'); bool.TryParse(settings[0], out indicatorActive); int.TryParse(settings[1], out indicatorDays); } string myWorkObjString = string.Format( @"useCentralizedSettings:{0}, selectedLists:[{1}], selectedFields:[{2}], crossSiteUrls:[{3}], performanceMode:{4}, hideNewButton:{5}, allowEditToggle:{6}, defaultToEditMode:{7}, defaultGlobalViews:[{8}], includedMyWorkLists:[{9}], excludedMyWorkLists:[{10}], daysAgoEnabled:{11}, daysAfterEnabled:{12}, newItemIndicatorEnabled:{13}, daysAgo:'{14}', daysAfter:'{15}', newItemIndicator:'{16}', showToolbar:{17}", myWorkWebPart.UseCentralizedSettings.Lc(), selectedLists, selectedFields, crossSiteUrls, myWorkWebPart.PerformanceMode.Lc(), myWorkWebPart.HideNewButton.Lc(), myWorkWebPart.AllowEditToggle.Lc(), myWorkWebPart.DefaultToEditMode.Lc(), objDefaultGlobalViews, includedMyWorkLists, excludedMyWorkLists, agoFilterEnabled.Lc(), afterFilterEnabled.Lc(), indicatorActive.Lc(), agoFilterDays, afterFilterDays, indicatorDays, myWorkWebPart.ShowToolbar.Lc()); myWorkWebPartHtmlCode = myWorkWebPartHtmlCode.Replace("objMyWork__VAL__", myWorkObjString); #endregion #region Get All Lists and Fields var listsAndFields = new Dictionary <string, List <string> >(); foreach (SPList list in _web.Lists) { try { listsAndFields.Add(list.Title, (list.Fields.Cast <SPField>() .Where(spField => !spField.Hidden && spField.Reorderable) .Select(spField => spField.InternalName)).ToList()); } catch { } } string allListsAndFieldsString = string.Format(@"{0}", string.Join(",", listsAndFields.Select(listAndFields => string.Format(@"{{List:'{0}',Fields:[{1}]}}", listAndFields.Key, string.Join(",", listAndFields.Value. Select( field => string .Format ( @"{{InternalName:'{0}',PrettyName:'{1}'}}", field, field . ToPrettierName ())) . ToArray()))) .ToArray())); myWorkWebPartHtmlCode = myWorkWebPartHtmlCode.Replace("allListsAndFields__VAL__", allListsAndFieldsString); #endregion #region Get Field Lists var fieldLists = new Dictionary <string, List <string> >(); foreach (var listAndFields in listsAndFields) { foreach (string field in listAndFields.Value) { if (!fieldLists.ContainsKey(field)) { fieldLists.Add(field, new List <string>()); } fieldLists[field].Add(listAndFields.Key); } } List <string> fields = fieldLists.Select(fieldList => string.Format(@"{0}:[{1}]", fieldList.Key, string.Join(",", fieldList.Value.Select( list => string.Format(@"'{0}'", list)). ToArray()))) .ToList(); string fieldListsString = string.Join(",", fields.ToArray()); myWorkWebPartHtmlCode = myWorkWebPartHtmlCode.Replace("fieldLists__VAL__", fieldListsString); string listWebsString = string.Join(",", (from myWorkList in myWorkLists let webs = myWorkList.Webs.Select(web => string.Format(@"'{0}'", web)) select string.Format(@"{0}:[{1}]", myWorkList.Id, string.Join(",", webs.ToArray()))).ToArray()); myWorkWebPartHtmlCode = myWorkWebPartHtmlCode.Replace("listWebs__VAL__", listWebsString); #endregion output.Write(myWorkWebPartHtmlCode); }
async Task ExecuteLoadItemsCommand() { if (IsBusy) { return; } IsBusy = true; try { Common.Instance.CreateTable <MyWorkItem>(); Projects.Clear(); bool refresh = Common.RefreshProjectsList; if (LoadLocalContent && !refresh) { //getting from local storage SQLiteConnection connection = Common.Instance.InitializeDatabase(); Common.Instance.CreateTable <MyWorkItem>(); List <MyWorkItem> userWork = Common.Instance.GetUserWork().Where(x => x.WorkspaceId == Common.CurrentWorkspace.Id && x.ObjectType == "Project").OrderByDescending(x => x.IsActive).ToList(); if (userWork == null || userWork.Count == 0) { LoadLocalContent = false; } else { var orderedUserWork = GroupProjectsByStatus(userWork); foreach (var item in orderedUserWork) { Projects.Add(item); } } } if (!LoadLocalContent || refresh) { //getting new data //Clear local storage var listWork = Common.Instance.GetUserWork().Where(x => x.WorkspaceId == Common.CurrentWorkspace.Id && x.ObjectType == "Project"); if (listWork != null && listWork.ToList().Count > 0) { foreach (var item in listWork) { Common.Instance._sqlconnection.Delete(item); } } MyWork myItems = await UsersService.GetMyWorkAsync(Common.CurrentWorkspace.UserID); //MyWork myItems = await UsersService.GetMyProjectsAsync(Common.CurrentWorkspace.UserID); if (myItems.Projects != null) { List <MyWorkItem> MyProjects = new List <MyWorkItem>(); foreach (var item in myItems.Projects) { try { if (Common.Filter.CompanyId != null && Common.Filter.CompanyId.HasValue) { if (item.Companies != null && item.Companies.Count > 0) { if (!item.Companies.Any(x => x.Id == Common.Filter.CompanyId)) { continue; } } else { continue; } } ProjectInsight.Models.Projects.Project project = (ProjectInsight.Models.Projects.Project)item; MyWorkItem newItem = new MyWorkItem(); newItem.Id = project.Id.Value; newItem.Title = project.ItemNumberFullAndNameDisplayPreference; // project.ItemNumberFull + " - " + project.Name; bool endDateIsPast = false; //string displayDate = string.Empty; string startDate = string.Empty; string endDate = string.Empty; if (project.StartDateTimeUTC.HasValue && project.EndDateTimeUTC.HasValue) { if (project.StartDateTimeUTC.Value.Date == project.EndDateTimeUTC.Value.Date) { startDate = string.Empty; endDate = project.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } else { startDate = project.StartDateTimeUTC.Value.Date.ToString("M/d/yy") + " - "; endDate = project.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } if (project.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } else { if (project.StartDateTimeUTC.HasValue) { startDate = project.StartDateTimeUTC.Value.Date.ToString("M/d/yy"); } if (project.EndDateTimeUTC.HasValue) { endDate = project.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); if (project.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } } //newItem.Line2a = displayDate; newItem.Line2s = startDate; newItem.Line2e = endDate; newItem.Line2Color = endDateIsPast ? ConvertColorToHex((Color)Application.Current.Resources["RedTextColor"]) : ConvertColorToHex((Color)Application.Current.Resources["BlackTextColor"]); newItem.Line3 = project.ProjectStatus != null ? project.ProjectStatus.Name : ""; newItem.Line4 = project.PrimaryProjectManager != null ? project.PrimaryProjectManager.FirstName + " " + project.PrimaryProjectManager.LastName : ""; newItem.Icon = "item_project.png"; newItem.ItemType = ItemType.Projects; newItem.Url = item.UrlFull; newItem.WorkspaceId = Common.CurrentWorkspace.Id; newItem.ProjectId = Guid.Empty; newItem.ObjectType = project.Type; newItem.isItem = true; //string color = ExtensionMethods.GetHexString((Color)Application.Current.Resources["BlackTextColor"]); newItem.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["BlackTextColor"]); // Remarks: // Possible Values: 0 - Active 1 - Archive 2 - Planning 3 - Template 4 - Project // Baseline 5 - To Be Deleted 6 - Change Order //newItem.ProjectState = project.ProjectState ?? 0; newItem.IsActive = project.ProjectStatus != null ? project.ProjectStatus.IsActive.Value : false; var userWork = Common.Instance.GetUserWork().Where(x => x.WorkspaceId == Common.CurrentWorkspace.Id && x.ProjectId == project.Id); if (userWork != null && userWork.Count() > 0) { newItem.TasksCount = userWork.Count(); } MyProjects.Add(newItem); } catch (Exception ex) { } } var orderedUserWork = GroupProjectsByStatus(MyProjects.OrderByDescending(x => x.IsActive).ToList()); foreach (var item in orderedUserWork) { Projects.Add(item); Common.Instance._sqlconnection.Insert(item); } } } if (Projects == null || Projects.Count == 0) { IsProjectsEmpty = true; } else { IsProjectsEmpty = false; } Common.Instance.bottomNavigationViewModel.NumberProjectItems = (Projects == null ? 0 : Projects.Where(x => x.isItem).Count()); } catch (Exception ex) { Debug.WriteLine(ex); } finally { IsBusy = false; } }
async Task ExecuteLoadItemsCommand(Guid?parentId, String ObjectType) { if (IsBusy) { return; } IsBusy = true; bool isFilteredList = true; if ((parentId == null || parentId == Guid.Empty) && ObjectType == null) { isFilteredList = false; } try { Common.Instance.CreateTable <MyWorkItem>(); Items.Clear(); bool refresh = Common.RefreshWorkList; if (LoadLocalContent && !refresh) { //getting from local storage SQLiteConnection connection = Common.Instance.InitializeDatabase(); Common.Instance.CreateTable <MyWorkItem>(); var userWork = Common.Instance.GetUserWork().Where(x => x.WorkspaceId == Common.CurrentWorkspace.Id && x.ObjectType != "Project"); if (userWork == null || userWork.Count() == 0) { LoadLocalContent = false; } else { if (isFilteredList) { var filteredList = userWork.Where(x => (x.ObjectType == ObjectType || ObjectType == "All") && x.ProjectId == parentId); foreach (var item in filteredList) { Items.Add(item); } } else { foreach (var item in userWork) { Items.Add(item); } } } } if (!LoadLocalContent || refresh) { //getting new data MyWork myItems = await UsersService.GetMyWorkAsync(Common.CurrentWorkspace.UserID); Common.Instance.bottomNavigationViewModel.NumberProjectItems = (myItems.Projects == null || Common.Filter.CompanyId != null ? 0 : myItems.Projects.Count()); List <ApiModelBase> items; items = myItems.ItemsInOrder; if (items != null) { foreach (var item in items) { try { if (isFilteredList) { if (!(item.Type == ObjectType || ObjectType == "All")) { continue; } } if (item.Type == "Task") { MyWorkItem newItem = new MyWorkItem(); ProjectInsight.Models.Tasks.Task task = (ProjectInsight.Models.Tasks.Task)item; if (isFilteredList) { if (task.Project_Id == null || task.Project_Id.Value != parentId) { continue; } } if (Common.Filter.CompanyId != null && Common.Filter.CompanyId.HasValue) { if (task.Project.Companies != null && task.Project.Companies.Count > 0) { if (!task.Project.Companies.Any(x => x.Id == Common.Filter.CompanyId)) { continue; } } else { continue; } } newItem.Id = task.Id.Value; newItem.Title = task.Name; bool endDateIsPast = false; //string displayDate = string.Empty; string startDate = string.Empty; string endDate = string.Empty; if (task.StartDateTimeUTC.HasValue && task.EndDateTimeUTC.HasValue) { if (task.StartDateTimeUTC.Value.Date == task.EndDateTimeUTC.Value.Date) { startDate = string.Empty; endDate = task.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } else { startDate = task.StartDateTimeUTC.Value.Date.ToString("M/d/yy") + " - "; endDate = task.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } if (task.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } else { if (task.StartDateTimeUTC.HasValue) { startDate = task.StartDateTimeUTC.Value.Date.ToString("M/d/yy") + " - "; } if (task.EndDateTimeUTC.HasValue) { endDate = task.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); if (task.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } } //newItem.Line2a = displayDate; newItem.Line2s = startDate; newItem.Line2e = endDate; newItem.Line2Color = endDateIsPast ? ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["RedTextColor"]) : ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["BlackTextColor"]); if (task.Project != null) { newItem.Line3 = task.Project.ItemNumberFullAndNameDisplayPreference; } //newItem.Line3 = task.ItemNumberFull + " - " + task.Project.Name; newItem.Icon = "item_task.png"; newItem.ItemType = ItemType.Task; newItem.WorkspaceId = Common.CurrentWorkspace.Id; newItem.ProjectId = task.Project_Id != null ? task.Project_Id.Value : Guid.Empty; newItem.ObjectType = task.Type; newItem.TitleColor = "#000000"; Items.Add(newItem); } else if (item.Type == "Issue") { MyWorkItem newItem = new MyWorkItem(); ProjectInsight.Models.Issues.Issue issue = (ProjectInsight.Models.Issues.Issue)item; if (issue.ProjectAffiliation != null) { } if (isFilteredList) { if (issue.ProjectAffiliation_Id == null || issue.ProjectAffiliation_Id.Value != parentId) { continue; } } if (Common.Filter.CompanyId != null && Common.Filter.CompanyId.HasValue) { if (issue.ProjectAffiliation.Companies != null && issue.ProjectAffiliation.Companies.Count > 0) { if (!issue.ProjectAffiliation.Companies.Any(x => x.Id == Common.Filter.CompanyId)) { continue; } } else { continue; } } newItem.Id = issue.Id.Value; newItem.Title = issue.Name; bool endDateIsPast = false; //string displayDate = string.Empty; string startDate = string.Empty; string endDate = string.Empty; if (issue.StartDateTimeUTC.HasValue && issue.EndDateTimeUTC.HasValue) { if (issue.StartDateTimeUTC.Value.Date == issue.EndDateTimeUTC.Value.Date) { startDate = string.Empty; endDate = issue.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } else { startDate = issue.StartDateTimeUTC.Value.Date.ToString("M/d/yy") + " - "; endDate = issue.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } if (issue.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } else { if (issue.StartDateTimeUTC.HasValue) { startDate = issue.StartDateTimeUTC.Value.Date.ToString("M/d/yy"); } if (issue.EndDateTimeUTC.HasValue) { endDate = issue.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); if (issue.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } } //newItem.Line2a = displayDate; newItem.Line2s = startDate; //newItem.Line2e = endDate; newItem.Line2Color = endDateIsPast ? ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["RedTextColor"]) : ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["BlackTextColor"]); string priority = issue.IssuePriority != null ? issue.IssuePriority.Name : ""; string status = issue.IssueStatusType != null ? issue.IssueStatusType.Name : ""; string separator = " - "; if (String.IsNullOrEmpty(priority)) { separator = ""; } newItem.Line2e = String.Format("{0}{1}{2}", endDate, separator, priority); //newItem.Line3 = String.Format("{0}{1}{2}", prority, separator, status); newItem.Line3 = status; //newItem.Line4 = issue.ItemNumberFull + " - " + issue.ProjectAffiliation.Name; if (issue.ProjectAffiliation != null) { newItem.Line4 = issue.ProjectAffiliation.ItemNumberFullAndNameDisplayPreference; } newItem.Icon = "item_issue.png"; newItem.ItemType = ItemType.Issue; newItem.WorkspaceId = Common.CurrentWorkspace.Id; newItem.ProjectId = issue.ProjectAffiliation_Id != null ? issue.ProjectAffiliation_Id.Value : Guid.Empty; newItem.ObjectType = issue.Type; newItem.TitleColor = "#000000"; Items.Add(newItem); } else if (item.Type == "ToDo") { MyWorkItem newItem = new MyWorkItem(); ProjectInsight.Models.ToDos.ToDo toDo = (ProjectInsight.Models.ToDos.ToDo)item; if (isFilteredList) { if (toDo.ProjectAffiliation_Id == null || toDo.ProjectAffiliation_Id.Value != parentId) { continue; } } if (Common.Filter.CompanyId != null && Common.Filter.CompanyId.HasValue) { if (toDo.ProjectAffiliation.Companies != null && toDo.ProjectAffiliation.Companies.Count > 0) { if (!toDo.ProjectAffiliation.Companies.Any(x => x.Id == Common.Filter.CompanyId)) { continue; } } else { continue; } } newItem.Id = toDo.Id.Value; newItem.Title = toDo.Name; bool endDateIsPast = false; //string displayDate = string.Empty; string startDate = string.Empty; string endDate = string.Empty; if (toDo.StartDateTimeUTC.HasValue && toDo.EndDateTimeUTC.HasValue) { if (toDo.StartDateTimeUTC.Value.Date == toDo.EndDateTimeUTC.Value.Date) { startDate = string.Empty; endDate = toDo.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } else { startDate = toDo.StartDateTimeUTC.Value.Date.ToString("M/d/yy") + " - "; endDate = toDo.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); } if (toDo.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } else { if (toDo.StartDateTimeUTC.HasValue) { startDate = toDo.StartDateTimeUTC.Value.Date.ToString("M/d/yy"); } if (toDo.EndDateTimeUTC.HasValue) { endDate = toDo.EndDateTimeUTC.Value.Date.ToString("M/d/yy"); if (toDo.EndDateTimeUTC.Value.Date < DateTime.Now.Date) { endDateIsPast = true; } } } //newItem.Line2a = displayDate; newItem.Line2s = startDate; newItem.Line2e = endDate; newItem.Line2Color = endDateIsPast ? ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["RedTextColor"]) : ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["BlackTextColor"]); //newItem.Line3 = toDo.ItemNumberFull + " - " + toDo.ProjectAffiliation.Name; if (toDo.ProjectAffiliation != null) { newItem.Line3 = toDo.ProjectAffiliation != null ? toDo.ProjectAffiliation.ItemNumberFullAndNameDisplayPreference : String.Empty; } newItem.Icon = "item_todo.png"; newItem.ItemType = ItemType.Todo; newItem.WorkspaceId = Common.CurrentWorkspace.Id; newItem.ProjectId = toDo.ProjectAffiliation_Id != null ? toDo.ProjectAffiliation_Id.Value : Guid.Empty; newItem.ObjectType = toDo.Type; newItem.TitleColor = "#000000"; Items.Add(newItem); } else if (item.Type == "ApprovalRequest") { if (isFilteredList) { continue; } if (Common.Filter.CompanyId != null && Common.Filter.CompanyId.HasValue) { continue; } MyWorkItem newItem = new MyWorkItem(); ProjectInsight.Models.ApprovalRequests.ApprovalRequest approval = (ProjectInsight.Models.ApprovalRequests.ApprovalRequest)item; newItem.Id = approval.Id.Value; newItem.Title = approval.Name; //string Approvers = string.Empty; //if (approval.ApprovalRequestApprovals != null && approval.ApprovalRequestApprovals.Count > 0) //{ // if (approval.ApprovalRequestApprovals.Count > 1) // Approvers = "Approvers: "; // else // Approvers = "Approver: "; // foreach (ApprovalRequestApproval app in approval.ApprovalRequestApprovals) // { // if (app.Approver == null) continue; // string approver = app.Approver.FirstName + " " + app.Approver.LastName + ", "; // Approvers += approver; // } // Approvers = Approvers.Substring(0, Approvers.Length - 2); //} //newItem.Line2s = Approvers; string deadLine = string.Empty; if (approval.DeadlineDateTimeUTC != null) { //if (approval.DeadlineDateTimeUTC.Value.Date < DateTime.Now.Date) // newItem.Line2Color =ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["RedTextColor"]); //else // newItem.Line2Color = ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["BlackTextColor"]); deadLine = approval.DeadlineDateTimeUTC.Value.Date.ToString("M/d/yy"); } //Not Active, Pending, Approved, Denied switch (approval.ApprovalRequestStateType.Value) { case 0: newItem.Line3 = "Not Active "; break; case 1: newItem.Line3 = "Pending "; break; case 2: newItem.Line3 = "Approved "; break; case 3: newItem.Line3 = "Denied "; break; } newItem.Line2s = deadLine; newItem.Line3 = ((Enums.ApprovalRequestStateType)approval.ApprovalRequestStateType).ToString(); newItem.Icon = "item_approval_request.png"; newItem.ItemType = ItemType.ApprovalRequests; newItem.WorkspaceId = Common.CurrentWorkspace.Id; newItem.ProjectId = Guid.Empty; newItem.ObjectType = approval.Type; newItem.TitleColor = "#000000"; Items.Add(newItem); } else if (item.Type == "TimeSheet") { MyWorkItem newItem = new MyWorkItem(); ProjectInsight.Models.TimeAndExpense.TimeSheet timeSheet = (ProjectInsight.Models.TimeAndExpense.TimeSheet)item; if (isFilteredList) { continue; } if (Common.Filter.CompanyId != null && Common.Filter.CompanyId.HasValue) { continue; } newItem.Id = timeSheet.Id.Value; newItem.Title = timeSheet.Name; if (timeSheet.StartDate.HasValue) { newItem.Line2s = "Dates: " + timeSheet.StartDate.Value.ToString("M/d/yy") + " - "; } if (timeSheet.EndDate.HasValue) { newItem.Line2e = timeSheet.EndDate.Value.ToString("M/d/yy"); } bool endDateIsPast = false; newItem.Line2Color = endDateIsPast ? ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["RedTextColor"]) : ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["BlackTextColor"]); if (!string.IsNullOrEmpty(timeSheet.Status)) { newItem.Line3 = "Status: " + timeSheet.Status; } newItem.Icon = "item_timesheet.png"; newItem.ItemType = ItemType.TimeSheet; newItem.WorkspaceId = Common.CurrentWorkspace.Id; newItem.ProjectId = Guid.Empty; newItem.ObjectType = timeSheet.Type; newItem.TitleColor = "#000000"; Items.Add(newItem); } else { } } catch (Exception ex) { } } } if (!isFilteredList) { var listWork = Common.Instance.GetUserWork().Where(x => x.WorkspaceId == Common.CurrentWorkspace.Id && x.ObjectType != "Project"); if (listWork != null && listWork.ToList().Count > 0) { foreach (var item in listWork) { Common.Instance._sqlconnection.Delete(item); } } if (Items != null) { foreach (MyWorkItem item in Items) { Common.Instance._sqlconnection.Insert(item); } } } } if (Items == null || Items.Count == 0) { IsItemsEmpty = true; } else { IsItemsEmpty = false; } if (!isFilteredList) { Common.Instance.bottomNavigationViewModel.NumberWorkListItems = (Items == null ? 0 : Items.Count()); } } catch (Exception ex) { Debug.WriteLine(ex); } finally { IsBusy = false; } }
// Public Methods (1) public static List <MWList> GetMyWorkListsFromDb(SPWeb web, List <Guid> archivedWebs) { var lists = new List <MWList>(); using (SqlConnection sqlConnection = MyWork.GetSpContentDbSqlConnection(web)) { string webUrl = web.ServerRelativeUrl; webUrl = webUrl.Equals("/") ? string.Empty : webUrl.Substring(1); string archivedWebString = string.Join(",", archivedWebs.Select( archivedWeb => string.Format("'{0}'", archivedWeb)). ToArray()); string queryString = @" SELECT dbo.AllLists.tp_Id, dbo.AllLists.tp_Title, dbo.Webs.FullUrl FROM dbo.Webs INNER JOIN dbo.AllLists ON dbo.Webs.Id = dbo.AllLists.tp_WebId WHERE "; queryString += string.IsNullOrEmpty(webUrl) ? string.Format(@"(dbo.Webs.SiteId = '{0}')", web.Site.ID) : string.Format( @"(dbo.Webs.FullUrl LIKE '{0}/%' OR dbo.Webs.FullUrl = '{0}')", webUrl); if (archivedWebs.Count > 0) { queryString += string.Format(@" AND (dbo.AllLists.tp_WebId NOT IN ({0}))", archivedWebString); } queryString += string.Format(@" AND (dbo.AllLists.tp_ServerTemplate = {0})", MyWorkListServerTemplateId); using (var sqlCommand = new SqlCommand(queryString, sqlConnection)) { SPSecurity.RunWithElevatedPrivileges(sqlConnection.Open); SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { string listId = string.Format("MW_{0}", sqlDataReader.GetGuid(0).ToString().Replace("-", string.Empty)); string listName = sqlDataReader.GetString(1); string listWeb = sqlDataReader.GetString(2); if (!lists.Exists(l => l.Name.Equals(listName))) { lists.Add(new MWList { Id = listId, Name = listName, Webs = new List <string> { listWeb } }); } else { foreach ( MWList mwList in lists.Where(mwList => mwList.Name.Equals(listName)).Where( mwList => !mwList.Webs.Contains(listWeb))) { mwList.Webs.Add(listWeb); } } } sqlConnection.Close(); } } return(lists); }
/// <summary> /// Loads the general settings. /// </summary> private void LoadGeneralSettings() { #region All Lists and Fields Dictionary <string, List <string> > listsAndFields = GetListsAndFields(); Dictionary <string, List <string> > myWorkListsAndFields = GetMyWorkListsAndFields(); #endregion #region Selected Lists MyWorkLists = GetMyWorkListsFromDb(_web, MyWork.GetArchivedWebs(_web.Site.ID)); if (!NewSetup()) { if (!IncludeFixApplied()) { List <string> selectedMyWorkLists = CoreFunctions.getConfigSetting(_web, GeneralSettingsSelectedMyWorkLists).Split(new[] { ',' }). ToList(); var excludedLists = new List <string>(); var includedLists = new List <string>(); foreach (MWList myWorkList in MyWorkLists) { if (DoesListExist(myWorkList.Name)) { if (!selectedMyWorkLists.Contains(myWorkList.Name)) { excludedLists.Add(myWorkList.Name); } else { includedLists.Add(myWorkList.Name); } } } CoreFunctions.setConfigSetting(_web, GeneralSettingsExcludedMyWorkLists, excludedLists.Count > 0 ? string.Join(",", excludedLists.ToArray()) : string.Empty); CoreFunctions.setConfigSetting(_web, GeneralSettingsSelectedMyWorkLists, includedLists.Count > 0 ? string.Join(",", includedLists.ToArray()) : string.Empty); CoreFunctions.setConfigSetting(_web, GeneralSettingsMyWorkIncludeFixApplied, true.ToString(CultureInfo.InvariantCulture)); } } List <string> excludedMyWorkLists = CoreFunctions.getConfigSetting(_web, GeneralSettingsExcludedMyWorkLists).Split(new[] { ',' }).ToList(); foreach (MWList myWorkList in MyWorkLists) { if (DoesListExist(myWorkList.Name)) { var listItem = new ListItem(myWorkList.Name, myWorkList.Id); if (excludedMyWorkLists.Contains(myWorkList.Name)) { lstExcludedMyWorkLists.Items.Add(listItem); } else { lstIncludedMyWorkLists.Items.Add(listItem); } } } List <string> selectedLists = CoreFunctions.getConfigSetting(_web, GeneralSettingsSelectedLists).Split(new[] { ',' }).ToList(); List <string> listSelected = new List <string>(); selectedLists.RemoveAll(string.IsNullOrEmpty); foreach (string selectedList in selectedLists) { if (DoesListExist(selectedList)) { listSelected.Add(selectedList); tbSelectedLists.Text += selectedList + Environment.NewLine; } } CoreFunctions.setConfigSetting(_web, GeneralSettingsSelectedLists, listSelected.Count > 0 ? string.Join(",", listSelected.ToArray()) : string.Empty); #endregion #region Selected Fields List <string> selectedFields = CoreFunctions.getConfigSetting(_web, GeneralSettingsSelectedFields).Split(new[] { ',' }).ToList(); var sFields = new List <ListItem>(); sFields.AddRange((selectedLists.Count > 0 ? (from selectedList in selectedLists where listsAndFields.ContainsKey(selectedList) from field in listsAndFields[selectedList] where selectedFields.Exists(f => f.Equals(field)) let theField = field select new ListItem(theField.ToPrettierName(selectedList, _web), field)) : (from listAndFields in listsAndFields from field in listAndFields.Value where selectedFields.Exists(f => f.Equals(field)) let theField = field select new ListItem(theField.ToPrettierName(listAndFields.Key, _web), field)))); sFields.AddRange(from myWorkListsAndField in myWorkListsAndFields from field in myWorkListsAndField.Value where selectedFields.Contains(field) select new ListItem(field.ToPrettierName(myWorkListsAndField.Key, _web), field)); lstSelectedFields.DataSource = sFields.Distinct().ToList(); lstSelectedFields.DataTextField = "Text"; lstSelectedFields.DataValueField = "Value"; lstSelectedFields.DataBind(); lstSelectedFields.Sort(); #endregion #region Available Fields var availableFields = new List <ListItem>(); availableFields.AddRange((selectedLists.Count > 0 ? (from selectedList in selectedLists where listsAndFields.ContainsKey(selectedList) from field in listsAndFields[selectedList] where !selectedFields.Exists(f => f.Equals(field)) let theField = field select new ListItem(theField.ToPrettierName(selectedList, _web), field)) : (from listAndFields in listsAndFields from field in listAndFields.Value where !selectedFields.Exists(f => f.Equals(field)) let theField = field select new ListItem(theField.ToPrettierName(listAndFields.Key, _web), field)))); availableFields.AddRange(from myWorkListsAndField in myWorkListsAndFields from field in myWorkListsAndField.Value where !selectedFields.Contains(field) select new ListItem(field.ToPrettierName(myWorkListsAndField.Key, _web), field)); lstAllFields.DataTextField = "Text"; lstAllFields.DataValueField = "Value"; lstAllFields.DataSource = availableFields.Distinct().OrderBy(f => f.Text); lstAllFields.DataBind(); #endregion #region Cross Site Urls string crossSiteUrls = CoreFunctions.getConfigSetting(_web, GeneralSettingsCrossSiteUrls); if (!string.IsNullOrEmpty(crossSiteUrls)) { tbCrossSiteUrls.Text = crossSiteUrls.Replace("|", Environment.NewLine); } #endregion #region Performance Mode string performanceMode = CoreFunctions.getConfigSetting(_web, GeneralSettingsPerformanceMode); cbPerformanceMode.Checked = string.IsNullOrEmpty(performanceMode) || performanceMode.Equals("on"); #endregion #region My Work Grid Settings bool agoFilterEnabled = false; int agoFilterDays = 0; bool afterFilterEnabled = false; int afterFilterDays = 0; var dayFilters = CoreFunctions.getConfigSetting(_web, GENERAL_SETTINGS_WORK_DAY_FILTERS); if (!string.IsNullOrEmpty(dayFilters)) { string[] filters = dayFilters.Split('|'); bool.TryParse(filters[0], out agoFilterEnabled); int.TryParse(filters[1], out agoFilterDays); bool.TryParse(filters[2], out afterFilterEnabled); int.TryParse(filters[3], out afterFilterDays); } cbDaysAgo.Checked = agoFilterEnabled; cbDaysAfter.Checked = afterFilterEnabled; if (agoFilterDays > 0) { tbDaysAgo.Text = agoFilterDays.ToString(CultureInfo.InvariantCulture); } if (afterFilterDays > 0) { tbDaysAfter.Text = afterFilterDays.ToString(CultureInfo.InvariantCulture); } tbDaysAgo.Enabled = agoFilterEnabled; tbDaysAfter.Enabled = afterFilterEnabled; hfDaysAgo.Value = tbDaysAgo.Text; hfDaysAfter.Value = tbDaysAfter.Text; bool indicatorActive = true; int indicatorDays = 2; var newItemIndicator = CoreFunctions.getConfigSetting(_web, GENERAL_SETTINGS_NEW_ITEM_INDICATOR); if (!string.IsNullOrEmpty(newItemIndicator)) { var settings = newItemIndicator.Split('|'); bool.TryParse(settings[0], out indicatorActive); int.TryParse(settings[1], out indicatorDays); } cbNewItemIndicator.Checked = indicatorActive; if (indicatorDays > 0) { tbNewItemIndicator.Text = indicatorDays.ToString(CultureInfo.InvariantCulture); } tbNewItemIndicator.Enabled = indicatorActive; hfNewItemIndicator.Value = tbNewItemIndicator.Text; #endregion }