'boolean', 'tanggal_lahir' => 'date', 'pendidikan_terakhir' => Pendidikan::class, 'tanggal_mulai_menjabat' => 'date', 'jabatan' => JabatanBumdes::class, ]; public function getUsiaAttribute(): ?int { if (! $this->tanggal_lahir) { return null; } return Carbon::parse($this->tanggal_lahir)->age; } public function getLamaMenjabatAttribute(): string { if (! is_null($this->lama_menjabat_tahun)) { return $this->lama_menjabat_tahun . ' tahun'; } if (! $this->tanggal_mulai_menjabat) { return '-'; } $tanggalMulai = Carbon::parse($this->tanggal_mulai_menjabat)->startOfDay(); if ($tanggalMulai->isFuture()) { return 'Belum mulai'; } $selisih = $tanggalMulai->diff(Carbon::now()); $bagian = []; if ($selisih->y > 0) { $bagian[] = $selisih->y . ' tahun'; } if ($selisih->m > 0) { $bagian[] = $selisih->m . ' bulan'; } if (empty($bagian)) { return $selisih->d . ' hari'; } return implode(' ', $bagian); } public function getNamaJabatanAttribute(): string { if ($this->jabatan === JabatanBumdes::LAINNYA && $this->jabatan_lainnya) { return $this->jabatan_lainnya; } return $this->jabatan?->label() ?? '-'; } public function desaKelurahan(): BelongsTo { return $this->belongsTo(DesaKelurahan::class, 'desa_kelurahan_id'); } public function creator(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); } public function kelembagaanAktor(): HasOne { return $this->hasOne(KelembagaanAktorBumdes::class, 'pengurus_bumdes_id'); } }