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