Automaattisäännöt: vastaanottaja-ehto, prioriteetti, abuse-tyyppi
- Lisää "Vastaanottaja sisältää" -ehto (to_contains) sääntöihin - Lisää "Aseta prioriteetti" -toimenpide (set_priority) - Lisää "Abuse" tikettityyppi - Korjaa DB-schema: subject_contains, to_contains, enabled, set_priority, set_tags sarakkeet - Parsii To-headerit sähköposteista säännön matchausta varten - Mahdollistaa esim. abuse@-postien automaattisen tyypityksen ja prioriteetin Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1348,6 +1348,7 @@ const ticketTypeLabels = {
|
||||
laskutus: 'Laskutus',
|
||||
tekniikka: 'Tekniikka',
|
||||
vika: 'Vika',
|
||||
abuse: 'Abuse',
|
||||
muu: 'Muu',
|
||||
};
|
||||
|
||||
@@ -1991,13 +1992,16 @@ function renderRules() {
|
||||
list.innerHTML = '<div style="text-align:center;padding:2rem;color:#aaa;">Ei sääntöjä vielä. Lisää ensimmäinen sääntö.</div>';
|
||||
return;
|
||||
}
|
||||
const priorityLabels = { normaali: 'Normaali', 'tärkeä': 'Tärkeä', urgent: 'Kiireellinen' };
|
||||
list.innerHTML = ticketRules.map(r => {
|
||||
const conditions = [];
|
||||
if (r.from_contains) conditions.push('Lähettäjä: <strong>' + esc(r.from_contains) + '</strong>');
|
||||
if (r.to_contains) conditions.push('Vastaanottaja: <strong>' + esc(r.to_contains) + '</strong>');
|
||||
if (r.subject_contains) conditions.push('Otsikko: <strong>' + esc(r.subject_contains) + '</strong>');
|
||||
const actions = [];
|
||||
if (r.set_status) actions.push('Tila → ' + (ticketStatusLabels[r.set_status] || r.set_status));
|
||||
if (r.set_type) actions.push('Tyyppi → ' + (ticketTypeLabels[r.set_type] || r.set_type));
|
||||
if (r.set_priority) actions.push('Prioriteetti → ' + (priorityLabels[r.set_priority] || r.set_priority));
|
||||
if (r.set_tags) actions.push('Tagit: #' + r.set_tags.split(',').map(t => t.trim()).join(' #'));
|
||||
if (r.auto_close_days) actions.push('Auto-close: ' + r.auto_close_days + 'pv');
|
||||
return `<div style="display:flex;justify-content:space-between;align-items:center;padding:0.75rem 1rem;background:${r.enabled ? '#f8f9fb' : '#fafafa'};border:1px solid #e8ebf0;border-radius:8px;margin-bottom:0.5rem;opacity:${r.enabled ? '1' : '0.5'};">
|
||||
@@ -2038,9 +2042,11 @@ function showRuleForm(rule) {
|
||||
document.getElementById('rule-form-id').value = rule ? rule.id : '';
|
||||
document.getElementById('rule-form-name').value = rule ? rule.name : '';
|
||||
document.getElementById('rule-form-from').value = rule ? rule.from_contains : '';
|
||||
document.getElementById('rule-form-to').value = rule ? (rule.to_contains || '') : '';
|
||||
document.getElementById('rule-form-subject').value = rule ? rule.subject_contains : '';
|
||||
document.getElementById('rule-form-status').value = rule ? (rule.set_status || '') : '';
|
||||
document.getElementById('rule-form-type').value = rule ? (rule.set_type || '') : '';
|
||||
document.getElementById('rule-form-priority').value = rule ? (rule.set_priority || '') : '';
|
||||
document.getElementById('rule-form-tags').value = rule ? (rule.set_tags || '') : '';
|
||||
document.getElementById('rule-form-autoclose').value = rule ? (rule.auto_close_days || '') : '';
|
||||
editingRuleId = rule ? rule.id : null;
|
||||
@@ -2062,9 +2068,11 @@ document.getElementById('btn-save-rule').addEventListener('click', async () => {
|
||||
const data = {
|
||||
name,
|
||||
from_contains: document.getElementById('rule-form-from').value.trim(),
|
||||
to_contains: document.getElementById('rule-form-to').value.trim(),
|
||||
subject_contains: document.getElementById('rule-form-subject').value.trim(),
|
||||
set_status: document.getElementById('rule-form-status').value,
|
||||
set_type: document.getElementById('rule-form-type').value,
|
||||
set_priority: document.getElementById('rule-form-priority').value,
|
||||
set_tags: document.getElementById('rule-form-tags').value.trim(),
|
||||
auto_close_days: parseInt(document.getElementById('rule-form-autoclose').value) || 0,
|
||||
enabled: true,
|
||||
|
||||
Reference in New Issue
Block a user