| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /proc/3951572/root/tmp/ |
Upload File : |
import base64, datetime
from playwright.sync_api import sync_playwright
def img(path):
with open(path,'rb') as f: return 'data:image/png;base64,'+base64.b64encode(f.read()).decode()
S = {k: img('/tmp/'+v) for k,v in {
'menu':'1_Storno-Menue.png','confirm':'2_Storno-bestaetigen.png','mail':'3_Storno-Mail-Vorschau.png',
'hf':'4_Mailing-Header-Footer.png','tpl':'5_Mailing-Templates.png','rules':'6_Mailing-Regeln.png','smtp':'7_SMTP-aktivieren.png'}.items()}
today = '08.06.2026'
html = f"""<!doctype html><html lang=de><head><meta charset=utf-8>
<style>
@page {{ size:A4; margin:18mm 16mm 16mm 16mm; }}
*{{box-sizing:border-box}}
body{{font-family:'Helvetica Neue',Arial,sans-serif;color:#1e2633;font-size:12px;line-height:1.55;margin:0}}
h1{{font-size:24px;color:#0b4677;margin:0 0 2px}}
.sub{{color:#62708a;font-size:12.5px;margin-bottom:14px}}
h2{{font-size:15px;color:#0b4677;border-bottom:2px solid #e6e7eb;padding-bottom:5px;margin:22px 0 10px;display:flex;align-items:center;gap:8px}}
.num{{display:inline-flex;width:22px;height:22px;border-radius:50%;background:#0b4677;color:#fff;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex:0 0 auto}}
.brand{{border-left:5px solid #0b4677;padding:10px 14px;background:#f4f7fb;border-radius:0 8px 8px 0;margin-bottom:18px}}
.brand .n{{font-weight:700;color:#0b4677;font-size:14px}}
figure{{margin:10px 0 4px}}
img.shot{{width:100%;border:1px solid #d7dee8;border-radius:8px;box-shadow:0 2px 8px rgba(15,23,42,.08)}}
figcaption{{font-size:11px;color:#7e8896;margin-top:4px}}
.info{{background:#fff7e6;border:1px solid #f6c659;border-radius:8px;padding:12px 14px;margin:14px 0}}
.info b{{color:#8a5a00}}
ul{{margin:6px 0 6px 18px;padding:0}} li{{margin:3px 0}}
a{{color:#0b4677}}
.steps{{margin:6px 0 0 0;padding:0;list-style:none}}
.steps li{{margin:4px 0;padding-left:22px;position:relative}}
.steps li:before{{content:'✓';position:absolute;left:0;color:#2fb344;font-weight:700}}
.foot{{margin-top:24px;border-top:1px solid #e6e7eb;padding-top:8px;color:#9aa3b2;font-size:10px;display:flex;justify-content:space-between}}
.pagebreak{{page-break-before:always}}
code{{background:#eef2f7;padding:1px 5px;border-radius:4px;font-size:11px}}
</style></head><body>
<div class=brand><div class=n>SeaSide Travel · Parken-am-Schiff.de</div><div style="font-size:11px;color:#62708a">PaCIM – interne Kurzanleitung</div></div>
<h1>Buchungen stornieren</h1>
<div class=sub>So funktioniert das Stornieren & Storno-Rückgängigmachen – inklusive optionalem E-Mail-Versand mit Vorschau.</div>
<div class=info><b>Wichtig vorab:</b> Die zugehörigen E-Mails werden aktuell <b>noch nicht wirklich verschickt</b>. Das passiert erst, wenn das Mailing fertig konfiguriert ist (siehe letzter Abschnitt). Das Stornieren selbst funktioniert schon vollständig.</div>
<h2><span class=num>1</span> Storno-Menü öffnen</h2>
<p>Öffne eine Buchung, z. B. <a href="https://seaside.pacim.de/booking/view/">seaside.pacim.de/booking/view/</a>. Oben rechts in der Übersichtskarte gibt es ein <b>3-Punkte-Menü (⋮)</b>. Dort erscheint – je nach Status – <b>„Buchung stornieren"</b> oder <b>„Storno rückgängig machen"</b>.</p>
<figure><img class=shot src="{S['menu']}"><figcaption>Abb. 1 – 3-Punkte-Menü in der Buchungsübersicht</figcaption></figure>
<h2><span class=num>2</span> Bestätigen & Mail-Option wählen</h2>
<p>Es folgt der Sicherheitsdialog <b>„Sind Sie sicher?"</b>. Dort legst du fest, ob eine Mail rausgehen soll:</p>
<ul>
<li>Beim <b>Stornieren</b>: <i>Storno-E-Mail versenden</i> oder <i>– keine E-Mail versenden –</i></li>
<li>Beim <b>Rückgängig machen</b>: <i>Buchungsbestätigung erneut versenden</i> oder <i>– keine E-Mail versenden –</i></li>
</ul>
<p>Nach der Bestätigung wird die <b>Stornierung sofort ausgeführt</b> (der Status ändert sich direkt).</p>
<figure><img class=shot src="{S['confirm']}"><figcaption>Abb. 2 – Sicherheitsdialog mit optionaler E-Mail-Auswahl</figcaption></figure>
<h2><span class=num>3</span> E-Mail prüfen, bearbeiten & senden</h2>
<p>Hast du „mit Mail" gewählt, öffnet sich danach ein Vorschau-Fenster: Empfänger, Betreff und Inhalt (links als HTML bearbeitbar, rechts die Live-Vorschau) sowie evtl. Anhänge. Du kannst den <b>Text noch anpassen</b> und dann <b>„Senden"</b> – oder <b>„Nicht senden"</b>, falls doch keine Mail rausgehen soll (die Stornierung bleibt trotzdem ausgeführt).</p>
<figure><img class=shot src="{S['mail']}"><figcaption>Abb. 3 – Mail prüfen/bearbeiten vor dem Versand</figcaption></figure>
<div class=pagebreak></div>
<h2>⚠️ Mailversand scharf schalten</h2>
<p>Damit die Mails tatsächlich rausgehen, muss das Mailing einmalig fertig eingerichtet werden – unter <a href="https://seaside.pacim.de/mailing/">seaside.pacim.de/mailing/</a>:</p>
<ul class=steps>
<li><b>Header & Footer</b> für alle Mails setzen (Tab „Einstellungen", Abb. 4)</li>
<li><b>Mail-Templates</b> anpassen – u. a. Stornierung & Buchungsbestätigung (Tab „Templates", Abb. 5)</li>
<li><b>Versand-Regeln</b> anlegen – wann welches Template gesendet wird (Tab „Regeln", Abb. 6)</li>
<li><b>SMTP-Versand aktivieren</b> unter Einstellungen → E-Mail (Abb. 7)</li>
</ul>
<p style="margin-top:8px">Bis das erledigt ist, kannst du das Stornieren voll nutzen – nur der echte Mailversand bleibt deaktiviert (beim „Senden" erscheint ein entsprechender Hinweis).</p>
<figure><img class=shot src="{S['hf']}"><figcaption>Abb. 4 – Mailing → Einstellungen: universeller Header & Footer</figcaption></figure>
<figure><img class=shot src="{S['tpl']}"><figcaption>Abb. 5 – Mailing → Templates</figcaption></figure>
<div class=pagebreak></div>
<figure><img class=shot src="{S['rules']}"><figcaption>Abb. 6 – Mailing → Regeln (Versand-Regeln)</figcaption></figure>
<figure><img class=shot src="{S['smtp']}"><figcaption>Abb. 7 – Einstellungen → E-Mail: SMTP-Versandweg aktivieren</figcaption></figure>
<div class=foot><span>PaCIM · Buchungen stornieren – Kurzanleitung</span><span>Stand: {today}</span></div>
</body></html>"""
with sync_playwright() as pw:
b=pw.chromium.launch(args=['--no-sandbox'])
pg=b.new_page()
pg.set_content(html, wait_until='load')
pg.pdf(path='/tmp/Storno-Anleitung.pdf', format='A4', print_background=True,
margin={'top':'0','bottom':'0','left':'0','right':'0'})
b.close()
print('PDF erstellt')