From 39a4770296242e6b2ee87206a76c8133891a2928 Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@osticket.com>
Date: Wed, 24 Jun 2015 16:07:08 +0000
Subject: [PATCH] bug: Fix reports bugs

---
 include/ajax.reports.php | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/include/ajax.reports.php b/include/ajax.reports.php
index 7b2e4f450..ba6b3005d 100644
--- a/include/ajax.reports.php
+++ b/include/ajax.reports.php
@@ -44,6 +44,7 @@ class OverviewReportAjaxAPI extends AjaxController {
             "dept" => array(
                 "table" => DEPT_TABLE,
                 "pk" => "id",
+                "fpk" => "dept_id",
                 "sort" => 'T1.name',
                 "fields" => 'T1.name',
                 "headers" => array(__('Department')),
@@ -81,7 +82,7 @@ class OverviewReportAjaxAPI extends AjaxController {
         $info = isset($groups[$group])?$groups[$group]:$groups['dept'];
 
         # XXX: Die if $group not in $groups
-
+        $info['fpk'] = $info['fpk'] ?: $info['pk'];
         $queries=array(
             array(5, 'SELECT '.$info['fields'].',
                 COUNT(*)-COUNT(NULLIF(A1.state, "created")) AS Opened,
@@ -91,7 +92,7 @@ class OverviewReportAjaxAPI extends AjaxController {
                 COUNT(*)-COUNT(NULLIF(A1.state, "reopened")) AS Reopened
             FROM '.$info['table'].' T1
                 LEFT JOIN '.THREAD_EVENT_TABLE.' A1
-                    ON (A1.'.$info['pk'].'=T1.'.$info['pk'].'
+                    ON (A1.'.$info['fpk'].'=T1.'.$info['pk'].'
                          AND NOT annulled
                          AND (A1.timestamp BETWEEN '.$start.' AND '.$stop.'))
                 LEFT JOIN '.STAFF_TABLE.' S1 ON (S1.staff_id=A1.staff_id)
@@ -102,7 +103,7 @@ class OverviewReportAjaxAPI extends AjaxController {
             array(1, 'SELECT '.$info['fields'].',
                 FORMAT(AVG(DATEDIFF(T2.closed, T2.created)),1) AS ServiceTime
             FROM '.$info['table'].' T1
-                LEFT JOIN '.TICKET_TABLE.' T2 ON (T2.'.$info['pk'].'=T1.'.$info['pk'].')
+                LEFT JOIN '.TICKET_TABLE.' T2 ON (T2.'.$info['fpk'].'=T1.'.$info['pk'].')
                 LEFT JOIN '.STAFF_TABLE.' S1 ON (S1.staff_id=T2.staff_id)
             WHERE '.$info['filter'].' AND T2.closed BETWEEN '.$start.' AND '.$stop.'
             GROUP BY T1.'.$info['pk'].'
@@ -111,7 +112,7 @@ class OverviewReportAjaxAPI extends AjaxController {
             array(1, 'SELECT '.$info['fields'].',
                 FORMAT(AVG(DATEDIFF(B2.created, B1.created)),1) AS ResponseTime
             FROM '.$info['table'].' T1
-                LEFT JOIN '.TICKET_TABLE.' T2 ON (T2.'.$info['pk'].'=T1.'.$info['pk'].')
+                LEFT JOIN '.TICKET_TABLE.' T2 ON (T2.'.$info['fpk'].'=T1.'.$info['pk'].')
                 LEFT JOIN '.THREAD_TABLE.' B0 ON (B0.object_id=T2.ticket_id
                     AND B0.object_type="T")
                 LEFT JOIN '.THREAD_ENTRY_TABLE.' B2 ON (B2.thread_id = B0.id
@@ -199,11 +200,13 @@ class OverviewReportAjaxAPI extends AjaxController {
         # TODO: Handle user => db timezone offset
         # XXX: Implement annulled column from the %ticket_event table
         $res = db_query('SELECT state, DATE_FORMAT(timestamp, \'%Y-%m-%d\'), '
-                .'COUNT(ticket_id)'
-            .' FROM '.THREAD_EVENT_TABLE
-            .' WHERE timestamp BETWEEN '.$start.' AND '.$stop
+                .'COUNT(DISTINCT T.id)'
+            .' FROM '.THREAD_EVENT_TABLE. ' E '
+            .' JOIN '.THREAD_TABLE. ' T
+                ON (T.id = E.thread_id AND T.object_type = "T") '
+            .' WHERE E.timestamp BETWEEN '.$start.' AND '.$stop
             .' AND NOT annulled'
-            .' GROUP BY state, DATE_FORMAT(timestamp, \'%Y-%m-%d\')'
+            .' GROUP BY E.state, DATE_FORMAT(E.timestamp, \'%Y-%m-%d\')'
             .' ORDER BY 2, 1');
         # Initialize array of plot values
         $plots = array();
-- 
GitLab