#36 - validate vacation request (#47)

* #36 - wip

* #36 - wip

* #36 - wip

* #36 - added some translations

* #36 - fix

* #36 - fix

Co-authored-by: EwelinaLasowy <ewelina.lasowy@blumilk.pl>
This commit is contained in:
Adrian Hopek
2022-02-07 12:29:46 +01:00
committed by GitHub
parent 41c769d4ab
commit b161981d5a
28 changed files with 387 additions and 130 deletions

View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Toby\Infrastructure\Http\Controllers\Api;
use Illuminate\Http\JsonResponse;
use Toby\Domain\VacationDaysCalculator;
use Toby\Infrastructure\Http\Controllers\Controller;
use Toby\Infrastructure\Http\Requests\Api\CalculateVacationDaysRequest;
class CalculateVacationDaysController extends Controller
{
public function __invoke(CalculateVacationDaysRequest $request, VacationDaysCalculator $calculator): JsonResponse
{
$days = $calculator->calculateDays($request->yearPeriod(), $request->from(), $request->to());
return new JsonResponse($days->all());
}
}

View File

@@ -11,6 +11,7 @@ use Illuminate\Http\Response as LaravelResponse;
use Inertia\Response;
use Toby\Domain\Enums\VacationRequestState;
use Toby\Domain\Enums\VacationType;
use Toby\Domain\VacationDaysCalculator;
use Toby\Domain\VacationRequestStateManager;
use Toby\Domain\Validation\VacationRequestValidator;
use Toby\Eloquent\Helpers\YearPeriodRetriever;
@@ -64,9 +65,15 @@ class VacationRequestController extends Controller
VacationRequestRequest $request,
VacationRequestValidator $vacationRequestValidator,
VacationRequestStateManager $stateManager,
VacationDaysCalculator $vacationDaysCalculator,
): RedirectResponse {
/** @var VacationRequest $vacationRequest */
$vacationRequest = $request->user()->vacationRequests()->make($request->data());
$vacationRequest->estimated_days = $vacationDaysCalculator->calculateDays(
$vacationRequest->yearPeriod,
$vacationRequest->from,
$vacationRequest->to,
)->count();
$vacationRequestValidator->validate($vacationRequest);

View File

@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace Toby\Infrastructure\Http\Requests\Api;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Carbon;
use Toby\Eloquent\Models\YearPeriod;
use Toby\Infrastructure\Http\Rules\YearPeriodExists;
class CalculateVacationDaysRequest extends FormRequest
{
public function rules(): array
{
return [
"from" => ["required", "date_format:Y-m-d", new YearPeriodExists()],
"to" => ["required", "date_format:Y-m-d", new YearPeriodExists()],
];
}
public function from(): Carbon
{
return Carbon::create($this->request->get("from"));
}
public function to(): Carbon
{
return Carbon::create($this->request->get("to"));
}
public function yearPeriod(): YearPeriod
{
return YearPeriod::findByYear(Carbon::create($this->request->get("from"))->year);
}
}

View File

@@ -20,6 +20,7 @@ class VacationRequestResource extends JsonResource
"state" => $this->state->label(),
"from" => $this->from->toDisplayString(),
"to" => $this->to->toDisplayString(),
"estimatedDays" => $this->estimated_days,
"comment" => $this->comment,
];
}