diff --git a/api.php b/api.php index bcbe4ba..a087bdb 100644 --- a/api.php +++ b/api.php @@ -3075,8 +3075,13 @@ switch ($action) { if ($integ && $integ['enabled']) { $z = new ZammadClient($integ['config']['url'], $integ['config']['token']); $articles = $z->getArticles((int)$ticket['zammad_ticket_id']); + $toEmail = ''; foreach ($articles as $art) { if (($art['internal'] ?? false)) continue; + // Tallenna ensimmäisen saapuneen viestin to-osoite + if (!$toEmail && ($art['sender'] ?? '') === 'Customer' && !empty($art['to'])) { + $toEmail = $art['to']; + } $artId = (int)$art['id']; $existingMsg = dbGetMessageByZammadArticleId($ticket['id'], $artId); if ($existingMsg) continue; @@ -3094,6 +3099,10 @@ switch ($action) { $art['message_id'] ?? '', $artId] ); } + // Tallenna Zammad to-osoite tikettiin + if ($toEmail) { + _dbExecute("UPDATE tickets SET zammad_to_email = ? WHERE id = ?", [$toEmail, $ticket['id']]); + } // Lataa tiketti uudelleen viestien kanssa $tickets = dbLoadTickets($companyId); foreach ($tickets as $t) { @@ -5276,7 +5285,7 @@ switch ($action) { $body = $input['body'] ?? ''; if (!$ticketId || !$body) { http_response_code(400); echo json_encode(['error' => 'Tiketti ja viesti vaaditaan']); break; } - $ticket = _dbFetchRow("SELECT * FROM tickets WHERE id = ? AND company_id = ?", [$ticketId, $companyId]); + $ticket = _dbFetchOne("SELECT * FROM tickets WHERE id = ? AND company_id = ?", [$ticketId, $companyId]); if (!$ticket || !$ticket['zammad_ticket_id']) { http_response_code(400); echo json_encode(['error' => 'Tiketti ei ole Zammad-tiketti']); diff --git a/index.html b/index.html index 73a51d4..24eeebd 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ Noxus HUB - + @@ -2229,6 +2229,6 @@ - + diff --git a/script.js b/script.js index 040d9e3..e46f052 100644 --- a/script.js +++ b/script.js @@ -1846,29 +1846,33 @@ async function showTicketDetail(id, companyId = '') { const ccField = document.getElementById('reply-cc'); if (ccField) ccField.value = ticket.cc || ''; - // Mailbox-valinta — täytetään yrityksen postilaatikoista + // Mailbox-valinta — Zammad-tiketit vastaa Zammadin kautta, muut SMTP:llä const mbSelect = document.getElementById('reply-mailbox-select'); if (mbSelect) { - try { - const mailboxes = await apiCall('all_mailboxes'); - // Suodata pois piilotetut postilaatikot (paitsi jos tiketin oma mailbox on piilotettu — se näytetään silti) - const visibleMailboxes = mailboxes.filter(mb => - String(mb.id) === String(ticket.mailbox_id || '') || - (!currentHiddenMailboxes.includes(String(mb.id)) && !currentHiddenMailboxes.includes(mb.id)) - ); - const ticketMbId = String(ticket.mailbox_id || ''); - const hasMatch = ticketMbId && visibleMailboxes.some(mb => String(mb.id) === ticketMbId); - let optionsHtml = ''; - if (!hasMatch) optionsHtml = ''; - optionsHtml += visibleMailboxes.map(mb => - `` - ).join(''); - mbSelect.innerHTML = optionsHtml; - // Vaihda allekirjoitusta kun mailbox vaihtuu - mbSelect.addEventListener('change', function() { - updateSignaturePreview(this.value); - }); - } catch (e) { mbSelect.innerHTML = ''; } + if (ticket.source === 'zammad' && ticket.zammad_ticket_id) { + // Zammad-tiketti: vastaus menee Zammadin kautta + const zTo = ticket.zammad_to_email || ticket.zammad_group || 'Zammad'; + mbSelect.innerHTML = ``; + } else { + try { + const mailboxes = await apiCall('all_mailboxes'); + const visibleMailboxes = mailboxes.filter(mb => + String(mb.id) === String(ticket.mailbox_id || '') || + (!currentHiddenMailboxes.includes(String(mb.id)) && !currentHiddenMailboxes.includes(mb.id)) + ); + const ticketMbId = String(ticket.mailbox_id || ''); + const hasMatch = ticketMbId && visibleMailboxes.some(mb => String(mb.id) === ticketMbId); + let optionsHtml = ''; + if (!hasMatch) optionsHtml = ''; + optionsHtml += visibleMailboxes.map(mb => + `` + ).join(''); + mbSelect.innerHTML = optionsHtml; + } catch (e) { mbSelect.innerHTML = ''; } + } + mbSelect.addEventListener('change', function() { + updateSignaturePreview(this.value); + }); } // Allekirjoituksen esikatselu