tenant admin startseite schicker gestaltet und super-admin und tenant admin (filament) aufgesplittet.

Es gibt nun task collections und vordefinierte tasks für alle. Onboarding verfeinert und webseite-carousel gefixt (logging später entfernen!)
This commit is contained in:
Codex Agent
2025-10-14 15:17:52 +02:00
parent 64a5411fb9
commit 1a4bdb1fe1
92 changed files with 6027 additions and 515 deletions

View File

@@ -2,11 +2,14 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;
class Task extends Model
{
@@ -38,6 +41,59 @@ class Task extends Model
return $this->belongsTo(TaskCollection::class, 'collection_id');
}
public function tenant(): BelongsTo
{
return $this->belongsTo(Tenant::class);
}
public function sourceTask(): BelongsTo
{
return $this->belongsTo(Task::class, 'source_task_id');
}
public function derivedTasks(): HasMany
{
return $this->hasMany(Task::class, 'source_task_id');
}
public function sourceCollection(): BelongsTo
{
return $this->belongsTo(TaskCollection::class, 'source_collection_id');
}
public function scopeForTenant(Builder $query, ?int $tenantId): Builder
{
return $query->where(function (Builder $innerQuery) use ($tenantId) {
$innerQuery->whereNull('tenant_id');
if ($tenantId) {
$innerQuery->orWhere('tenant_id', $tenantId);
}
});
}
protected static function booted(): void
{
static::creating(function (Task $task) {
if (! $task->slug) {
$task->slug = static::generateSlug(
$task->title['en'] ?? $task->title['de'] ?? 'task'
);
}
});
}
protected static function generateSlug(string $base): string
{
$slugBase = Str::slug($base) ?: 'task';
do {
$slug = $slugBase . '-' . Str::random(6);
} while (static::where('slug', $slug)->exists());
return $slug;
}
public function assignedEvents(): BelongsToMany
{
return $this->belongsToMany(Event::class, 'event_task', 'task_id', 'event_id')