#71 - annual summary (#113)

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* fix

* lint fix

* cr fix

* fix
This commit is contained in:
Adrian Hopek
2022-04-07 14:33:15 +02:00
committed by GitHub
parent 84403a762a
commit ff8d6aade6
20 changed files with 1073 additions and 1206 deletions

View File

@@ -0,0 +1,53 @@
<?php
declare(strict_types=1);
namespace Toby\Infrastructure\Http\Controllers;
use Illuminate\Http\Request;
use Inertia\Response;
use Toby\Eloquent\Helpers\YearPeriodRetriever;
use Toby\Eloquent\Models\Holiday;
use Toby\Eloquent\Models\Vacation;
use Toby\Infrastructure\Http\Resources\SimpleVacationRequestResource;
class AnnualSummaryController extends Controller
{
public function __invoke(Request $request, YearPeriodRetriever $yearPeriodRetriever): Response
{
$yearPeriod = $yearPeriodRetriever->selected();
$holidays = $yearPeriod->holidays()
->get();
$vacations = $request->user()
->vacations()
->with("vacationRequest.vacations")
->whereBelongsTo($yearPeriod)
->approved()
->get();
$pendingVacations = $request->user()
->vacations()
->with("vacationRequest.vacations")
->whereBelongsTo($yearPeriod)
->pending()
->get();
return inertia("AnnualSummary", [
"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

@@ -27,16 +27,16 @@ class CalculateUserUnavailableDaysController extends Controller
$holidays = $yearPeriod->holidays()->pluck("date");
$vacationDays = $user->vacations()
->where("year_period_id", $yearPeriod->id)
->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

@@ -40,26 +40,26 @@ class VacationRequestController extends Controller
$vacationRequests = $request->user()
->vacationRequests()
->with("vacations")
->where("year_period_id", $yearPeriodRetriever->selected()->id)
->whereBelongsTo($yearPeriodRetriever->selected())
->latest()
->states(VacationRequestStatesRetriever::filterByStatusGroup($status, $request->user()))
->paginate();
$pending = $request->user()
->vacationRequests()
->where("year_period_id", $yearPeriodRetriever->selected()->id)
->whereBelongsTo($yearPeriodRetriever->selected())
->states(VacationRequestStatesRetriever::pendingStates())
->count();
$success = $request->user()
->vacationRequests()
->where("year_period_id", $yearPeriodRetriever->selected()->id)
->whereBelongsTo($yearPeriodRetriever->selected())
->states(VacationRequestStatesRetriever::successStates())
->count();
$failed = $request->user()
->vacationRequests()
->where("year_period_id", $yearPeriodRetriever->selected()->id)
->whereBelongsTo($yearPeriodRetriever->selected())
->states(VacationRequestStatesRetriever::failedStates())
->count();
@@ -91,11 +91,11 @@ class VacationRequestController extends Controller
$vacationRequests = VacationRequest::query()
->with(["user", "vacations"])
->where("year_period_id", $yearPeriod->id)
->when($user !== null, fn(Builder $query) => $query->where("user_id", $user))
->whereBelongsTo($yearPeriod)
->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()),
),
)
@@ -156,7 +156,7 @@ class VacationRequestController extends Controller
return $pdf->stream();
}
public function create(Request $request, YearPeriodRetriever $yearPeriodRetriever): Response
public function create(Request $request): Response
{
$users = User::query()
->orderBy("last_name")