Refactor employee management by implementing automatic employee number generation, updating national ID handling, and enhancing localization for gender and nationality fields across various resources. Adjust form components and validation logic to improve user experience and data integrity.
This commit is contained in:
@@ -11,6 +11,7 @@ use App\Models\Department;
|
||||
use App\Models\Employee;
|
||||
use App\Models\Position;
|
||||
use App\Models\Shift;
|
||||
use App\Support\Countries;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
@@ -22,9 +23,9 @@ class EmployeeImportTransformer
|
||||
public function toAttributes(EmployeeRowDto $dto): array
|
||||
{
|
||||
return [
|
||||
'employee_number' => $dto->employeeNumber,
|
||||
'employee_number' => $dto->employeeNumber !== '' ? $dto->employeeNumber : null,
|
||||
'full_name' => $dto->fullName,
|
||||
'national_id' => $dto->nationalId,
|
||||
'national_id' => $this->resolveNationality($dto->nationalId),
|
||||
'gender' => $this->resolveGender($dto->gender),
|
||||
'birth_date' => $this->parseDate($dto->birthDate),
|
||||
'phone' => $dto->phone ?? config('hr.default_phone'),
|
||||
@@ -45,10 +46,6 @@ class EmployeeImportTransformer
|
||||
{
|
||||
$errors = [];
|
||||
|
||||
if ($dto->employeeNumber === '') {
|
||||
$errors[] = 'Employee number is required.';
|
||||
}
|
||||
|
||||
if ($dto->fullName === '') {
|
||||
$errors[] = 'Full name is required.';
|
||||
}
|
||||
@@ -65,22 +62,42 @@ class EmployeeImportTransformer
|
||||
$errors[] = "Shift \"{$dto->shift}\" was not found.";
|
||||
}
|
||||
|
||||
if ($dto->nationalId && $this->resolveNationality($dto->nationalId) === null) {
|
||||
$errors[] = "Nationality \"{$dto->nationalId}\" was not found.";
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
public function isDuplicate(EmployeeRowDto $dto): bool
|
||||
{
|
||||
return Employee::query()
|
||||
->where(function ($query) use ($dto): void {
|
||||
$query->where('employee_number', $dto->employeeNumber);
|
||||
$hasEmployeeNumber = $dto->employeeNumber !== '';
|
||||
$nationality = $this->resolveNationality($dto->nationalId);
|
||||
|
||||
if ($dto->nationalId) {
|
||||
$query->orWhere('national_id', $dto->nationalId);
|
||||
if (! $hasEmployeeNumber && $nationality === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return Employee::query()
|
||||
->where(function ($query) use ($dto, $hasEmployeeNumber, $nationality): void {
|
||||
if ($hasEmployeeNumber) {
|
||||
$query->where('employee_number', $dto->employeeNumber);
|
||||
}
|
||||
|
||||
if ($nationality !== null) {
|
||||
$hasEmployeeNumber
|
||||
? $query->orWhere('national_id', $nationality)
|
||||
: $query->where('national_id', $nationality);
|
||||
}
|
||||
})
|
||||
->exists();
|
||||
}
|
||||
|
||||
private function resolveNationality(?string $value): ?string
|
||||
{
|
||||
return Countries::resolve($value);
|
||||
}
|
||||
|
||||
private function resolveGender(?string $value): ?Gender
|
||||
{
|
||||
if ($value === null) {
|
||||
|
||||
Reference in New Issue
Block a user