Fix Zammad sync overwriting local ticket status

Local statuses (odottaa vastausta, kasittelyssa, odottaa) set in the
intra UI were being overwritten by Zammad's state on every sync.
Now these statuses are preserved unless Zammad explicitly closes the ticket.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 23:27:35 +02:00
parent f24123be81
commit 6fdfc9ec97

13
api.php
View File

@@ -5833,14 +5833,21 @@ switch ($action) {
// PAITSI jos Zammadissa status on oikeasti muuttunut (esim. uusi viesti avasi tiketin)
$localStatus = $existing['status'] ?? '';
$newStatus = $status;
if ($localStatus === 'suljettu' && $status === 'uusi') {
// Tilat jotka on asetettu lokaalisti intrassa — Zammad ei saa ylikirjoittaa
$localOnlyStatuses = ['odottaa vastausta', 'kasittelyssa', 'odottaa'];
if (in_array($localStatus, $localOnlyStatuses)) {
// Säilytä lokaali tila — paitsi jos Zammadissa on suljettu
if ($status === 'suljettu') {
$newStatus = 'suljettu';
} else {
$newStatus = $localStatus;
}
} elseif ($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';
}
}