public ActionResult GetColumns(int projectId) { ColumnsModel model = new ColumnsModel(); List <ScreenField> fields = GetRoadmapFields(projectId); IssuesFilter filter = ItemFilterManager.TransformFilter(IssuesFilter.CreateProjectFilter(CurrentUser.Entity.Id, projectId)); SetCurrentProjectFromFilter(filter); model.Columns = GridManager.GetAvailableColumns(filter.GetProjects(), IssueFilterHelper.AggregateTypes(filter, ProjectManager, MetaManager), fields); return(JsonSuccess(RenderPartialViewToString(this, "~/Views/Items/ColumnSelector.cshtml", model))); }
public RepeaterModel GetRepeatingModel() { RepeaterModel model = new RepeaterModel(); var filter = new IssuesFilter(); if (IsSessionFilter() || !CurrentCard.Options.ContainsKey(AppGuid)) { filter = HttpSessionManager.GetFilter(CurrentCard.Id, IssuesFilter.CreateProjectFilter(CurrentUser.Entity.Id, CurrentProject.Entity.Id)); } else if (CurrentCard.Options.ContainsKey(AppGuid)) { filter = CurrentCard.Options[AppGuid].FromJson <IssuesFilter>(); } else { filter = CurrentCard.Filter; } if (filter.Repeat.IsEmpty() || filter.Repeat == "-|3") { filter.Repeat = "-|1"; } var transformedFilter = ItemFilterManager.TransformFilter(filter); SetCurrentProjectFromFilter(transformedFilter); model.Filter = IssueFilterHelper.PopulateModel(model.Filter, filter, transformedFilter, PermissionsManager, ItemFilterManager, IssueFilterHelper.GetViewableFields(filter, ProjectManager, MetaManager), false); model.GeminiDateFormat = CurrentUser.GeminiDateFormat; model.BaseUrl = string.Format("{0}workspace/{1}/", UserContext.Url, CurrentCard.Id); var allIssues = IssueManager.GetFiltered(filter); var allIssuesRelatedRepeating = allIssues.Count > 0 ? allIssues.FindAll(s => s.Repeated.HasValue() || s.Entity.OriginatorData.HasValue() && s.Entity.OriginatorType == IssueOriginatorType.Repeat) : new List <IssueDto>(); var masterIssues = allIssuesRelatedRepeating.Count > 0 ? allIssuesRelatedRepeating.FindAll(i => i.Repeated.HasValue()) : new List <IssueDto>(); List <string> repeatValues = new List <string>(); repeatValues.Add("-|1"); repeatValues.Add("-|2"); repeatValues.Add("-|3"); int totalNumberOfRepeatedItems = 0; if (masterIssues.Count > 0) { foreach (var masterIssue in masterIssues) { ItemsGrid item = new ItemsGrid(); item.MasterItem = masterIssue; item.RepeatedItems = allIssuesRelatedRepeating.FindAll(s => s.OriginatorData.HasValue() && s.OriginatorData.Equals(masterIssue.Entity.Id.ToString())); if (item.RepeatedItems.Count > 0 || filter.Repeat == "-|2" || !repeatValues.Contains(filter.Repeat)) { item.RepeatedItems = item.RepeatedItems.OrderBy("Created").ToList(); IssueDto lastRepeated = IssueManager.GetLastCreatedIssueForOriginator(IssueOriginatorType.Repeat, masterIssue.Id.ToString()); if (lastRepeated != null) { item.LastRepitition = lastRepeated.Created.ToString(UserContext.User.DateFormat); } } //Create Next repitition RepeatParser repeat = new RepeatParser(masterIssue.Repeated); for (DateTime date = DateTime.Today; item.NextRepitition.IsEmpty(); date = date.AddDays(1)) { repeat.CurrentDateTime = date; DateTime lastRepeatedDate = masterIssue.Created; if (item.RepeatedItems.Count > 0) { lastRepeatedDate = item.RepeatedItems.Last().Entity.Created; } if (item.RepeatedItems.Count >= repeat.MaximumRepeats) { break; } if (repeat.NeedsToRepeat(lastRepeatedDate)) { item.NextRepitition = date.ToShortDateString(); break; } } totalNumberOfRepeatedItems += item.RepeatedItems.Count; model.Items.Add(item); } } else if (allIssuesRelatedRepeating.Count > 0) { foreach (var repeatedIssue in allIssuesRelatedRepeating) { ItemsGrid item = new ItemsGrid() { MasterItem = repeatedIssue, RepeatedItems = new List <IssueDto>() }; model.Items.Add(item); } } model.ItemCount = masterIssues.Count + totalNumberOfRepeatedItems; return(model); }
private Changelog.Models.ChangelogpAppModel BuildModelData(int versionId, IEnumerable <Countersoft.Gemini.Commons.Entity.Version> iVersions, IssuesFilter OriginalFilter = null) { StringBuilder builder = new StringBuilder(); Changelog.Models.ChangelogpAppModel model = new Changelog.Models.ChangelogpAppModel(); List <VersionDto> versions = VersionManager.ConvertDesc(new List <Countersoft.Gemini.Commons.Entity.Version>(iVersions)); if (versions.Count != iVersions.Count()) { // Need to get the version again as parents is missing, probably released foreach (var ver in iVersions) { if (versions.Find(v => v.Entity.Id == ver.Id) == null) { int index = versions.FindIndex(v => v.Entity.Sequence > ver.Sequence); if (index == -1) { versions.Add(VersionManager.Convert(ver)); } else { versions.Insert(index, VersionManager.Convert(ver)); } } } } IssuesFilter filter = new IssuesFilter(); // Build up the progress data on all the cards as we go foreach (var version in versions) { Changelog.Models.ChangelogpAppModel tmp = new Changelog.Models.ChangelogpAppModel(); builder.Append(BuildAllProjectVersions(version.Entity, version.Entity.Id == versionId, version.HierarchyLevel)); if (version.Entity.Id == versionId) { List <IssueDto> issues = IssueManager.GetRoadmap(UserContext.Project.Entity.Id, null, version.Entity.Id); var visibility = GetChangelogFields(UserContext.Project.Entity.Id); var properties = GridManager.GetDisplayProperties(MetaManager.TypeGetAll(new List <ProjectDto>() { CurrentProject }), visibility, new List <int>() { version.Project.Entity.Id }); List <ColumnInfoModel> gridColumns = GridManager.DescribeGridColumns(properties); GridOptionsModel gridOptions = GridManager.DescribeGridOptions(); // get the version specific data tmp.Issues = issues; tmp.Columns = gridColumns; tmp.Options = gridOptions; tmp.Closed = tmp.Issues.Count(i => i.IsClosed); tmp.Open = tmp.Issues.Count(i => !i.IsClosed); tmp.Statuses = (from i in tmp.Issues group i by new { Id = i.Entity.StatusId, Name = i.Status } into g select new Triple <string, int, string>(g.Key.Name, g.Count(), string.Format("{0}{1}?versions={2}&statuses={3}", UserContext.Url, NavigationHelper.GetProjectPageUrl(UserContext.Project, ProjectTemplatePageType.Items), versionId, g.Key.Id))).OrderByDescending(g => g.Second).Take(3); tmp.Types = (from i in tmp.Issues group i by new { Id = i.Entity.TypeId, Name = i.Type } into g select new Triple <string, int, string>(g.Key.Name, g.Count(), string.Format("{0}{1}?versions={2}&types={3}&includeclosed=yes", UserContext.Url, NavigationHelper.GetProjectPageUrl(UserContext.Project, ProjectTemplatePageType.Items), versionId, g.Key.Id))).OrderByDescending(g => g.Second).Take(3); // store the version Id model.VersionId = version.Entity.Id; model.VersionLabel = version.Entity.Name; model.Closed = tmp.Closed; model.Columns = tmp.Columns; model.Issues = tmp.Issues; model.DisplayData = GridManager.GetDisplayData(tmp.Issues, tmp.Columns); model.Open = tmp.Open; model.Options = tmp.Options; model.Statuses = tmp.Statuses; model.Types = tmp.Types; model.Estimated = issues.Sum(i => i.Entity.EstimatedHours * 60 + i.EstimatedMinutes); model.Logged = issues.Sum(i => i.Entity.LoggedHours * 60 + i.Entity.LoggedMinutes); model.Remain = model.Estimated > model.Logged ? model.Estimated - model.Logged : 0; model.TimeLoggedOver = model.Logged > model.Estimated ? model.Logged - model.Estimated : 0; model.ReleaseStartDate = version.Entity.StartDate; model.ReleaseEndDate = version.Entity.ReleaseDate; // Now get with the extra data that we need var projectId = UserContext.Project.Entity.Id; IssuesGridFilter defaultFilter = new IssuesGridFilter(IssuesFilter.CreateProjectFilter(CurrentUser.Entity.Id, CurrentProject.Entity.Id)); filter = IssuesFilter.CreateVersionFilter(CurrentUser.Entity.Id, CurrentProject.Entity.Id, version.Entity.Id); if (OriginalFilter != null) { filter.SortField = OriginalFilter.SortField; filter.SortOrder = OriginalFilter.SortOrder; } ItemFilterManager.SetSortedColumns(gridColumns, filter); model.Filter = IssueFilterHelper.PopulateModel(model.Filter, filter, filter, PermissionsManager, ItemFilterManager, IssueFilterHelper.GetViewableFields(filter, ProjectManager, MetaManager), false); } } // attach version cards model.VersionCards = builder.ToString(); // Visibility model[ItemAttributeVisibility.Status] = CanSeeProjectItemAttribute(ItemAttributeVisibility.Status); model[ItemAttributeVisibility.EstimatedEffort] = CanSeeProjectItemAttribute(ItemAttributeVisibility.EstimatedEffort); model[ItemAttributeVisibility.CalculatedTimeLogged] = CanSeeProjectItemAttribute(ItemAttributeVisibility.CalculatedTimeLogged); model[ItemAttributeVisibility.CalculatedTimeRemaining] = model[ItemAttributeVisibility.EstimatedEffort] && model[ItemAttributeVisibility.CalculatedTimeLogged]; StringBuilder sort = new StringBuilder(); List <string> sorting = new IssuesFilter().GetSortFields(); List <int> orders = new IssuesFilter().GetSortOrders(); for (int i = 0; i < sorting.Count; i++) { sort.AppendFormat("{0}|{1}", sorting[i], orders[i] == 1 ? 0 : 1); } model.Sort = sort.ToString(); model.CurrentPageCard = CurrentCard; return(model); }