private List <MyWorkItem> GroupProjectsByStatus(List <MyWorkItem> listWork) { //var listWork = new ObservableCollection<MyWorkItem>(Projects.OrderByDescending(x => x.IsActive)); List <ProjectHeader> PositionsForInsert = new List <ProjectHeader>(); bool?previousState = null; for (int x = 0; x < listWork.Count(); x++) { if (listWork[x].TitleColor == null) { listWork[x].TitleColor = "#000000"; } if (x < listWork.Count() - 1) { if (listWork[x].IsActive != previousState) { ProjectHeader header = new ProjectHeader(); header.Position = x; //header.ProjectState = listWork[x].ProjectState; if (listWork[x].IsActive) { header.ProjectState = 0; } else { header.ProjectState = 2; } PositionsForInsert.Add(header); previousState = listWork[x].IsActive; //previousState = listWork[x].ProjectState; } } } int counter = 0; foreach (ProjectHeader header in PositionsForInsert) { MyWorkItem head = new MyWorkItem(); switch (header.ProjectState) { case 0: head.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["GreenTextColor"]); //head.TitleColor = "#07aa07"; head.Title = "Active"; break; case 1: head.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["LightGrayTextColor"]); head.Title = "Archive"; break; case 2: head.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["LightGrayTextColor"]); //head.TitleColor = "#828282"; head.Title = "Planning"; break; case 3: head.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["LightGrayTextColor"]); head.Title = "Template"; break; case 4: head.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["LightGrayTextColor"]); head.Title = "Project Baseline"; break; case 5: head.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["LightGrayTextColor"]); head.Title = "To Be Deleted"; break; case 6: head.TitleColor = ConvertColorToHex((Color)Application.Current.Resources["LightGrayTextColor"]); head.Title = "Change Order"; break; } head.isHeader = true; head.isItem = false; listWork.Insert(header.Position + counter, head); counter++; } return(listWork); }
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; } }