#36 - validate vacation request (#47)

* #36 - wip

* #36 - wip

* #36 - wip

* #36 - added some translations

* #36 - fix

* #36 - fix

Co-authored-by: EwelinaLasowy <ewelina.lasowy@blumilk.pl>
This commit is contained in:
Adrian Hopek
2022-02-07 12:29:46 +01:00
committed by GitHub
parent 41c769d4ab
commit b161981d5a
28 changed files with 387 additions and 130 deletions

View File

@@ -1,16 +0,0 @@
<?php
declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Closure;
use Toby\Eloquent\Models\VacationRequest;
class ApprovedVacationDaysInSameRange implements VacationRequestRule
{
public function check(VacationRequest $vacationRequest, Closure $next)
{
return $next($vacationRequest);
}
}

View File

@@ -4,13 +4,23 @@ declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Closure;
use Toby\Domain\VacationTypeConfigRetriever;
use Toby\Eloquent\Models\VacationRequest;
class DoesNotExceedLimitRule implements VacationRequestRule
{
public function check(VacationRequest $vacationRequest, Closure $next)
public function __construct(
protected VacationTypeConfigRetriever $configRetriever,
) {
}
public function check(VacationRequest $vacationRequest): bool
{
return $next($vacationRequest);
return true;
}
public function errorMessage(): string
{
return __("You have exceeded your vacation limit.");
}
}

View File

@@ -4,13 +4,25 @@ declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Closure;
use Toby\Domain\VacationDaysCalculator;
use Toby\Eloquent\Models\VacationRequest;
class MinimumOneVacationDayRule implements VacationRequestRule
{
public function check(VacationRequest $vacationRequest, Closure $next)
public function __construct(
protected VacationDaysCalculator $vacationDaysCalculator,
) {
}
public function check(VacationRequest $vacationRequest): bool
{
return $next($vacationRequest);
return $this->vacationDaysCalculator
->calculateDays($vacationRequest->yearPeriod, $vacationRequest->from, $vacationRequest->to)
->isNotEmpty();
}
public function errorMessage(): string
{
return __("Vacation needs minimum one day.");
}
}

View File

@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Toby\Domain\Enums\VacationRequestState;
use Toby\Eloquent\Models\VacationRequest;
class NoApprovedVacationRequestsInRange implements VacationRequestRule
{
public function check(VacationRequest $vacationRequest): bool
{
return !$vacationRequest
->user
->vacationRequests()
->overlapsWith($vacationRequest)
->states(VacationRequestState::successStates())
->exists();
}
public function errorMessage(): string
{
return __("You have approved vacation request in this range.");
}
}

View File

@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Toby\Domain\Enums\VacationRequestState;
use Toby\Eloquent\Models\VacationRequest;
class NoPendingVacationRequestInRange implements VacationRequestRule
{
public function check(VacationRequest $vacationRequest): bool
{
return !$vacationRequest
->user
->vacationRequests()
->overlapsWith($vacationRequest)
->states(VacationRequestState::pendingStates())
->exists();
}
public function errorMessage(): string
{
return __("You have pending vacation request in this range.");
}
}

View File

@@ -1,16 +0,0 @@
<?php
declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Closure;
use Toby\Eloquent\Models\VacationRequest;
class PendingVacationRequestInSameRange implements VacationRequestRule
{
public function check(VacationRequest $vacationRequest, Closure $next)
{
return $next($vacationRequest);
}
}

View File

@@ -1,16 +0,0 @@
<?php
declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Closure;
use Toby\Eloquent\Models\VacationRequest;
class UsedVacationDaysInSameRange
{
public function check(VacationRequest $vacationRequest, Closure $next)
{
return $next($vacationRequest);
}
}

View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Toby\Eloquent\Models\VacationRequest;
class VacationRangeIsInTheSameYearRule implements VacationRequestRule
{
public function check(VacationRequest $vacationRequest): bool
{
return $vacationRequest->from->isSameYear($vacationRequest->to);
}
public function errorMessage(): string
{
return __("The vacation request cannot be created at the turn of the year.");
}
}

View File

@@ -4,10 +4,10 @@ declare(strict_types=1);
namespace Toby\Domain\Validation\Rules;
use Closure;
use Toby\Eloquent\Models\VacationRequest;
interface VacationRequestRule
{
public function check(VacationRequest $vacationRequest, Closure $next);
public function check(VacationRequest $vacationRequest): bool;
public function errorMessage(): string;
}