import { esc } from './utils.js'; import { ANLAGEN_GRUPPE_PLACEHOLDER } from './constants.js'; /** Baut das extras-Objekt aus dem Maschinen-Bearbeitungsformular (Anlagenliste). */ export function collectExtrasFromMachineForm(form, machine) { const prev = machine.extras && typeof machine.extras === 'object' ? JSON.parse(JSON.stringify(machine.extras)) : {}; const beschr = prev._beschriftungZeile9; const werte = prev._werteAlsListe; const gruppe = prev._gruppeZeile7; if ( Array.isArray(beschr) && Array.isArray(werte) && beschr.length === werte.length ) { const n = beschr.length; const newWerte = []; for (let i = 0; i < n; i++) { newWerte.push(String(form.elements[`extra_wert_${i}`]?.value ?? '')); } prev._werteAlsListe = newWerte; return prev; } const out = {}; for (const k of Object.keys(prev)) { if (k.startsWith('_')) out[k] = prev[k]; } const kvKeys = Object.keys(prev).filter((k) => !k.startsWith('_')); for (let i = 0; i < kvKeys.length; i++) { const key = kvKeys[i]; out[key] = String(form.elements[`extras_kv_val_${i}`]?.value ?? ''); } return out; } export function extrasTableHtml(extras, opts) { const editable = opts && opts.editable === true; if (!extras || typeof extras !== 'object') { if (editable) { return `

Anlagenliste (ITT)

Keine Anlagendaten gespeichert — nichts zu bearbeiten.

`; } return ''; } const beschr = extras._beschriftungZeile9; const gruppe = extras._gruppeZeile7; const werte = extras._werteAlsListe; if ( Array.isArray(beschr) && Array.isArray(werte) && beschr.length === werte.length ) { const g = Array.isArray(gruppe) && gruppe.length === beschr.length ? gruppe : null; if (editable) { const body = beschr .map((label, i) => { const v = werte[i]; const grp = g ? String(g[i] ?? '') : ''; return ` ${esc(grp)} ${esc(String(label || `Spalte ${i + 1}`))} `; }) .join(''); return `

Anlagenliste (bearbeiten)

Nur die Spalte „Wert“ ist bearbeitbar. Gruppe und Beschreibung bleiben wie importiert.

${body}
Gruppe (Z. 7) Beschreibung (Z. 9) Wert
`; } if (g) { const n = beschr.length; const groupForRow = []; let cur = ''; for (let i = 0; i < n; i++) { const raw = g[i] != null ? String(g[i]).trim() : ''; if (raw) cur = raw; groupForRow[i] = cur || ANLAGEN_GRUPPE_PLACEHOLDER; } const segments = []; let segStart = 0; for (let i = 1; i <= n; i++) { if (i === n || groupForRow[i] !== groupForRow[i - 1]) { segments.push({ from: segStart, to: i, key: groupForRow[segStart] }); segStart = i; } } const gruppenTitel = (key) => key === ANLAGEN_GRUPPE_PLACEHOLDER ? 'Sonstiges' : key; const tbodies = segments .map((seg, idx) => { const spacer = idx > 0 ? `` : ''; const titel = gruppenTitel(seg.key); const kopf = `${esc(titel)}`; const zeilen = []; for (let i = seg.from; i < seg.to; i++) { const v = werte[i]; const show = v !== '' && v != null; const label = String(beschr[i] || `Spalte ${i + 1}`); zeilen.push( `${esc(label)}${esc(String(v ?? ''))}`, ); } return `${spacer}${kopf}${zeilen.join('')}`; }) .join(''); return `

Anlagenliste

${tbodies}
Beschreibung (Z. 9) Wert
`; } const body = beschr .map((label, i) => { const v = werte[i]; const show = v !== '' && v != null; const grp = ''; return ` ${esc(grp)} ${esc(String(label || `Spalte ${i + 1}`))} ${esc(String(v ?? ''))} `; }) .join(''); return `

Anlagenliste (alle Spalten · Zeile 9 = Beschreibung)

Gruppe = Zeile 7 im Blatt „Anlagen“, Beschreibung = Zeile 9.

${body}
Gruppe (Z. 7) Beschreibung (Z. 9) Wert
`; } const kvEntries = Object.entries(extras).filter(([k]) => !k.startsWith('_')); if (editable) { if (kvEntries.length === 0) { return `

Daten aus Anlagenliste (ITT)

Keine zusätzlichen Felder — nichts zu bearbeiten.

`; } const rows = kvEntries .map( ([k, v], i) => ` ${esc(k)} `, ) .join(''); return `

Daten aus Anlagenliste (ITT)

Nur die Werte sind bearbeitbar; Feldnamen sind fest.

${rows}
`; } const rows = kvEntries .filter(([, v]) => v !== '' && v != null) .map( ([k, v]) => `${esc(k)}${esc(String(v))}`, ) .join(''); if (!rows) return ''; return `

Daten aus Anlagenliste (ITT)

${rows}
`; }