LeaveRequestStatus::class, 'start_date' => 'date:Y-m-d', 'end_date' => 'date:Y-m-d', 'total_days' => 'integer', 'verified_at' => 'datetime', ]; } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logAll() ->logOnlyDirty() ->dontLogEmptyChanges(); } protected function formattedEndDate(): Attribute { return Attribute::make( get: fn () => $this->end_date?->translatedFormat('l, d F Y'), ); } protected function formattedStartDate(): Attribute { return Attribute::make( get: fn () => $this->start_date?->translatedFormat('l, d F Y'), ); } protected function statusLabel(): Attribute { return Attribute::make( get: fn () => $this->status->label(), ); } #[Scope] protected function approved(Builder $query): void { $query->where('status', LeaveRequestStatus::APPROVED); } #[Scope] protected function cancelled(Builder $query): void { $query->where('status', LeaveRequestStatus::CANCELLED); } #[Scope] protected function pending(Builder $query): void { $query->where('status', LeaveRequestStatus::PENDING); } #[Scope] protected function rejected(Builder $query): void { $query->where('status', LeaveRequestStatus::REJECTED); } public function employee(): BelongsTo { return $this->belongsTo(Employee::class); } public function verifiedBy(): BelongsTo { return $this->belongsTo(User::class, 'verified_by_id'); } }