- actions and notifications refactor (#88)
* wip * fix * fix * fix * add test * fix * wip * fix * fix translations Co-authored-by: EwelinaLasowy <ewelina.lasowy@blumilk.pl>
This commit is contained in:
@@ -4,17 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Toby\Domain;
|
||||
|
||||
use Illuminate\Contracts\Auth\Factory as Auth;
|
||||
use Illuminate\Contracts\Events\Dispatcher;
|
||||
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;
|
||||
@@ -29,63 +19,47 @@ use Toby\Eloquent\Models\VacationRequest;
|
||||
class VacationRequestStateManager
|
||||
{
|
||||
public function __construct(
|
||||
protected Auth $auth,
|
||||
protected Dispatcher $dispatcher,
|
||||
) {}
|
||||
|
||||
public function markAsCreated(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
public function markAsCreated(VacationRequest $vacationRequest): void
|
||||
{
|
||||
$this->fireStateChangedEvent($vacationRequest, null, $vacationRequest->state, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestCreated($vacationRequest));
|
||||
$this->createActivity($vacationRequest, null, $vacationRequest->state, $vacationRequest->creator);
|
||||
}
|
||||
|
||||
public function approve(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
{
|
||||
$this->changeState($vacationRequest, Approved::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestApproved($vacationRequest));
|
||||
}
|
||||
|
||||
public function reject(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
public function reject(VacationRequest $vacationRequest, User $user): void
|
||||
{
|
||||
$this->changeState($vacationRequest, Rejected::class, $user);
|
||||
$this->dispatcher->dispatch(new VacationRequestRejected($vacationRequest));
|
||||
}
|
||||
|
||||
public function cancel(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
public function cancel(VacationRequest $vacationRequest, User $user): void
|
||||
{
|
||||
$this->changeState($vacationRequest, Cancelled::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestCancelled($vacationRequest));
|
||||
}
|
||||
|
||||
public function acceptAsTechnical(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
public function acceptAsTechnical(VacationRequest $vacationRequest, User $user): void
|
||||
{
|
||||
$this->changeState($vacationRequest, AcceptedByTechnical::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestAcceptedByTechnical($vacationRequest));
|
||||
}
|
||||
|
||||
public function acceptAsAdministrative(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
public function acceptAsAdministrative(VacationRequest $vacationRequest, User $user): void
|
||||
{
|
||||
$this->changeState($vacationRequest, AcceptedByAdministrative::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestAcceptedByAdministrative($vacationRequest));
|
||||
}
|
||||
|
||||
public function waitForTechnical(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
public function waitForTechnical(VacationRequest $vacationRequest): void
|
||||
{
|
||||
$this->changeState($vacationRequest, WaitingForTechnical::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestWaitsForTechApproval($vacationRequest));
|
||||
$this->changeState($vacationRequest, WaitingForTechnical::class);
|
||||
}
|
||||
|
||||
public function waitForAdministrative(VacationRequest $vacationRequest, ?User $user = null): void
|
||||
public function waitForAdministrative(VacationRequest $vacationRequest): void
|
||||
{
|
||||
$this->changeState($vacationRequest, WaitingForAdministrative::class, $user);
|
||||
|
||||
$this->dispatcher->dispatch(new VacationRequestWaitsForAdminApproval($vacationRequest));
|
||||
$this->changeState($vacationRequest, WaitingForAdministrative::class);
|
||||
}
|
||||
|
||||
protected function changeState(VacationRequest $vacationRequest, string $state, ?User $user = null): void
|
||||
@@ -94,16 +68,19 @@ class VacationRequestStateManager
|
||||
$vacationRequest->state->transitionTo($state);
|
||||
$vacationRequest->save();
|
||||
|
||||
$this->fireStateChangedEvent($vacationRequest, $previousState, $vacationRequest->state, $user);
|
||||
$this->createActivity($vacationRequest, $previousState, $vacationRequest->state, $user);
|
||||
}
|
||||
|
||||
protected function fireStateChangedEvent(
|
||||
protected function createActivity(
|
||||
VacationRequest $vacationRequest,
|
||||
?VacationRequestState $from,
|
||||
VacationRequestState $to,
|
||||
?User $user = null,
|
||||
): void {
|
||||
$event = new VacationRequestStateChanged($vacationRequest, $from, $to, $user);
|
||||
$this->dispatcher->dispatch($event);
|
||||
$vacationRequest->activities()->create([
|
||||
"from" => $from,
|
||||
"to" => $to,
|
||||
"user_id" => $user?->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user