Erweiterte Bezahloptionen: Barzahlung, PayPal und Ueberweisung
Bisher gab es nur PayPal. Jetzt sind pro Mandant drei unabhaengig aktivierbare Zahlungswege konfigurierbar (mandant-einstellungen.php): - Barzahlung mit frei waehlbarem Ansprechpartner. - PayPal wie bisher, mit Zahlungslink. - Ueberweisung mit Kontoinhaber und IBAN (Format wird geprueft, Leerzeichen werden normalisiert). Das Mitglieder-Dashboard (index.php) zeigt unter "Bezahlen" alle aktivierten Methoden mit dem jeweils offenen Betrag; die IBAN wird zur besseren Lesbarkeit in Viererbloecken angezeigt. Neue tenant_settings-Spalten via Migration 0021 (cash_enabled, cash_contact, bank_transfer_enabled, bank_account_holder, bank_iban).
This commit is contained in:
+40
-4
@@ -281,7 +281,12 @@ function saas_fetch_tenant_settings(PDO $pdo, int $tenantId): ?array
|
||||
ts.pdf_footer_text,
|
||||
ts.payment_reminder_enabled,
|
||||
ts.payment_reminder_interval_days,
|
||||
ts.pdf_watermark_logo
|
||||
ts.pdf_watermark_logo,
|
||||
ts.cash_enabled,
|
||||
ts.cash_contact,
|
||||
ts.bank_transfer_enabled,
|
||||
ts.bank_account_holder,
|
||||
ts.bank_iban
|
||||
FROM tenants t
|
||||
LEFT JOIN tenant_settings ts ON ts.tenant_id = t.id
|
||||
WHERE t.id = ?
|
||||
@@ -322,6 +327,11 @@ function saas_fetch_tenant_settings(PDO $pdo, int $tenantId): ?array
|
||||
'payment_reminder_enabled' => (int)$settings['payment_reminder_enabled'],
|
||||
'payment_reminder_interval_days' => (int)$settings['payment_reminder_interval_days'],
|
||||
'pdf_watermark_logo' => (string)$settings['pdf_watermark_logo'],
|
||||
'cash_enabled' => (int)$settings['cash_enabled'],
|
||||
'cash_contact' => (string)$settings['cash_contact'],
|
||||
'bank_transfer_enabled' => (int)$settings['bank_transfer_enabled'],
|
||||
'bank_account_holder' => (string)$settings['bank_account_holder'],
|
||||
'bank_iban' => (string)$settings['bank_iban'],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -335,6 +345,9 @@ function saas_update_tenant_settings(PDO $pdo, int $tenantId, array $input): arr
|
||||
$sheetWindowDays = filter_var($input['sheet_window_days'] ?? null, FILTER_VALIDATE_INT);
|
||||
$negativeWarningCents = saas_parse_money_cents($input['negative_warning'] ?? '');
|
||||
$paypalUrlTemplate = trim((string)($input['paypal_url_template'] ?? ''));
|
||||
$cashContact = trim((string)($input['cash_contact'] ?? ''));
|
||||
$bankAccountHolder = trim((string)($input['bank_account_holder'] ?? ''));
|
||||
$bankIban = strtoupper(preg_replace('/\s+/', '', (string)($input['bank_iban'] ?? '')));
|
||||
$pdfSplitMode = trim((string)($input['pdf_split_mode'] ?? 'drinking_behavior'));
|
||||
$pdfRowHeightPx = filter_var($input['pdf_row_height_px'] ?? null, FILTER_VALIDATE_INT);
|
||||
$pdfWatermarkText = trim((string)($input['pdf_watermark_text'] ?? ''));
|
||||
@@ -381,6 +394,15 @@ function saas_update_tenant_settings(PDO $pdo, int $tenantId, array $input): arr
|
||||
if ($paymentReminderIntervalDays === false || $paymentReminderIntervalDays < 1 || $paymentReminderIntervalDays > 90) {
|
||||
$errors[] = 'Das Erinnerungs-Intervall muss zwischen 1 und 90 Tagen liegen.';
|
||||
}
|
||||
if (strlen($cashContact) > 255) {
|
||||
$errors[] = 'Der Bar-Ansprechpartner ist zu lang (max. 255 Zeichen).';
|
||||
}
|
||||
if (strlen($bankAccountHolder) > 255) {
|
||||
$errors[] = 'Der Kontoinhaber ist zu lang (max. 255 Zeichen).';
|
||||
}
|
||||
if ($bankIban !== '' && !preg_match('/^[A-Z]{2}[0-9]{2}[A-Z0-9]{10,30}$/', $bankIban)) {
|
||||
$errors[] = 'Die IBAN hat kein gültiges Format.';
|
||||
}
|
||||
|
||||
if ($errors !== []) {
|
||||
return ['ok' => false, 'errors' => $errors];
|
||||
@@ -388,6 +410,8 @@ function saas_update_tenant_settings(PDO $pdo, int $tenantId, array $input): arr
|
||||
|
||||
$selfEntryEnabled = !empty($input['self_entry_enabled']) ? 1 : 0;
|
||||
$paypalEnabled = !empty($input['paypal_enabled']) ? 1 : 0;
|
||||
$cashEnabled = !empty($input['cash_enabled']) ? 1 : 0;
|
||||
$bankTransferEnabled = !empty($input['bank_transfer_enabled']) ? 1 : 0;
|
||||
$pdfShowEmptyRows = !empty($input['pdf_show_empty_rows']) ? 1 : 0;
|
||||
$paymentReminderEnabled = !empty($input['payment_reminder_enabled']) ? 1 : 0;
|
||||
|
||||
@@ -407,8 +431,10 @@ function saas_update_tenant_settings(PDO $pdo, int $tenantId, array $input): arr
|
||||
paypal_url_template, sheet_window_days, negative_warning_cents,
|
||||
pdf_show_empty_rows, pdf_split_mode, pdf_row_height_px,
|
||||
pdf_watermark_text, pdf_footer_text,
|
||||
payment_reminder_enabled, payment_reminder_interval_days)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
payment_reminder_enabled, payment_reminder_interval_days,
|
||||
cash_enabled, cash_contact, bank_transfer_enabled,
|
||||
bank_account_holder, bank_iban)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
mark_price_cents = VALUES(mark_price_cents),
|
||||
self_entry_enabled = VALUES(self_entry_enabled),
|
||||
@@ -422,7 +448,12 @@ function saas_update_tenant_settings(PDO $pdo, int $tenantId, array $input): arr
|
||||
pdf_watermark_text = VALUES(pdf_watermark_text),
|
||||
pdf_footer_text = VALUES(pdf_footer_text),
|
||||
payment_reminder_enabled = VALUES(payment_reminder_enabled),
|
||||
payment_reminder_interval_days = VALUES(payment_reminder_interval_days)'
|
||||
payment_reminder_interval_days = VALUES(payment_reminder_interval_days),
|
||||
cash_enabled = VALUES(cash_enabled),
|
||||
cash_contact = VALUES(cash_contact),
|
||||
bank_transfer_enabled = VALUES(bank_transfer_enabled),
|
||||
bank_account_holder = VALUES(bank_account_holder),
|
||||
bank_iban = VALUES(bank_iban)'
|
||||
);
|
||||
$stmt->execute([
|
||||
$tenantId,
|
||||
@@ -439,6 +470,11 @@ function saas_update_tenant_settings(PDO $pdo, int $tenantId, array $input): arr
|
||||
$pdfFooterText,
|
||||
$paymentReminderEnabled,
|
||||
(int)$paymentReminderIntervalDays,
|
||||
$cashEnabled,
|
||||
$cashContact,
|
||||
$bankTransferEnabled,
|
||||
$bankAccountHolder,
|
||||
$bankIban,
|
||||
]);
|
||||
|
||||
$pdo->commit();
|
||||
|
||||
Reference in New Issue
Block a user