wip
This commit is contained in:
parent
82b4ada49e
commit
84b1805015
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Toby\Infrastructure\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use Inertia\Response;
|
||||||
|
use Toby\Eloquent\Helpers\YearPeriodRetriever;
|
||||||
|
use Toby\Eloquent\Models\Holiday;
|
||||||
|
use Toby\Eloquent\Models\Vacation;
|
||||||
|
|
||||||
|
class AnnualSummaryController extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(Request $request, YearPeriodRetriever $yearPeriodRetriever): Response {
|
||||||
|
$yearPeriod = $yearPeriodRetriever->selected();
|
||||||
|
|
||||||
|
$startDate = Carbon::createFromDate($yearPeriod->year)->startOfYear()->startOfWeek();
|
||||||
|
$endDate = Carbon::createFromDate($yearPeriod->year)->endOfYear()->endOfWeek();
|
||||||
|
|
||||||
|
$holidays = $yearPeriod->holidays()
|
||||||
|
->whereBetween("date", [$startDate, $endDate])
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$vacations = $request->user()
|
||||||
|
->vacations()
|
||||||
|
->with("vacationRequest")
|
||||||
|
->whereBetween("date", [$startDate, $endDate])
|
||||||
|
->approved()
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$pendingVacations = $request->user()
|
||||||
|
->vacations()
|
||||||
|
->with("vacationRequest")
|
||||||
|
->whereBetween("date", [$startDate, $endDate])
|
||||||
|
->pending()
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return inertia("AnnualSummary", [
|
||||||
|
"holidays" => $holidays->mapWithKeys(fn(Holiday $holiday) => [$holiday->date->toDateString() => $holiday->name]),
|
||||||
|
"vacations" => $vacations->mapWithKeys(fn(Vacation $vacation) => [$vacation->date->toDateString() => $vacation->vacationRequest->type]),
|
||||||
|
"pendingVacations" => $pendingVacations->mapWithKeys(fn(Vacation $vacation) => [$vacation->date->toDateString() => $vacation->vacationRequest->type]),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -24,18 +24,35 @@
|
|||||||
<div>Nd</div>
|
<div>Nd</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid isolate grid-cols-7 mt-2 text-sm ring-1 ring-gray-200 shadow">
|
<div class="grid isolate grid-cols-7 mt-2 text-sm ring-1 ring-gray-200 shadow">
|
||||||
<Component
|
<template
|
||||||
:is="day.isCurrentMonth ? 'button' : 'div'"
|
|
||||||
v-for="(day, dayIdx) in month.days"
|
v-for="(day, dayIdx) in month.days"
|
||||||
:key="dayIdx"
|
:key="dayIdx"
|
||||||
:class="[day.isCurrentMonth ? 'bg-white hover:bg-gray-100' : 'bg-gray-50 text-gray-400', day.isVacation && `${getVacationBorder(day.date)}`, day.isPendingVacation && `border-dashed mx-0.5 ${getPendingVacationBorder(day.date)}`, 'border-b-4 border-transparent py-1.5 focus:z-10 font-medium']"
|
|
||||||
>
|
>
|
||||||
<div :class="[day.isCurrentMonth && (day.isWeekend || day.isHoliday) && 'text-red-600 font-bold', day.isToday && 'bg-blumilk-500 font-semibold text-white rounded-full', 'mx-auto flex h-7 w-7 p-4 items-center justify-center']">
|
<div
|
||||||
<time :datetime="day.date.toISODate()">
|
v-if="day.isCurrentMonth"
|
||||||
{{ day.date.day }}
|
:class="[day.isVacation && `${getVacationBorder(day.date)}`, day.isPendingVacation && `border-dashed mx-0.5 ${getPendingVacationBorder(day.date)}`, !day.isVacation && !day.isPendingVacation && 'border-transparent', 'relative bg-white hover:bg-gray-100 border-b-4 py-1.5 focus:z-10 font-medium']"
|
||||||
</time>
|
>
|
||||||
|
<div :class="[day.isCurrentMonth && (day.isWeekend || day.isHoliday) && 'text-red-600 font-bold', day.isToday && 'bg-blumilk-500 font-semibold text-white rounded-full', 'mx-auto flex h-7 w-7 p-4 items-center justify-center']">
|
||||||
|
<time :datetime="day.date.toISODate()">
|
||||||
|
{{ day.date.day }}
|
||||||
|
</time>
|
||||||
|
</div>
|
||||||
|
<InertiaLink
|
||||||
|
:href="`/vacation/requests/${dayIdx}`"
|
||||||
|
class="absolute inset-0"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Component>
|
<div
|
||||||
|
v-else
|
||||||
|
:class="['bg-gray-50 text-gray-400 border-b-4 border-transparent py-1.5 w-full focus:z-10 font-medium']"
|
||||||
|
>
|
||||||
|
<div class="flex justify-center items-center p-4 mx-auto w-7 h-7">
|
||||||
|
<time :datetime="day.date.toISODate()">
|
||||||
|
{{ day.date.day }}
|
||||||
|
</time>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
@ -335,6 +335,14 @@ const navigation = computed(() =>
|
|||||||
icon: SunIcon,
|
icon: SunIcon,
|
||||||
can: props.auth.can.manageVacationLimits,
|
can: props.auth.can.manageVacationLimits,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
|
||||||
|
name: 'Podsumowanie roczne',
|
||||||
|
href: '/vacation/annual-summary',
|
||||||
|
component: 'AnnualSummary',
|
||||||
|
icon: SunIcon,
|
||||||
|
can: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'Użytkownicy',
|
name: 'Użytkownicy',
|
||||||
href: '/users',
|
href: '/users',
|
||||||
|
@ -2,12 +2,8 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Carbon;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Toby\Eloquent\Helpers\YearPeriodRetriever;
|
use Toby\Infrastructure\Http\Controllers\AnnualSummaryController;
|
||||||
use Toby\Eloquent\Models\Holiday;
|
|
||||||
use Toby\Eloquent\Models\Vacation;
|
|
||||||
use Toby\Infrastructure\Http\Controllers\DashboardController;
|
use Toby\Infrastructure\Http\Controllers\DashboardController;
|
||||||
use Toby\Infrastructure\Http\Controllers\GoogleController;
|
use Toby\Infrastructure\Http\Controllers\GoogleController;
|
||||||
use Toby\Infrastructure\Http\Controllers\HolidayController;
|
use Toby\Infrastructure\Http\Controllers\HolidayController;
|
||||||
@ -33,72 +29,44 @@ Route::middleware("auth")->group(function (): void {
|
|||||||
Route::post("year-periods/{yearPeriod}/select", SelectYearPeriodController::class)
|
Route::post("year-periods/{yearPeriod}/select", SelectYearPeriodController::class)
|
||||||
->name("year-periods.select");
|
->name("year-periods.select");
|
||||||
|
|
||||||
Route::prefix("/vacation")->group(function (): void {
|
Route::prefix("/vacation")->as("vacation.")->group(function (): void {
|
||||||
Route::get("/limits", [VacationLimitController::class, "edit"])
|
Route::get("/limits", [VacationLimitController::class, "edit"])
|
||||||
->name("vacation.limits");
|
->name("limits");
|
||||||
Route::get("/calendar/{month?}", [VacationCalendarController::class, "index"])
|
Route::get("/calendar/{month?}", [VacationCalendarController::class, "index"])
|
||||||
->name("vacation.calendar");
|
->name("calendar");
|
||||||
Route::get("/timesheet/{month}", TimesheetController::class)
|
Route::get("/timesheet/{month}", TimesheetController::class)
|
||||||
->name("timesheet");
|
->name("timesheet");
|
||||||
|
|
||||||
Route::get("/limits", [VacationLimitController::class, "edit"])
|
Route::get("/limits", [VacationLimitController::class, "edit"])
|
||||||
->name("vacation.limits");
|
->name("limits");
|
||||||
Route::put("/limits", [VacationLimitController::class, "update"]);
|
Route::put("/limits", [VacationLimitController::class, "update"]);
|
||||||
|
|
||||||
Route::get("/requests", [VacationRequestController::class, "indexForApprovers"])
|
Route::get("/requests", [VacationRequestController::class, "indexForApprovers"])
|
||||||
->name("vacation.requests.indexForApprovers");
|
->name("requests.indexForApprovers");
|
||||||
Route::get("/requests/me", [VacationRequestController::class, "index"])
|
Route::get("/requests/me", [VacationRequestController::class, "index"])
|
||||||
->name("vacation.requests.index");
|
->name("requests.index");
|
||||||
Route::get("/requests/create", [VacationRequestController::class, "create"])
|
Route::get("/requests/create", [VacationRequestController::class, "create"])
|
||||||
->name("vacation.requests.create");
|
->name("requests.create");
|
||||||
Route::post("/requests", [VacationRequestController::class, "store"])
|
Route::post("/requests", [VacationRequestController::class, "store"])
|
||||||
->name("vacation.requests.store");
|
->name("requests.store");
|
||||||
Route::get("/requests/{vacationRequest}", [VacationRequestController::class, "show"])
|
Route::get("/requests/{vacationRequest}", [VacationRequestController::class, "show"])
|
||||||
->name("vacation.requests.show");
|
->name("requests.show");
|
||||||
Route::get("/requests/{vacationRequest}/download", [VacationRequestController::class, "download"])
|
Route::get("/requests/{vacationRequest}/download", [VacationRequestController::class, "download"])
|
||||||
->name("vacation.requests.download");
|
->name("requests.download");
|
||||||
Route::post("/requests/{vacationRequest}/reject", [VacationRequestController::class, "reject"])
|
Route::post("/requests/{vacationRequest}/reject", [VacationRequestController::class, "reject"])
|
||||||
->name("vacation.requests.reject");
|
->name("requests.reject");
|
||||||
Route::post("/requests/{vacationRequest}/cancel", [VacationRequestController::class, "cancel"])
|
Route::post("/requests/{vacationRequest}/cancel", [VacationRequestController::class, "cancel"])
|
||||||
->name("vacation.requests.cancel");
|
->name("requests.cancel");
|
||||||
Route::post("/requests/{vacationRequest}/accept-as-technical", [VacationRequestController::class, "acceptAsTechnical"], )
|
Route::post("/requests/{vacationRequest}/accept-as-technical", [VacationRequestController::class, "acceptAsTechnical"], )
|
||||||
->name("vacation.requests.accept-as-technical");
|
->name("requests.accept-as-technical");
|
||||||
Route::post("/requests/{vacationRequest}/accept-as-administrative", [VacationRequestController::class, "acceptAsAdministrative"], )
|
Route::post("/requests/{vacationRequest}/accept-as-administrative", [VacationRequestController::class, "acceptAsAdministrative"], )
|
||||||
->name("vacation.requests.accept-as-administrative");
|
->name("requests.accept-as-administrative");
|
||||||
|
|
||||||
Route::get("/monthly-usage", MonthlyUsageController::class)
|
Route::get("/monthly-usage", MonthlyUsageController::class)
|
||||||
->name("vacation.monthly-usage");
|
->name("monthly-usage");
|
||||||
});
|
Route::get("/annual-summary", AnnualSummaryController::class)
|
||||||
|
->name("annual-summmary");
|
||||||
|
|
||||||
Route::get("/test", function (Request $request, YearPeriodRetriever $yearPeriodRetriever) {
|
|
||||||
$yearPeriod = $yearPeriodRetriever->selected();
|
|
||||||
|
|
||||||
$startDate = Carbon::createFromDate($yearPeriod->year)->startOfYear()->startOfWeek();
|
|
||||||
$endDate = Carbon::createFromDate($yearPeriod->year)->endOfYear()->endOfWeek();
|
|
||||||
|
|
||||||
$holidays = $yearPeriod->holidays()
|
|
||||||
->whereBetween("date", [$startDate, $endDate])
|
|
||||||
->get();
|
|
||||||
|
|
||||||
$vacations = $request->user()
|
|
||||||
->vacations()
|
|
||||||
->with("vacationRequest")
|
|
||||||
->whereBetween("date", [$startDate, $endDate])
|
|
||||||
->approved()
|
|
||||||
->get();
|
|
||||||
|
|
||||||
$pendingVacations = $request->user()
|
|
||||||
->vacations()
|
|
||||||
->with("vacationRequest")
|
|
||||||
->whereBetween("date", [$startDate, $endDate])
|
|
||||||
->pending()
|
|
||||||
->get();
|
|
||||||
|
|
||||||
return inertia("Test", [
|
|
||||||
"holidays" => $holidays->mapWithKeys(fn(Holiday $holiday) => [$holiday->date->toDateString() => $holiday->name]),
|
|
||||||
"vacations" => $vacations->mapWithKeys(fn(Vacation $vacation) => [$vacation->date->toDateString() => $vacation->vacationRequest->type]),
|
|
||||||
"pendingVacations" => $pendingVacations->mapWithKeys(fn(Vacation $vacation) => [$vacation->date->toDateString() => $vacation->vacationRequest->type]),
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user