diff --git a/api.php b/api.php index 49f2f2e..d35aec8 100644 --- a/api.php +++ b/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++; }