#28 - holidays management

This commit is contained in:
Adrian Hopek
2022-01-24 14:03:39 +01:00
parent 6854c7a9f8
commit 29d81030ac
20 changed files with 792 additions and 9 deletions

View File

@@ -0,0 +1,65 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Inertia\Response;
use Toby\Http\Requests\HolidayRequest;
use Toby\Http\Resources\HolidayFormDataResource;
use Toby\Http\Resources\HolidayResource;
use Toby\Models\Holiday;
class HolidayController extends Controller
{
public function index(): Response
{
$holidays = Holiday::query()
->orderBy("date")
->get();
return inertia("Holidays/Index", [
"holidays" => HolidayResource::collection($holidays),
]);
}
public function create(): Response
{
return inertia("Holidays/Create");
}
public function store(HolidayRequest $request): RedirectResponse
{
Holiday::query()->create($request->data());
return redirect()
->route("holidays.index")
->with("success", __("Holiday has been created"));
}
public function edit(Holiday $holiday): Response
{
return inertia("Holidays/Edit", [
"holiday" => new HolidayFormDataResource($holiday),
]);
}
public function update(HolidayRequest $request, Holiday $holiday): RedirectResponse
{
$holiday->update($request->data());
return redirect()
->route("holidays.index")
->with("success", __("Holiday has been updated"));
}
public function destroy(Holiday $holiday): RedirectResponse
{
$holiday->delete();
return redirect()
->route("holidays.index")
->with("success", __("Holiday has been deleted"));
}
}

View File

@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Carbon;
use Toby\Models\YearPeriod;
use Toby\Rules\YearPeriodExists;
class HolidayRequest extends FormRequest
{
public function rules(): array
{
return [
"name" => ["required", "min:3", "max:150"],
"date" => ["required", "date", new YearPeriodExists()],
];
}
public function data(): array
{
$date = $this->get("date");
return [
"name" => $this->get("name"),
"date" => $date,
"year_period_id" => YearPeriod::findByYear(Carbon::create($date)->year)->id,
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class HolidayFormDataResource extends JsonResource
{
public static $wrap = null;
public function toArray($request): array
{
return [
"id" => $this->id,
"name" => $this->name,
"date" => $this->date->toDateString(),
];
}
}

View File

@@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
namespace Toby\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class HolidayResource extends JsonResource
{
public static $wrap = null;
public function toArray($request): array
{
return [
"id" => $this->id,
"name" => $this->name,
"displayDate" => $this->date->toDisplayString(),
"dayOfWeek" => $this->date->dayName,
];
}
}