42 lines
2.4 KiB
PHP
42 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Enums\StaffStatus;
|
|
use App\Enums\Permission;
|
|
use App\Models\Concerns\UsesStringIds;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
|
|
|
class StaffProfile extends Model
|
|
{
|
|
use UsesStringIds;
|
|
|
|
public const CREATED_AT = 'createdAt';
|
|
public const UPDATED_AT = 'updatedAt';
|
|
protected $table = 'StaffProfile';
|
|
protected $fillable = ['userId', 'businessId', 'roleId', 'bio', 'status', 'isBookableOnline'];
|
|
protected function casts(): array { return ['status' => 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;
|
|
}
|
|
}
|