Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. <?php
  2. require 'vendor/autoload.php';
  3.  
  4. use MongoDB\BSON\UTCDateTime;
  5. use League\Csv\Writer;
  6.  
  7.  
  8. $client = new MongoDB\Client();
  9. $database = $client->selectDatabase('freshdesk');
  10. $ticketsCollection = $database->selectCollection('freshdeskTickets');
  11. $agentsCollection = $database->selectCollection('freshdeskAgents');
  12.  
  13. $dateTimeNow = new DateTimeImmutable();
  14. $dt30DaysAgo = $dateTimeNow->sub(new DateInterval('P30D'))->setTime(0, 0, 0);
  15. $pipeline = [
  16. [
  17. '$match' => [
  18. 'ticketCreatedAt' => [
  19. '$gte' => new UTCDateTime($dt30DaysAgo),
  20. '$lte' => new UTCDateTime($dateTimeNow),
  21. ]
  22. ]
  23. ],
  24. [
  25. '$project' => [
  26. 'assunto' => '$subject',
  27. 'ticket' => '$ticketId',
  28. 'created_at' => '$ticketCreatedAt',
  29. 'ticket_criado_em' => [ '$dateToString' => [ 'date' => '$ticketCreatedAt', 'format' => '%d-%m-%Y %H:%M:%S']],
  30. 'primeira_resposta_vence_em' => ['$dateToString' => ['date' => '$ticketFrDueBy', 'format' => '%d-%m-%Y %H:%M:%S']],
  31. 'data_primeira_resposta' => [ '$dateToString' => [ 'date' => '$ticketFirstRespondedAt', 'format' => '%d-%m-%Y %H:%M:%S']],
  32. 'responder_id' => '$responder_id',
  33. 'sla_violated' => [
  34. '$cond' => [
  35. 'if' => ['$ne' => ['$ticketFirstRespondedAt', null]],
  36. 'then' => ['$gt' => ['$ticketFirstRespondedAt', '$ticketFrDueBy']],
  37. 'else' => [
  38. '$and' => [
  39. ['$not' => ['$ticketFirstRespondedAt']], # não tem primeira resposta
  40. ['$gt' => [new UTCDateTime($dateTimeNow), '$ticketFrDueBy']] # passou da data limite?
  41. ]
  42. ]
  43. ]
  44. ]
  45. ]
  46. ],
  47. [
  48. '$sort' => ['created_at' => -1],
  49. ],
  50. [
  51. '$match' => [
  52. 'sla_violated' => true
  53. ]
  54. ],
  55. ];
  56.  
  57. $getAgent = function ($id) use ($agentsCollection) {
  58. $found = $agentsCollection->findOne(['userId' => $id]);
  59.  
  60. if (!$id || !$found) {
  61. return 'Não identificado';
  62. }
  63.  
  64. return sprintf('%s (%s)', $found->name, $found->email);
  65. };
  66.  
  67.  
  68.  
  69. $csv = Writer::createFromPath('/tmp/relatorio_violacao_sla.csv', 'w');
  70. $header = ['TICKET ID', 'ASSUNTO', 'AGENTE', 'DATA DE CRIAÇÃO', 'DATA LIMITE P/ PRIMEIRA RESPOSTA', 'DATA PRIMEIRA RESPOSTA', 'VIOLAÇÃO SLA?'];
  71. $records = [];
  72. $csv->insertOne($header);
  73. /** @var MongoDB\Driver\Cursor $result */
  74. $cursor = $ticketsCollection->aggregate($pipeline);
  75.  
  76. foreach ($cursor as $document) {
  77. $agente = $getAgent($document->responder_id);
  78.  
  79. $records[] = [
  80. $document->ticket,
  81. $document->assunto,
  82. $agente,
  83. $document->ticket_criado_em,
  84. $document->primeira_resposta_vence_em,
  85. $document->data_primeira_resposta,
  86. $document->sla_violated ? 'SIM' : 'NAO',
  87. ];
  88. }
  89.  
  90. $csv->insertAll($records);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement