diff --git a/migrations/033_customer_nr_prefix.sql b/migrations/033_customer_nr_prefix.sql new file mode 100644 index 0000000..dc1012c --- /dev/null +++ b/migrations/033_customer_nr_prefix.sql @@ -0,0 +1,5 @@ +-- Migration 033: Kunden-Nummernpräfix konfigurierbar machen +ALTER TABLE company_settings + ADD COLUMN IF NOT EXISTS customer_nr_prefix VARCHAR(10) NOT NULL DEFAULT 'K-' + COMMENT 'Präfix für Kundennummern (z.B. K-)' + AFTER anlage_nr_prefix; diff --git a/src/Models/Customer.php b/src/Models/Customer.php index 255bab5..1d6f027 100644 --- a/src/Models/Customer.php +++ b/src/Models/Customer.php @@ -108,8 +108,16 @@ class Customer public static function generateKundennummer(): string { - $result = Database::fetchOne('SELECT MAX(CAST(SUBSTRING(kundennummer, 3) AS UNSIGNED)) as max_nr FROM customers WHERE kundennummer REGEXP \'^KD[0-9]+$\''); + $settings = \Steuerkram\Models\Setting::get(); + $prefix = $settings['customer_nr_prefix'] ?? 'K-'; + $prefixLen = strlen($prefix) + 1; + $escaped = preg_quote($prefix, '/'); + $result = Database::fetchOne( + "SELECT MAX(CAST(SUBSTRING(kundennummer, {$prefixLen}) AS UNSIGNED)) as max_nr + FROM customers WHERE kundennummer REGEXP ?", + ['^' . $escaped . '[0-9]+$'] + ); $next = (int)($result['max_nr'] ?? 0) + 1; - return sprintf('KD%04d', $next); + return $prefix . sprintf('%04d', $next); } } diff --git a/src/Models/Setting.php b/src/Models/Setting.php index e610d29..85339a4 100644 --- a/src/Models/Setting.php +++ b/src/Models/Setting.php @@ -32,7 +32,7 @@ class Setting ust_id=?, steuernummer=?, finanzamt=?, iban=?, bic=?, bank_name=?, ustva_steuernummer=?, ustva_bundesland=?, - invoice_nr_prefix=?, beleg_nr_prefix=?, anlage_nr_prefix=?, + invoice_nr_prefix=?, beleg_nr_prefix=?, anlage_nr_prefix=?, customer_nr_prefix=?, payment_days_default=?, test_mode=?, ki_vorschlag_aktiv=?, nextcloud_url=?, nextcloud_user=?, nextcloud_pass=?, nextcloud_folder=?, nextcloud_done=?, @@ -59,6 +59,7 @@ class Setting $data['invoice_nr_prefix'] ?? 'AR', $data['beleg_nr_prefix'] ?? 'BLG', $data['anlage_nr_prefix'] ?? 'ANL', + $data['customer_nr_prefix'] ?? 'K-', (int)($data['payment_days_default'] ?? 14), isset($data['test_mode']) ? 1 : 0, isset($data['ki_vorschlag_aktiv']) ? 1 : 0, diff --git a/src/Views/settings/form.php b/src/Views/settings/form.php index 35d474d..96b5e3b 100644 --- a/src/Views/settings/form.php +++ b/src/Views/settings/form.php @@ -236,6 +236,10 @@ +