create([ 'name' => 'Admin', 'email' => 'admin@example.com', 'password' => bcrypt('password'), 'role' => 'admin', ]); // Base-data custom fields targeted by the Mandanten-Import (idempotent). $this->call(CustomFieldDefinitionSeeder::class); // Configurable Verlauf types. Telefonat & Beratungsgespräch carry a // user-entered event date/time; the rest render as the plain name. $types = [ ['name' => 'Telefonat', 'requires_datetime' => true, 'sort_order' => 1], ['name' => 'Beratungsgespräch', 'requires_datetime' => true, 'sort_order' => 2], ['name' => 'Empfehlung', 'requires_datetime' => false, 'sort_order' => 3], ['name' => 'Anweisung', 'requires_datetime' => false, 'sort_order' => 4], ['name' => 'Bemerkung', 'requires_datetime' => false, 'sort_order' => 5], ['name' => 'Sonstiges', 'requires_datetime' => false, 'sort_order' => 6], ]; $historyTypes = collect($types)->map(fn (array $t) => HistoryType::create($t)); $clients = Client::factory(10)->create(); $clients->each(function (Client $client) use ($admin, $historyTypes) { $historyTypes->random(3)->each(function (HistoryType $type) use ($client, $admin) { HistoryEntry::factory()->create([ 'client_id' => $client->id, 'author_id' => $admin->id, 'history_entry_type_id' => $type->id, 'occurred_at' => $type->requires_datetime ? now()->subDays(rand(1, 30)) : null, ]); }); }); } }