From 91db3e2f37376161d139d5f3b0fb2199acf46c42 Mon Sep 17 00:00:00 2001 From: Marcus Hill Date: Tue, 3 Sep 2024 21:49:52 +0100 Subject: [PATCH] Enhance tickets by client report Enhancements ot the tickets by client report - Breakdown tickets by priority (low/med/high) - Breakdown stats per month, in addition to the existing per-year breakdown --- report_ticket_by_client.php | 269 ++++++++++++++++++++++++++++-------- 1 file changed, 211 insertions(+), 58 deletions(-) diff --git a/report_ticket_by_client.php b/report_ticket_by_client.php index cb69309e9..02dcc48f1 100644 --- a/report_ticket_by_client.php +++ b/report_ticket_by_client.php @@ -50,6 +50,12 @@ function secondsToTime($inputSeconds) { $year = date('Y'); } +if (isset($_GET['month'])) { + $month = intval($_GET['month']); +} else { + $month = date('m'); +} + $sql_ticket_years = mysqli_query($mysqli, "SELECT DISTINCT YEAR(ticket_created_at) AS ticket_year FROM tickets ORDER BY ticket_year DESC"); $sql_clients = mysqli_query($mysqli, "SELECT client_id, client_name FROM clients WHERE client_archived_at IS NULL ORDER BY client_name ASC"); @@ -72,73 +78,220 @@ function secondsToTime($inputSeconds) { + -
- - - - - - - - - - - - 0) { - - // Calculate average time to solve - $count = 0; - $total = 0; - while ($row = mysqli_fetch_array($sql_tickets)) { - $openedTime = new DateTime($row['ticket_created_at']); - $resolvedTime = new DateTime($row['ticket_resolved_at']); - - $total += ($resolvedTime->getTimestamp() - $openedTime->getTimestamp()); - $count++; - } - $avg_time_to_resolve = $total / $count; +
+
+

Yearly ()

+
+
+
+
ClientTickets raisedTickets resolvedTotal Time worked (H:M:S)Avg time to resolve
+ + + + + + + + + + + + + + 0 || $ticket_resolved_count > 0) { + + $avg_time_to_resolve = '-'; + if ($ticket_resolved_count > 0) { + // Calculate average time to solve + $count = 0; + $total = 0; + while ($row = mysqli_fetch_array($sql_tickets)) { + $openedTime = new DateTime($row['ticket_created_at']); + $resolvedTime = new DateTime($row['ticket_resolved_at']); + + $total += ($resolvedTime->getTimestamp() - $openedTime->getTimestamp()); + $count++; + } + $avg_time_to_resolve = secondsToTime($total / $count); + } + + ?> + + + + + + + + + + + + +
ClientTickets raisedBy priority: LowBy priority: MedBy priority: HighTickets resolvedTotal Time worked (H:M:S)Avg time to resolve
+
+ + + + +
+
+

Monthly ()

+
+
+
+ + - - - - - + + + + + + + + + + - -
ClientTickets raisedBy priority: LowBy priority: MedBy priority: HighTickets resolvedTotal Time worked (H:M:S)Avg time to resolve
+ mysqli_data_seek($sql_clients, 0); // Reset + while ($row = mysqli_fetch_array($sql_clients)) { + $client_id = intval($row['client_id']); + $client_name = nullable_htmlentities($row['client_name']); + + // Calculate total tickets raised in period + $sql_ticket_raised_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_raised_count FROM tickets WHERE YEAR(ticket_created_at) = $year AND MONTH(ticket_created_at) = $month AND ticket_client_id = $client_id"); + $row = mysqli_fetch_array($sql_ticket_raised_count); + $ticket_raised_count = intval($row['ticket_raised_count']); + + // Calculate total tickets raised in period that are resolved + $sql_ticket_resolved_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_resolved_count FROM tickets WHERE YEAR(ticket_created_at) = $year AND MONTH(ticket_created_at) = $month AND ticket_client_id = $client_id AND ticket_resolved_at IS NOT NULL"); + $row = mysqli_fetch_array($sql_ticket_resolved_count); + $ticket_resolved_count = intval($row['ticket_resolved_count']); + + // Breakdown tickets for each priority - Low + $sql_low_ticket_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS low_ticket_count FROM TICKETS WHERE YEAR(ticket_created_at) = $year AND MONTH(ticket_created_at) = $month AND ticket_client_id = $client_id AND ticket_priority = 'Low'"); + $row = mysqli_fetch_array($sql_low_ticket_count); + $low_ticket_count = intval($row['low_ticket_count']); + + // Breakdown tickets for each priority - Low + $sql_med_ticket_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS med_ticket_count FROM TICKETS WHERE YEAR(ticket_created_at) = $year AND MONTH(ticket_created_at) = $month AND ticket_client_id = $client_id AND ticket_priority = 'Medium'"); + $row = mysqli_fetch_array($sql_med_ticket_count); + $med_ticket_count = intval($row['med_ticket_count']); + + // Breakdown tickets for each priority - Low + $sql_high_ticket_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS high_ticket_count FROM TICKETS WHERE YEAR(ticket_created_at) = $year AND MONTH(ticket_created_at) = $month AND ticket_client_id = $client_id AND ticket_priority = 'High'"); + $row = mysqli_fetch_array($sql_high_ticket_count); + $high_ticket_count = intval($row['high_ticket_count']); + + // Used to calculate average time to resolve tickets that were raised in period specified + $sql_tickets = mysqli_query($mysqli, "SELECT ticket_created_at, ticket_resolved_at FROM tickets WHERE YEAR(ticket_created_at) = $year AND MONTH(ticket_created_at) = $month AND ticket_client_id = $client_id AND ticket_resolved_at IS NOT NULL"); + + // Calculate total time tracked towards tickets in the period + $sql_time = mysqli_query($mysqli, "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(ticket_reply_time_worked))) as total_time FROM ticket_replies LEFT JOIN tickets ON tickets.ticket_id = ticket_replies.ticket_reply_ticket_id WHERE YEAR(ticket_created_at) = $year AND MONTH(ticket_created_at) = $month AND ticket_client_id = $client_id AND ticket_reply_time_worked IS NOT NULL"); + $row = mysqli_fetch_array($sql_time); + $ticket_total_time_worked = nullable_htmlentities($row['total_time']); + + if ($ticket_raised_count > 0 || $ticket_resolved_count > 0) { + + $avg_time_to_resolve = '-'; + if ($ticket_resolved_count > 0) { + // Calculate average time to solve + $count = 0; + $total = 0; + while ($row = mysqli_fetch_array($sql_tickets)) { + $openedTime = new DateTime($row['ticket_created_at']); + $resolvedTime = new DateTime($row['ticket_resolved_at']); + + $total += ($resolvedTime->getTimestamp() - $openedTime->getTimestamp()); + $count++; + } + $avg_time_to_resolve = secondsToTime($total / $count); + } + + ?> + + + + + + + + + + + + + + +
+ +
+