This commit is contained in:
Adrian Hopek 2022-04-07 13:50:50 +02:00
parent 518e6a63e3
commit f09565ac9d
9 changed files with 64 additions and 27 deletions

View File

@ -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,
]);
}
}

View File

@ -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()

View File

@ -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()),
)

View File

@ -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()),
)

View File

@ -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"),
);

View File

@ -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()),
);
}
}

View File

@ -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),
],
),
]);
}
}

View File

@ -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()),
]);
}
}

View File

@ -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()),
),
)