#157 - added the request class and improved the request parameters

This commit is contained in:
Kamil Niemczycki 2022-06-06 11:05:47 +02:00
parent d4c5e55409
commit 04d036a1ef
5 changed files with 48 additions and 14 deletions

View File

@ -28,6 +28,7 @@ use Toby\Domain\VacationTypeConfigRetriever;
use Toby\Eloquent\Helpers\YearPeriodRetriever;
use Toby\Eloquent\Models\User;
use Toby\Eloquent\Models\VacationRequest;
use Toby\Infrastructure\Http\Requests\CreateVacationRequestRequest;
use Toby\Infrastructure\Http\Requests\VacationRequestRequest;
use Toby\Infrastructure\Http\Resources\SimpleUserResource;
use Toby\Infrastructure\Http\Resources\VacationRequestActivityResource;
@ -166,17 +167,14 @@ class VacationRequestController extends Controller
return $pdf->stream();
}
public function create(Request $request): Response
public function create(CreateVacationRequestRequest $request): Response
{
$users = User::query()
->orderByProfileField("last_name")
->orderByProfileField("first_name")
->get();
if(($selectedUserId = $request->get("user")) && is_numeric($selectedUserId)) {
$userId = User::query()
->find($selectedUserId)?->id;
}
$requestData = $request->data();
return inertia("VacationRequest/Create", [
"vacationTypes" => VacationType::casesToSelect(),
@ -185,8 +183,8 @@ class VacationRequestController extends Controller
"createOnBehalfOfEmployee" => $request->user()->can("createOnBehalfOfEmployee", VacationRequest::class),
"skipFlow" => $request->user()->can("skipFlow", VacationRequest::class),
],
"userId" => $userId ?? null,
"vacationStartDate" => $request->get("start_date"),
"vacationUserId" => $requestData['user'],
"vacationFromDate" => $requestData['from_date'],
]);
}

View File

@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace Toby\Infrastructure\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Toby\Eloquent\Models\VacationRequest;
class CreateVacationRequestRequest extends FormRequest
{
protected $redirectRoute = "vacation.requests.create";
public function authorize(): bool
{
return is_null($this->get("user")) ||
(int)$this->get("user") === $this->user()->id ||
$this->user()->can("createOnBehalfOfEmployee", VacationRequest::class);
}
public function rules(): array
{
return [
"user" => ["nullable", "exists:users,id"],
"from_date" => ["nullable", "date_format:Y-m-d"],
];
}
public function data(): array
{
return [
"user" => (int)$this->get('user'),
"from_date" => $this->get('from_date'),
];
}
}

View File

@ -89,7 +89,7 @@
<InertiaLink
v-if="day.isFuture"
href="/vacation/requests/create"
:data="{ 'start_date': day.date.toISODate() }"
:data="{ 'from_date': day.date.toISODate() }"
class="py-1.5 w-full font-medium bg-white hover:bg-blumilk-25 border-b-4 border-transparent focus:outline-blumilk-500"
>
<time

View File

@ -173,6 +173,6 @@ function unsetActiveDay() {
}
function linkParameters(user, day) {
return props.can.createOnBehalfOfEmployee ? { user: user.id, start_date: day.date } : { start_date: day.date }
return props.can.createOnBehalfOfEmployee ? { user: user.id, from_date: day.date } : { from_date: day.date }
}
</script>

View File

@ -343,16 +343,16 @@ const props = defineProps({
users: Object,
holidays: Object,
can: Object,
userId: [Number, null],
vacationStartDate: [String, null],
vacationUserId: [Number, null],
vacationFromDate: [String, null],
})
const form = useForm({
user: props.can.createOnBehalfOfEmployee
? props.users.data.find(user => user.id === (props.userId ?? props.auth.user.id)) ?? props.users.data[0]
? props.users.data.find(user => user.id === (props.vacationUserId ?? props.auth.user.id)) ?? props.users.data[0]
: props.auth.user,
from: props.vacationStartDate,
to: props.vacationStartDate,
from: props.vacationFromDate,
to: props.vacationFromDate,
vacationType: null,
comment: null,
flowSkipped: false,