2016-08-02 4 views
1

J'ai créé un tableau de bord de tickets et il affichera deux récapitulatifs de ticket après que je me connecte avec mon compte d'administrateur. L'un est "Résumé de votre ticket" et l'autre "Résumé de tous les tickets". En ce moment je prévois de laisser mon compte d'administrateur pour voir le résumé de billet d'autre compte (comme this), mais je ne sais pas comment l'ajouter sur le tableau de bord de billet quelqu'un peut-il me montrer comment le faire?Comment ajouter un nouveau résumé de ticket dans verger?

Répondre

1

Je suppose que vous avez posé la question comme un commentaire dans le post précédent aussi! mais de toute façon,

il existe plusieurs approches pour le faire. Orchard Collaboration utilise un widget pour représenter les résumés de tickets (à la fois pour l'utilisateur et pour l'administrateur). La logique principale est dans le DashboardDriver à Modules/Orchard.CRM.Core/Drivers.

private DriverResult DisplayDetail(DashboardPart part, dynamic shapeHelper) 
    { 
     if (this.services.WorkContext.CurrentUser == null) 
     { 
      return null; 
     } 

     var contentQuery = this.services.ContentManager.HqlQuery().ForVersion(VersionOptions.Published); 
     var statusRecords = this.basicDataService.GetStatusRecords().OrderBy(c => c.OrderId).ToList(); 

     DashboardViewModel model = new DashboardViewModel(); 
     model.CurrentUserId = this.services.WorkContext.CurrentUser.Id; 
     model.IsCustomer = this.crmContentOwnershipService.IsCurrentUserCustomer(); 
     model.IsOperator = this.services.Authorizer.Authorize(Permissions.OperatorPermission); 
     dynamic state = new JObject(); 

     // Query items created by customer 
     if (model.IsCustomer) 
     { 
      // Ticket contentType 
      state.ContentTypes = "Ticket"; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, "Content", "ContentTypes", state); 

      state.RequestingUser_Id = model.CurrentUserId.ToString(CultureInfo.InvariantCulture); 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, TicketFieldsFilter.CategoryName, TicketFieldsFilter.RequestingUserType, state); 

      var userTicketsCountByStateIds = groupQuery.GetCount(contentQuery, "TicketPartRecord", "StatusRecord.Id"); 

      model.CurrentUserRequestingTickets = new Collection<dynamic>(); 
      CRMHelper.AddStatusGroupRecordsToModel(statusRecords, userTicketsCountByStateIds, model.CurrentUserRequestingTickets); 

      // overrude items of current users 
      state.MaxDueDate = DateTime.UtcNow.Date; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, TicketFieldsFilter.CategoryName, TicketFieldsFilter.TicketDueDateType, state); 
      model.CurrentUserOverrudeRequestingTicketCount = contentQuery.Count(); 
     } 

     // Query the counts of the current user tickets group by stateId 
     // ******************************************************* 
     if (model.IsOperator) 
     { 
      // Ticket contentType 
      state.ContentTypes = "Ticket"; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, "Content", "ContentTypes", state); 

      dynamic temp = new 
      { 
       Users = new int[] { model.CurrentUserId }, 
       Teams = new int[] { }, 
       BusinessUnits = new int[] { }, 
       AccessType = ContentItemPermissionAccessTypes.Assignee 
      }; 

      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, ContentItemPermissionFilter.CategoryName, ContentItemPermissionFilter.AnySelectedUserTeamBusinessUnit, temp); 

      var userTicketsCountByStateIds = groupQuery.GetCount(contentQuery, "TicketPartRecord", "StatusRecord.Id"); 

      model.CurrentUserTickets = new Collection<dynamic>(); 
      CRMHelper.AddStatusGroupRecordsToModel(statusRecords, userTicketsCountByStateIds, model.CurrentUserTickets); 

      // overrude items of current users 
      state.MaxDueDate = DateTime.UtcNow.Date; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, TicketFieldsFilter.CategoryName, TicketFieldsFilter.TicketDueDateType, state); 
      model.CurrentUserOverrudeItemsCount = contentQuery.Count(); 
      //******************************************************* 
     } 

     bool isAdmin = this.services.Authorizer.Authorize(Permissions.AdvancedOperatorPermission); 

     if (isAdmin) 
     { 
      // Query the counts of the whole tickets in the system based on stateId 
      state = new JObject(); 

      contentQuery = this.services.ContentManager.HqlQuery().ForVersion(VersionOptions.Published); 

      state.ContentTypes = "Ticket"; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, "Content", "ContentTypes", state); 
      var ticketCountsByStateIds = groupQuery.GetCount(contentQuery, "TicketPartRecord", "StatusRecord.Id"); 

      model.AllTickets = new Collection<dynamic>(); 
      CRMHelper.AddStatusGroupRecordsToModel(statusRecords, ticketCountsByStateIds, model.AllTickets); 

      state.MaxDueDate = DateTime.UtcNow.Date; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, TicketFieldsFilter.CategoryName, TicketFieldsFilter.TicketDueDateType, state); 
      model.AllOverrudeItemsCount = contentQuery.Count(); 
     } 

     // get items without any owner 
     contentQuery = this.services.ContentManager.HqlQuery().ForVersion(VersionOptions.Published); 
     state.ContentTypes = "Ticket"; 
     contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, "Content", "ContentTypes", state); 
     contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, ContentItemPermissionFilter.CategoryName, "ContentItemPermissionPartRecord.ItemsWithoutAnyOwner", state); 
     model.AllItemsWithoutOwnerCount = contentQuery.Count(); 

     // get overrude items count 

     // display 
     // 1) Number of your open, new, in progress, and closed tickets 
     // 2) number of the unassigned, new, open, in progress and closed tickets in the system. 
     return ContentShape("Parts_Dashboard", 
      () => shapeHelper.Parts_Dashboard(
       Model: model 
       )); 
    } 

Vous devez créer un nouveau widget similaire à celui-ci. DashboardDriver représente les tickets de l'utilisateur connecté ainsi qu'un résumé de tous les tickets. Dans le nouveau widget, vous ne pouvez représenter que les tickets récapitulatifs de l'utilisateur. Le nouveau widget doit avoir une propriété UserId et représente le résumé du ticket de cet utilisateur au lieu de l'utilisateur connecté. Quelque chose comme ceci:

 private DriverResult DisplayDetail(NewUserDashboardPart part, dynamic shapeHelper) 
    { 
     if (this.services.WorkContext.CurrentUser == null) 
     { 
      return null; 
     } 

     var contentQuery = this.services.ContentManager.HqlQuery().ForVersion(VersionOptions.Published); 
     var statusRecords = this.basicDataService.GetStatusRecords().OrderBy(c => c.OrderId).ToList(); 

     DashboardViewModel model = new DashboardViewModel(); 
     model.CurrentUserId = NewUserDashboardPart.UserId; 
     dynamic state = new JObject(); 

     // Query the counts of the current user tickets group by stateId 
     // ******************************************************* 
      // Ticket contentType 
      state.ContentTypes = "Ticket"; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, "Content", "ContentTypes", state); 

      dynamic temp = new 
      { 
       Users = new int[] { model.CurrentUserId }, 
       Teams = new int[] { }, 
       BusinessUnits = new int[] { }, 
       AccessType = ContentItemPermissionAccessTypes.Assignee 
      }; 

      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, ContentItemPermissionFilter.CategoryName, ContentItemPermissionFilter.AnySelectedUserTeamBusinessUnit, temp); 

      var userTicketsCountByStateIds = groupQuery.GetCount(contentQuery, "TicketPartRecord", "StatusRecord.Id"); 

      model.CurrentUserTickets = new Collection<dynamic>(); 
      CRMHelper.AddStatusGroupRecordsToModel(statusRecords, userTicketsCountByStateIds, model.CurrentUserTickets); 

      // overrude items of current users 
      state.MaxDueDate = DateTime.UtcNow.Date; 
      contentQuery = this.projectionManagerWithDynamicSort.ApplyFilter(contentQuery, TicketFieldsFilter.CategoryName, TicketFieldsFilter.TicketDueDateType, state); 
      model.CurrentUserOverrudeItemsCount = contentQuery.Count(); 
      //******************************************************* 

     // display 
     // 1) Number of your open, new, in progress, and closed tickets 
     // 2) number of the unassigned, new, open, in progress and closed tickets in the system. 
     return ContentShape("Parts_Dashboard", 
      () => shapeHelper.Parts_Dashboard(
       Model: model 
       )); 
    }