111 lines
2.4 KiB
PHP
111 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
use Illuminate\Support\Str;
|
|
|
|
class Tenant extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $fillable = [
|
|
'name',
|
|
'slug',
|
|
'public_slug',
|
|
'description',
|
|
'domain',
|
|
'logo',
|
|
'is_active',
|
|
'show_prices',
|
|
'show_stock',
|
|
'street',
|
|
'house_number',
|
|
'postal_code',
|
|
'city',
|
|
'country'
|
|
];
|
|
|
|
protected $casts = [
|
|
'settings' => 'array',
|
|
'is_active' => 'boolean',
|
|
'show_prices' => 'boolean',
|
|
'show_stock' => 'boolean'
|
|
];
|
|
|
|
/**
|
|
* Beziehung zu Benutzern
|
|
*/
|
|
public function users(): HasMany
|
|
{
|
|
return $this->hasMany(User::class);
|
|
}
|
|
|
|
/**
|
|
* Beziehung zu Snackautomaten
|
|
*/
|
|
public function vendingMachines(): HasMany
|
|
{
|
|
return $this->hasMany(VendingMachine::class);
|
|
}
|
|
|
|
/**
|
|
* Beziehung zu Produkten
|
|
*/
|
|
public function products(): HasMany
|
|
{
|
|
return $this->hasMany(Product::class);
|
|
}
|
|
|
|
/**
|
|
* Beziehung zu Einstellungen
|
|
*/
|
|
public function settings(): HasMany
|
|
{
|
|
return $this->hasMany(Setting::class);
|
|
}
|
|
|
|
/**
|
|
* Boot-Methode für automatische Slug-Generierung
|
|
*/
|
|
protected static function boot()
|
|
{
|
|
parent::boot();
|
|
|
|
static::creating(function ($tenant) {
|
|
if (empty($tenant->slug)) {
|
|
$tenant->slug = $tenant->generateSlug($tenant->name);
|
|
}
|
|
});
|
|
|
|
static::updating(function ($tenant) {
|
|
if (empty($tenant->slug)) {
|
|
$tenant->slug = $tenant->generateSlug($tenant->name);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Generiere einen einzigartigen Slug basierend auf dem Namen
|
|
*/
|
|
public function generateSlug($name)
|
|
{
|
|
if (empty($name)) {
|
|
$name = 'tenant-' . time();
|
|
}
|
|
|
|
$slug = Str::slug($name);
|
|
$originalSlug = $slug;
|
|
$counter = 1;
|
|
|
|
// Prüfe ob Slug bereits existiert und füge Nummer hinzu wenn nötig
|
|
while (static::where('slug', $slug)->where('id', '!=', $this->id ?? 0)->exists()) {
|
|
$slug = $originalSlug . '-' . $counter++;
|
|
}
|
|
|
|
return $slug;
|
|
}
|
|
}
|