// Einstellungen — sub-views part 2: Dokumente, Erinnerungen, Darstellung.
const { useState: useStateE2, useEffect: useEffectE2 } = React;
// ─────────────────────────────────────────────────────────────
// Dokumente — number patterns, payment defaults, footer + PDF template + accent
// ─────────────────────────────────────────────────────────────
function DokumenteSettingsView({ t, c, set, onBack, onClose }) {
const nextInvoiceNo = previewNumber(c.invoicePattern, c.invoiceCounter || 1);
const nextContractNo = previewNumber(c.contractPattern, c.contractCounter || 1);
return (
Nummern-Schemata
set({ invoicePattern: v })}
placeholder="RE-{YYYY}-{####}" t={t} />
set({ contractPattern: v })}
placeholder="MV-{YYYY}-{####}" t={t} last />
{'{YYYY} = Jahr · {YY} = Kurzjahr · {####} = Zähler'}
{/* Preview tile */}
Nächste Rechnung: {nextInvoiceNo}
Nächster Vertrag: {nextContractNo}
Standard-Konditionen
set({ paymentDays: v === '' ? '' : v })} />
Tage
} />
set({ defaultDeposit: v === '' ? '' : v })} />
€
} />
{/* PDF template + accent (kept from previous Firmenprofil) */}
PDF-Vorlage
{PDF_TEMPLATES.map((tp) => {
const sel = (c.template || 'modern') === tp.id;
return (
set({ template: tp.id })} scale={0.96} style={{ flex: 1 }}>
);
})}
Akzentfarbe
{ACCENT_OPTIONS.map((col) => {
const sel = (c.accent || '#1f6feb').toLowerCase() === col.toLowerCase();
return (
set({ accent: col })} scale={0.88}>
);
})}
Rechnungs-Fußzeile
);
}
// ─────────────────────────────────────────────────────────────
// Erinnerungen — push toggles + lead-time days
// ─────────────────────────────────────────────────────────────
function ErinnerungenView({ t, c, set, onBack, onClose }) {
const rContract = c.remContractEnd || { on: true, days: 3 };
const rReturn = c.remReturnOverdue || { on: true };
const rMaint = c.remMaintDue || { on: true };
const rInvoice = c.remInvoiceOverdue || { on: true, days: 7 };
const rStart = c.remRentalStart || { on: true, days: 1 };
const rPickup = c.remPickupTime || { on: true, hours: 2 };
const tagePill = (val, onChange) =>
onChange(v === '' ? 0 : v)} />
Tage
;
const stundenPill = (val, onChange) =>
onChange(v === '' ? 0 : v)} />
Std.
;
return (
Push-Benachrichtigungen
System-Mitteilungen, wenn etwas zu tun ist.
{tagePill(rStart.days, (v) => set({ remRentalStart: { ...rStart, days: v } }))}
set({ remRentalStart: { ...rStart, on: v } })} />
} />
{stundenPill(rPickup.hours, (v) => set({ remPickupTime: { ...rPickup, hours: v } }))}
set({ remPickupTime: { ...rPickup, on: v } })} />
} />
{tagePill(rContract.days, (v) => set({ remContractEnd: { ...rContract, days: v } }))}
set({ remContractEnd: { ...rContract, on: v } })} />
} />
set({ remReturnOverdue: { ...rReturn, on: v } })} />} />
set({ remMaintDue: { ...rMaint, on: v } })} />} />
{tagePill(rInvoice.days, (v) => set({ remInvoiceOverdue: { ...rInvoice, days: v } }))}
set({ remInvoiceOverdue: { ...rInvoice, on: v } })} />
} />
);
}
// ─────────────────────────────────────────────────────────────
// Darstellung — light/dark mode + about
// ─────────────────────────────────────────────────────────────
function DarstellungView({ t, dark, toggleDark, c, set, onBack, onClose }) {
const useLogoIcon = !!(c && c.useLogoIcon);
const hasLogo = !!(c && c.logo);
return (
Erscheinungsbild
{if (dark) toggleDark();}} scale={0.95}>
Hell
{if (!dark) toggleDark();}} scale={0.95}>
Dunkel
} />
Symbol oben rechts
{if (!hasLogo) return;set({ useLogoIcon: v });}} />
} />
{useLogoIcon && hasLogo &&
}
);
}
Object.assign(window, {
DokumenteSettingsView, ErinnerungenView, DarstellungView
});