Files
radicall/database/factories/DocumentFactory.php
T

90 lines
3.1 KiB
PHP

<?php
namespace Database\Factories;
use App\Enums\DocumentModalityEnum;
use App\Enums\DocumentStatusEnum;
use App\Enums\DocumentPriorityEnum;
use App\Models\Pet;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Document>
*/
class DocumentFactory extends Factory
{
public function definition(): array
{
return [
'code' => fake()->unique()->numberBetween(100000, 999999),
'modality' => fake()->randomElement(DocumentModalityEnum::cases())->value,
'status' => fake()->randomElement(DocumentStatusEnum::cases()),
'priority' => fake()->randomElement(DocumentPriorityEnum::cases()),
'note' => fake()->optional()->sentence(),
'submitted_at' => fake()->optional()->dateTimeBetween('-30 days', 'now'),
'scan_date' => fake()->optional()->dateTimeBetween('-30 days', 'now'),
'processing_deadline' => fake()->optional()->dateTimeBetween('now', '+30 days'),
'finalized_at' => fake()->optional()->dateTimeBetween('-30 days', 'now'),
'finalized_by' => fake()->optional()->randomElement(User::pluck('id')->toArray()),
'rejection_reason' => fake()->optional()->sentence(),
'pet_id' => Pet::factory(),
'requester_id' => User::factory(),
];
}
public function registered(): static
{
return $this->state(fn (array $attributes) => [
'status' => DocumentStatusEnum::Registered,
'submitted_at' => now(),
]);
}
public function inProgress(): static
{
return $this->state(fn (array $attributes) => [
'status' => DocumentStatusEnum::InProgress,
'submitted_at' => fake()->dateTimeBetween('-7 days', 'now'),
'scan_date' => fake()->dateTimeBetween('-7 days', 'now'),
]);
}
public function completed(): static
{
return $this->state(fn (array $attributes) => [
'status' => DocumentStatusEnum::Completed,
'submitted_at' => fake()->dateTimeBetween('-30 days', '-7 days'),
'scan_date' => fake()->dateTimeBetween('-30 days', '-7 days'),
'finalized_at' => fake()->dateTimeBetween('-7 days', 'now'),
'finalized_by' => User::factory(),
]);
}
public function rejected(): static
{
return $this->state(fn (array $attributes) => [
'status' => DocumentStatusEnum::Rejected,
'submitted_at' => fake()->dateTimeBetween('-30 days', '-7 days'),
'rejection_reason' => fake()->sentence(),
]);
}
public function high(): static
{
return $this->state(fn (array $attributes) => [
'priority' => DocumentPriorityEnum::High,
]);
}
public function medium(): static
{
return $this->state(fn (array $attributes) => [
'priority' => DocumentPriorityEnum::Medium,
'processing_deadline' => fake()->dateTimeBetween('now', '+3 days'),
]);
}
}