diff --git a/app/Eloquent/Models/VacationRequest.php b/app/Eloquent/Models/VacationRequest.php index 5effa7c..0a81620 100644 --- a/app/Eloquent/Models/VacationRequest.php +++ b/app/Eloquent/Models/VacationRequest.php @@ -21,6 +21,7 @@ use Toby\Domain\Enums\VacationType; * @property VacationRequestState $state * @property Carbon $from * @property Carbon $to + * @property int $estimated_days * @property string $comment * @property User $user * @property YearPeriod $yearPeriod diff --git a/app/Infrastructure/Http/Controllers/VacationRequestController.php b/app/Infrastructure/Http/Controllers/VacationRequestController.php index 3c2eaf8..ca8be78 100644 --- a/app/Infrastructure/Http/Controllers/VacationRequestController.php +++ b/app/Infrastructure/Http/Controllers/VacationRequestController.php @@ -11,6 +11,7 @@ use Illuminate\Http\Response as LaravelResponse; use Inertia\Response; use Toby\Domain\Enums\VacationRequestState; use Toby\Domain\Enums\VacationType; +use Toby\Domain\VacationDaysCalculator; use Toby\Domain\VacationRequestStateManager; use Toby\Domain\Validation\VacationRequestValidator; use Toby\Eloquent\Helpers\YearPeriodRetriever; @@ -64,9 +65,15 @@ class VacationRequestController extends Controller VacationRequestRequest $request, VacationRequestValidator $vacationRequestValidator, VacationRequestStateManager $stateManager, + VacationDaysCalculator $vacationDaysCalculator, ): RedirectResponse { /** @var VacationRequest $vacationRequest */ $vacationRequest = $request->user()->vacationRequests()->make($request->data()); + $vacationRequest->estimated_days = $vacationDaysCalculator->calculateDays( + $vacationRequest->yearPeriod, + $vacationRequest->from, + $vacationRequest->to, + )->count(); $vacationRequestValidator->validate($vacationRequest); diff --git a/app/Infrastructure/Http/Resources/VacationRequestResource.php b/app/Infrastructure/Http/Resources/VacationRequestResource.php index 859dfea..009eeb6 100644 --- a/app/Infrastructure/Http/Resources/VacationRequestResource.php +++ b/app/Infrastructure/Http/Resources/VacationRequestResource.php @@ -20,6 +20,7 @@ class VacationRequestResource extends JsonResource "state" => $this->state->label(), "from" => $this->from->toDisplayString(), "to" => $this->to->toDisplayString(), + "estimatedDays" => $this->estimated_days, "comment" => $this->comment, ]; } diff --git a/database/factories/VacationRequestFactory.php b/database/factories/VacationRequestFactory.php index 4816781..3939367 100644 --- a/database/factories/VacationRequestFactory.php +++ b/database/factories/VacationRequestFactory.php @@ -5,6 +5,7 @@ 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; @@ -30,6 +31,7 @@ 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, ]; } @@ -41,4 +43,11 @@ class VacationRequestFactory extends Factory return "{$number}/{$year}"; } + + protected function estimateDays(array $attributes): int + { + $period = CarbonPeriod::create($attributes["from"], $attributes["to"]); + + return $period->count(); + } } diff --git a/database/migrations/2022_01_26_100039_create_vacation_requests_table.php b/database/migrations/2022_01_26_100039_create_vacation_requests_table.php index f5270da..b3f4e48 100644 --- a/database/migrations/2022_01_26_100039_create_vacation_requests_table.php +++ b/database/migrations/2022_01_26_100039_create_vacation_requests_table.php @@ -18,6 +18,7 @@ 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(); diff --git a/resources/js/Pages/VacationRequest/Create.vue b/resources/js/Pages/VacationRequest/Create.vue index 5fa2919..d2cef55 100644 --- a/resources/js/Pages/VacationRequest/Create.vue +++ b/resources/js/Pages/VacationRequest/Create.vue @@ -153,7 +153,7 @@ id="comment" v-model="form.comment" rows="4" - class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 block w-full max-w-lg sm:text-sm border-gray-300 rounded-md" + class="shadow-sm focus:ring-blumilk-500 focus:border-blumilk-500 block w-full max-w-lg sm:text-sm border-gray-300 rounded-md" /> diff --git a/resources/js/Pages/VacationRequest/Index.vue b/resources/js/Pages/VacationRequest/Index.vue index 28daa96..48318dc 100644 --- a/resources/js/Pages/VacationRequest/Index.vue +++ b/resources/js/Pages/VacationRequest/Index.vue @@ -61,6 +61,12 @@ > Do + + Dni urlopu + @@ -90,6 +96,9 @@ {{ request.to }} + + {{ request.estimatedDays }} + diff --git a/resources/js/Pages/VacationRequest/Show.vue b/resources/js/Pages/VacationRequest/Show.vue index 6bee934..55a3f09 100644 --- a/resources/js/Pages/VacationRequest/Show.vue +++ b/resources/js/Pages/VacationRequest/Show.vue @@ -44,10 +44,10 @@
- Dni + Dni urlopu
- x + {{ request.estimatedDays }}
diff --git a/resources/views/pdf/vacation-request.blade.php b/resources/views/pdf/vacation-request.blade.php index 9f22109..9300bf2 100644 --- a/resources/views/pdf/vacation-request.blade.php +++ b/resources/views/pdf/vacation-request.blade.php @@ -74,7 +74,7 @@

Wniosek o urlop

Proszę o {{ mb_strtolower($vacationRequest->type->label()) }} w okresie od dnia {{ $vacationRequest->from->format("d.m.Y") }} - do dnia {{ $vacationRequest->to->format("d.m.Y") }} włącznie tj. x dni roboczych za rok {{ $vacationRequest->yearPeriod->year }}. + do dnia {{ $vacationRequest->to->format("d.m.Y") }} włącznie tj. {{ $vacationRequest->estimated_days }} dni roboczych za rok {{ $vacationRequest->yearPeriod->year }}.