private ActionResult SearchByHqlQuery(PagerParametersWithSortFields pagerParameters, PostedTicketSearchViewModel searchModel) { Pager pager = new Pager(siteService.GetSiteSettings(), pagerParameters); int totalCount = this.searchTicketService.CountByDatabase(searchModel); var contentItems = this.searchTicketService.SearchByDatabase(pagerParameters, searchModel); SearchTicketsViewModel model = this.CreateSearchModel(contentItems, pager, searchModel, pagerParameters, totalCount); return(this.View(model)); }
private ActionResult SearchByLucene(PagerParametersWithSortFields pagerParameters, PostedTicketSearchViewModel searchModel) { Pager pager = new Pager(siteService.GetSiteSettings(), pagerParameters); if (!indexManager.HasIndexProvider()) { return(View("NoIndex")); } // Status contentType int totalCount = this.searchTicketService.CountByIndexProvider(searchModel); var contentItems = this.searchTicketService.SearchByIndexProvider(pagerParameters, searchModel); SearchTicketsViewModel model = this.CreateSearchModel(contentItems, pager, searchModel, pagerParameters, totalCount); return(this.View(model)); }
/// <summary> /// Fills the model with the businessUnits that the user has granted to view them /// </summary> private void FillBusinessUnitsAndUsers(SearchTicketsViewModel model, PostedTicketSearchViewModel postedSearchModel) { bool restrictToUserPermissions = !this.services.Authorizer.Authorize(Permissions.AdvancedOperatorPermission); this.businessUnitService.Fill(model.BusinessUnits, restrictToUserPermissions); var selectedBusinessUnits = postedSearchModel.BusinessUnits.ToList(); // TeamIds of the search var teams = new List <int>(); // set checkes of businessUnits model.BusinessUnits .ToList() .ForEach(c => c.Checked = selectedBusinessUnits.Count(d => d == c.BusinessUnitId) > 0); // set checks of teams model.BusinessUnits .SelectMany(c => c.Teams) .ToList() .ForEach(c => c.Checked = teams.Count(d => d == c.TeamId) > 0); IEnumerable <IUser> users = null; if (restrictToUserPermissions) { users = new[] { this.services.WorkContext.CurrentUser }; } else { users = this.basicDataService.GetOperators().ToList(); } foreach (var user in users) { SearchTicketsViewModel.UserViewModel userViewModel = new SearchTicketsViewModel.UserViewModel { Id = user.Id, Username = CRMHelper.GetFullNameOfUser(user.As <UserPart>()), Checked = postedSearchModel.Users.Count(c => c == user.Id) > 0, IsAdminOrOperator = true }; model.Users.Add(userViewModel); } }
private string GetSearchDescription(SearchTicketsViewModel model, IEnumerable <StatusRecord> statusList) { List <string> parts = new List <string>(); string format = "<span class='label'>{0}</span>: {1}"; string oneParameterFormat = "<span class='label'>{0}</span>"; // groups var selectedBusinessUnits = model.BusinessUnits.Where(c => c.Checked); var selectedTeams = model.BusinessUnits.SelectMany(c => c.Teams.Where(d => d.Checked)); var groups = selectedBusinessUnits.Select(c => c.Name).Union(selectedTeams.Select(d => d.Name)); if (groups.Any()) { string groupsString = string.Format(CultureInfo.CurrentUICulture, format, T("Groups").Text, string.Join(", ", groups)); parts.Add(groupsString); } // project if (model.ProjectId.HasValue && this.projectService.IsTicketsRelatedToProjects()) { var project = this.projectService.GetProject(model.ProjectId.Value); string projectName = project != null ? project.Record.Title : this.T("UNKNOWN Project").Text; string projectNameString = string.Format(CultureInfo.CurrentUICulture, format, T("Project").Text, projectName); parts.Add(projectNameString); } // related ContentItem if (model.RelatedContentItemId.HasValue) { if (!string.IsNullOrEmpty(model.RelatedContentItemTitle)) { string text = string.Format(CultureInfo.CurrentUICulture, format, T("Tickets related to").Text, model.RelatedContentItemTitle); parts.Add(text); } else { string text = string.Format(CultureInfo.CurrentUICulture, format, T("Tickets related to ContentId").Text, model.RelatedContentItemId.Value.ToString(CultureInfo.InvariantCulture)); parts.Add(text); } } // users var selectedUsers = model.Users.Where(c => c.Checked).Select(c => c.Username); if (selectedUsers.Any()) { string selectedUsersString = string.Format(CultureInfo.CurrentUICulture, format, T("Users").Text, string.Join(", ", selectedUsers)); parts.Add(selectedUsersString); } // Unassigned if (model.Unassigned) { parts.Add(string.Format(CultureInfo.CurrentUICulture, oneParameterFormat, T("Unassigned").Text)); } // Status if (!string.IsNullOrEmpty(model.StatusId)) { var status = statusList.FirstOrDefault(c => c.Id.ToString(CultureInfo.InvariantCulture).ToUpper(CultureInfo.InvariantCulture) == model.StatusId.ToUpper(CultureInfo.InvariantCulture)); if (status != null) { parts.Add(string.Format(CultureInfo.CurrentUICulture, format, T("Status").Text, status.Name)); } } // Unstatus if (model.UnStatus) { parts.Add(string.Format(CultureInfo.CurrentUICulture, oneParameterFormat, T("No Status").Text)); } // Due date if (model.DueDate.HasValue) { if (model.DueDate.Value.Date > DateTime.UtcNow) { parts.Add(string.Format(CultureInfo.CurrentUICulture, oneParameterFormat, T("Not Overdue").Text)); } parts.Add(string.Format(CultureInfo.CurrentUICulture, format, T("Due Date").Text, model.DueDate.Value.ToString("yyyy/MM/dd"))); } // Overdue if (model.Overdue) { parts.Add(string.Format(CultureInfo.CurrentUICulture, oneParameterFormat, T("Overdue").Text)); } // IncludeAllVisibleItemsBySelectedGroupsAndUsers if (model.IncludeAllVisibleItemsBySelectedGroupsAndUsers) { parts.Add(string.Format(CultureInfo.CurrentUICulture, oneParameterFormat, this.T("All visible Tickets by the selected agents or groups").Text)); } // Term if (!string.IsNullOrEmpty(model.Term)) { parts.Add(string.Format(CultureInfo.CurrentUICulture, format, T("Term").Text, model.Term)); } return(string.Join(", ", parts)); }
private SearchTicketsViewModel CreateSearchModel(IEnumerable <IContent> contentItems, Pager pager, PostedTicketSearchViewModel postedSearchModel, PagerParametersWithSortFields pagerParameters, int totalCount) { SearchTicketsViewModel model = new SearchTicketsViewModel(); model.Term = postedSearchModel.Term; model.IsAdminUser = this.services.Authorizer.Authorize(Permissions.AdvancedOperatorPermission); if (postedSearchModel.DueDate == PostedTicketSearchViewModel.OverDueDate) { model.Overdue = true; } else { model.Overdue = false; DateTime value; if (DateTime.TryParse(postedSearchModel.DueDate, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out value)) { model.DueDate = value; } } model.StatusId = postedSearchModel.Status; model.UnStatus = postedSearchModel.UnStatus; model.PagerParameters = pagerParameters; model.RelatedContentItemId = postedSearchModel.RelatedContentItemId; // related contentItem if (postedSearchModel.RelatedContentItemId.HasValue) { var relatedContentItem = this.contentManager.Get(postedSearchModel.RelatedContentItemId.Value); var titlePart = relatedContentItem.As <TitlePart>(); if (titlePart != null) { model.RelatedContentItemTitle = titlePart.Title; } } model.Pager = this.services.New.Pager(pager).TotalItemCount(totalCount); model.Items = new List <dynamic>(); foreach (var contentItem in contentItems) { // ignore search results which content item has been removed or unpublished if (contentItem == null) { totalCount--; continue; } var itemModel = this.contentManager.BuildDisplay(contentItem, "TableRow"); itemModel.Metadata.Type = "Ticket_TableRow_Container"; model.Items.Add(itemModel); itemModel.IsEditable = this.crmContentOwnershipService.CurrentUserCanEditContent(contentItem); } model.Unassigned = postedSearchModel.Unassigned; this.FillBusinessUnitsAndUsers(model, postedSearchModel); // Projects if (this.projectService.IsTicketsRelatedToProjects()) { model.IsProjectForTicketsSupported = true; model.ProjectId = postedSearchModel.ProjectId; var projects = this.projectService.GetProjects(null); Converter.Fill(model.Projects, projects.AsPart <ProjectPart>()); } if (this.crmContentOwnershipService.IsCurrentUserCustomer()) { model.IsCustomerUser = true; model.Users.Clear(); model.BusinessUnits.ToList().ForEach(c => c.Teams.Clear()); } var statusRecords = this.basicDataService.GetStatusRecords().ToList(); model.ClosedStatusId = statusRecords.First(c => c.StatusTypeId == StatusRecord.ClosedStatus).Id; model.OpenStatusId = statusRecords.First(c => c.StatusTypeId == StatusRecord.OpenStatus).Id; // IncludeAllVisibleItemsBySelectedGroupsAndUsers is meaningful, if there is a selected user or business unit model.IncludeAllVisibleItemsBySelectedGroupsAndUsers = postedSearchModel.IncludeAllVisibleItemsBySelectedGroupsAndUsers && (model.Users.Any(c => c.Checked) || model.BusinessUnits.Any(c => c.Checked) || model.BusinessUnits.SelectMany(c => c.Teams).Any(c => c.Checked)); model.SearchDescription = this.GetSearchDescription(model, statusRecords); return(model); }