#41 - wip
This commit is contained in:
		@@ -8,16 +8,23 @@ use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvi
 | 
			
		||||
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\VacationRequestWaitedForAdministrative;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestWaitedForTechnical;
 | 
			
		||||
use Toby\Domain\Listeners\CreateVacationRequestActivity;
 | 
			
		||||
use Toby\Domain\Listeners\HandleAcceptedByAdministrativeVacationRequest;
 | 
			
		||||
use Toby\Domain\Listeners\HandleAcceptedByTechnicalVacationRequest;
 | 
			
		||||
use Toby\Domain\Listeners\HandleApprovedVacationRequest;
 | 
			
		||||
use Toby\Domain\Listeners\HandleCreatedVacationRequest;
 | 
			
		||||
use Toby\Domain\Listeners\SendApprovedVacationRequestNotification;
 | 
			
		||||
use Toby\Domain\Listeners\SendCancelledVacationRequestNotification;
 | 
			
		||||
use Toby\Domain\Listeners\SendCreatedVacationRequestNotification;
 | 
			
		||||
use Toby\Domain\Listeners\SendRejectedVacationRequestNotification;
 | 
			
		||||
use Toby\Domain\Listeners\SendWaitedForAdministrativeVacationRequestNotification;
 | 
			
		||||
use Toby\Domain\Listeners\SendWaitedForTechnicalVacationRequestNotification;
 | 
			
		||||
 | 
			
		||||
class EventServiceProvider extends ServiceProvider
 | 
			
		||||
{
 | 
			
		||||
@@ -26,7 +33,10 @@ class EventServiceProvider extends ServiceProvider
 | 
			
		||||
        VacationRequestCreated::class => [HandleCreatedVacationRequest::class, SendCreatedVacationRequestNotification::class],
 | 
			
		||||
        VacationRequestAcceptedByTechnical::class => [HandleAcceptedByTechnicalVacationRequest::class],
 | 
			
		||||
        VacationRequestAcceptedByAdministrative::class => [HandleAcceptedByAdministrativeVacationRequest::class],
 | 
			
		||||
        VacationRequestApproved::class => [HandleApprovedVacationRequest::class],
 | 
			
		||||
        VacationRequestApproved::class => [HandleApprovedVacationRequest::class, SendApprovedVacationRequestNotification::class],
 | 
			
		||||
        VacationRequestRejected::class => [SendRejectedVacationRequestNotification::class],
 | 
			
		||||
        VacationRequestCancelled::class => [SendCancelledVacationRequestNotification::class],
 | 
			
		||||
        VacationRequestWaitedForTechnical::class => [SendWaitedForTechnicalVacationRequestNotification::class],
 | 
			
		||||
        VacationRequestWaitedForAdministrative::class => [SendWaitedForAdministrativeVacationRequestNotification::class],
 | 
			
		||||
    ];
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								app/Domain/Events/VacationRequestCancelled.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/Domain/Events/VacationRequestCancelled.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Events;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Foundation\Events\Dispatchable;
 | 
			
		||||
use Illuminate\Queue\SerializesModels;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestCancelled
 | 
			
		||||
{
 | 
			
		||||
    use Dispatchable;
 | 
			
		||||
    use SerializesModels;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        public VacationRequest $vacationRequest,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								app/Domain/Events/VacationRequestWaitedForAdministrative.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/Domain/Events/VacationRequestWaitedForAdministrative.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Events;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Foundation\Events\Dispatchable;
 | 
			
		||||
use Illuminate\Queue\SerializesModels;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestWaitedForAdministrative
 | 
			
		||||
{
 | 
			
		||||
    use Dispatchable;
 | 
			
		||||
    use SerializesModels;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        public VacationRequest $vacationRequest,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								app/Domain/Events/VacationRequestWaitedForTechnical.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/Domain/Events/VacationRequestWaitedForTechnical.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Events;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Foundation\Events\Dispatchable;
 | 
			
		||||
use Illuminate\Queue\SerializesModels;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestWaitedForTechnical
 | 
			
		||||
{
 | 
			
		||||
    use Dispatchable;
 | 
			
		||||
    use SerializesModels;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        public VacationRequest $vacationRequest,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,34 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Listeners;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Toby\Domain\Enums\Role;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestApproved;
 | 
			
		||||
use Toby\Domain\Notifications\VacationRequestApprovedNotification;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
 | 
			
		||||
class SendApprovedVacationRequestNotification
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function handle(VacationRequestApproved $event): void
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->getUsersForNotifications() as $user) {
 | 
			
		||||
            $user->notify(new VacationRequestApprovedNotification($event->vacationRequest, $user));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $event->vacationRequest->user->notify(new VacationRequestApprovedNotification($event->vacationRequest, $event->vacationRequest->user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getUsersForNotifications(): Collection
 | 
			
		||||
    {
 | 
			
		||||
        return User::query()
 | 
			
		||||
            ->whereIn("role", [Role::TechnicalApprover, Role::AdministrativeApprover])
 | 
			
		||||
            ->get();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,34 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Listeners;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Toby\Domain\Enums\Role;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestCancelled;
 | 
			
		||||
use Toby\Domain\Notifications\VacationRequestCancelledNotification;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
 | 
			
		||||
class SendCancelledVacationRequestNotification
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function handle(VacationRequestCancelled $event): void
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->getUsersForNotifications() as $user) {
 | 
			
		||||
            $user->notify(new VacationRequestCancelledNotification($event->vacationRequest, $user));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $event->vacationRequest->user->notify(new VacationRequestCancelledNotification($event->vacationRequest, $event->vacationRequest->user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getUsersForNotifications(): Collection
 | 
			
		||||
    {
 | 
			
		||||
        return User::query()
 | 
			
		||||
            ->whereIn("role", [Role::TechnicalApprover, Role::AdministrativeApprover])
 | 
			
		||||
            ->get();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,6 @@ namespace Toby\Domain\Listeners;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Toby\Domain\Enums\Role;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestCreated;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestRejected;
 | 
			
		||||
use Toby\Domain\Notifications\VacationRequestRejectedNotification;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Listeners;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Toby\Domain\Enums\Role;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestWaitedForAdministrative;
 | 
			
		||||
use Toby\Domain\Notifications\VacationRequestWaitedForAdministrativeNotification;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
 | 
			
		||||
class SendWaitedForAdministrativeVacationRequestNotification
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function handle(VacationRequestWaitedForAdministrative $event): void
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->getUsersForNotifications() as $user) {
 | 
			
		||||
            $user->notify(new VacationRequestWaitedForAdministrativeNotification($event->vacationRequest, $user));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getUsersForNotifications(): Collection
 | 
			
		||||
    {
 | 
			
		||||
        return User::query()
 | 
			
		||||
            ->where("role", [Role::AdministrativeApprover])
 | 
			
		||||
            ->get();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Listeners;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Toby\Domain\Enums\Role;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestWaitedForTechnical;
 | 
			
		||||
use Toby\Domain\Notifications\VacationRequestWaitedForTechnicalNotification;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
 | 
			
		||||
class SendWaitedForTechnicalVacationRequestNotification
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function handle(VacationRequestWaitedForTechnical $event): void
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->getUsersForNotifications() as $user) {
 | 
			
		||||
            $user->notify(new VacationRequestWaitedForTechnicalNotification($event->vacationRequest, $user));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getUsersForNotifications(): Collection
 | 
			
		||||
    {
 | 
			
		||||
        return User::query()
 | 
			
		||||
            ->where("role", [Role::TechnicalApprover])
 | 
			
		||||
            ->get();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,75 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Notifications;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Bus\Queueable;
 | 
			
		||||
use Illuminate\Notifications\Messages\MailMessage;
 | 
			
		||||
use Illuminate\Notifications\Notification;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestApprovedNotification extends Notification
 | 
			
		||||
{
 | 
			
		||||
    use Queueable;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        protected VacationRequest $vacationRequest,
 | 
			
		||||
        protected User $user,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function via(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ["mail"];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function toMail(): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $url = route(
 | 
			
		||||
            "vacation.requests.show",
 | 
			
		||||
            [
 | 
			
		||||
                "vacationRequest" => $this->vacationRequest,
 | 
			
		||||
            ],
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        return $this->buildMailMessage($url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function buildMailMessage(string $url): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $user = $this->vacationRequest->user->first_name;
 | 
			
		||||
        $title = $this->vacationRequest->name;
 | 
			
		||||
        $type = $this->vacationRequest->type->label();
 | 
			
		||||
        $from = $this->vacationRequest->from->format("d.m.Y");
 | 
			
		||||
        $to = $this->vacationRequest->to->format("d.m.Y");
 | 
			
		||||
        $days = $this->vacationRequest->vacations()->count();
 | 
			
		||||
        $requester = $this->vacationRequest->user->fullName;
 | 
			
		||||
 | 
			
		||||
        return (new MailMessage())
 | 
			
		||||
            ->greeting(__("Hi :user!", [
 | 
			
		||||
                "user" => $user,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->subject(__("Vacation request :title has been approved", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("The vacation request :title for user :requester has been approved.", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
                "requester" => $requester,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("Vacation type: :type", [
 | 
			
		||||
                "type" => $type,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("From :from to :to (number of days: :days)", [
 | 
			
		||||
                "from" => $from,
 | 
			
		||||
                "to" => $to,
 | 
			
		||||
                "days" => $days,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Click here for details"), $url);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,75 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Notifications;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Bus\Queueable;
 | 
			
		||||
use Illuminate\Notifications\Messages\MailMessage;
 | 
			
		||||
use Illuminate\Notifications\Notification;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestCancelledNotification extends Notification
 | 
			
		||||
{
 | 
			
		||||
    use Queueable;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        protected VacationRequest $vacationRequest,
 | 
			
		||||
        protected User $user,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function via(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ["mail"];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function toMail(): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $url = route(
 | 
			
		||||
            "vacation.requests.show",
 | 
			
		||||
            [
 | 
			
		||||
                "vacationRequest" => $this->vacationRequest,
 | 
			
		||||
            ],
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        return $this->buildMailMessage($url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function buildMailMessage(string $url): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $user = $this->vacationRequest->user->first_name;
 | 
			
		||||
        $title = $this->vacationRequest->name;
 | 
			
		||||
        $type = $this->vacationRequest->type->label();
 | 
			
		||||
        $from = $this->vacationRequest->from->format("d.m.Y");
 | 
			
		||||
        $to = $this->vacationRequest->to->format("d.m.Y");
 | 
			
		||||
        $days = $this->vacationRequest->vacations()->count();
 | 
			
		||||
        $requester = $this->vacationRequest->user->fullName;
 | 
			
		||||
 | 
			
		||||
        return (new MailMessage())
 | 
			
		||||
            ->greeting(__("Hi :user!", [
 | 
			
		||||
                "user" => $user,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->subject(__("Vacation request :title has been cancelled", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("The vacation request :title for user :requester has been cancelled.", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
                "requester" => $requester,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("Vacation type: :type", [
 | 
			
		||||
                "type" => $type,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("From :from to :to (number of days: :days)", [
 | 
			
		||||
                "from" => $from,
 | 
			
		||||
                "to" => $to,
 | 
			
		||||
                "days" => $days,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Click here for details"), $url);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -35,25 +35,38 @@ class VacationRequestCreatedNotification extends Notification
 | 
			
		||||
                "vacationRequest" => $this->vacationRequest,
 | 
			
		||||
            ],
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        return $this->buildMailMessage($url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function buildMailMessage(string $url): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $user = $this->vacationRequest->user->first_name;
 | 
			
		||||
        $title = $this->vacationRequest->name;
 | 
			
		||||
 | 
			
		||||
        $user = $this->vacationRequest->user;
 | 
			
		||||
        $type = $this->vacationRequest->type->label();
 | 
			
		||||
        $from = $this->vacationRequest->from->format("d.m.Y");
 | 
			
		||||
        $to = $this->vacationRequest->to->format("d.m.Y");
 | 
			
		||||
        $days = $this->vacationRequest->vacations()->count();
 | 
			
		||||
        $appName = config("app.name");
 | 
			
		||||
 | 
			
		||||
        return (new MailMessage())
 | 
			
		||||
            ->greeting(__("Hi :user!", [
 | 
			
		||||
                "user" => $user->fullName,
 | 
			
		||||
                "user" => $user,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->subject(__("Vacation request :title", [
 | 
			
		||||
            ->subject(__("Vacation request :title has been created", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("Vacation request has been created.", [
 | 
			
		||||
            ->line(__("The vacation request :title has been created correctly in the :appName.", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
                "appName" => $appName,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Show vacation request"), $url);
 | 
			
		||||
            ->line(__("Vacation type: :type", [
 | 
			
		||||
                "type" => $type,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("From :from to :to (number of days: :days)", [
 | 
			
		||||
                "from" => $from,
 | 
			
		||||
                "to" => $to,
 | 
			
		||||
                "days" => $days,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Click here for details"), $url);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -43,17 +43,33 @@ class VacationRequestRejectedNotification extends Notification
 | 
			
		||||
 | 
			
		||||
    protected function buildMailMessage(string $url): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $user = $this->vacationRequest->user->first_name;
 | 
			
		||||
        $title = $this->vacationRequest->name;
 | 
			
		||||
        $type = $this->vacationRequest->type->label();
 | 
			
		||||
        $from = $this->vacationRequest->from->format("d.m.Y");
 | 
			
		||||
        $to = $this->vacationRequest->to->format("d.m.Y");
 | 
			
		||||
        $days = $this->vacationRequest->vacations()->count();
 | 
			
		||||
        $requester = $this->vacationRequest->user->fullName;
 | 
			
		||||
 | 
			
		||||
        return (new MailMessage())
 | 
			
		||||
            ->greeting(__("Hi :user!", [
 | 
			
		||||
                "user" => $this->user->fullName,
 | 
			
		||||
                "user" => $user,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->subject(__("Vacation request :title", [
 | 
			
		||||
            ->subject(__("Vacation request :title has been rejected", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("Vacation request has been rejected.", [
 | 
			
		||||
            ->line(__("The vacation request :title for user :requester has been rejected.", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
                "requester" => $requester,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Show vacation request"), $url);
 | 
			
		||||
            ->line(__("Vacation type: :type", [
 | 
			
		||||
                "type" => $type,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("From :from to :to (number of days: :days)", [
 | 
			
		||||
                "from" => $from,
 | 
			
		||||
                "to" => $to,
 | 
			
		||||
                "days" => $days,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Click here for details"), $url);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,75 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Notifications;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Bus\Queueable;
 | 
			
		||||
use Illuminate\Notifications\Messages\MailMessage;
 | 
			
		||||
use Illuminate\Notifications\Notification;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestWaitedForAdministrativeNotification extends Notification
 | 
			
		||||
{
 | 
			
		||||
    use Queueable;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        protected VacationRequest $vacationRequest,
 | 
			
		||||
        protected User $user,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function via(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ["mail"];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function toMail(): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $url = route(
 | 
			
		||||
            "vacation.requests.show",
 | 
			
		||||
            [
 | 
			
		||||
                "vacationRequest" => $this->vacationRequest,
 | 
			
		||||
            ],
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        return $this->buildMailMessage($url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function buildMailMessage(string $url): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $user = $this->user->first_name;
 | 
			
		||||
        $requester = $this->vacationRequest->user->fullName;
 | 
			
		||||
        $title = $this->vacationRequest->name;
 | 
			
		||||
        $type = $this->vacationRequest->type->label();
 | 
			
		||||
        $from = $this->vacationRequest->from->format("d.m.Y");
 | 
			
		||||
        $to = $this->vacationRequest->to->format("d.m.Y");
 | 
			
		||||
        $days = $this->vacationRequest->vacations()->count();
 | 
			
		||||
 | 
			
		||||
        return (new MailMessage())
 | 
			
		||||
            ->greeting(__("Hi :user!", [
 | 
			
		||||
                "user" => $user,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->subject(__("Vacation request :title is waiting for your approval", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("The vacation request :title from user: :requester is waiting for your approval.", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
                "requester" => $requester,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("Vacation type: :type", [
 | 
			
		||||
                "type" => $type,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("From :from to :to (number of days: :days)", [
 | 
			
		||||
                "from" => $from,
 | 
			
		||||
                "to" => $to,
 | 
			
		||||
                "days" => $days,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Click here for details"), $url);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,75 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Toby\Domain\Notifications;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Bus\Queueable;
 | 
			
		||||
use Illuminate\Notifications\Messages\MailMessage;
 | 
			
		||||
use Illuminate\Notifications\Notification;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use Toby\Eloquent\Models\User;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestWaitedForTechnicalNotification extends Notification
 | 
			
		||||
{
 | 
			
		||||
    use Queueable;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        protected VacationRequest $vacationRequest,
 | 
			
		||||
        protected User $user,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function via(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ["mail"];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function toMail(): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $url = route(
 | 
			
		||||
            "vacation.requests.show",
 | 
			
		||||
            [
 | 
			
		||||
                "vacationRequest" => $this->vacationRequest,
 | 
			
		||||
            ],
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        return $this->buildMailMessage($url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function buildMailMessage(string $url): MailMessage
 | 
			
		||||
    {
 | 
			
		||||
        $user = $this->user->first_name;
 | 
			
		||||
        $requester = $this->vacationRequest->user->fullName;
 | 
			
		||||
        $title = $this->vacationRequest->name;
 | 
			
		||||
        $type = $this->vacationRequest->type->label();
 | 
			
		||||
        $from = $this->vacationRequest->from->format("d.m.Y");
 | 
			
		||||
        $to = $this->vacationRequest->to->format("d.m.Y");
 | 
			
		||||
        $days = $this->vacationRequest->vacations()->count();
 | 
			
		||||
 | 
			
		||||
        return (new MailMessage())
 | 
			
		||||
            ->greeting(__("Hi :user!", [
 | 
			
		||||
                "user" => $user,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->subject(__("Vacation request :title is waiting for your approval", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("The vacation request :title from user: :requester is waiting for your approval.", [
 | 
			
		||||
                "title" => $title,
 | 
			
		||||
                "requester" => $requester,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("Vacation type: :type", [
 | 
			
		||||
                "type" => $type,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->line(__("From :from to :to (number of days: :days)", [
 | 
			
		||||
                "from" => $from,
 | 
			
		||||
                "to" => $to,
 | 
			
		||||
                "days" => $days,
 | 
			
		||||
            ]))
 | 
			
		||||
            ->action(__("Click here for details"), $url);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -10,8 +10,11 @@ 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\VacationRequestWaitedForAdministrative;
 | 
			
		||||
use Toby\Domain\Events\VacationRequestWaitedForTechnical;
 | 
			
		||||
use Toby\Eloquent\Models\VacationRequest;
 | 
			
		||||
 | 
			
		||||
class VacationRequestStateManager
 | 
			
		||||
@@ -39,12 +42,15 @@ class VacationRequestStateManager
 | 
			
		||||
    public function reject(VacationRequest $vacationRequest): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->changeState($vacationRequest, VacationRequestState::Rejected);
 | 
			
		||||
 | 
			
		||||
        $this->dispatcher->dispatch(new VacationRequestRejected($vacationRequest));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function cancel(VacationRequest $vacationRequest): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->changeState($vacationRequest, VacationRequestState::Canceled);
 | 
			
		||||
 | 
			
		||||
        $this->dispatcher->dispatch(new VacationRequestCancelled($vacationRequest));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function acceptAsTechnical(VacationRequest $vacationRequest): void
 | 
			
		||||
@@ -64,11 +70,15 @@ class VacationRequestStateManager
 | 
			
		||||
    public function waitForTechnical(VacationRequest $vacationRequest): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->changeState($vacationRequest, VacationRequestState::WaitingForTechnical);
 | 
			
		||||
 | 
			
		||||
        $this->dispatcher->dispatch(new VacationRequestWaitedForTechnical($vacationRequest));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function waitForAdministrative(VacationRequest $vacationRequest): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->changeState($vacationRequest, VacationRequestState::WaitingForAdministrative);
 | 
			
		||||
 | 
			
		||||
        $this->dispatcher->dispatch(new VacationRequestWaitedForAdministrative($vacationRequest));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function changeState(VacationRequest $vacationRequest, VacationRequestState $state): void
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,7 @@
 | 
			
		||||
  "Vacation limits have been updated.": "Limity urlopów zostały zaktualizowane.",
 | 
			
		||||
  "Vacation request has been created.": "Wniosek urlopowy został utworzony.",
 | 
			
		||||
  "Vacation request has been accepted.": "Wniosek urlopowy został zaakceptowany.",
 | 
			
		||||
  "Vacation request has been approved.": "Wniosek urlopowy został zatwierdzony.",
 | 
			
		||||
  "Vacation request has been rejected.": "Wniosek urlopowy został odrzucony.",
 | 
			
		||||
  "Vacation request has been canceled.": "Wniosek urlopowy został anulowany.",
 | 
			
		||||
  "Hi :user!": "Cześć :user!",
 | 
			
		||||
@@ -50,5 +51,18 @@
 | 
			
		||||
  "Regards": "Z poważaniem",
 | 
			
		||||
  "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Jeżeli masz problemy z kliknięciem przycisku \":actionText\", skopiuj i wklej poniższy adres w pasek przeglądarki:",
 | 
			
		||||
  "All rights reserved.": "Wszelkie prawa zastrzeżone",
 | 
			
		||||
  "Show vacation request": "Pokaż wniosek"
 | 
			
		||||
  "Show vacation request": "Pokaż wniosek",
 | 
			
		||||
  "Vacation request :title has been created" : "Wniosek :title został utworzony",
 | 
			
		||||
  "The vacation request :title has been created correctly in the :appName.": "W systemie :appName został poprawnie utworzony wniosek urlopowy :title.",
 | 
			
		||||
  "Vacation type: :type": "Rodzaj wniosku: :type",
 | 
			
		||||
  "From :from to :to (number of days: :days)": "Od :from do :to (liczba dni: :days)",
 | 
			
		||||
  "Click here for details": "Kliknij, aby zobaczyć szczegóły",
 | 
			
		||||
  "Vacation request :title is waiting for your approval": "Wniosek urlopowy :title czeka na zaakceptowanie",
 | 
			
		||||
  "The vacation request :title from user: :requester is waiting for your approval.": "Wniosek urlopowy :title od użytkownika :requester czeka na Twoją akceptację.",
 | 
			
		||||
  "Vacation request :title has been approved": "Wniosek urlopowy :title został zatwierdzony",
 | 
			
		||||
  "The vacation request :title for user :requester has been approved.": "Wniosek urlopowy :title od użytkownika :requester został zatwierdzony.",
 | 
			
		||||
  "Vacation request :title has been cancelled": "WNiosek urlopowy :title został anulowany",
 | 
			
		||||
  "The vacation request :title for user :requester has been cancelled.": "Wniosek urlopowy :title  od użytkownika :requester został anulowany.",
 | 
			
		||||
  "Vacation request :title has been rejected": "Wniosek urlopowy :title został odrzucony",
 | 
			
		||||
  "The vacation request :title for user :requester has been rejected.": "Wniosek urlopowy :title od użytkownika :requester został odrzucony."
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user