83 lines
4.0 KiB
PHP
83 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
|
|
class StoreEmployeeRequest extends FormRequest
|
|
{
|
|
public function authorize(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function rules(): array
|
|
{
|
|
return [
|
|
// ── Identitas ────────────────────────────────────────────────
|
|
'name' => ['required', 'string', 'max:255', 'regex:/^[\pL\s]+$/u'],
|
|
'email' => ['nullable', 'email:rfc,dns', 'max:255', 'unique:employees,email'],
|
|
|
|
// ── Kepegawaian ──────────────────────────────────────────────
|
|
'nip' => ['required', 'digits:6', 'unique:employees,nip'],
|
|
|
|
// ── Data Pribadi ─────────────────────────────────────────────
|
|
'gender' => ['required', 'in:L,P'],
|
|
'place_of_birth'=> ['nullable', 'string', 'max:100'],
|
|
'birth_date' => ['required', 'date', 'before:today'],
|
|
'address' => ['nullable', 'string', 'max:500'],
|
|
'phone_number' => ['nullable', 'digits_between:8,15'],
|
|
|
|
// ── Jabatan & Departemen ─────────────────────────────────────
|
|
'department_id' => ['required', 'exists:departments,id'],
|
|
'position_id' => ['required', 'exists:positions,id'],
|
|
|
|
// ── Status & Tanggal ─────────────────────────────────────────
|
|
'status' => ['required', 'in:PKWT,PKWTT,Magang'],
|
|
'join_date' => ['required', 'date'],
|
|
];
|
|
}
|
|
|
|
public function messages(): array
|
|
{
|
|
return [
|
|
// Nama
|
|
'name.required' => 'Nama lengkap wajib diisi.',
|
|
'name.max' => 'Nama lengkap maksimal 255 karakter.',
|
|
'name.regex' => 'Nama lengkap hanya boleh berisi huruf dan spasi.',
|
|
|
|
// Email
|
|
'email.email' => 'Format email tidak valid.',
|
|
'email.unique' => 'Email sudah digunakan oleh karyawan lain.',
|
|
'email.max' => 'Email maksimal 255 karakter.',
|
|
|
|
// NIP
|
|
'nip.required' => 'NIP wajib diisi.',
|
|
'nip.digits' => 'NIP harus tepat 6 digit angka.',
|
|
'nip.unique' => 'NIP sudah terdaftar pada karyawan lain.',
|
|
|
|
// Data Pribadi
|
|
'gender.required' => 'Jenis kelamin wajib dipilih.',
|
|
'gender.in' => 'Jenis kelamin tidak valid.',
|
|
'place_of_birth.max' => 'Tempat lahir maksimal 100 karakter.',
|
|
'birth_date.required' => 'Tanggal lahir wajib diisi.',
|
|
'birth_date.date' => 'Format tanggal lahir tidak valid.',
|
|
'birth_date.before' => 'Tanggal lahir harus sebelum hari ini.',
|
|
'address.max' => 'Alamat maksimal 500 karakter.',
|
|
'phone_number.digits_between' => 'Nomor HP harus berupa angka, minimal 8 dan maksimal 15 digit.',
|
|
|
|
// Jabatan & Departemen
|
|
'department_id.required'=> 'Departemen wajib dipilih.',
|
|
'department_id.exists' => 'Departemen tidak ditemukan.',
|
|
'position_id.required' => 'Jabatan wajib dipilih.',
|
|
'position_id.exists' => 'Jabatan tidak ditemukan.',
|
|
|
|
// Status & Tanggal
|
|
'status.required' => 'Status kepegawaian wajib dipilih.',
|
|
'status.in' => 'Status hanya boleh PKWT, PKWTT, atau Magang.',
|
|
'join_date.required' => 'Tanggal masuk wajib diisi.',
|
|
'join_date.date' => 'Format tanggal masuk tidak valid.',
|
|
];
|
|
}
|
|
}
|