Dokumenttien poisto kaikille + versioiden säilytysrajoitus

- Poisto-nappi näkyy dokumentin luojalle (ei enää vain admin)
- API: document_delete sallii poiston adminille tai luojalle
- Uusi max_versions-sarake documents-tauluun (oletus 10)
- Versioiden automaattinen pruning: uuden version tallennuksen yhteydessä
  poistetaan vanhimmat versiot jos yli max_versions (tiedostot levyltä myös)
- Valittavissa per dokumentti: 5, 10, 20, 50 tai rajaton

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 23:35:50 +02:00
parent f40b387383
commit cb52dbfabe
4 changed files with 57 additions and 6 deletions

View File

@@ -4970,7 +4970,8 @@ function renderDocReadView() {
document.getElementById('doc-read-title').textContent = d.title || '';
document.getElementById('doc-read-customer').textContent = '👤 ' + customerName;
document.getElementById('doc-read-category').innerHTML = `<span class="doc-category cat-${d.category || 'muu'}">${docCategoryLabels[d.category] || d.category || 'Muu'}</span>`;
document.getElementById('doc-read-version').textContent = `📌 Versio ${d.current_version || 0}`;
const maxV = (d.max_versions && d.max_versions > 0) ? d.max_versions : '∞';
document.getElementById('doc-read-version').textContent = `📌 Versio ${d.current_version || 0} (max ${maxV})`;
document.getElementById('doc-read-date').textContent = d.muokattu ? '📅 ' + new Date(d.muokattu).toLocaleDateString('fi-FI') : '';
const isMeeting = d.category === 'kokousmuistio';
@@ -4981,9 +4982,10 @@ function renderDocReadView() {
document.getElementById('doc-read-description').textContent = d.description || '';
}
// Admin-napit
// Poista-nappi: näytetään adminille tai dokumentin luojalle
const isAdmin = isCurrentUserAdmin();
document.getElementById('btn-doc-delete').style.display = isAdmin ? '' : 'none';
const isOwner = d.created_by === (currentUser?.username || '');
document.getElementById('btn-doc-delete').style.display = (isAdmin || isOwner) ? '' : 'none';
// Kokousmuistio vs tiedostopohjainen
const contentSection = document.getElementById('doc-read-content-section');
@@ -5162,6 +5164,7 @@ function openDocEdit(doc, forceCategory, forceCustomerId) {
const cat = forceCategory || doc?.category || 'muu';
document.getElementById('doc-edit-category').value = cat;
document.getElementById('doc-edit-folder-id').value = doc?.folder_id || currentDocFolderId || '';
document.getElementById('doc-edit-max-versions').value = doc?.max_versions ?? 10;
const isMeeting = cat === 'kokousmuistio';
document.getElementById('doc-edit-title').textContent = doc
@@ -5227,6 +5230,7 @@ document.getElementById('doc-edit-form')?.addEventListener('submit', async (e) =
category: cat,
customer_id: document.getElementById('doc-edit-customer').value || null,
folder_id: document.getElementById('doc-edit-folder-id').value || null,
max_versions: parseInt(document.getElementById('doc-edit-max-versions').value) || 10,
created_by: currentUser?.username || ''
};