Tikettinäkymään 'Luo tehtävä' -nappi
Asiakaspalvelun tikettinäkymässä uusi nappi joka avaa TODO-tehtävälomakkeen esitäytetyillä tiedoilla: otsikko (tikettinumero + aihe), kategoria (tiketin tyypistä), prioriteetti ja kuvaus (lähettäjän tiedot). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
27
script.js
27
script.js
@@ -1440,6 +1440,7 @@ async function showTicketDetail(id, companyId = '') {
|
|||||||
<select id="ticket-customer-select" style="padding:6px 10px;border:2px solid #e0e0e0;border-radius:8px;font-size:0.85rem;">
|
<select id="ticket-customer-select" style="padding:6px 10px;border:2px solid #e0e0e0;border-radius:8px;font-size:0.85rem;">
|
||||||
<option value="">Ei asiakkuutta</option>
|
<option value="">Ei asiakkuutta</option>
|
||||||
</select>
|
</select>
|
||||||
|
<button class="btn-secondary" id="btn-ticket-to-todo" style="padding:6px 12px;font-size:0.82rem;" title="Luo tehtävä tästä tiketistä">📋 Tehtävä</button>
|
||||||
<button class="btn-danger" id="btn-ticket-delete" style="padding:6px 12px;font-size:0.82rem;">Poista</button>
|
<button class="btn-danger" id="btn-ticket-delete" style="padding:6px 12px;font-size:0.82rem;">Poista</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1567,6 +1568,11 @@ async function showTicketDetail(id, companyId = '') {
|
|||||||
} catch (e) { alert(e.message); }
|
} catch (e) { alert(e.message); }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Luo tehtävä tiketistä
|
||||||
|
document.getElementById('btn-ticket-to-todo')?.addEventListener('click', () => {
|
||||||
|
createTodoFromTicket(ticket);
|
||||||
|
});
|
||||||
|
|
||||||
// Tags: add new tag on Enter
|
// Tags: add new tag on Enter
|
||||||
document.getElementById('ticket-tag-input').addEventListener('keydown', async (e) => {
|
document.getElementById('ticket-tag-input').addEventListener('keydown', async (e) => {
|
||||||
if (e.key !== 'Enter') return;
|
if (e.key !== 'Enter') return;
|
||||||
@@ -3901,6 +3907,27 @@ let todosData = [];
|
|||||||
let currentTodoId = null;
|
let currentTodoId = null;
|
||||||
let currentTodoSubTab = 'tasks';
|
let currentTodoSubTab = 'tasks';
|
||||||
|
|
||||||
|
function createTodoFromTicket(ticket) {
|
||||||
|
// Vaihda todo-välilehdelle ja avaa uusi tehtävälomake esitäytetyillä tiedoilla
|
||||||
|
switchToTab('todo');
|
||||||
|
switchTodoSubTab('tasks');
|
||||||
|
// Pieni viive jotta tab ehtii renderöityä
|
||||||
|
setTimeout(async () => {
|
||||||
|
await openTaskEdit(null);
|
||||||
|
const num = ticket.ticket_number ? `#${ticket.ticket_number} ` : '';
|
||||||
|
document.getElementById('task-form-title').value = num + (ticket.subject || '');
|
||||||
|
// Mapataan tiketin tyyppi tehtävän kategoriaan
|
||||||
|
const catMap = { tekniikka: 'tekniikka', laskutus: 'laskutus', vika: 'tekniikka', muu: 'muu' };
|
||||||
|
document.getElementById('task-form-category').value = catMap[ticket.type] || '';
|
||||||
|
// Mapataan prioriteetti
|
||||||
|
const prioMap = { urgent: 'kiireellinen', 'tärkeä': 'tarkea', normaali: 'normaali' };
|
||||||
|
document.getElementById('task-form-priority').value = prioMap[ticket.priority] || 'normaali';
|
||||||
|
// Kuvaus: lähettäjä + lyhyt viite
|
||||||
|
const desc = `Tiketti${num ? ' ' + num : ''}: ${ticket.subject || ''}\nLähettäjä: ${ticket.from_name || ''} <${ticket.from_email || ''}>`;
|
||||||
|
document.getElementById('task-form-desc').value = desc;
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
|
||||||
const todoStatusLabels = { avoin:'Avoin', kaynnissa:'Käynnissä', odottaa:'Odottaa', valmis:'Valmis', ehdotettu:'Ehdotettu', harkinnassa:'Harkinnassa', toteutettu:'Toteutettu', hylatty:'Hylätty' };
|
const todoStatusLabels = { avoin:'Avoin', kaynnissa:'Käynnissä', odottaa:'Odottaa', valmis:'Valmis', ehdotettu:'Ehdotettu', harkinnassa:'Harkinnassa', toteutettu:'Toteutettu', hylatty:'Hylätty' };
|
||||||
const todoPriorityLabels = { normaali:'Normaali', tarkea:'Tärkeä', kiireellinen:'Kiireellinen' };
|
const todoPriorityLabels = { normaali:'Normaali', tarkea:'Tärkeä', kiireellinen:'Kiireellinen' };
|
||||||
const todoCategoryLabels = { tekniikka:'Tekniikka', laskutus:'Laskutus', myynti:'Myynti', asennus:'Asennus', muu:'Muu' };
|
const todoCategoryLabels = { tekniikka:'Tekniikka', laskutus:'Laskutus', myynti:'Myynti', asennus:'Asennus', muu:'Muu' };
|
||||||
|
|||||||
Reference in New Issue
Block a user