BCC-kenttä tiketteihin + To/CC/BCC tallennus + allekirjoituskorjaus

- Lisää BCC-kenttä vastauslomakkeeseen (HTML, JS, API)
- To/CC/BCC tallentuvat tiketille pysyvästi (seuraava vastaus muistaa muutokset)
- Lisää to_email ja bcc sarakkeet tickets-tauluun
- BCC-tuki SMTP-lähetykseen (RCPT TO ilman headeria)
- Korjaa allekirjoitukset: buildSignaturesWithDefaults() generoi nyt oletukset
  myös Zammad-sähköposteille (support@web1.fi ym.), ei pelkille mailboxeille
- Allekirjoituksiin lisätty puhelinnumero

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 02:54:57 +02:00
parent 3d66319d89
commit 6f1d9ed5d4
4 changed files with 67 additions and 20 deletions

View File

@@ -1838,14 +1838,18 @@ async function showTicketDetail(id, companyId = '') {
document.querySelector('.btn-reply-tab[data-reply-type="reply"]').classList.add('active');
document.getElementById('btn-send-reply').textContent = 'Lähetä vastaus';
// TO-kenttä — tiketin alkuperäinen lähettäjä
// TO-kenttä — käytä tiketin tallennettua to_email:a, tai fallback from_email:iin
const toField = document.getElementById('reply-to');
if (toField) toField.value = ticket.from_email || '';
if (toField) toField.value = ticket.to_email || ticket.from_email || '';
// CC-kenttä — täytetään tiketin CC:stä
const ccField = document.getElementById('reply-cc');
if (ccField) ccField.value = ticket.cc || '';
// BCC-kenttä — täytetään tiketin BCC:stä
const bccField = document.getElementById('reply-bcc');
if (bccField) bccField.value = ticket.bcc || '';
// Mailbox-valinta — Zammad-tiketit vastaa Zammadin kautta, muut SMTP:llä
const mbSelect = document.getElementById('reply-mailbox-select');
let replyMailboxes = []; // tallennetaan postilaatikkodata allekirjoitushakua varten
@@ -2027,12 +2031,14 @@ document.getElementById('btn-send-reply').addEventListener('click', async () =>
}
if (zSig) zBody += '\n\n-- \n' + zSig;
}
// Lähetä Zammad API:n kautta — välitä myös to/cc-kentät
// Lähetä Zammad API:n kautta — välitä myös to/cc/bcc-kentät
const zPayload = { ticket_id: currentTicketId, body: zBody };
const zToFld = document.getElementById('reply-to');
const zCcFld = document.getElementById('reply-cc');
const zBccFld = document.getElementById('reply-bcc');
if (zToFld && zToFld.value.trim()) zPayload.to = zToFld.value.trim();
if (zCcFld && zCcFld.value.trim()) zPayload.cc = zCcFld.value.trim();
if (zBccFld && zBccFld.value.trim()) zPayload.bcc = zBccFld.value.trim();
await apiCall('zammad_reply' + ticketCompanyParam(), 'POST', zPayload);
} else {
const action = ticketReplyType === 'note' ? 'ticket_note' : 'ticket_reply';
@@ -2041,10 +2047,12 @@ document.getElementById('btn-send-reply').addEventListener('click', async () =>
const mbSel = document.getElementById('reply-mailbox-select');
const toFld = document.getElementById('reply-to');
const ccFld = document.getElementById('reply-cc');
const bccFld = document.getElementById('reply-bcc');
const useSig = document.getElementById('reply-use-signature');
if (mbSel) payload.mailbox_id = mbSel.value;
if (toFld && toFld.value.trim()) payload.to = toFld.value.trim();
if (ccFld) payload.cc = ccFld.value.trim();
if (bccFld) payload.bcc = bccFld.value.trim();
if (useSig && !useSig.checked) payload.no_signature = true;
}
await apiCall(action + ticketCompanyParam(), 'POST', payload);