diff --git a/app/Domain/Notifications/VacationRequestWaitsForApprovalNotification.php b/app/Domain/Notifications/VacationRequestWaitsForApprovalNotification.php index 4e9199c..a737a81 100644 --- a/app/Domain/Notifications/VacationRequestWaitsForApprovalNotification.php +++ b/app/Domain/Notifications/VacationRequestWaitsForApprovalNotification.php @@ -8,6 +8,7 @@ use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use InvalidArgumentException; +use Toby\Domain\States\VacationRequest\WaitingForTechnical; use Toby\Eloquent\Models\User; use Toby\Eloquent\Models\VacationRequest; @@ -43,8 +44,6 @@ class VacationRequestWaitsForApprovalNotification extends Notification 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->toDisplayString(); $to = $this->vacationRequest->to->toDisplayString(); @@ -54,13 +53,8 @@ class VacationRequestWaitsForApprovalNotification extends Notification ->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, - ])) + ->subject($this->buildSubject()) + ->line($this->buildDescription()) ->line(__("Vacation type: :type", [ "type" => $type, ])) @@ -71,4 +65,37 @@ class VacationRequestWaitsForApprovalNotification extends Notification ])) ->action(__("Click here for details"), $url); } + + protected function buildSubject(): string + { + $title = $this->vacationRequest->name; + + if ($this->vacationRequest->state->equals(WaitingForTechnical::class)) { + return __("Vacation request :title is waiting for your technical approval", [ + "title" => $title, + ]); + } + + return __("Vacation request :title is waiting for your administrative approval", [ + "title" => $title, + ]); + } + + protected function buildDescription(): string + { + $title = $this->vacationRequest->name; + $requester = $this->vacationRequest->user->name; + + if ($this->vacationRequest->state->equals(WaitingForTechnical::class)) { + return __("The vacation request :title from user: :requester is waiting for your technical approval.", [ + "title" => $title, + "requester" => $requester, + ]); + } + + return __("The vacation request :title from user: :requester is waiting for your administrative approval.", [ + "title" => $title, + "requester" => $requester, + ]); + } } diff --git a/app/Domain/TimesheetPerUserSheet.php b/app/Domain/TimesheetPerUserSheet.php index 48098cf..ce7634a 100644 --- a/app/Domain/TimesheetPerUserSheet.php +++ b/app/Domain/TimesheetPerUserSheet.php @@ -187,7 +187,7 @@ class TimesheetPerUserSheet implements WithTitle, WithHeadings, WithEvents, With { return $user->vacations() ->with("vacationRequest") - ->whereRelation("vacationRequest", fn(Builder $query) => $query->whereIn("type", $this->types)) + ->whereRelation("vacationRequest", fn(Builder $query): Builder => $query->whereIn("type", $this->types)) ->whereBetween("date", [$period->start, $period->end]) ->approved() ->get() diff --git a/app/Domain/UserVacationStatsRetriever.php b/app/Domain/UserVacationStatsRetriever.php index 3a8a6e6..21967cb 100644 --- a/app/Domain/UserVacationStatsRetriever.php +++ b/app/Domain/UserVacationStatsRetriever.php @@ -24,7 +24,7 @@ class UserVacationStatsRetriever ->whereBelongsTo($yearPeriod) ->whereRelation( "vacationRequest", - fn(Builder $query) => $query + fn(Builder $query): Builder => $query ->whereIn("type", $this->getLimitableVacationTypes()) ->states(VacationRequestStatesRetriever::successStates()), ) @@ -36,7 +36,7 @@ class UserVacationStatsRetriever return $user->vacations() ->whereRelation( "vacationRequest", - fn(Builder $query) => $query + fn(Builder $query): Builder => $query ->whereBelongsTo($yearPeriod) ->whereIn("type", $this->getLimitableVacationTypes()) ->states(VacationRequestStatesRetriever::successStates()), @@ -53,7 +53,7 @@ class UserVacationStatsRetriever ->whereBelongsTo($yearPeriod) ->whereRelation( "vacationRequest", - fn(Builder $query) => $query + fn(Builder $query): Builder => $query ->whereIn("type", $this->getLimitableVacationTypes()) ->states(VacationRequestStatesRetriever::pendingStates()), ) @@ -67,7 +67,7 @@ class UserVacationStatsRetriever ->whereBelongsTo($yearPeriod) ->whereRelation( "vacationRequest", - fn(Builder $query) => $query + fn(Builder $query): Builder => $query ->whereIn("type", $this->getNotLimitableVacationTypes()) ->states(VacationRequestStatesRetriever::successStates()), ) diff --git a/app/Domain/Validation/Rules/DoesNotExceedLimitRule.php b/app/Domain/Validation/Rules/DoesNotExceedLimitRule.php index 74cb9d1..3fd5429 100644 --- a/app/Domain/Validation/Rules/DoesNotExceedLimitRule.php +++ b/app/Domain/Validation/Rules/DoesNotExceedLimitRule.php @@ -44,7 +44,7 @@ class DoesNotExceedLimitRule implements VacationRequestRule return $user->vacationLimits() ->whereBelongsTo($yearPeriod) ->first() - ->days ?? 0; + ?->days ?? 0; } protected function getVacationDaysWithLimit(User $user, YearPeriod $yearPeriod): int @@ -53,7 +53,7 @@ class DoesNotExceedLimitRule implements VacationRequestRule ->whereBelongsTo($yearPeriod) ->whereRelation( "vacationRequest", - fn(Builder $query) => $query + fn(Builder $query): Builder => $query ->whereIn("type", $this->getLimitableVacationTypes()) ->noStates(VacationRequestStatesRetriever::failedStates()), ) diff --git a/app/Eloquent/Models/User.php b/app/Eloquent/Models/User.php index d4f451c..7aab139 100644 --- a/app/Eloquent/Models/User.php +++ b/app/Eloquent/Models/User.php @@ -112,7 +112,7 @@ class User extends Authenticatable { return $query->whereRelation( "vacationlimits", - fn(Builder $query) => $query + fn(Builder $query): Builder => $query ->whereBelongsTo($yearPeriod) ->whereNotNull("days"), ); diff --git a/app/Eloquent/Models/Vacation.php b/app/Eloquent/Models/Vacation.php index 6313d07..a602042 100644 --- a/app/Eloquent/Models/Vacation.php +++ b/app/Eloquent/Models/Vacation.php @@ -47,7 +47,7 @@ class Vacation extends Model { return $query->whereRelation( "vacationRequest", - fn(Builder $query) => $query->states(VacationRequestStatesRetriever::successStates()), + fn(Builder $query): Builder => $query->states(VacationRequestStatesRetriever::successStates()), ); } @@ -55,7 +55,7 @@ class Vacation extends Model { return $query->whereRelation( "vacationRequest", - fn(Builder $query) => $query->states(VacationRequestStatesRetriever::pendingStates()), + fn(Builder $query): Builder => $query->states(VacationRequestStatesRetriever::pendingStates()), ); } } diff --git a/app/Infrastructure/Http/Controllers/AnnualSummaryController.php b/app/Infrastructure/Http/Controllers/AnnualSummaryController.php index c8394c6..83517dd 100644 --- a/app/Infrastructure/Http/Controllers/AnnualSummaryController.php +++ b/app/Infrastructure/Http/Controllers/AnnualSummaryController.php @@ -35,9 +35,19 @@ class AnnualSummaryController extends Controller ->get(); return inertia("AnnualSummary", [ - "holidays" => $holidays->mapWithKeys(fn(Holiday $holiday) => [$holiday->date->toDateString() => $holiday->name]), - "vacations" => $vacations->mapWithKeys(fn(Vacation $vacation) => [$vacation->date->toDateString() => new SimpleVacationRequestResource($vacation->vacationRequest)]), - "pendingVacations" => $pendingVacations->mapWithKeys(fn(Vacation $vacation) => [$vacation->date->toDateString() => new SimpleVacationRequestResource($vacation->vacationRequest)]), + "holidays" => $holidays->mapWithKeys( + fn(Holiday $holiday): array => [$holiday->date->toDateString() => $holiday->name], + ), + "vacations" => $vacations->mapWithKeys( + fn(Vacation $vacation): array => [ + $vacation->date->toDateString() => new SimpleVacationRequestResource($vacation->vacationRequest), + ], + ), + "pendingVacations" => $pendingVacations->mapWithKeys( + fn(Vacation $vacation): array => [ + $vacation->date->toDateString() => new SimpleVacationRequestResource($vacation->vacationRequest), + ], + ), ]); } } diff --git a/app/Infrastructure/Http/Controllers/Api/CalculateUserUnavailableDaysController.php b/app/Infrastructure/Http/Controllers/Api/CalculateUserUnavailableDaysController.php index 44715f7..5e4afe5 100644 --- a/app/Infrastructure/Http/Controllers/Api/CalculateUserUnavailableDaysController.php +++ b/app/Infrastructure/Http/Controllers/Api/CalculateUserUnavailableDaysController.php @@ -30,13 +30,13 @@ class CalculateUserUnavailableDaysController extends Controller ->whereBelongsTo($yearPeriod) ->whereRelation( "vacationRequest", - fn(Builder $query) => $query->noStates(VacationRequestStatesRetriever::failedStates()), + fn(Builder $query): Builder => $query->noStates(VacationRequestStatesRetriever::failedStates()), ) ->pluck("date"); return new JsonResponse([ - ...$holidays->map(fn(Carbon $date) => $date->toDateString()), - ...$vacationDays->map(fn(Carbon $date) => $date->toDateString()), + ...$holidays->map(fn(Carbon $date): string => $date->toDateString()), + ...$vacationDays->map(fn(Carbon $date): string => $date->toDateString()), ]); } } diff --git a/app/Infrastructure/Http/Controllers/VacationRequestController.php b/app/Infrastructure/Http/Controllers/VacationRequestController.php index fd6b711..917110c 100644 --- a/app/Infrastructure/Http/Controllers/VacationRequestController.php +++ b/app/Infrastructure/Http/Controllers/VacationRequestController.php @@ -92,10 +92,10 @@ class VacationRequestController extends Controller $vacationRequests = VacationRequest::query() ->with(["user", "vacations"]) ->whereBelongsTo($yearPeriod) - ->when($user !== null, fn(Builder $query) => $query->where("user_id", $user)) + ->when($user !== null, fn(Builder $query): Builder => $query->where("user_id", $user)) ->when( $status !== null, - fn(Builder $query) => $query->states( + fn(Builder $query): Builder => $query->states( VacationRequestStatesRetriever::filterByStatusGroup($status, $request->user()), ), )