diff --git a/include/ajax.reports.php b/include/ajax.reports.php index 7b2e4f450a74e0b780b8bbede6515d0382684152..81eb83b8d802fd60a199780fa583ff77ec49cee7 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 @@ -192,18 +193,22 @@ class OverviewReportAjaxAPI extends AjaxController { # Fetch all types of events over the timeframe $res = db_query('SELECT DISTINCT(state) FROM '.THREAD_EVENT_TABLE .' WHERE timestamp BETWEEN '.$start.' AND '.$stop - .' ORDER BY 1'); + .' AND state IN ("created", "closed", "reopened", "assigned", "overdue", "transferred")' + .' ORDER BY 1'); $events = array(); while ($row = db_fetch_row($res)) $events[] = $row[0]; # 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\')' + .' AND E.state IN ("created", "closed", "reopened", "assigned", "overdue", "transferred")' + .' GROUP BY E.state, DATE_FORMAT(E.timestamp, \'%Y-%m-%d\')' .' ORDER BY 2, 1'); # Initialize array of plot values $plots = array();