109 lines
6.2 KiB
PHP
109 lines
6.2 KiB
PHP
<?php
|
||
|
||
require_once __DIR__ . '/functions.php';
|
||
require_once __DIR__ . '/app/billing.php';
|
||
require_once __DIR__ . '/app/legal.php';
|
||
|
||
$pdo = app_db_pdo();
|
||
$user = saas_require_login();
|
||
if (!saas_can_manage_tenant_settings($user)) {
|
||
http_response_code(403);
|
||
exit('Kein Zugriff.');
|
||
}
|
||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||
header('Location: mandant-einstellungen.php');
|
||
exit;
|
||
}
|
||
app_require_csrf();
|
||
|
||
$planCode = (string)($_POST['plan_code'] ?? '');
|
||
$plans = billing_plans();
|
||
if (!isset($plans[$planCode]) || $plans[$planCode]['stripe_lookup_key'] === null) {
|
||
http_response_code(400);
|
||
exit('Ungültiger kostenpflichtiger Tarif.');
|
||
}
|
||
if (!billing_plan_selectable_for($pdo, (int)$user['tenant_id'], $planCode)) {
|
||
http_response_code(400);
|
||
exit('Dieser Tarif deckt eure aktuelle Teilnehmerzahl nicht ab.');
|
||
}
|
||
if (!in_array((string)($user['customer_type'] ?? ''), ['business', 'consumer'], true)) {
|
||
http_response_code(400);
|
||
exit('Bitte wähle zuerst in den Mandant-Einstellungen, ob der Vertrag geschäftlich oder als Verbraucher geführt wird.');
|
||
}
|
||
if (!empty($user['contract_ends_at'])) {
|
||
http_response_code(409);
|
||
exit('Für diesen Vertrag liegt bereits eine Kündigung vor. Bitte nutze das Ticketsystem, wenn du sie zurücknehmen möchtest.');
|
||
}
|
||
|
||
$plan = $plans[$planCode];
|
||
$current = billing_fetch_or_init($pdo, (int)$user['tenant_id']);
|
||
$isSwitch = !empty($current['stripe_subscription_id']);
|
||
?>
|
||
<!DOCTYPE HTML>
|
||
<html lang="de">
|
||
<head>
|
||
<title>Tarif kostenpflichtig bestellen – Kaffeeliste</title>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<link rel="stylesheet" href="assets/css/main.css">
|
||
<link rel="stylesheet" href="assets/css/public.css">
|
||
<?php echo app_analytics_head_html(); ?>
|
||
</head>
|
||
<body class="is-preload public-page">
|
||
<div class="public-shell">
|
||
<section class="public-section public-legal">
|
||
<nav class="public-nav" aria-label="Hauptnavigation"><strong><a href="landing.php">Kaffeeliste</a></strong></nav>
|
||
<header class="major"><h1>Bestellung prüfen</h1></header>
|
||
|
||
<div class="public-panel order-summary">
|
||
<h2><?php echo saas_html($plan['label']); ?></h2>
|
||
<p class="public-price"><?php echo saas_html(saas_format_money_cents($plan['price_cents'])); ?> € <span>pro Monat</span></p>
|
||
<ul>
|
||
<li>Webbasierte Kaffeeliste für bis zu <?php echo (int)$plan['max_participants']; ?> aktive Teilnehmer</li>
|
||
<li>Monatliche Abrechnung im Voraus über Stripe; keine Versand- oder Zusatzkosten</li>
|
||
<li>Unbefristeter Vertrag, keine Mindestlaufzeit über die laufende Monatsperiode hinaus</li>
|
||
<li>Jederzeit kündbar zum Ende der laufenden Abrechnungsperiode</li>
|
||
<li>Erforderlich: aktueller Browser, Internetzugang und erreichbare E-Mail-Adresse</li>
|
||
<li>Gesetzliche Mängelrechte und Aktualisierungsansprüche bleiben bestehen</li>
|
||
</ul>
|
||
<?php if ($isSwitch): ?>
|
||
<p><b>Tarifwechsel:</b> Die neue Teilnehmergrenze gilt sofort. Für die laufende Periode gibt es keine zusätzliche Belastung oder Gutschrift; ab der nächsten Verlängerung werden <?php echo saas_html(saas_format_money_cents($plan['price_cents'])); ?> € monatlich berechnet.</p>
|
||
<?php else: ?>
|
||
<p><b>Neubuchung:</b> Nach dieser Bestätigung wirst du zur sicheren Stripe-Zahlungsseite weitergeleitet. Dort wählst du das Zahlungsmittel und schließt die Bestellung abschließend ab.</p>
|
||
<?php endif; ?>
|
||
<p>Anbieter: Clemens Creutzburg, CTB-IT, In den Sieben Stücken 9d, 30655 Hannover. Kontakt siehe <a href="impressum.php" target="_blank">Impressum</a>.</p>
|
||
</div>
|
||
|
||
<form method="post" action="abo-upgrade.php">
|
||
<?php echo app_csrf_field(); ?>
|
||
<input type="hidden" name="plan_code" value="<?php echo saas_html($planCode); ?>">
|
||
<div>
|
||
<input type="checkbox" name="accept_terms" id="accept_terms" value="1" required>
|
||
<label for="accept_terms">Ich akzeptiere die <a href="agb.php" target="_blank" rel="noopener">AGB</a>.</label>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" name="acknowledge_withdrawal" id="acknowledge_withdrawal" value="1" required>
|
||
<label for="acknowledge_withdrawal">Ich habe die <a href="widerruf.php" target="_blank" rel="noopener">Widerrufsbelehrung samt Musterformular</a> erhalten und gelesen.</label>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" name="request_early_performance" id="request_early_performance" value="1" required>
|
||
<label for="request_early_performance">Ich verlange ausdrücklich, dass die kostenpflichtige Leistung vor Ablauf der 14-tägigen Widerrufsfrist beginnt. Mir ist bekannt, dass ich bei Widerruf Wertersatz für die bis dahin erbrachte Leistung schulden kann.</label>
|
||
</div>
|
||
<p><small>Gesamtpreis: <?php echo saas_html(saas_format_money_cents($plan['price_cents'])); ?> € je monatlicher Abrechnungsperiode. Es findet keine personalisierte Preisbildung statt.</small></p>
|
||
<ul class="actions">
|
||
<li><button type="submit" class="primary">zahlungspflichtig bestellen</button></li>
|
||
<li><a href="mandant-einstellungen.php" class="button">Abbrechen</a></li>
|
||
</ul>
|
||
</form>
|
||
</section>
|
||
</div>
|
||
<?php echo app_public_legal_footer(); ?>
|
||
<?php echo app_analytics_body_html(); ?>
|
||
<script src="assets/js/jquery.min.js"></script>
|
||
<script src="assets/js/browser.min.js"></script>
|
||
<script src="assets/js/breakpoints.min.js"></script>
|
||
<script src="assets/js/util.js"></script>
|
||
<script src="assets/js/main.js"></script>
|
||
</body>
|
||
</html>
|