From f6602fb81f7a0c38af6c2fd5848648e4d929eae7 Mon Sep 17 00:00:00 2001 From: Jukka Lampikoski Date: Tue, 10 Mar 2026 21:23:05 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20tiketin=20asiakas-automaattitunnistus?= =?UTF-8?q?=20+=20lis=C3=A4=C3=A4=20liidi=20-nappi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Kun tiketti avataan, tarkistetaan lähettäjän sähköposti asiakasrekisteristä (sahkoposti + laskutussahkoposti) - Jos asiakas löytyy → linkitetään automaattisesti + vihreä badge - Jos ei löydy → näytetään "Lisää liidi" -nappi lähettäjätietojen vieressä, joka avaa liidilomakkeen esitäytetyillä tiedoilla (yhteyshenkilö, sähköposti, muistiinpanot) - Jo linkitetyllä tiketillä näytetään vihreä asiakas-badge Co-Authored-By: Claude Opus 4.6 --- script.js | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/script.js b/script.js index 72bfeda..ae53553 100644 --- a/script.js +++ b/script.js @@ -1291,7 +1291,7 @@ async function showTicketDetail(id, companyId = '') {

${esc(ticket.subject)}

-
+
${esc(ticket.from_name)} <${esc(ticket.from_email)}> · Luotu ${esc(ticket.created)}
@@ -1369,7 +1369,7 @@ async function showTicketDetail(id, companyId = '') { } catch (e) { alert(e.message); } }); - // Customer link — load customers dropdown + // Customer link — load customers dropdown + automaattinen tunnistus try { const custSelect = document.getElementById('ticket-customer-select'); customers.forEach(c => { @@ -1379,6 +1379,45 @@ async function showTicketDetail(id, companyId = '') { if (c.id === ticket.customer_id) opt.selected = true; custSelect.appendChild(opt); }); + + // Automaattinen asiakastunnistus sähköpostin perusteella + const senderEmail = (ticket.from_email || '').toLowerCase().trim(); + const senderLine = document.getElementById('ticket-sender-line'); + if (senderEmail && !ticket.customer_id) { + const matchedCustomer = customers.find(c => + (c.sahkoposti || '').toLowerCase().trim() === senderEmail || + (c.laskutussahkoposti || '').toLowerCase().trim() === senderEmail + ); + if (matchedCustomer) { + // Löytyi asiakas → linkitä automaattisesti + custSelect.value = matchedCustomer.id; + custSelect.dispatchEvent(new Event('change')); + if (senderLine) { + senderLine.insertAdjacentHTML('beforeend', + ` ✓ ${esc(matchedCustomer.yritys)}`); + } + } else { + // Ei löytynyt → näytä "Lisää liidi" -nappi + if (senderLine) { + senderLine.insertAdjacentHTML('beforeend', + ` `); + document.getElementById('btn-ticket-add-lead')?.addEventListener('click', () => { + // Avaa liidilomake esitäytetyillä tiedoilla + openLeadForm(null); + document.getElementById('lead-form-yhteyshenkilo').value = ticket.from_name || ''; + document.getElementById('lead-form-sahkoposti').value = ticket.from_email || ''; + document.getElementById('lead-form-muistiinpanot').value = 'Tiketti: ' + (ticket.subject || '') + '\\nLähettäjä: ' + (ticket.from_email || ''); + }); + } + } + } else if (senderEmail && ticket.customer_id) { + // Asiakas jo linkitetty — näytä badge + const linked = customers.find(c => c.id === ticket.customer_id); + if (linked && senderLine) { + senderLine.insertAdjacentHTML('beforeend', + ` ✓ ${esc(linked.yritys)}`); + } + } } catch (e) {} document.getElementById('ticket-customer-select').addEventListener('change', async function() {