diff --git a/app/Infrastructure/Http/Controllers/DashboardController.php b/app/Infrastructure/Http/Controllers/DashboardController.php index 63a62d9..317fd22 100644 --- a/app/Infrastructure/Http/Controllers/DashboardController.php +++ b/app/Infrastructure/Http/Controllers/DashboardController.php @@ -13,8 +13,10 @@ use Toby\Domain\VacationRequestStatesRetriever; use Toby\Domain\VacationTypeConfigRetriever; use Toby\Eloquent\Helpers\YearPeriodRetriever; use Toby\Eloquent\Models\Holiday; +use Toby\Eloquent\Models\Vacation; use Toby\Eloquent\Models\VacationRequest; use Toby\Infrastructure\Http\Resources\HolidayResource; +use Toby\Infrastructure\Http\Resources\SimpleVacationRequestResource; use Toby\Infrastructure\Http\Resources\VacationRequestResource; use Toby\Infrastructure\Http\Resources\VacationResource; @@ -57,6 +59,20 @@ class DashboardController extends Controller $allHolidays = $yearPeriod->holidays; + $approvedVacations = $request->user() + ->vacations() + ->with("vacationRequest.vacations") + ->whereBelongsTo($yearPeriod) + ->approved() + ->get(); + + $pendingVacations = $request->user() + ->vacations() + ->with("vacationRequest.vacations") + ->whereBelongsTo($yearPeriod) + ->pending() + ->get(); + $limit = $vacationStatsRetriever->getVacationDaysLimit($user, $yearPeriod); $used = $vacationStatsRetriever->getUsedVacationDays($user, $yearPeriod); $pending = $vacationStatsRetriever->getPendingVacationDays($user, $yearPeriod); @@ -72,6 +88,16 @@ class DashboardController extends Controller "allHolidays" => $allHolidays->mapWithKeys( fn(Holiday $holiday): array => [$holiday->date->toDateString() => $holiday->name], ), + "approvedVacations" => $approvedVacations->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), + ], + ), "stats" => [ "limit" => $limit, "remaining" => $remaining, diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue index 5b5f5ae..b6968ba 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -5,6 +5,8 @@ @@ -53,5 +55,7 @@ defineProps({ stats: Object, years: Object, allHolidays: Object, + approvedVacations: Object, + pendingVacations: Object, }) diff --git a/resources/js/Shared/Widgets/Calendar/DateComponent.vue b/resources/js/Shared/Widgets/Calendar/DateComponent.vue index 63f6993..0e0c159 100644 --- a/resources/js/Shared/Widgets/Calendar/DateComponent.vue +++ b/resources/js/Shared/Widgets/Calendar/DateComponent.vue @@ -1,5 +1,7 @@ - + + + + {{ day.dayNumber }} + + + + {{ getHolidayDescription(day) }} + + + @@ -34,7 +56,7 @@ {{ day.dayNumber }} - + \ No newline at end of file diff --git a/resources/js/Shared/Widgets/VacationCalendar.vue b/resources/js/Shared/Widgets/VacationCalendar.vue index 5d5dc2c..8aa689c 100644 --- a/resources/js/Shared/Widgets/VacationCalendar.vue +++ b/resources/js/Shared/Widgets/VacationCalendar.vue @@ -126,7 +126,7 @@ :day="day" class="flex flex-col relative py-2 px-3" :class="[day.isCurrentMonth ? 'bg-white' : 'bg-gray-50 text-gray-500', { 'hover:bg-blumilk-25': day.isCurrentMonth && !day.isWeekend }, { 'day': calendarState.viewMode.isWeek }, { 'bg-red-100': day.isCurrentMonth && day.isWeekend }, { 'bg-red-50': !day.isCurrentMonth && day.isWeekend }, { 'text-red-800': day.isWeekend }]" - :holidaydescription="getHolidayDescription" + :holiday-description="getHolidayDescription" /> @@ -146,6 +146,8 @@ import DateComponent from '@/Shared/Widgets/Calendar/DateComponent' const props = defineProps({ holidays: Object, + approvedVacations: Object, + pendingVacations: Object, }) let days = ref([]) @@ -223,13 +225,16 @@ const customCalendar = { return days }, prepareDay(day) { + const isCurrentMonth = isInCurrentMonth(day) return { date: day.toISODate(), dayNumber: day.day, - isCurrentMonth: isInCurrentMonth(day), + isCurrentMonth: isCurrentMonth, isToday: isToday(day), isWeekend: isWeekend(day), isHoliday: isHoliday(day), + isVacation: isCurrentMonth && isVacation(day), + isPendingVacation: isCurrentMonth && isPendingVacation(day), } }, } @@ -336,6 +341,14 @@ function isHoliday(date) { function getHolidayDescription(day) { return props.holidays[day.date] } + +function isVacation(date) { + return props.approvedVacations[date.toISODate()] !== undefined +} + +function isPendingVacation(date) { + return props.pendingVacations[date.toISODate()] !== undefined +}