*/ use Billable, HasFactory, HasFeatures, HasUuids, Notifiable, TwoFactorAuthenticatable; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ 'name', 'email', 'password', 'encryption_salt', 'onboarded_at', 'currency_code', 'locale', ]; /** * The attributes that should be hidden for serialization. * * @var list */ protected $hidden = [ 'password', 'two_factor_secret', 'two_factor_recovery_codes', 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', 'two_factor_confirmed_at' => 'datetime', 'onboarded_at' => 'datetime', ]; } public function isOnboarded(): bool { return $this->onboarded_at !== null; } /** @return HasOne */ public function setting(): HasOne { return $this->hasOne(UserSetting::class); } /** @return HasOne */ public function encryptedMessage(): HasOne { return $this->hasOne(EncryptedMessage::class); } /** @return HasMany */ public function transactions(): HasMany { return $this->hasMany(Transaction::class); } /** @return HasMany */ public function accounts(): HasMany { return $this->hasMany(Account::class); } /** @return HasMany */ public function categories(): HasMany { return $this->hasMany(Category::class); } /** @return HasMany */ public function banks(): HasMany { return $this->hasMany(Bank::class) ->where(function (Builder $query) { $query->whereNull('user_id') ->orWhere('banks.user_id', $this->id); }); } /** @return HasMany */ public function automationRules(): HasMany { return $this->hasMany(AutomationRule::class); } /** @return HasMany */ public function labels(): HasMany { return $this->hasMany(Label::class); } /** @return HasMany */ public function mailLogs(): HasMany { return $this->hasMany(UserMailLog::class); } /** @return HasMany */ public function budgets(): HasMany { return $this->hasMany(Budget::class); } /** @return HasMany */ public function bankingConnections(): HasMany { return $this->hasMany(BankingConnection::class); } public function hasReceivedEmail(DripEmailType $type): bool { return $this->mailLogs()->where('email_type', $type)->exists(); } public function hasProPlan(): bool { if (! config('subscriptions.enabled')) { return true; } return $this->subscribed('default'); } public function isDemoAccount(): bool { return $this->email === config('app.demo.email'); } public function preferredLocale(): string { return $this->locale ?? 'en'; } public function sendEmailVerificationNotification(): void { $this->notify(new VerifyEmailNotification); } }