vendor/uvdesk/core-framework/Controller/Report.php line 146

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Controller;
  3. use Webkul\UVDesk\CoreFrameworkBundle\Entity;
  4. use Webkul\UVDesk\CoreFrameworkBundle\Form;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportGroup;
  9. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportTeam;
  10. use Webkul\UVDesk\CoreFrameworkBundle\Entity\UserInstance;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Webkul\UVDesk\CoreFrameworkBundle\Services\UserService;
  13. use Webkul\UVDesk\CoreFrameworkBundle\Services\UVDeskService;
  14. use Webkul\UVDesk\CoreFrameworkBundle\Services\ReportService;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Doctrine\ORM\Query;
  18. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  19. use Symfony\Component\DependencyInjection\ContainerInterface;
  20. use Webkul\UVDesk\CoreFrameworkBundle\Entity\TicketRating;
  21. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Ticket;
  22. class Report extends AbstractController
  23. {
  24. private $userService;
  25. private $reportService;
  26. private $uvdeskService;
  27. private $paginator;
  28. private $translator;
  29. public function __construct(UserService $userService, UVDeskService $uvdeskService,ReportService $reportService, PaginatorInterface $paginator, TranslatorInterface $translator)
  30. {
  31. $this->userService = $userService;
  32. $this->reportService = $reportService;
  33. $this->uvdeskService = $uvdeskService;
  34. $this->paginator = $paginator;
  35. $this->translator = $translator;
  36. }
  37. public function listAgentActivity(Request $request)
  38. {
  39. if (! $this->userService->isAccessAuthorized('ROLE_AGENT_MANAGE_REPORTS')) {
  40. return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  41. }
  42. return $this->render('@UVDeskCoreFramework/Reports/listAgentActivities.html.twig', [
  43. 'agents' => $this->userService->getAgentsPartialDetails(),
  44. ]);
  45. }
  46. public function agentActivityXHR(Request $request)
  47. {
  48. $json = [];
  49. if ($request->isXmlHttpRequest()) {
  50. $json = $this->agentActivityData($request);
  51. }
  52. return new Response(json_encode($json), 200, ['Content-Type' => 'application/json']);
  53. }
  54. public function agentActivityData(Request $request)
  55. {
  56. if (! $this->userService->isAccessAuthorized('ROLE_AGENT_MANAGE_REPORTS')) {
  57. throw new \Exception('Access Denied', 403);
  58. }
  59. $data = [];
  60. $reportService = $this->reportService;
  61. $reportService->parameters = $request->query->all();
  62. $startDate = $reportService->parameters['after'];
  63. $endDate = $reportService->parameters['before'];
  64. $agentIds = [];
  65. if (isset($reportService->parameters['agent']))
  66. $agentIds = explode(',', $reportService->parameters['agent']);
  67. $userService = $this->userService;
  68. $from = $startDate." 00:00:01";
  69. $to = $endDate." 23:59:59";
  70. $reportService->parameters = $request->query->all();
  71. $qb = $reportService->getAgentActivity($agentIds, $from, $to);
  72. $paginator = $this->paginator;
  73. $newQb = clone $qb;
  74. $results = $paginator->paginate(
  75. $qb->getQuery()->setHydrationMode(Query::HYDRATE_ARRAY)->setHint('knp_paginator.count', count($newQb->getQuery()->getResult())),
  76. $request->query->get('page') ?: 1,
  77. 20,
  78. array('distinct' => true)
  79. );
  80. $paginationData = $results->getPaginationData();
  81. $queryParameters = $results->getParams();
  82. $queryParameters['page'] = "replacePage";
  83. $paginationData['url'] = '#'.$this->uvdeskService->buildPaginationQuery($queryParameters);
  84. $data = array();
  85. $ticketIds = [];
  86. $agentActivity = [];
  87. $agentIds = [];
  88. foreach ($results as $key => $activity) {
  89. $ticket = $this->getDoctrine()->getManager()->getRepository(Ticket::class)->findOneById($activity['id']);
  90. $currentDateTime = new \DateTime('now');
  91. $activityDateTime = $activity['createdAt'];
  92. $difference = $currentDateTime->getTimeStamp() - $activityDateTime->getTimeStamp();
  93. $lastReply = $reportService->time2string($difference);
  94. $ticketViewURL = $this->get('router')->generate('helpdesk_member_ticket', ['ticketId' => $activity['ticketId']], UrlGeneratorInterface::ABSOLUTE_URL);
  95. $data[] = [
  96. 'id' => $activity['id'],
  97. 'ticketURL' => $ticketViewURL,
  98. 'ticketId' => $activity['ticketId'],
  99. 'subject' => $activity['subject'],
  100. 'color' => $activity['colorCode'],
  101. 'customerName' => $activity['customerName'],
  102. 'threadType' => $activity['threadType'],
  103. 'lastReply' => $lastReply,
  104. 'agentName' => $activity['agentName']
  105. ];
  106. array_push($ticketIds, $activity['ticketId']);
  107. array_push($agentIds, $activity['agentId']);
  108. }
  109. $threadDetails = $reportService->getTotalReplies(array_unique($ticketIds), $agentIds, $from, $to);
  110. foreach ($data as $index => $ticketDetail) {
  111. foreach ($threadDetails as $detail) {
  112. if ($detail['ticketId'] == $ticketDetail['ticketId']) {
  113. $data[$index]['totalReply'] = $detail['ticketCount'];
  114. }
  115. }
  116. }
  117. $agentActivity = [];
  118. $agentActivity['data'] = $data;
  119. $agentActivity['pagination_data'] = $paginationData;
  120. return $agentActivity;
  121. }
  122. public function achievementInsightsAction()
  123. {
  124. $this->userService->forceFormat = true;
  125. $startDate = $this->userService->convertToTimezone(new \DateTime("-7 days"), 'Y-m-d');
  126. $endDate = $this->userService->convertToTimezone(new \DateTime("now"), 'Y-m-d');
  127. $this->userService->forceFormat = false;
  128. return $this->render('@UVDeskCoreFramework/Reports/kudos-insights.html.twig', array(
  129. 'startDate' => $startDate,
  130. 'endDate' => $endDate
  131. )
  132. );
  133. }
  134. public function getAchievementsXhr(Request $request, ContainerInterface $container)
  135. {
  136. $json = array();
  137. if ($request->isXmlHttpRequest()) {
  138. $repository = $this->getDoctrine()->getRepository(TicketRating::class);
  139. $json = $repository->getRatedTicketList($request->query, $container);
  140. $json['data'] = $this->getAchievementsData($request, $container);
  141. }
  142. $response = new Response(json_encode($json));
  143. $response->headers->set('Content-Type', 'application/json');
  144. return $response;
  145. }
  146. public function getAchievementsData($request, $container)
  147. {
  148. $data = array();
  149. $reportService = $this->reportService;
  150. $reportService->parameters = $request->query->all();
  151. $startDate = $reportService->parameters['start'];
  152. $endDate = $reportService->parameters['end'];
  153. $reportService->startDate = $this->userService->convertToTimezone(new \DateTime($startDate),'Y-m-d H:i:s');
  154. $reportService->endDate = $this->userService->convertToTimezone(new \DateTime($endDate),'Y-m-d H:i:s');
  155. $repository = $this->getDoctrine()->getRepository(TicketRating::class);
  156. $data = $repository->getRatingData($request->query, $container);
  157. for ($i = 1; $i <= 5; $i++) {
  158. $data['ratings'][$i] = $repository->getRatingByStarCount($request->query, $i, $container);
  159. }
  160. return $data;
  161. }
  162. }