#23 - collective editing vacation days (#26)

* #23 - wip

* #23 - wip

* #23 - wip

* #23 - wip

* #23 - fix

* #23 - ecs fix

* #23 - fix

* #23 - fix

* #23 - cr fix
This commit is contained in:
Adrian Hopek
2022-01-24 11:28:00 +01:00
committed by GitHub
parent 652587dbf1
commit e147d24365
35 changed files with 1000 additions and 41 deletions

View File

@@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Toby\Helpers\YearPeriodRetriever;
use Toby\Models\YearPeriod;
class SelectYearPeriodController extends Controller
{
public function __invoke(Request $request, YearPeriod $yearPeriod): RedirectResponse
{
$request->session()->put(YearPeriodRetriever::SESSION_KEY, $yearPeriod->id);
return redirect()
->back()
->with("success", __("Selected year period has been changed"));
}
}

View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Inertia\Response;
use Toby\Http\Requests\VacationLimitRequest;
use Toby\Http\Resources\VacationLimitResource;
use Toby\Models\VacationLimit;
class VacationLimitController extends Controller
{
public function edit(): Response
{
return inertia("VacationLimits", [
"limits" => VacationLimitResource::collection(VacationLimit::query()->with("user")->get()),
]);
}
public function update(VacationLimitRequest $request): RedirectResponse
{
$data = $request->data();
foreach ($request->vacationLimits() as $limit) {
$limit->update($data[$limit->id]);
}
return redirect()
->back()
->with("success", __("Vacation limits have been updated"));
}
}

View File

@@ -6,10 +6,16 @@ namespace Toby\Http\Middleware;
use Illuminate\Http\Request;
use Inertia\Middleware;
use Toby\Helpers\YearPeriodRetriever;
use Toby\Http\Resources\UserResource;
class HandleInertiaRequests extends Middleware
{
public function __construct(
protected YearPeriodRetriever $yearPeriodRetriever,
) {
}
public function share(Request $request): array
{
$user = $request->user();
@@ -22,6 +28,7 @@ class HandleInertiaRequests extends Middleware
"success" => $request->session()->get("success"),
"error" => $request->session()->get("error"),
],
"years" => fn() => $user ? $this->yearPeriodRetriever->links() : [],
]);
}
}

View File

@@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Collection;
use Toby\Models\VacationLimit;
class VacationLimitRequest extends FormRequest
{
public function rules(): array
{
return [
"items" => ["required", "array"],
"items.*.id" => ["required", "exists:vacation_limits,id"],
"items.*.days" => ["nullable", "integer", "min:0"],
];
}
public function vacationLimits(): Collection
{
return VacationLimit::query()->find($this->collect("items")->pluck("id"));
}
public function data(): array
{
return $this->collect("items")
->keyBy("id")
->toArray();
}
}

View File

@@ -8,7 +8,7 @@ use Illuminate\Http\Resources\Json\JsonResource;
class UserFormDataResource extends JsonResource
{
public static $wrap = false;
public static $wrap = null;
public function toArray($request): array
{

View File

@@ -8,7 +8,7 @@ use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
{
public static $wrap = false;
public static $wrap = null;
public function toArray($request): array
{

View File

@@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class VacationLimitResource extends JsonResource
{
public static $wrap = null;
public function toArray($request): array
{
return [
"id" => $this->id,
"user" => new UserResource($this->user),
"hasVacation" => $this->hasVacation(),
"days" => $this->days,
];
}
}