diff --git a/post.php b/post.php index 0650d5fa..be491018 100644 --- a/post.php +++ b/post.php @@ -6848,28 +6848,31 @@ if(isset($_GET['delete_ticket'])){ $ticket_id = intval($_GET['delete_ticket']); // Get Ticket and Client ID for logging and alert message - $sql = mysqli_query($mysqli,"SELECT ticket_prefix, ticket_number, ticket_subject, ticket_client_id FROM tickets WHERE ticket_id = $ticket_id AND company_id = $session_company_id"); + $sql = mysqli_query($mysqli,"SELECT ticket_prefix, ticket_number, ticket_subject, ticket_status, ticket_client_id FROM tickets WHERE ticket_id = $ticket_id AND company_id = $session_company_id"); $row = mysqli_fetch_array($sql); $ticket_prefix = strip_tags(mysqli_real_escape_string($mysqli,$row['ticket_prefix'])); $ticket_number = strip_tags(mysqli_real_escape_string($mysqli,$row['ticket_number'])); $ticket_subject = strip_tags(mysqli_real_escape_string($mysqli,$row['ticket_subject'])); + $ticket_status = strip_tags(mysqli_real_escape_string($mysqli,$row['ticket_status'])); $client_id = intval($row['ticket_client_id']); - mysqli_query($mysqli,"DELETE FROM tickets WHERE ticket_id = $ticket_id AND company_id = $session_company_id"); + if ($ticket_status !== 'Closed') { + mysqli_query($mysqli,"DELETE FROM tickets WHERE ticket_id = $ticket_id AND company_id = $session_company_id"); - // Delete all ticket replies - mysqli_query($mysqli,"DELETE FROM ticket_replies WHERE ticket_reply_ticket_id = $ticket_id AND company_id = $session_company_id"); + // Delete all ticket replies + mysqli_query($mysqli,"DELETE FROM ticket_replies WHERE ticket_reply_ticket_id = $ticket_id AND company_id = $session_company_id"); - // Delete all ticket views - mysqli_query($mysqli,"DELETE FROM ticket_views WHERE view_ticket_id = $ticket_id"); + // Delete all ticket views + mysqli_query($mysqli,"DELETE FROM ticket_views WHERE view_ticket_id = $ticket_id"); - // Logging - mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Ticket', log_action = 'Delete', log_description = '$session_name deleted ticket $ticket_prefix$ticket_number - $ticket_subject along with all replies', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id, company_id = $session_company_id"); + // Logging + mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Ticket', log_action = 'Delete', log_description = '$session_name deleted ticket $ticket_prefix$ticket_number - $ticket_subject along with all replies', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id, company_id = $session_company_id"); - $_SESSION['alert_type'] = "error"; - $_SESSION['alert_message'] = "Ticket $ticket_prefix$ticket_number along with all replies deleted"; + $_SESSION['alert_type'] = "error"; + $_SESSION['alert_message'] = "Ticket $ticket_prefix$ticket_number along with all replies deleted"; - header("Location: " . $_SERVER["HTTP_REFERER"]); + header("Location: " . $_SERVER["HTTP_REFERER"]); + } } @@ -6890,8 +6893,7 @@ if(isset($_POST['add_ticket_reply'])){ if(isset($_POST['public_reply_type'])){ $ticket_reply_type = 'Public'; - } - else{ + } else { $ticket_reply_type = 'Internal'; } @@ -6903,6 +6905,10 @@ if(isset($_POST['add_ticket_reply'])){ // Update Ticket Last Response Field mysqli_query($mysqli,"UPDATE tickets SET ticket_status = '$ticket_status' WHERE ticket_id = $ticket_id AND company_id = $session_company_id") or die(mysqli_error($mysqli)); + if ($ticket_status == 'Closed') { + mysqli_query($mysqli,"UPDATE tickets SET ticket_closed_at = NOW() WHERE ticket_id = $ticket_id AND company_id = $session_company_id"); + } + // Get Ticket Details $ticket_sql = mysqli_query($mysqli,"SELECT contact_name, contact_email, ticket_prefix, ticket_number, ticket_subject, company_phone, ticket_client_id, ticket_created_by, ticket_assigned_to FROM tickets LEFT JOIN clients ON ticket_client_id = client_id @@ -7056,7 +7062,7 @@ if(isset($_POST['merge_ticket'])){ //Update current ticket mysqli_query($mysqli,"INSERT INTO ticket_replies SET ticket_reply = 'Ticket $ticket_prefix$ticket_number merged into $ticket_prefix$merge_into_ticket_number. Comment: $merge_comment', ticket_reply_time_worked = '00:01:00', ticket_reply_type = '$ticket_reply_type', ticket_reply_by = $session_user_id, ticket_reply_ticket_id = $ticket_id, company_id = $session_company_id") or die(mysqli_error($mysqli)); - mysqli_query($mysqli,"UPDATE tickets SET ticket_status = 'Closed' WHERE ticket_id = $ticket_id AND company_id = $session_company_id") or die(mysqli_error($mysqli)); + mysqli_query($mysqli,"UPDATE tickets SET ticket_status = 'Closed', ticket_closed_at = NOW() WHERE ticket_id = $ticket_id AND company_id = $session_company_id") or die(mysqli_error($mysqli)); //Update new ticket mysqli_query($mysqli,"INSERT INTO ticket_replies SET ticket_reply = 'Ticket $ticket_prefix$ticket_number was merged into this ticket with comment: $merge_comment.
$ticket_subject
$ticket_details', ticket_reply_time_worked = '00:01:00', ticket_reply_type = '$ticket_reply_type', ticket_reply_by = $session_user_id, ticket_reply_ticket_id = $merge_into_ticket_id, company_id = $session_company_id") or die(mysqli_error($mysqli)); diff --git a/report_ticket_by_client.php b/report_ticket_by_client.php index 930c0f25..beb81ccb 100644 --- a/report_ticket_by_client.php +++ b/report_ticket_by_client.php @@ -3,6 +3,44 @@ require_once("inc_all_reports.php"); validateTechRole(); +function secondsToTime($inputSeconds) { + $secondsInAMinute = 60; + $secondsInAnHour = 60 * $secondsInAMinute; + $secondsInADay = 24 * $secondsInAnHour; + + // Extract days + $days = floor($inputSeconds / $secondsInADay); + + // Extract hours + $hourSeconds = $inputSeconds % $secondsInADay; + $hours = floor($hourSeconds / $secondsInAnHour); + + // Extract minutes + $minuteSeconds = $hourSeconds % $secondsInAnHour; + $minutes = floor($minuteSeconds / $secondsInAMinute); + + // Extract the remaining seconds + $remainingSeconds = $minuteSeconds % $secondsInAMinute; + $seconds = ceil($remainingSeconds); + + // Format and return + $timeParts = []; + $sections = [ + 'day' => (int)$days, + 'hour' => (int)$hours, + 'minute' => (int)$minutes, + 'second' => (int)$seconds, + ]; + + foreach ($sections as $name => $value){ + if ($value > 0){ + $timeParts[] = $value. ' '.$name.($value == 1 ? '' : 's'); + } + } + + return implode(', ', $timeParts); +} + if (isset($_GET['year'])) { $year = intval($_GET['year']); } else { @@ -38,7 +76,9 @@ $sql_clients = mysqli_query($mysqli, "SELECT client_id, client_name FROM clients Client - Ticket Count + Tickets raised + Tickets closed + Avg time to close @@ -47,18 +87,39 @@ $sql_clients = mysqli_query($mysqli, "SELECT client_id, client_name FROM clients $client_id = $row['client_id']; $client_name = htmlentities($row['client_name']); - $sql_ticket_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_count FROM tickets WHERE YEAR(ticket_created_at) = $year AND ticket_client_id = '$client_id'"); - $row = mysqli_fetch_array($sql_ticket_count); + // 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 ticket_client_id = '$client_id'"); + $row = mysqli_fetch_array($sql_ticket_raised_count); + $ticket_raised_count = intval($row['ticket_raised_count']); - $ticket_count = intval($row['ticket_count']); + // Calculate total tickets raised in period that are closed + $sql_ticket_closed_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_closed_count FROM tickets WHERE YEAR(ticket_created_at) = $year AND ticket_client_id = '$client_id' AND ticket_status = 'Closed' AND ticket_closed_at IS NOT NULL"); + $row = mysqli_fetch_array($sql_ticket_closed_count); + $ticket_closed_count = intval($row['ticket_closed_count']); - if ($ticket_count > 0) { + // Used to calculate average time to close tickets that were raised in period specified + $sql_tickets = mysqli_query($mysqli, "SELECT ticket_created_at, ticket_closed_at FROM tickets WHERE YEAR(ticket_created_at) = $year AND ticket_client_id = '$client_id' AND ticket_status = 'Closed' AND ticket_closed_at IS NOT NULL"); + + if ($ticket_raised_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']); + $closedTime = new DateTime($row['ticket_closed_at']); + + $total += ($closedTime->getTimestamp() - $openedTime->getTimestamp()); + $count++; + } ?> - + + +