'date', 'resign_date' => 'date', 'employment_status' => EmploymentStatus::class, 'base_salary' => 'integer', ]; } #[Scope] public function contract(Builder $query): void { $query->where('employment_status', EmploymentStatus::CONTRACT->value); } #[Scope] public function fullTime(Builder $query): void { $query->where('employment_status', EmploymentStatus::FULL_TIME->value); } #[Scope] public function partTime(Builder $query): void { $query->where('employment_status', EmploymentStatus::PART_TIME->value); } #[Scope] public function temporary(Builder $query): void { $query->where('employment_status', EmploymentStatus::TEMPORARY->value); } public function advances(): HasMany { return $this->hasMany(EmployeeAdvance::class); } public function attendances(): HasMany { return $this->hasMany(Attendance::class); } public function leaveRequests(): HasMany { return $this->hasMany(LeaveRequest::class); } public function payrolls(): HasMany { return $this->hasMany(Payroll::class); } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function baseSalaryFormatted(): Attribute { return Attribute::make( get: fn () => $this->base_salary !== null ? 'Rp '.number_format($this->base_salary, 0, ',', '.') : '-', ); } public function employmentStatusLabel(): Attribute { return Attribute::make( get: fn () => $this->employment_status?->label() ?? '-', ); } public function joinDateFormatted(): Attribute { return Attribute::make( get: fn () => $this->join_date ? Carbon::parse($this->join_date)->translatedFormat('l, d F Y') : '-', ); } public function joinDateInput(): Attribute { return Attribute::make( get: fn () => $this->join_date?->format('Y-m-d'), ); } public function resignDateFormatted(): Attribute { return Attribute::make( get: fn () => $this->resign_date ? Carbon::parse($this->resign_date)->translatedFormat('l, d F Y') : null, ); } }