diff --git a/app/Models/Tenant/InjectorProtocol.php b/app/Models/Tenant/InjectorProtocol.php index 68c6c7e..65bdc8b 100644 --- a/app/Models/Tenant/InjectorProtocol.php +++ b/app/Models/Tenant/InjectorProtocol.php @@ -86,10 +86,18 @@ class InjectorProtocol extends Model }); } - /** PS-{tenantId}-{YYYY}-{seq6} — per-tenant, per-year sequence. */ + /** + * {PREFIX}-{YYYY}-{seq6} — per-tenant, per-year sequence. + * + * PREFIX is derived from the tenant (settings.protocol_prefix override, + * else uppercase of the first 2–3 letters of the tenant slug — + * 'psauto' → 'PS', 'autoplus' → 'AP', etc.). Falls back to 'PR' when + * no tenant is resolvable. + */ public static function generateNumber(): string { - $companyId = app(TenantManager::class)->current()?->id + $tenant = app(TenantManager::class)->current(); + $companyId = $tenant?->id ?? auth()->user()?->company_id ?? 0; $year = now()->year; @@ -97,6 +105,26 @@ class InjectorProtocol extends Model ->where('company_id', $companyId) ->whereYear('created_at', $year) ->count() + 1; - return sprintf('PS-%d-%d-%06d', $companyId, $year, $seq); + + $prefix = self::resolvePrefix($tenant); + + return sprintf('%s-%d-%06d', $prefix, $year, $seq); + } + + /** Explicit tenant setting → slug initials → 'PR' fallback. */ + protected static function resolvePrefix($tenant): string + { + if ($tenant) { + $explicit = trim((string) data_get($tenant->settings ?? [], 'protocol_prefix')); + if ($explicit !== '') { + return mb_strtoupper($explicit); + } + $slug = (string) ($tenant->slug ?? ''); + if ($slug !== '') { + // Take first 2 characters of the slug — 'psauto' → 'PS' + return mb_strtoupper(mb_substr($slug, 0, 2)); + } + } + return 'PR'; } }