diff --git a/app/Infrastructure/Http/Controllers/DashboardController.php b/app/Infrastructure/Http/Controllers/DashboardController.php index 9f164a9..317fd22 100644 --- a/app/Infrastructure/Http/Controllers/DashboardController.php +++ b/app/Infrastructure/Http/Controllers/DashboardController.php @@ -12,8 +12,11 @@ use Toby\Domain\UserVacationStatsRetriever; 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; @@ -54,6 +57,22 @@ class DashboardController extends Controller ->limit(3) ->get(); + $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); @@ -66,6 +85,19 @@ class DashboardController extends Controller "remoteDays" => VacationResource::collection($remoteDays), "vacationRequests" => VacationRequestResource::collection($vacationRequests), "holidays" => HolidayResource::collection($holidays), + "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 e633816..b6968ba 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -3,6 +3,11 @@
+
@@ -38,6 +43,7 @@ import HomeOfficeList from '@/Shared/Widgets/HomeOfficeList' import UpcomingHolidays from '@/Shared/Widgets/UpcomingHolidays' import UserVacationRequests from '@/Shared/Widgets/UserVacationRequests' import PendingVacationRequests from '@/Shared/Widgets/PendingVacationRequests' +import VacationCalendar from '@/Shared/Widgets/VacationCalendar' defineProps({ auth: Object, @@ -48,5 +54,8 @@ defineProps({ can: Object, stats: Object, years: Object, + allHolidays: Object, + approvedVacations: Object, + pendingVacations: Object, }) diff --git a/resources/js/Shared/Widgets/Calendar/DayComponent.vue b/resources/js/Shared/Widgets/Calendar/DayComponent.vue new file mode 100644 index 0000000..ec1c8c1 --- /dev/null +++ b/resources/js/Shared/Widgets/Calendar/DayComponent.vue @@ -0,0 +1,120 @@ + + + diff --git a/resources/js/Shared/Widgets/Calendar/ViewModeOptions.js b/resources/js/Shared/Widgets/Calendar/ViewModeOptions.js new file mode 100644 index 0000000..a04d99d --- /dev/null +++ b/resources/js/Shared/Widgets/Calendar/ViewModeOptions.js @@ -0,0 +1,12 @@ +function isViewModeKey(key) { + return this.key === key.value +} + +export const viewModes = [ + { key: 'week', name: 'Widok tygodnia', shortcut: 'Tydzień', is: isViewModeKey }, + { key: 'month', name: 'Widok miesiąca', shortcut: 'Miesiąc', is: isViewModeKey }, +] + +export function find(modeKey) { + return viewModes.find(mode => mode.key === modeKey) +} diff --git a/resources/js/Shared/Widgets/VacationCalendar.vue b/resources/js/Shared/Widgets/VacationCalendar.vue new file mode 100644 index 0000000..4c797b1 --- /dev/null +++ b/resources/js/Shared/Widgets/VacationCalendar.vue @@ -0,0 +1,406 @@ + + + + +