139 lines
6.9 KiB
SQL
139 lines
6.9 KiB
SQL
-- 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<user> -p<pass> <db> < 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', '<img class="edge" src="{asset:edge}" alt="" />
|
|
|
|
<div class="page">
|
|
|
|
<table class="header-table">
|
|
<tr>
|
|
<td style="width: 45%; padding-top: 4mm;">
|
|
{block:header_sender_return}
|
|
{block:header_recipient}
|
|
</td>
|
|
<td style="width: 9%; vertical-align: middle; padding-top: 4mm; padding-right: 6mm;">
|
|
{block:emblem}
|
|
</td>
|
|
<td style="width: 46%; vertical-align: top; padding-top: 2mm;">
|
|
{block:logo}
|
|
{block:sender_data}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
{block:subject}
|
|
{block:body}
|
|
{block:footer}
|
|
|
|
</div>', 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', '<div class="absender-rueck">{sender_name}{if:sender_address_1} · {sender_address_1}{/if:sender_address_1} · {sender_postcode} {sender_city}</div>', 30, 1, NOW(), NOW()),
|
|
('participant_refund', 'header_recipient', '<div class="empfaenger">
|
|
<div class="empfaenger-bold">{recipient_name}</div>
|
|
<div>{recipient_address_1}</div>
|
|
{if:recipient_address_2}<div>{recipient_address_2}</div>{/if:recipient_address_2}
|
|
<div>{recipient_postcode} {recipient_city}</div>
|
|
</div>', 40, 1, NOW(), NOW()),
|
|
('participant_refund', 'emblem', '<img src="{asset:emblem}" class="emblem-img" alt="" />', 50, 1, NOW(), NOW()),
|
|
('participant_refund', 'logo', '<img src="{asset:logo}" class="logo-img" alt="" />', 60, 1, NOW(), NOW()),
|
|
('participant_refund', 'sender_data', '<div class="absender-block">
|
|
<div class="absender-name">{sender_name}</div>
|
|
{if:sender_address_2}<div>{sender_address_2}</div>{/if:sender_address_2}
|
|
{if:sender_address_3}<div>{sender_address_3}</div>{/if:sender_address_3}
|
|
{if:sender_address_1}<div style="margin-top:2.5mm;">{sender_address_1}</div>{/if:sender_address_1}
|
|
<div>{sender_postcode} {sender_city}</div>
|
|
{if:sender_email}<div style="margin-top:2.5mm;">{sender_email}</div>{/if:sender_email}
|
|
{if:sender_phone}<div>{sender_phone}</div>{/if:sender_phone}
|
|
{if:sender_tax_number}<div style="margin-top:2.5mm;">Steuernummer: {sender_tax_number}</div>{/if:sender_tax_number}
|
|
{if:sender_vat_id}<div>USt-IdNr.: {sender_vat_id}</div>{/if:sender_vat_id}
|
|
</div>', 70, 1, NOW(), NOW()),
|
|
('participant_refund', 'subject', '<div class="betreff">Rückerstattung Nr. {document_number}</div>
|
|
|
|
<table class="ref-table">
|
|
<tr>
|
|
<td class="ref-key">Belegdatum:</td>
|
|
<td>{document_date}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="ref-key">Veranstaltung:</td>
|
|
<td>{event_name}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="ref-key">Zeitraum:</td>
|
|
<td>{service_period}</td>
|
|
</tr>
|
|
{if:unregistered_at}<tr>
|
|
<td class="ref-key">Abgemeldet am:</td>
|
|
<td>{unregistered_at}</td>
|
|
</tr>{/if:unregistered_at}
|
|
</table>', 80, 1, NOW(), NOW()),
|
|
('participant_refund', 'body', '<div class="intro-text">Ich konnte an der Veranstaltung nicht oder nur teilweise teilnehmen und bitte um die Rückerstattung wie folgt:</div>
|
|
|
|
{details_table}
|
|
|
|
<div class="declaration">{declaration_text}</div>
|
|
{if:capture_note}<div class="capture-note">{capture_note}</div>{/if:capture_note}', 90, 1, NOW(), NOW()),
|
|
('participant_refund', 'footer', '', 100, 1, NOW(), NOW());
|