Buchungskalender eingefügt

This commit is contained in:
2026-05-05 19:18:05 +02:00
parent 4a4517c514
commit c1f07343e3
21 changed files with 931 additions and 187 deletions
+8 -8
View File
@@ -1,7 +1,7 @@
<section class="page-hero">
<p class="eyebrow">Ablauf</p>
<h1>Von der Anfrage bis zur Rückgabe klar geführt.</h1>
<p>Die Seite ist so gebaut, dass Privatkunden und Firmenkunden denselben klaren Ablauf erleben.</p>
<h1>So einfach mieten Sie Ihre Fotobox</h1>
<p>Von der Anfrage bis zur Rückgabe: In wenigen Schritten zu Ihrer Fotobox.</p>
</section>
<section class="section">
@@ -22,21 +22,21 @@
<section class="section split-section">
<article class="content-card">
<h2>Abholung und Rückgabe</h2>
<h2>Abholung oder Lieferung</h2>
<ul class="check-list">
<li><?= h($company['pickup_window']) ?></li>
<li><?= h($company['return_window']) ?></li>
<li>Bei der Abholung erhalten Sie eine kurze Einweisung in die Fotobox.</li>
<li>Lieferung und Aufbau können im Anfrageprozess gewählt werden.</li>
<li>Der Mietzeitraum wird immer über Übernachtungen berechnet.</li>
</ul>
</article>
<article class="content-card">
<h2>Verwaltung im Hintergrund</h2>
<h2>Was nach Ihrer Anfrage passiert</h2>
<ul class="check-list">
<li>Anfragen werden im Backend geprüft und bestätigt.</li>
<li>Für bestätigte Aufträge können Rechnungen mit Kundendaten erstellt werden.</li>
<li>Zahlungsstatus und interne Notizen bleiben jederzeit nachvollziehbar.</li>
<li>Wir prüfen die Verfügbarkeit Ihres Wunschtermins.</li>
<li>Sie erhalten eine Rückmeldung zum Termin und zum weiteren Ablauf.</li>
<li>Auf Wunsch erstellen wir eine Rechnung mit Ihren Kundendaten.</li>
</ul>
</article>
</section>
+7 -5
View File
@@ -1,15 +1,18 @@
<section class="page-hero">
<p class="eyebrow">Buchungsanfrage</p>
<h1>Fotobox jetzt anfragen.</h1>
<h1>Verfügbarkeit Ihrer Fotobox prüfen</h1>
<p>
Wählen Sie Ihren Zeitraum, legen Sie Leistungsart und Zahlungsart fest und senden Sie Ihre Anfrage direkt an die Verwaltung.
Wählen Sie Abhol- und Rückgabetag und senden Sie uns Ihre unverbindliche Anfrage.
Ein Miettag entspricht immer einer Übernachtung.
Selbstabholung kostet <?= h(formatCurrency((int) $dayRate)) ?> pro Miettag, Lieferungen werden je nach Zielort berechnet.
</p>
</section>
<section class="section split-section">
<article class="content-card emphasis-card">
<p class="eyebrow">Vor dem Absenden</p>
<h2>Was wir für eine saubere Bearbeitung brauchen</h2>
<p class="eyebrow">In 2 Minuten zur Anfrage</p>
<h2>Diese Angaben benötigen wir für Ihre Anfrage</h2>
<p>Mit Ihren Angaben prüfen wir den Termin, erfassen die Rechnungsdaten und melden uns zeitnah mit einer Bestätigung oder Rückfrage.</p>
<ul class="check-list">
<?php foreach ($bookingChecklist as $item): ?>
<li><?= h($item) ?></li>
@@ -25,4 +28,3 @@
<?php require dirname(__DIR__) . '/partials/public-booking-form.php'; ?>
</article>
</section>
+2 -3
View File
@@ -1,7 +1,7 @@
<section class="page-hero">
<p class="eyebrow">FAQ</p>
<h1>Häufige Fragen vor der Anfrage.</h1>
<p>Hier finden Sie die Punkte, die in Vermietung, Zahlung und Rückgabe am häufigsten geklärt werden müssen.</p>
<h1>Häufige Fragen zur Fotobox-Miete</h1>
<p>Hier finden Sie Antworten zu Mietdauer, Zahlung, Lieferung, Rückgabe und digitaler Bildübergabe.</p>
</section>
<section class="section">
@@ -14,4 +14,3 @@
<?php endforeach; ?>
</div>
</section>
+4 -5
View File
@@ -1,7 +1,7 @@
<section class="page-hero">
<p class="eyebrow">Kontakt</p>
<h1>Direkt erreichbar für Fragen zu Termin, Lieferung und Rechnung.</h1>
<p>Wenn Sie vor der Anfrage noch etwas abstimmen möchten, erreichen Sie uns über die folgenden Kontaktwege.</p>
<h1>Wir beraten Sie gerne persönlich.</h1>
<p>Wenn Sie vor Ihrer Anfrage noch Fragen zu Termin, Lieferung oder Zahlungsart haben, erreichen Sie uns direkt über die folgenden Kontaktwege.</p>
</section>
<section class="section split-section">
@@ -16,14 +16,13 @@
</div>
</article>
<article class="content-card emphasis-card">
<h2>Was wir schnell beantworten können</h2>
<h2>Wobei wir Sie unterstützen</h2>
<ul class="check-list">
<li>Prüfung von Wunschterminen</li>
<li>Lieferung, Aufbau und regionale Einsatzorte</li>
<li>Fragen zu Rechnung, Zahlungsart und Mietdauer</li>
<li>Abstimmung von Firmenveranstaltungen und Sonderfällen</li>
</ul>
<a class="button-primary" href="<?= h(url('buchen')) ?>">Zur Buchungsanfrage</a>
<a class="button-primary" href="<?= h(url('buchen')) ?>">Jetzt unverbindlich anfragen</a>
</article>
</section>
+9 -9
View File
@@ -1,9 +1,10 @@
<section class="page-hero">
<p class="eyebrow">Leistungen & Ausstattung</p>
<h1>Eine Fotobox, die technisch überzeugt und organisatorisch mitdenkt.</h1>
<p class="eyebrow">Fotobox & Leistungen</p>
<h1>Professionelle Fotobox für Hochzeit, Geburtstag und Firmenfeier.</h1>
<p>
Diese Seite zeigt nicht nur die Technik, sondern den gesamten Service:
Bildqualität, Bedienbarkeit, Logistik, digitale Übergabe und die kaufmännische Abwicklung.
Hochwertige Bilder, einfache Bedienung und eine klare Abwicklung.
Hier sehen Sie, was im Preis enthalten ist und welche Leistungen zusätzlich möglich sind.
Von der Spiegelreflexkamera bis zum WLAN-Download ist alles auf eine einfache Nutzung ausgelegt.
</p>
</section>
@@ -33,10 +34,9 @@
<section class="section cta-band">
<div>
<p class="eyebrow">Buchung</p>
<h2>Sie wissen schon, was Sie brauchen?</h2>
<p>Dann prüfen Sie direkt Ihren Zeitraum und senden Sie Ihre Anfrage digital.</p>
<p class="eyebrow">Wunschtermin</p>
<h2>Prüfen Sie direkt die Verfügbarkeit Ihrer Fotobox.</h2>
<p>Senden Sie uns Ihre Anfrage unverbindlich online. Wir melden uns zeitnah zurück.</p>
</div>
<a class="button-primary" href="<?= h(url('buchen')) ?>">Jetzt anfragen</a>
<a class="button-primary" href="<?= h(url('verfuegbarkeit')) ?>">Verfügbarkeit prüfen</a>
</section>
+1 -2
View File
@@ -15,7 +15,7 @@
</article>
<article class="legal-card">
<h2>3. Zahlung</h2>
<p>Zahlungen sind per Rechnung / Überweisung oder per PayPal möglich. Die gewählte Zahlungsart wird bei der Anfrage erfasst und kann im Verwaltungsprozess hinterlegt werden.</p>
<p>Zahlungen sind per Rechnung / Überweisung oder per PayPal möglich. Die gewünschte Zahlungsart wird direkt in Ihrer Anfrage angegeben.</p>
</article>
<article class="legal-card">
<h2>4. Übergabe und Rückgabe</h2>
@@ -26,4 +26,3 @@
<p>Bitte melden Sie Störungen oder Schäden unverzüglich. Für einen verbindlichen gewerblichen Einsatz sollten Haftungs- und Ausfallregelungen vor dem Live-Start individuell ergänzt werden.</p>
</article>
</section>
+31 -21
View File
@@ -1,36 +1,47 @@
<section class="page-hero">
<p class="eyebrow">Preise & Mietlogik</p>
<h1>Klare Preise ohne versteckte Logik.</h1>
<h1>Fotobox-Preise auf einen Blick</h1>
<p>
Der Standardpreis beträgt <strong><?= h(formatCurrency((int) $dayRate)) ?></strong> pro Miettag.
Ein Miettag entspricht immer einer Übernachtung.
<strong>Abholung ab <?= h(formatCurrency((int) $dayRate)) ?> pro Miettag.</strong>
Lieferpreise richten sich nach dem Zielort. Ein Miettag entspricht immer einer Übernachtung.
</p>
</section>
<section class="section split-section">
<article class="content-card emphasis-card">
<p class="eyebrow">Grundpreis</p>
<h2><?= h(formatCurrency((int) $dayRate)) ?> pro Miettag</h2>
<p>Montag bis Dienstag = 1 Miettag. Freitag bis Sonntag = 2 Miettage.</p>
<p class="eyebrow">Preis je Liefergebiet</p>
<h2>Abholung oder Lieferung nach Region</h2>
<p>Ein Miettag entspricht einer Übernachtung. Montag bis Dienstag = 1 Miettag. Freitag bis Sonntag = 2 Miettage.</p>
<ul class="check-list">
<li>Technikpaket mit DSLR-Kamera, Blitz und Softbox</li>
<li>Digitale Bildübergabe inklusive</li>
<li>Zahlung per Rechnung, Überweisung oder PayPal</li>
<li>Verbindlichkeit erst nach Bestätigung Ihrer Anfrage</li>
<?php foreach ($pricingExamples as $example): ?>
<li><strong><?= h($example['title']) ?>:</strong> <?= h($example['text']) ?></li>
<?php endforeach; ?>
</ul>
</article>
<article class="content-card">
<p class="eyebrow">Preisbeispiele</p>
<p class="eyebrow">Was im Preis enthalten ist</p>
<div class="pricing-example-list">
<?php foreach ($pricingExamples as $example): ?>
<article>
<strong><?= h($example['title']) ?></strong>
<span><?= h($example['text']) ?></span>
</article>
<?php endforeach; ?>
<article>
<strong>Technik</strong>
<span>Fotobox, Spiegelreflexkamera, Studioblitz und Softbox</span>
</article>
<article>
<strong>Bilder</strong>
<span>Alle Fotos digital inklusive</span>
</article>
<article>
<strong>Abwicklung</strong>
<span>Zahlung per Rechnung / Überweisung oder PayPal</span>
</article>
<article>
<strong>Anfrage</strong>
<span>Verbindlich wird Ihre Buchung erst nach unserer Bestätigung</span>
</article>
</div>
<p class="small-note">
Lieferung, Aufbau oder Vor-Ort-Betreuung werden im Anfrageprozess passend zum Anlass abgestimmt.
Hannover kostet <?= h(formatCurrency((int) $config['pricing']['delivery_rates']['hannover']['price_cents'])) ?>,
die Region Hannover <?= h(formatCurrency((int) $config['pricing']['delivery_rates']['region_hannover']['price_cents'])) ?> und
Hameln, Braunschweig, Hildesheim oder Celle <?= h(formatCurrency((int) $config['pricing']['delivery_rates']['extended_region']['price_cents'])) ?> pro Miettag.
</p>
</article>
</section>
@@ -39,7 +50,7 @@
<div class="section-heading">
<p class="eyebrow">Zahlung</p>
<h2>Rechnung, Überweisung oder PayPal</h2>
<p>Die gewünschte Zahlungsart wird bereits in der Anfrage hinterlegt und kann im Backend verwaltet werden.</p>
<p>Die gewünschte Zahlungsart geben Sie direkt in Ihrer Anfrage an. Auf Wunsch erhalten Sie eine Rechnung mit vollständigen Kundendaten.</p>
</div>
<div class="trust-grid">
<article class="trust-card">
@@ -48,7 +59,7 @@
</article>
<article class="trust-card">
<span>PayPal</span>
<strong>Als Zahlungsart auswählbar</strong>
<strong>Direkt in der Anfrage auswählbar</strong>
</article>
<article class="trust-card">
<span>Steuerhinweis</span>
@@ -56,4 +67,3 @@
</article>
</div>
</section>
+82 -13
View File
@@ -1,27 +1,91 @@
<section class="page-hero">
<p class="eyebrow">Verfügbarkeit</p>
<h1>Geblockte und bereits bestätigte Zeiträume im Blick.</h1>
<h1>Prüfen Sie, ob Ihr Wunschtermin noch frei ist.</h1>
<p>
Die Übersicht zeigt aktuelle Belegungen aus dem Verwaltungssystem.
Für Ihren Wunschtermin senden Sie am besten direkt eine Anfrage.
Hier sehen Sie bereits belegte Termine im Monatskalender.
Ist Ihr Wunschtermin noch frei, senden Sie uns direkt Ihre unverbindliche Anfrage.
</p>
</section>
<section class="section">
<div class="section-heading">
<p class="eyebrow">Buchungskalender</p>
<h2>Belegte Termine auf einen Blick</h2>
<p>Die Kalenderansicht zeigt angefragte, reservierte und bestätigte Zeiträume für die nächsten Monate.</p>
</div>
<div class="calendar-legend" aria-label="Legende zur Verfügbarkeit">
<span class="status-pill status-requested">Anfrage</span>
<span class="status-pill status-reserved">Reserviert</span>
<span class="status-pill status-confirmed">Bestätigt</span>
</div>
<div class="public-calendar-grid">
<?php foreach ($availabilityCalendarMonths as $month): ?>
<article class="calendar-month-card">
<div class="calendar-month-header">
<h2><?= h($month['label']) ?></h2>
<span><?= h((string) $month['entry_count']) ?> Termine</span>
</div>
<div class="calendar-weekdays" aria-hidden="true">
<span>Mo</span>
<span>Di</span>
<span>Mi</span>
<span>Do</span>
<span>Fr</span>
<span>Sa</span>
<span>So</span>
</div>
<div class="calendar-days">
<?php foreach ($month['days'] as $day): ?>
<?php if (!empty($day['is_padding'])): ?>
<div class="calendar-day calendar-day-empty" aria-hidden="true"></div>
<?php else: ?>
<div class="calendar-day<?= !empty($day['is_booked']) ? ' is-booked calendar-day-' . h((string) $day['status']) : '' ?><?= !empty($day['is_today']) ? ' is-today' : '' ?>">
<span class="calendar-day-number"><?= h((string) $day['day']) ?></span>
<?php if (!empty($day['is_booked'])): ?>
<span class="calendar-day-state"><?= h((string) $day['status_label']) ?></span>
<?php endif; ?>
</div>
<?php endif; ?>
<?php endforeach; ?>
</div>
<div class="calendar-entry-list">
<?php if ($month['entries'] === []): ?>
<article class="calendar-entry">
<strong>Derzeit kein belegter Zeitraum.</strong>
<span>Dieser Monat ist aktuell noch frei.</span>
</article>
<?php else: ?>
<?php foreach ($month['entries'] as $entry): ?>
<article class="calendar-entry">
<div>
<strong><?= h($entry['date_label']) ?></strong>
<span><?= h($entry['delivery_label']) ?> · <?= h($entry['day_count_label']) ?></span>
</div>
<span class="<?= h(statusPillClass((string) $entry['status'])) ?>"><?= h($entry['status_label']) ?></span>
</article>
<?php endforeach; ?>
<?php endif; ?>
</div>
</article>
<?php endforeach; ?>
</div>
</section>
<section class="section split-section">
<article class="content-card">
<h2>Aktuelle Belegung</h2>
<div class="availability-list">
<?php if ($bookings === []): ?>
<?php if ($availabilityBookings === []): ?>
<article class="availability-card">
<strong>Momentan gibt es keine festen Einträge.</strong>
<span>Ihre Anfrage kann direkt neu aufgenommen werden.</span>
</article>
<?php endif; ?>
<?php foreach ($bookings as $booking): ?>
<?php foreach ($availabilityBookings as $booking): ?>
<article class="availability-card">
<div>
<strong><?= h($booking['reference']) ?></strong>
<span><?= h(formatDate($booking['start_date'])) ?> bis <?= h(formatDate($booking['end_date'])) ?></span>
<strong><?= h(formatDate($booking['start_date'])) ?> bis <?= h(formatDate($booking['end_date'])) ?></strong>
<span><?= h((string) ($booking['delivery_zone_label'] ?: $booking['delivery_mode_label'])) ?> · <?= h((string) $booking['total_days']) ?> <?= $booking['total_days'] === 1 ? 'Miettag' : 'Miettage' ?></span>
</div>
<span class="<?= h(statusPillClass((string) $booking['status'])) ?>"><?= h($booking['status_label']) ?></span>
</article>
@@ -29,13 +93,18 @@
</div>
</article>
<article class="content-card emphasis-card">
<h2>Direkt zur Anfrage</h2>
<h2>Jetzt unverbindlich anfragen</h2>
<ul class="check-list">
<li>Zeitraum nach Übernachtungen wählen</li>
<li>Lieferart und Zahlungsart festlegen</li>
<li>Kundendaten für Rechnung und Rückfragen erfassen</li>
<li>Wunschtermin auswählen</li>
<li>Leistungsart, Liefergebiet und Zahlungsart festlegen</li>
<li>Kontaktdaten und Veranstaltungsort eintragen</li>
</ul>
<a class="button-primary button-block" href="<?= h(url('buchen')) ?>">Jetzt Termin anfragen</a>
<p class="small-note">
Selbstabholung: <?= h(formatCurrency((int) $config['pricing']['delivery_rates']['self_pickup']['price_cents'])) ?> ·
Hannover: <?= h(formatCurrency((int) $config['pricing']['delivery_rates']['hannover']['price_cents'])) ?> ·
Region Hannover: <?= h(formatCurrency((int) $config['pricing']['delivery_rates']['region_hannover']['price_cents'])) ?> ·
Hameln, Braunschweig, Hildesheim oder Celle: <?= h(formatCurrency((int) $config['pricing']['delivery_rates']['extended_region']['price_cents'])) ?>
</p>
<a class="button-primary button-block" href="<?= h(url('buchen')) ?>">Wunschtermin anfragen</a>
</article>
</section>