- Universeel festival/event model (parent_event_id, event_type) - event_person_activations pivot tabel - Event model: parent/children relaties + helper scopes - DevSeeder: festival structuur met sub-events - Sections & Shifts frontend (twee-kolom layout) - BACKLOG.md aangemaakt met 22 gedocumenteerde wensen
159 lines
5.1 KiB
PHP
159 lines
5.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\CrowdType;
|
|
use App\Models\Event;
|
|
use App\Models\Organisation;
|
|
use App\Models\User;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
class DevSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
$this->call(RoleSeeder::class);
|
|
|
|
// 1. Super Admin
|
|
$admin = User::firstOrCreate(
|
|
['email' => 'admin@crewli.test'],
|
|
[
|
|
'name' => 'Dev Admin',
|
|
'password' => Hash::make('password'),
|
|
],
|
|
);
|
|
$admin->assignRole('super_admin');
|
|
|
|
// Test organisation
|
|
$org = Organisation::firstOrCreate(
|
|
['slug' => 'test-festival-bv'],
|
|
[
|
|
'name' => 'Test Festival BV',
|
|
'billing_status' => 'active',
|
|
'settings' => [],
|
|
],
|
|
);
|
|
|
|
// 2. Org Admin
|
|
$orgAdmin = User::firstOrCreate(
|
|
['email' => 'orgadmin@crewli.test'],
|
|
[
|
|
'name' => 'Org Admin',
|
|
'password' => Hash::make('password'),
|
|
],
|
|
);
|
|
if (!$org->users()->where('user_id', $orgAdmin->id)->exists()) {
|
|
$org->users()->attach($orgAdmin, ['role' => 'org_admin']);
|
|
}
|
|
|
|
// Second test organisation (for testing the organisation switcher)
|
|
$org2 = Organisation::firstOrCreate(
|
|
['slug' => 'zomerfest-nederland'],
|
|
[
|
|
'name' => 'Zomerfest Nederland',
|
|
'billing_status' => 'trial',
|
|
'settings' => [],
|
|
],
|
|
);
|
|
|
|
// Attach admin and orgAdmin to second org too
|
|
if (!$org2->users()->where('user_id', $admin->id)->exists()) {
|
|
$org2->users()->attach($admin, ['role' => 'org_admin']);
|
|
}
|
|
if (!$org2->users()->where('user_id', $orgAdmin->id)->exists()) {
|
|
$org2->users()->attach($orgAdmin, ['role' => 'org_member']);
|
|
}
|
|
|
|
// 3. Org Member
|
|
$member = User::firstOrCreate(
|
|
['email' => 'crew@crewli.test'],
|
|
[
|
|
'name' => 'Crew Member',
|
|
'password' => Hash::make('password'),
|
|
],
|
|
);
|
|
if (!$org->users()->where('user_id', $member->id)->exists()) {
|
|
$org->users()->attach($member, ['role' => 'org_member']);
|
|
}
|
|
|
|
// 4. Default Crowd Types for Test Festival BV
|
|
$crowdTypes = [
|
|
['name' => 'Crew', 'system_type' => 'CREW', 'color' => '#3b82f6'],
|
|
['name' => 'Vrijwilliger', 'system_type' => 'VOLUNTEER', 'color' => '#10b981'],
|
|
['name' => 'Artiest', 'system_type' => 'ARTIST', 'color' => '#8b5cf6'],
|
|
['name' => 'Gast', 'system_type' => 'GUEST', 'color' => '#f59e0b'],
|
|
['name' => 'Pers', 'system_type' => 'PRESS', 'color' => '#6366f1'],
|
|
];
|
|
|
|
foreach ($crowdTypes as $ct) {
|
|
CrowdType::firstOrCreate(
|
|
[
|
|
'organisation_id' => $org->id,
|
|
'system_type' => $ct['system_type'],
|
|
],
|
|
[
|
|
'name' => $ct['name'],
|
|
'color' => $ct['color'],
|
|
],
|
|
);
|
|
}
|
|
|
|
// 5. Flat event (backward compatible single event)
|
|
Event::firstOrCreate(
|
|
['organisation_id' => $org->id, 'slug' => 'test-event-01'],
|
|
[
|
|
'name' => 'Test Event 01',
|
|
'start_date' => '2026-08-15',
|
|
'end_date' => '2026-08-15',
|
|
'status' => 'draft',
|
|
'event_type' => 'event',
|
|
'parent_event_id' => null,
|
|
],
|
|
);
|
|
|
|
// 6. Festival with sub-events
|
|
$festival = Event::firstOrCreate(
|
|
['organisation_id' => $org->id, 'slug' => 'echt-zomer-feesten-2026'],
|
|
[
|
|
'name' => 'Echt Zomer Feesten 2026',
|
|
'start_date' => '2026-07-10',
|
|
'end_date' => '2026-07-11',
|
|
'status' => 'draft',
|
|
'event_type' => 'festival',
|
|
'event_type_label' => 'Festival',
|
|
'sub_event_label' => 'Programmaonderdeel',
|
|
'parent_event_id' => null,
|
|
],
|
|
);
|
|
|
|
// Sub-event 1: Dance Festival
|
|
Event::firstOrCreate(
|
|
['organisation_id' => $org->id, 'slug' => 'dance-festival-2026'],
|
|
[
|
|
'name' => 'Dance Festival',
|
|
'start_date' => '2026-07-10',
|
|
'end_date' => '2026-07-10',
|
|
'status' => 'draft',
|
|
'event_type' => 'event',
|
|
'parent_event_id' => $festival->id,
|
|
],
|
|
);
|
|
|
|
// Sub-event 2: Zomerfestival
|
|
Event::firstOrCreate(
|
|
['organisation_id' => $org->id, 'slug' => 'zomerfestival-2026'],
|
|
[
|
|
'name' => 'Zomerfestival',
|
|
'start_date' => '2026-07-11',
|
|
'end_date' => '2026-07-11',
|
|
'status' => 'draft',
|
|
'event_type' => 'event',
|
|
'parent_event_id' => $festival->id,
|
|
],
|
|
);
|
|
}
|
|
}
|