#157 - added the request class and improved the request parameters
This commit is contained in:
parent
d4c5e55409
commit
04d036a1ef
@ -28,6 +28,7 @@ use Toby\Domain\VacationTypeConfigRetriever;
|
|||||||
use Toby\Eloquent\Helpers\YearPeriodRetriever;
|
use Toby\Eloquent\Helpers\YearPeriodRetriever;
|
||||||
use Toby\Eloquent\Models\User;
|
use Toby\Eloquent\Models\User;
|
||||||
use Toby\Eloquent\Models\VacationRequest;
|
use Toby\Eloquent\Models\VacationRequest;
|
||||||
|
use Toby\Infrastructure\Http\Requests\CreateVacationRequestRequest;
|
||||||
use Toby\Infrastructure\Http\Requests\VacationRequestRequest;
|
use Toby\Infrastructure\Http\Requests\VacationRequestRequest;
|
||||||
use Toby\Infrastructure\Http\Resources\SimpleUserResource;
|
use Toby\Infrastructure\Http\Resources\SimpleUserResource;
|
||||||
use Toby\Infrastructure\Http\Resources\VacationRequestActivityResource;
|
use Toby\Infrastructure\Http\Resources\VacationRequestActivityResource;
|
||||||
@ -166,17 +167,14 @@ class VacationRequestController extends Controller
|
|||||||
return $pdf->stream();
|
return $pdf->stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create(Request $request): Response
|
public function create(CreateVacationRequestRequest $request): Response
|
||||||
{
|
{
|
||||||
$users = User::query()
|
$users = User::query()
|
||||||
->orderByProfileField("last_name")
|
->orderByProfileField("last_name")
|
||||||
->orderByProfileField("first_name")
|
->orderByProfileField("first_name")
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
if(($selectedUserId = $request->get("user")) && is_numeric($selectedUserId)) {
|
$requestData = $request->data();
|
||||||
$userId = User::query()
|
|
||||||
->find($selectedUserId)?->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
return inertia("VacationRequest/Create", [
|
return inertia("VacationRequest/Create", [
|
||||||
"vacationTypes" => VacationType::casesToSelect(),
|
"vacationTypes" => VacationType::casesToSelect(),
|
||||||
@ -185,8 +183,8 @@ class VacationRequestController extends Controller
|
|||||||
"createOnBehalfOfEmployee" => $request->user()->can("createOnBehalfOfEmployee", VacationRequest::class),
|
"createOnBehalfOfEmployee" => $request->user()->can("createOnBehalfOfEmployee", VacationRequest::class),
|
||||||
"skipFlow" => $request->user()->can("skipFlow", VacationRequest::class),
|
"skipFlow" => $request->user()->can("skipFlow", VacationRequest::class),
|
||||||
],
|
],
|
||||||
"userId" => $userId ?? null,
|
"vacationUserId" => $requestData['user'],
|
||||||
"vacationStartDate" => $request->get("start_date"),
|
"vacationFromDate" => $requestData['from_date'],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -89,7 +89,7 @@
|
|||||||
<InertiaLink
|
<InertiaLink
|
||||||
v-if="day.isFuture"
|
v-if="day.isFuture"
|
||||||
href="/vacation/requests/create"
|
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"
|
class="py-1.5 w-full font-medium bg-white hover:bg-blumilk-25 border-b-4 border-transparent focus:outline-blumilk-500"
|
||||||
>
|
>
|
||||||
<time
|
<time
|
||||||
|
@ -173,6 +173,6 @@ function unsetActiveDay() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function linkParameters(user, day) {
|
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>
|
</script>
|
||||||
|
@ -343,16 +343,16 @@ const props = defineProps({
|
|||||||
users: Object,
|
users: Object,
|
||||||
holidays: Object,
|
holidays: Object,
|
||||||
can: Object,
|
can: Object,
|
||||||
userId: [Number, null],
|
vacationUserId: [Number, null],
|
||||||
vacationStartDate: [String, null],
|
vacationFromDate: [String, null],
|
||||||
})
|
})
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm({
|
||||||
user: props.can.createOnBehalfOfEmployee
|
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,
|
: props.auth.user,
|
||||||
from: props.vacationStartDate,
|
from: props.vacationFromDate,
|
||||||
to: props.vacationStartDate,
|
to: props.vacationFromDate,
|
||||||
vacationType: null,
|
vacationType: null,
|
||||||
comment: null,
|
comment: null,
|
||||||
flowSkipped: false,
|
flowSkipped: false,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user