This commit is contained in:
Adrian Hopek
2022-02-07 14:37:14 +01:00
parent 6deb5b65e2
commit cc90851bca
22 changed files with 155 additions and 45 deletions

View File

@@ -0,0 +1,20 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class VacationFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
//
];
}
}

View File

@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Database\Factories;
use Carbon\CarbonImmutable;
use Carbon\CarbonPeriod;
use Illuminate\Database\Eloquent\Factories\Factory;
use Toby\Domain\Enums\VacationRequestState;
use Toby\Domain\Enums\VacationType;
@@ -31,7 +30,6 @@ class VacationRequestFactory extends Factory
"state" => $this->faker->randomElement(VacationRequestState::cases()),
"from" => $from,
"to" => $from->addDays($days),
"estimated_days" => fn(array $attributes) => $this->estimateDays($attributes),
"comment" => $this->faker->boolean ? $this->faker->paragraph() : null,
];
}
@@ -43,11 +41,4 @@ class VacationRequestFactory extends Factory
return "{$number}/{$year}";
}
protected function estimateDays(array $attributes): int
{
$period = CarbonPeriod::create($attributes["from"], $attributes["to"]);
return $period->count();
}
}

View File

@@ -18,7 +18,6 @@ return new class() extends Migration {
$table->foreignIdFor(YearPeriod::class)->constrained()->cascadeOnDelete();
$table->string("type");
$table->string("state")->nullable();
$table->integer("estimated_days");
$table->date("from");
$table->date("to");
$table->text("comment")->nullable();

View File

@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Toby\Eloquent\Models\User;
use Toby\Eloquent\Models\VacationRequest;
return new class() extends Migration {
public function up(): void
{
Schema::create("vacations", function (Blueprint $table) {
$table->id();
$table->foreignIdFor(User::class)->constrained()->cascadeOnDelete();
$table->foreignIdFor(VacationRequest::class)->constrained()->cascadeOnDelete();
$table->date("date");
});
}
public function down(): void
{
Schema::dropIfExists("vacations");
}
};

View File

@@ -8,6 +8,7 @@ use Illuminate\Database\Seeder;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Toby\Domain\PolishHolidaysRetriever;
use Toby\Domain\VacationDaysCalculator;
use Toby\Eloquent\Helpers\UserAvatarGenerator;
use Toby\Eloquent\Models\User;
use Toby\Eloquent\Models\VacationLimit;
@@ -79,6 +80,20 @@ class DatabaseSeeder extends Seeder
->sequence(fn() => [
"year_period_id" => $yearPeriods->random()->id,
])
->afterCreating(function (VacationRequest $vacationRequest) {
$days = app(VacationDaysCalculator::class)->calculateDays(
$vacationRequest->yearPeriod,
$vacationRequest->from,
$vacationRequest->to
);
foreach ($days as $day) {
$vacationRequest->vacations()->create([
"date" => $day,
"user_id" => $vacationRequest->user->id
]);
}
})
->create();
}
}