Sync ticket status to Zammad + prevent closed tickets reopening
- When changing ticket status in intra, now syncs to Zammad too (close in intra → close in Zammad, etc.) - Prevent Zammad sync from reopening locally closed tickets unless Zammad has genuinely new activity (updated_at changed) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
36
api.php
36
api.php
@@ -3661,6 +3661,25 @@ switch ($action) {
|
||||
dbSaveTicket($companyId, $t);
|
||||
$found = true;
|
||||
dbAddLog($companyId, currentUser(), 'ticket_status', $t['id'], $t['subject'], "Tila: {$oldStatus} → {$status}");
|
||||
// Synkkaa tila Zammadiin
|
||||
if (!empty($t['zammad_ticket_id'])) {
|
||||
$integ = dbGetIntegration($companyId, 'zammad');
|
||||
if ($integ && $integ['enabled']) {
|
||||
try {
|
||||
$reverseStateMap = [
|
||||
'uusi' => 'new', 'kasittelyssa' => 'open',
|
||||
'odottaa' => 'pending reminder', 'suljettu' => 'closed',
|
||||
];
|
||||
$zState = $reverseStateMap[$status] ?? null;
|
||||
if ($zState) {
|
||||
$z = new ZammadClient($integ['config']['url'], $integ['config']['token']);
|
||||
$z->updateTicket((int)$t['zammad_ticket_id'], ['state' => $zState]);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
error_log("Zammad status sync failed: " . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
echo json_encode($t);
|
||||
break;
|
||||
}
|
||||
@@ -5464,10 +5483,25 @@ switch ($action) {
|
||||
} else {
|
||||
$ticketId = $existing['id'];
|
||||
$zammadUpdated = date('Y-m-d H:i:s', strtotime($zt['updated_at'] ?? 'now'));
|
||||
// Jos tiketti on suljettu tässä järjestelmässä, älä palauta uudeksi
|
||||
// PAITSI jos Zammadissa status on oikeasti muuttunut (esim. uusi viesti avasi tiketin)
|
||||
$localStatus = $existing['status'] ?? '';
|
||||
$newStatus = $status;
|
||||
if ($localStatus === 'suljettu' && $status === 'uusi') {
|
||||
// Tarkista onko Zammadissa oikeasti uutta toimintaa (updated_at muuttunut)
|
||||
$localUpdated = $existing['updated'] ?? '';
|
||||
if ($zammadUpdated > $localUpdated) {
|
||||
// Zammadissa on tapahtunut jotain — avaa uudelleen
|
||||
$newStatus = 'uusi';
|
||||
} else {
|
||||
// Ei muutoksia — pidä suljettuna
|
||||
$newStatus = 'suljettu';
|
||||
}
|
||||
}
|
||||
// Päivitä status/priority/group
|
||||
_dbExecute(
|
||||
"UPDATE tickets SET status = ?, type = ?, priority = ?, subject = ?, zammad_group = ?, updated = ? WHERE id = ?",
|
||||
[$status, $type, $priority, $zt['title'] ?? '', $group, $zammadUpdated, $ticketId]
|
||||
[$newStatus, $type, $priority, $zt['title'] ?? '', $group, $zammadUpdated, $ticketId]
|
||||
);
|
||||
$updated++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user