-
-
+
+
+
-
diff --git a/public/script.js b/public/script.js
index a8ea70d..14bc2b9 100644
--- a/public/script.js
+++ b/public/script.js
@@ -703,46 +703,76 @@ async function refreshDataAfterSchaltungChange() {
async function loadSchaltungen() {
try {
const schaltungen = await apiRequest('/api/schaltungen');
- const tbody = document.querySelector('#schaltungenTable tbody');
-
- tbody.innerHTML = '';
-
- schaltungen.forEach(s => {
- const row = document.createElement('tr');
- row.innerHTML = `
-
${escapeHtml(s.schaltungs_id)} |
-
${escapeHtml(formatDate(s.eingabe_datum))} |
-
${escapeHtml(formatDate(s.schaltungs_datum))} |
-
${escapeHtml(s.vorname)} ${escapeHtml(s.nachname)} |
-
${escapeHtml(s.firma || '-')} |
-
${escapeHtml(s.rufnummer)} |
-
${escapeHtml(s.anbieter_name)} |
-
${escapeHtml(s.tarif_name)} |
-
${escapeHtml(s.hardware || '')} |
-
|
-
-
-
- |
- `;
- // Wire delegated handlers so we don't need inline onclick (avoids JS-injection via names).
- row.querySelectorAll('button[data-action]').forEach(btn => {
- btn.addEventListener('click', () => {
- const action = btn.dataset.action;
- const id = parseInt(btn.dataset.id, 10);
- if (action === 'documents') showDocuments(id);
- else if (action === 'edit') editSchaltung(id);
- else if (action === 'delete') deleteSchaltung(id, btn.dataset.schaltungsId, btn.dataset.name);
- });
- });
- tbody.appendChild(row);
- });
-
+ renderSchaltungenRows(schaltungen);
} catch (error) {
console.error('Fehler beim Laden der Schaltungen:', error);
}
}
+// Render schaltungen rows in the Stitch overview table.
+function renderSchaltungenRows(schaltungen) {
+ const tbody = document.querySelector('#schaltungenTable tbody');
+ if (!tbody) return;
+ tbody.innerHTML = '';
+ if (!schaltungen || !schaltungen.length) {
+ const tr = document.createElement('tr');
+ tr.innerHTML = '
Keine Schaltungen vorhanden | ';
+ tbody.appendChild(tr);
+ return;
+ }
+ schaltungen.forEach(s => {
+ const tr = document.createElement('tr');
+ tr.className = 'border-b border-outline-variant/30 even:bg-surface-container-low/50 hover:bg-surface-variant/30 transition-colors';
+ tr.innerHTML = `
+
${escapeHtml(s.schaltungs_id)} |
+
+
+ E: ${escapeHtml(formatDate(s.eingabe_datum))}
+ A: ${escapeHtml(formatDate(s.schaltungs_datum))}
+
+ |
+
+ ${escapeHtml((s.vorname || '') + ' ' + (s.nachname || ''))}
+ ${escapeHtml(s.firma || '–')}
+ |
+
${escapeHtml(s.rufnummer || '–')} |
+
+ ${escapeHtml(s.anbieter_name)}
+ |
+
${escapeHtml(s.tarif_name)} |
+
${escapeHtml(s.hardware || '–')} |
+
+
+ |
+
+
+
+
+
+ |
+ `;
+ tr.querySelectorAll('button[data-action]').forEach(btn => {
+ btn.addEventListener('click', () => {
+ const action = btn.dataset.action;
+ const id = parseInt(btn.dataset.id, 10);
+ if (action === 'documents') showDocuments(id);
+ else if (action === 'edit') editSchaltung(id);
+ else if (action === 'delete') deleteSchaltung(id, btn.dataset.schaltungsId, btn.dataset.name);
+ });
+ });
+ tbody.appendChild(tr);
+ });
+}
+
// Format any ISO-like date string (YYYY-MM-DD or full timestamp) as DD.MM.YYYY
// with leading zeros. Returns the original string unchanged if it cannot be parsed.
function formatDate(dateString) {
@@ -2256,52 +2286,12 @@ function applyFiltersProvisionen() {
function updateSchaltungenTable(schaltungen) {
const tbody = document.querySelector('#schaltungenTable tbody');
if (!tbody) return;
-
- tbody.innerHTML = '';
-
- if (schaltungen.length === 0) {
- // Show "no results" message
- const row = document.createElement('tr');
- row.innerHTML = `
-
- 📋 Keine Schaltungen entsprechen den gewählten Filterkriterien
- |
- `;
- tbody.appendChild(row);
+ if (!schaltungen || schaltungen.length === 0) {
+ tbody.innerHTML = '
| Keine Schaltungen entsprechen den Filterkriterien |
';
return;
}
-
- schaltungen.forEach(s => {
- const row = document.createElement('tr');
- row.innerHTML = `
-
${escapeHtml(s.schaltungs_id)} |
-
${escapeHtml(formatDate(s.eingabe_datum))} |
-
${escapeHtml(formatDate(s.schaltungs_datum))} |
-
${escapeHtml(s.vorname)} ${escapeHtml(s.nachname)} |
-
${escapeHtml(s.firma || '-')} |
-
${escapeHtml(s.rufnummer)} |
-
${escapeHtml(s.anbieter_name)} |
-
${escapeHtml(s.tarif_name)} |
-
${escapeHtml(s.hardware || '')} |
-
-
- |
-
-
-
- |
- `;
- row.querySelectorAll('button[data-filt-action]').forEach(btn => {
- btn.addEventListener('click', () => {
- const action = btn.dataset.filtAction;
- const id = parseInt(btn.dataset.id, 10);
- if (action === 'documents') showDocuments(id);
- else if (action === 'edit') editSchaltung(id);
- else if (action === 'delete') deleteSchaltung(id, btn.dataset.schaltungsId, btn.dataset.name);
- });
- });
- tbody.appendChild(row);
- });
+ // Delegate to the canonical renderer used by loadSchaltungen.
+ renderSchaltungenRows(schaltungen);
}
// Update Provisionen table with filtered data