#157 - added the request class and improved the request parameters
This commit is contained in:
		| @@ -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, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user