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, ], ); } }