StaffStatus::class, 'isBookableOnline' => 'boolean']; } public function user(): BelongsTo { return $this->belongsTo(User::class, 'userId'); } public function business(): BelongsTo { return $this->belongsTo(Business::class, 'businessId'); } public function role(): BelongsTo { return $this->belongsTo(Role::class, 'roleId'); } public function services(): BelongsToMany { return $this->belongsToMany(Service::class, 'StaffService', 'staffId', 'serviceId')->withPivot(['priceOverride', 'durationOverrideMinutes']); } public function workingHours(): HasMany { return $this->hasMany(WorkingHours::class, 'staffId'); } public function breaks(): HasMany { return $this->hasMany(StaffBreak::class, 'staffId'); } public function timeOff(): HasMany { return $this->hasMany(TimeOff::class, 'staffId'); } public function appointments(): HasMany { return $this->hasMany(Appointment::class, 'staffId'); } public function invitation(): HasOne { return $this->hasOne(StaffInvitation::class, 'staffId'); } public function calendarConnection(): HasOne { return $this->hasOne(StaffCalendarConnection::class, 'staffId'); } public function authoredLoyaltyTransactions(): HasMany { return $this->hasMany(LoyaltyTransaction::class, 'authoredByStaffId'); } public function authoredCustomerNotes(): HasMany { return $this->hasMany(CustomerNote::class, 'authorStaffId'); } public function redeemedLoyaltyRewards(): HasMany { return $this->hasMany(LoyaltyReward::class, 'redeemedByStaffId'); } public function hasPermission(Permission $permission): bool { return $this->role?->permissions->contains('permission', $permission) ?? false; } }