Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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);
        }