
# Conflicts: # app/Architecture/Providers/ObserverServiceProvider.php # app/Domain/Role.php # app/Domain/Rules/ApprovedVacationDaysInSameRange.php # app/Domain/Rules/DoesNotExceedLimitRule.php # app/Domain/Rules/MinimumOneVacationDayRule.php # app/Domain/Rules/PendingVacationRequestInSameRange.php # app/Domain/Rules/UsedVacationDaysInSameRange.php # app/Domain/Rules/VacationRequestRule.php # app/Domain/VacationRequestState.php # app/Domain/VacationRequestStateManager.php # app/Domain/VacationRequestValidator.php # app/Domain/VacationType.php # app/Domain/VacationTypeConfigRetriever.php # app/Eloquent/Models/User.php # app/Infrastructure/Http/Controllers/UserController.php # app/Infrastructure/Http/Kernel.php # app/Infrastructure/Http/Requests/UserRequest.php # database/factories/UserFactory.php # database/seeders/DatabaseSeeder.php # routes/web.php # tests/Feature/UserTest.php
77 lines
2.5 KiB
PHP
77 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Toby\Domain;
|
|
|
|
use Illuminate\Contracts\Auth\Factory as Auth;
|
|
use Illuminate\Contracts\Events\Dispatcher;
|
|
use Toby\Domain\Enums\VacationRequestState;
|
|
use Toby\Domain\Events\VacationRequestAcceptedByAdministrative;
|
|
use Toby\Domain\Events\VacationRequestAcceptedByTechnical;
|
|
use Toby\Domain\Events\VacationRequestApproved;
|
|
use Toby\Domain\Events\VacationRequestCreated;
|
|
use Toby\Eloquent\Models\VacationRequest;
|
|
|
|
class VacationRequestStateManager
|
|
{
|
|
public function __construct(
|
|
protected Auth $auth,
|
|
protected Dispatcher $dispatcher,
|
|
) {
|
|
}
|
|
|
|
public function markAsCreated(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::CREATED);
|
|
|
|
$this->dispatcher->dispatch(new VacationRequestCreated($vacationRequest));
|
|
}
|
|
|
|
public function approve(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::APPROVED);
|
|
|
|
$this->dispatcher->dispatch(new VacationRequestApproved($vacationRequest));
|
|
}
|
|
|
|
public function reject(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::REJECTED);
|
|
}
|
|
|
|
public function cancel(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::CANCELED);
|
|
}
|
|
|
|
public function acceptAsTechnical(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::ACCEPTED_BY_TECHNICAL);
|
|
|
|
$this->dispatcher->dispatch(new VacationRequestAcceptedByTechnical($vacationRequest));
|
|
}
|
|
|
|
public function acceptAsAdministrative(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::ACCEPTED_BY_ADMINSTRATIVE);
|
|
|
|
$this->dispatcher->dispatch(new VacationRequestAcceptedByAdministrative($vacationRequest));
|
|
}
|
|
|
|
public function waitForTechnical(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::WAITING_FOR_TECHNICAL);
|
|
}
|
|
|
|
public function waitForAdministrative(VacationRequest $vacationRequest): void
|
|
{
|
|
$this->changeState($vacationRequest, VacationRequestState::WAITING_FOR_ADMINISTRATIVE);
|
|
}
|
|
|
|
protected function changeState(VacationRequest $vacationRequest, VacationRequestState $state): void
|
|
{
|
|
$vacationRequest->changeStateTo($state);
|
|
}
|
|
}
|