mandant-crm/backend/database/seeders/DatabaseSeeder.php

55 lines
2.1 KiB
PHP
Raw Permalink Normal View History

<?php
namespace Database\Seeders;
use App\Models\User;
use App\Modules\Client\Models\Client;
use App\Modules\CustomField\Models\CustomFieldDefinition;
use App\Modules\CustomField\Models\CustomFieldType;
use App\Modules\History\Models\HistoryEntry;
use App\Modules\History\Models\HistoryType;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
$admin = User::factory()->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,
]);
});
});
}
}