From d5ed05017baf6153432d6c050cd59960ef305d22 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Wed, 29 Jul 2026 00:21:13 -0400 Subject: [PATCH] Allow selecting client SLA assignments on client create/edit --- agent/modals/client/client_add.php | 28 ++++++++++++++++++ agent/modals/client/client_edit.php | 35 ++++++++++++++++++++++ agent/post/client.php | 46 +++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) diff --git a/agent/modals/client/client_add.php b/agent/modals/client/client_add.php index 64cb44ae..bf05a353 100644 --- a/agent/modals/client/client_add.php +++ b/agent/modals/client/client_add.php @@ -159,6 +159,34 @@ ob_start(); + +
+ +
+ +
+ + +
+ +
+ Default follows the global SLA assignment for each priority. +
+ +
diff --git a/agent/modals/client/client_edit.php b/agent/modals/client/client_edit.php index 3a9fa8a8..b242d51b 100644 --- a/agent/modals/client/client_edit.php +++ b/agent/modals/client/client_edit.php @@ -24,6 +24,13 @@ $client_notes = escapeHtml($row['client_notes']); $client_created_at = escapeHtml($row['client_created_at']); $client_archived_at = escapeHtml($row['client_archived_at']); +// Client SLA assignments +$client_sla_assignments = []; +$sql_client_slas = mysqli_query($mysqli, "SELECT sla_assignment_priority, sla_assignment_sla_id FROM sla_assignments WHERE sla_assignment_client_id = $client_id"); +while ($client_sla_row = mysqli_fetch_assoc($sql_client_slas)) { + $client_sla_assignments[$client_sla_row['sla_assignment_priority']] = intval($client_sla_row['sla_assignment_sla_id']); +} + // Client Tags $client_tag_id_array = array(); $sql_client_tags = mysqli_query($mysqli, "SELECT tag_id FROM client_tags WHERE client_id = $client_id"); @@ -186,6 +193,34 @@ ob_start();
+ +
+ +
+ +
+ + +
+ +
+ Default follows the global SLA assignment for each priority. +
+ + diff --git a/agent/post/client.php b/agent/post/client.php index af285bfe..4a7ce844 100644 --- a/agent/post/client.php +++ b/agent/post/client.php @@ -244,6 +244,17 @@ if (isset($_POST['add_client'])) { } } + // Ticket SLA assignments (fields only rendered when active SLAs exist) + if (isset($_POST['client_sla_low'])) { + foreach (['Low', 'Medium', 'High'] as $sla_priority) { + $sla_value = strval($_POST['client_sla_' . strtolower($sla_priority)] ?? 'default'); + if ($sla_value !== 'default') { + $client_sla_id = intval($sla_value); + mysqli_query($mysqli, "INSERT INTO sla_assignments SET sla_assignment_client_id = $client_id, sla_assignment_priority = '$sla_priority', sla_assignment_sla_id = $client_sla_id"); + } + } + } + logAudit("Client", "Create", "$session_name created client $name$extended_log_description", $client_id, $client_id); flashAlert("Client $name created"); @@ -322,6 +333,41 @@ if (isset($_POST['edit_client'])) { } } + // Ticket SLA assignments (fields only rendered when active SLAs exist) + if (isset($_POST['client_sla_low'])) { + + // Compare with current state so an unrelated client edit doesn't + // restamp tickets (restamping clobbers manual per-ticket SLA pins) + $current_sla_assignments = []; + $sql_current_slas = mysqli_query($mysqli, "SELECT sla_assignment_priority, sla_assignment_sla_id FROM sla_assignments WHERE sla_assignment_client_id = $client_id"); + while ($current_sla_row = mysqli_fetch_assoc($sql_current_slas)) { + $current_sla_assignments[$current_sla_row['sla_assignment_priority']] = strval(intval($current_sla_row['sla_assignment_sla_id'])); + } + + $sla_assignments_changed = false; + foreach (['Low', 'Medium', 'High'] as $sla_priority) { + $sla_value = strval($_POST['client_sla_' . strtolower($sla_priority)] ?? 'default'); + $sla_current = $current_sla_assignments[$sla_priority] ?? 'default'; + if ($sla_value === $sla_current) { + continue; + } + $sla_assignments_changed = true; + mysqli_query($mysqli, "DELETE FROM sla_assignments WHERE sla_assignment_client_id = $client_id AND sla_assignment_priority = '$sla_priority'"); + if ($sla_value !== 'default') { + $client_sla_id = intval($sla_value); + mysqli_query($mysqli, "INSERT INTO sla_assignments SET sla_assignment_client_id = $client_id, sla_assignment_priority = '$sla_priority', sla_assignment_sla_id = $client_sla_id"); + } + } + + if ($sla_assignments_changed) { + // Re-resolve this client's open tickets against the new assignments + $sql_sla_tickets = mysqli_query($mysqli, "SELECT ticket_id FROM tickets WHERE ticket_client_id = $client_id AND ticket_closed_at IS NULL AND ticket_archived_at IS NULL"); + while ($sla_ticket_row = mysqli_fetch_assoc($sql_sla_tickets)) { + applyTicketSla($sla_ticket_row['ticket_id']); + } + } + } + logAudit("Client", "Edit", "$session_name edited client $name", $client_id, $client_id); flashAlert("Client $name updated");