2016-08-02 6 views
1

Ich habe ein Ticket-Dashboard erstellt und es werden zwei Ticketzusammenfassungen angezeigt, nachdem ich mich mit meinem Administratorkonto angemeldet habe. Einer ist "Ihre Ticketzusammenfassung" und der andere "Alle Ticketzusammenfassung". Im Moment plane ich, meinem Administratorkonto zu erlauben, die Ticketzusammenfassung eines anderen Accounts zu sehen (wie this), aber ich weiß nicht, wie ich es dem Ticket-Dashboard hinzufügen kann, kann mir jemand zeigen, wie es geht?Wie man eine neue Ticketzusammenfassung im Obstgarten hinzufügt?

Antwort

1

Ich vermute, Sie haben die Frage auch als Kommentar im vorherigen Beitrag gestellt! aber egal,

gibt es mehrere Ansätze, dies zu tun. Orchard Collaboration verwendet ein Widget zur Darstellung von Ticket-Zusammenfassungen (sowohl für den Benutzer als auch für den Administrator). Die Hauptlogik befindet sich im DashboardDriver unter Module/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 
       )); 
    } 

Sie müssen ein neues Widget ähnlich wie dieses erstellen. DashboardDriver stellt Tickets des angemeldeten Benutzers sowie eine Zusammenfassung aller Tickets dar. In dem neuen Widget können Sie nur Zusammenfassungstickets des Benutzers darstellen. Das neue Widget muss über eine UserId-Eigenschaft verfügen und eine Ticketzusammenfassung dieses Benutzers anstelle des angemeldeten Benutzers darstellen. Etwas wie dieses:

 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 
       )); 
    } 
Verwandte Themen