-- Standard-Vorlage für den Erstattungsbeleg. -- -- Bewusst ein manuelles Skript und keine Migration: der Vorlageninhalt wird über die Admin-Oberfläche -- gepflegt und soll von einem Release nicht überschrieben werden. Einspielen also nur bei der -- Erstinstallation oder wenn die Vorlage bewusst zurückgesetzt werden soll. -- -- docker exec -i mareike-mareike-db mysql -u -p < database/seed-scripts/participant-refund-template.sql -- -- Setzt participant-invoice-template.sql voraus: die Bilder ({asset:emblem}, {asset:logo}, -- {asset:edge}) liegen in `document_assets` und werden von beiden Dokumentarten gemeinsam genutzt. -- -- Der Beleg ist kein Schreiben des Verbands, sondern die Erklärung des Teilis ("Ich bitte um …", "Ich -- versichere …") -- ein Eigenbeleg. -- -- Briefkopf samt Anschriftenfeld ist der der Rechnung: die Anschrift der erklärenden Person steht dort -- und nicht noch einmal im Körper. In der Angabentabelle steht ihr Name, weil dort alles zusammensteht, -- was sie erklärt -- Kontoinhaber*in kann eine andere Person sein (etwa ein Elternteil). -- -- Der Erklärungssatz kommt aus dem Seitentext CONFIRMATION_PARTICIPANT_REFUND, denselben, den der Teili -- vor dem Absenden ankreuzt. Er steht hier deshalb als Platzhalter und nicht als fester Text. DELETE FROM document_templates WHERE document_type = 'participant_refund'; INSERT INTO document_templates (document_type, block, content, sort_order, editable, created_at, updated_at) VALUES ('participant_refund', 'layout', '
{block:header_sender_return} {block:header_recipient} {block:emblem} {block:logo} {block:sender_data}
{block:subject} {block:body} {block:footer}
', 10, 1, NOW(), NOW()), ('participant_refund', 'style', '@page { size: A4 portrait; margin: 0; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: \'DejaVu Sans\', sans-serif; font-size: 9.5pt; color: #1a1a1a; background: white; } .page { padding: 10mm 18mm 20mm 22mm; } /* Kopfbereich */ .header-table { width: 100%; border-collapse: collapse; margin-bottom: 6mm; } .header-table td { vertical-align: top; padding: 0; } .absender-rueck { font-size: 6pt; color: #555; border-bottom: 0.3pt solid #888; padding-bottom: 1.5mm; margin-bottom: 3.5mm; } .empfaenger { font-size: 10pt; line-height: 1.65; } .empfaenger-bold { font-weight: bold; } .logo-img { width: 36mm; display: block; margin-bottom: 4mm; } .emblem-img { width: 22mm; display: block; margin: 0 auto; } .absender-block { font-size: 7.5pt; color: #1a4799; line-height: 1.7; } .absender-name { font-weight: bold; font-size: 8pt; } /* Betreff und Referenzdaten */ .betreff { font-size: 14pt; color: #1a4799; margin-bottom: 5mm; } .ref-table { border-collapse: collapse; font-size: 8.5pt; margin-bottom: 7mm; } .ref-table td { padding: 0.9mm 7mm 0.9mm 0; vertical-align: top; } .ref-key { color: #666; white-space: nowrap; } /* Einleitender Satz */ .intro-text { font-size: 9.5pt; line-height: 1.6; margin-bottom: 5mm; color: #1a1a1a; } /* Angaben zur Erstattung */ .detail-table { width: 100%; border-collapse: collapse; font-size: 9pt; margin-bottom: 5mm; } .detail-table td { padding: 2.2mm 3mm; border-bottom: 0.3pt solid #d8dde6; vertical-align: top; } .detail-table tr:nth-child(even) td { background-color: #f7f8fb; } .detail-table tr:last-child td { border-bottom: none; } .detail-key { width: 42%; color: #555; } .detail-val { font-weight: bold; } /* Die Versicherung des Teilis unter den Angaben */ .declaration { font-size: 9.5pt; line-height: 1.6; margin-top: 7mm; } /* Vermerk, wenn die Aktionsleitung die Angaben aufgenommen hat -- steht sonst nicht auf dem Beleg. */ .capture-note { font-size: 8pt; color: #555; line-height: 1.55; margin-top: 3mm; } /* Gelber Randstreifen mit Knick -- position:fixed, damit er auf jeder Seite steht. */ .edge { position: fixed; top: 0; left: 0; width: 16mm; height: 297mm; }', 20, 1, NOW(), NOW()), ('participant_refund', 'header_sender_return', '
{sender_name}{if:sender_address_1} · {sender_address_1}{/if:sender_address_1} · {sender_postcode} {sender_city}
', 30, 1, NOW(), NOW()), ('participant_refund', 'header_recipient', '
{recipient_name}
{recipient_address_1}
{if:recipient_address_2}
{recipient_address_2}
{/if:recipient_address_2}
{recipient_postcode} {recipient_city}
', 40, 1, NOW(), NOW()), ('participant_refund', 'emblem', '', 50, 1, NOW(), NOW()), ('participant_refund', 'logo', '', 60, 1, NOW(), NOW()), ('participant_refund', 'sender_data', '
{sender_name}
{if:sender_address_2}
{sender_address_2}
{/if:sender_address_2} {if:sender_address_3}
{sender_address_3}
{/if:sender_address_3} {if:sender_address_1}
{sender_address_1}
{/if:sender_address_1}
{sender_postcode} {sender_city}
{if:sender_email}
{sender_email}
{/if:sender_email} {if:sender_phone}
{sender_phone}
{/if:sender_phone} {if:sender_tax_number}
Steuernummer: {sender_tax_number}
{/if:sender_tax_number} {if:sender_vat_id}
USt-IdNr.: {sender_vat_id}
{/if:sender_vat_id}
', 70, 1, NOW(), NOW()), ('participant_refund', 'subject', '
Rückerstattung Nr. {document_number}
{if:unregistered_at}{/if:unregistered_at}
Belegdatum: {document_date}
Veranstaltung: {event_name}
Zeitraum: {service_period}
Abgemeldet am: {unregistered_at}
', 80, 1, NOW(), NOW()), ('participant_refund', 'body', '
Ich konnte an der Veranstaltung nicht oder nur teilweise teilnehmen und bitte um die Rückerstattung wie folgt:
{details_table}
{declaration_text}
{if:capture_note}
{capture_note}
{/if:capture_note}', 90, 1, NOW(), NOW()), ('participant_refund', 'footer', '', 100, 1, NOW(), NOW());