Merge branch 'main' into #43-vacation-summary-for-employee
# Conflicts: # app/Infrastructure/Http/Controllers/HolidayController.php # app/Infrastructure/Http/Controllers/VacationLimitController.php # app/Infrastructure/Http/Controllers/VacationRequestController.php # composer.lock # resources/js/Pages/Holidays/Index.vue # resources/js/Pages/VacationRequest/Create.vue
This commit is contained in:
@@ -6,15 +6,24 @@ 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\VacationRequestCancelled;
|
||||
use Toby\Domain\Events\VacationRequestCreated;
|
||||
use Toby\Domain\Events\VacationRequestRejected;
|
||||
use Toby\Domain\Events\VacationRequestStateChanged;
|
||||
use Toby\Domain\Events\VacationRequestWaitsForAdminApproval;
|
||||
use Toby\Domain\Events\VacationRequestWaitsForTechApproval;
|
||||
use Toby\Domain\States\VacationRequest\AcceptedByAdministrative;
|
||||
use Toby\Domain\States\VacationRequest\AcceptedByTechnical;
|
||||
use Toby\Domain\States\VacationRequest\Approved;
|
||||
use Toby\Domain\States\VacationRequest\Cancelled;
|
||||
use Toby\Domain\States\VacationRequest\Rejected;
|
||||
use Toby\Domain\States\VacationRequest\VacationRequestState;
|
||||
use Toby\Domain\States\VacationRequest\WaitingForAdministrative;
|
||||
use Toby\Domain\States\VacationRequest\WaitingForTechnical;
|
||||
use Toby\Eloquent\Models\User;
|
||||
use Toby\Eloquent\Models\VacationRequest;
|
||||
|
||||
class VacationRequestStateManager
|
||||
@@ -24,64 +33,77 @@ class VacationRequestStateManager
|
||||
protected Dispatcher $dispatcher,
|
||||
) {}
|
||||
|
||||
public function markAsCreated(VacationRequest $vacationRequest): void
|
||||
public function markAsCreated(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::Created);
|
||||
$this->fireStateChangedEvent($vacationRequest, null, $vacationRequest->state, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestCreated($vacationRequest));
|
||||
}
|
||||
|
||||
public function approve(VacationRequest $vacationRequest): void
|
||||
public function approve(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::Approved);
|
||||
$this->changeState($vacationRequest, Approved::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestApproved($vacationRequest));
|
||||
}
|
||||
|
||||
public function reject(VacationRequest $vacationRequest): void
|
||||
public function reject(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::Rejected);
|
||||
|
||||
$this->changeState($vacationRequest, Rejected::class, $user);
|
||||
$this->dispatcher->dispatch(new VacationRequestRejected($vacationRequest));
|
||||
}
|
||||
|
||||
public function cancel(VacationRequest $vacationRequest): void
|
||||
public function cancel(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::Cancelled);
|
||||
$this->changeState($vacationRequest, Cancelled::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestCancelled($vacationRequest));
|
||||
}
|
||||
|
||||
public function acceptAsTechnical(VacationRequest $vacationRequest): void
|
||||
public function acceptAsTechnical(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::AcceptedByTechnical);
|
||||
$this->changeState($vacationRequest, AcceptedByTechnical::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestAcceptedByTechnical($vacationRequest));
|
||||
}
|
||||
|
||||
public function acceptAsAdministrative(VacationRequest $vacationRequest): void
|
||||
public function acceptAsAdministrative(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::AcceptedByAdministrative);
|
||||
$this->changeState($vacationRequest, AcceptedByAdministrative::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestAcceptedByAdministrative($vacationRequest));
|
||||
}
|
||||
|
||||
public function waitForTechnical(VacationRequest $vacationRequest): void
|
||||
public function waitForTechnical(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::WaitingForTechnical);
|
||||
$this->changeState($vacationRequest, WaitingForTechnical::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestWaitsForTechApproval($vacationRequest));
|
||||
}
|
||||
|
||||
public function waitForAdministrative(VacationRequest $vacationRequest): void
|
||||
public function waitForAdministrative(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, VacationRequestState::WaitingForAdministrative);
|
||||
$this->changeState($vacationRequest, WaitingForAdministrative::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestWaitsForAdminApproval($vacationRequest));
|
||||
}
|
||||
|
||||
protected function changeState(VacationRequest $vacationRequest, VacationRequestState $state): void
|
||||
protected function changeState(VacationRequest $vacationRequest, string $state, ?User $user = null): void
|
||||
{
|
||||
$vacationRequest->changeStateTo($state);
|
||||
$previousState = $vacationRequest->state;
|
||||
$vacationRequest->state->transitionTo($state);
|
||||
$vacationRequest->save();
|
||||
|
||||
$this->fireStateChangedEvent($vacationRequest, $previousState, $vacationRequest->state, $user);
|
||||
}
|
||||
|
||||
protected function fireStateChangedEvent(
|
||||
VacationRequest $vacationRequest,
|
||||
?VacationRequestState $from,
|
||||
VacationRequestState $to,
|
||||
?User $user = null,
|
||||
): void {
|
||||
$event = new VacationRequestStateChanged($vacationRequest, $from, $to, $user);
|
||||
$this->dispatcher->dispatch($event);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user