From 245127c9215e7a112a2e0108856c8839f55e02e1 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Sun, 21 Jun 2026 15:31:24 +0700 Subject: [PATCH] feat: add submit URL to EmployeeForm component for employee creation functionality --- app/Http/Requests/Admin/Hr/EmployeeRequest.php | 13 +++++++++---- app/Services/Hr/EmployeeService.php | 5 ++--- resources/js/pages/admin/hr/employees/Create.vue | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/Http/Requests/Admin/Hr/EmployeeRequest.php b/app/Http/Requests/Admin/Hr/EmployeeRequest.php index 10e1da4..4d4b238 100644 --- a/app/Http/Requests/Admin/Hr/EmployeeRequest.php +++ b/app/Http/Requests/Admin/Hr/EmployeeRequest.php @@ -28,7 +28,7 @@ public function rules(): array { $isOwner = $this->role === Role::OWNER->value; - return [ + $rules = [ 'email' => ['required', 'email', 'max:100', Rule::unique('users', 'email')->ignore($this->route('user')?->id)], 'username' => ['required', 'string', 'max:20', 'alpha_dash', Rule::unique('users', 'username')->ignore($this->route('user')?->id)], 'full_name' => ['required', 'string', 'max:200'], @@ -36,11 +36,16 @@ public function rules(): array 'gender' => ['nullable', Rule::enum(Gender::class)], 'birth_date' => ['nullable', 'date', 'before:today'], 'address' => ['nullable', 'string'], - 'join_date' => [Rule::requiredIf(! $isOwner), 'date'], - 'employment_status' => [Rule::requiredIf(! $isOwner), Rule::enum(EmploymentStatus::class)], - 'base_salary' => [Rule::requiredIf(! $isOwner), 'integer', 'min:0'], 'role' => ['required', Rule::in(Role::assignableValues())], ]; + + if (! $isOwner) { + $rules['join_date'] = ['required', 'date']; + $rules['employment_status'] = ['required', Rule::enum(EmploymentStatus::class)]; + $rules['base_salary'] = ['required', 'integer', 'min:0']; + } + + return $rules; } /** diff --git a/app/Services/Hr/EmployeeService.php b/app/Services/Hr/EmployeeService.php index b7e410c..df718d8 100644 --- a/app/Services/Hr/EmployeeService.php +++ b/app/Services/Hr/EmployeeService.php @@ -2,6 +2,7 @@ namespace App\Services\Hr; +use App\Enums\Role; use App\Models\Employee; use App\Models\User; use App\Models\UserProfile; @@ -70,9 +71,7 @@ public function create(array $validated): void 'address' => $validated['address'], ]); - $hasEmployee = ! empty($validated['join_date']) && ! empty($validated['employment_status']) && ! empty($validated['base_salary']); - - if ($hasEmployee) { + if ($validated['role'] !== Role::OWNER->value) { Employee::create([ 'user_id' => $user->id, 'join_date' => $validated['join_date'], diff --git a/resources/js/pages/admin/hr/employees/Create.vue b/resources/js/pages/admin/hr/employees/Create.vue index 6023f4b..518f529 100644 --- a/resources/js/pages/admin/hr/employees/Create.vue +++ b/resources/js/pages/admin/hr/employees/Create.vue @@ -30,6 +30,6 @@ defineProps<{ - +