// Documents — shared data for the redesigned documents area. // Quick-text templates (WhatsApp / Kleinanzeigen ready), // kind metadata, and shared fill helpers. // ── Quick-text templates ── // These are short, copy-to-clipboard messages, NOT formal PDFs. const QUICK_TEXT_TEMPLATES = [ { id: 'reservation', name: 'Reservierungsbestätigung', icon: '📋', color: '#007AFF', kind: 'reservierung', desc: 'Bestätigung an den Mieter senden', body: `Hallo {{name}}, vielen Dank für deine Reservierung! 📅 Zeitraum: {{zeitraum}} 🎤 Equipment: {{equipment}} 💰 Gesamtpreis: {{preis}} 🔒 Kaution: {{kaution}} Bitte zur Übergabe einen gültigen Ausweis mitbringen. Bei Fragen einfach melden. Viele Grüße {{firma}}`, }, { id: 'handover', name: 'Übergabe-Info', icon: '📦', color: '#34C759', kind: 'protokoll', desc: 'Kurz vor Abholung verschicken', body: `Hallo {{name}}, morgen ist die Abholung von {{equipment}}. 🕐 Uhrzeit: {{startzeit}} Uhr 📍 Adresse: {{firma_adresse}} 🪪 Bitte Ausweis mitbringen 💰 Kaution: {{kaution}} (bar oder Überweisung) Bis morgen! {{firma}}`, }, { id: 'return', name: 'Rückgabe-Erinnerung', icon: '↩️', color: '#FF9500', kind: 'rueckgabe', desc: 'Mieter an Rückgabe erinnern', body: `Hallo {{name}}, kurze Erinnerung: die Rückgabe von {{equipment}} ist am {{ende}} bis {{endezeit}} Uhr. Bitte vollzählig und in sauberem Zustand zurückbringen. Bis dann {{firma}}`, }, { id: 'kleinanzeigen', name: 'Kleinanzeigen-Inserat', icon: '📢', color: '#AF52DE', kind: 'inserat', desc: 'Vorlage für Equipment-Anzeige', body: `🎤 {{equipment}} zu vermieten — ab {{tagespreis}}/Tag ✅ {{equipment_sub}} ✅ Komplett mit Zubehör ✅ Lieferung gegen Aufpreis möglich 🔒 Kaution: {{kaution}} Standort: {{firma_adresse}} Bei Interesse einfach melden!`, }, { id: 'reminder', name: 'Zahlungserinnerung', icon: '💶', color: '#FF3B30', kind: 'erinnerung', desc: 'Bei offener Zahlung', body: `Hallo {{name}}, unsere Rechnung über {{preis}} für die Vermietung von {{equipment}} ({{zeitraum}}) ist noch offen. Bitte überweise den Betrag auf: {{iban}} Verwendungszweck: {{rechnungsnr}} Vielen Dank! {{firma}}`, }, ]; // ── Kind metadata used across the documents area ── const DOC_KINDS = { vertrag: { label: 'Mietvertrag', icon: 'fileText', color: '#007AFF' }, rechnung: { label: 'Rechnung', icon: 'invoice', color: '#34C759' }, protokoll: { label: 'Übergabeprotokoll', icon: 'doc', color: '#AF52DE' }, rueckgabe: { label: 'Rückgabeprotokoll', icon: 'doc', color: '#FF9500' }, reservierung: { label: 'Reservierung', icon: 'mail', color: '#5856D6' }, erinnerung: { label: 'Erinnerung', icon: 'bell', color: '#FF3B30' }, inserat: { label: 'Inserat', icon: 'tag', color: '#AF52DE' }, custom: { label: 'Sonstiges', icon: 'folder', color: '#8E8E93' }, }; const docKindMeta = (k) => DOC_KINDS[k] || DOC_KINDS.custom; // ── Fill placeholders for quick-text and template bodies ── function fillQuickText(text, r, eq, company) { if (!text || !r) return text || ''; const days = daysBetween(r.start, r.end); const vars = { name: r.tenantName, adresse: (r.address || '').replace(/\n/g, ', '), email: r.email || '', telefon: r.phone || '', ausweis: r.idCard || '', equipment: eq ? eq.name : (r.equipmentName || ''), equipment_sub: eq ? (eq.sub || eq.cat || '') : '', zeitraum: fmtRange(r.start, r.end), start: fmtDateDE(r.start), ende: fmtDateDE(r.end), startzeit: r.startTime || '—', endezeit: r.endTime || '—', tage: days + ' Tag' + (days > 1 ? 'e' : ''), preis: rentalTotal(r) + ' €', tagespreis: (r.dailyRate || (eq && eq.price) || 0) + ' €', kaution: (r.deposit || 0) + ' €', zweck: r.purpose || 'Vermietung', datum: fmtDateDE(todayISO()), firma: company.name, firma_adresse: `${company.street}, ${company.city}`, iban: company.iban, rechnungsnr: 'RE-2026-' + (r.id || '').replace(/\D/g, '').padStart(3, '0'), vertragsnr: 'MV-2026-' + (r.id || '').replace(/\D/g, '').padStart(3, '0'), }; let out = text; for (const [k, v] of Object.entries(vars)) { out = out.split('{{' + k + '}}').join(v == null ? '' : String(v)); } return out; } // ── Quick-text "placeholders available" hints ── const QUICK_TOKENS = [ ['name', 'Name des Mieters'], ['equipment', 'Equipment'], ['equipment_sub', 'Equipment-Specs'], ['zeitraum', 'Zeitraum'], ['start', 'Startdatum'], ['ende', 'Enddatum'], ['startzeit', 'Abholzeit'], ['endezeit', 'Rückgabezeit'], ['tage', 'Mietdauer'], ['preis', 'Gesamtpreis'], ['tagespreis', 'Tagespreis'], ['kaution', 'Kaution'], ['zweck', 'Zweck'], ['datum', 'Heutiges Datum'], ['adresse', 'Mieter-Adresse'], ['email', 'Mieter-E-Mail'], ['telefon', 'Mieter-Telefon'], ['ausweis', 'Ausweis-Nr.'], ['firma', 'Firma'], ['firma_adresse', 'Firmen-Adresse'], ['iban', 'IBAN'], ['rechnungsnr', 'Rechnungs-Nr.'], ['vertragsnr', 'Vertrags-Nr.'], ]; Object.assign(window, { QUICK_TEXT_TEMPLATES, QUICK_TOKENS, DOC_KINDS, docKindMeta, fillQuickText, });