/// <summary> /// Get all Workspaces and it filters by "Url = items" and "BadgeCount > 0" /// If there are Items in the workspace, it updates the BadgeCount. /// If there are no Items in the workspace, it resets the BadgeCount. /// </summary> /// <param name="issueManager"></param> public void GetWorkspaceItems(IssueManager issueManager) { try { NavigationCardsManager navigationCardsManager = new NavigationCardsManager(issueManager); List <NavigationCard> workspaces = navigationCardsManager.GetAll(); foreach (NavigationCard workspace in workspaces.ToList()) { if (workspace.Url == "items" && workspace.BadgeCount > 0) { IssuesFilter filter = ChangeSystemFilterTypesMe(workspace.Filter, (int)workspace.UserId, false); List <IssueDto> workspaceItems = issueManager.GetFiltered(filter, true); if (workspaceItems.Count() > 0) { UpdateBadgeCount(workspace, workspaceItems, navigationCardsManager, false); } else { UpdateBadgeCount(workspace, workspaceItems, navigationCardsManager, true); } } } } catch (Exception exception) { GeminiApp.LogException(exception, false, string.Concat("Run Method GetWorkspaceItems: ", exception.Message)); } }
private void ProcessWatcherAlerts() { IConfiguration configuration = GeminiApp.Container.Resolve <IConfiguration>(); var inputConfig = configuration.Get(); SchedulerSettings settings = inputConfig.SchedulerSettings.HasValue() ? inputConfig.SchedulerSettings.FromJson <SchedulerSettings>() : new SchedulerSettings(); DateTime lastChecked = settings.LastCheckedWatchers.HasValue ? settings.LastCheckedWatchers.Value : DateTime.UtcNow; IssuesFilter filter = new IssuesFilter(); filter.RevisedAfter = lastChecked.ToString(); filter.IncludeClosed = true; LogDebugMessage("Last checked for watched item alerts: " + lastChecked); settings.LastCheckedWatchers = DateTime.UtcNow; List <IssueDto> issues = _issueManager.GetFiltered(filter); LogDebugMessage("Item that have changed: " + issues.Count); if (issues.Count > 0) { ProcessWatchers(issues, lastChecked); } GeminiConfiguration config = configuration.Get(); config.SchedulerSettings = settings.ToJson(); ConfigurationItem item = new ConfigurationItem(); item.SettingId = GeminiConfigurationOption.SchedulerSettings.ToString(); item.SettingValue = config.SchedulerSettings; configuration.Update(item); GeminiApp.RefreshConfig(config); }
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); }