DONE: layout letter with letterhead and footer, notification for newly...

This commit is contained in:
ISMAIL MASSERAN
2026-06-28 02:16:49 +00:00
parent 94ecbe5887
commit 034ecf947f
400 changed files with 29802 additions and 5446 deletions
@@ -0,0 +1,44 @@
<?php
namespace Modules\Auth\Entities;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class PasswordResetOtp extends Model
{
use HasUuids;
protected $table = 'password_reset_otps';
protected $fillable = [
'user_id',
'code',
'expires_at',
'attempts',
];
protected function casts(): array
{
return [
'expires_at' => 'datetime',
'attempts' => 'integer',
];
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function isExpired(): bool
{
return $this->expires_at->isPast();
}
public function hasExceededMaxAttempts(): bool
{
return $this->attempts >= (int) config('auth.password_reset.max_attempts', 5);
}
}
+39 -2
View File
@@ -16,14 +16,17 @@ use Spatie\Permission\PermissionRegistrar;
use Spatie\Permission\Traits\HasPermissions;
use Spatie\Permission\Traits\HasRoles;
use App\Services\ActiveRoleService;
use App\Traits\HasVisibility;
use Lab404\Impersonate\Models\Impersonate;
use Modules\Role\Entities\Role;
use Modules\User\Entities\Address;
use Modules\User\Entities\BankDetail;
use Modules\User\Entities\Employment;
use Modules\User\Entities\Heir;
class User extends Authenticatable
{
/** @use HasFactory<\Modules\Auth\Database\Factories\UserFactory> */
use HasApiTokens, HasFactory, HasPermissions, HasRoles, HasUuids, Impersonate, LogsActivity, Notifiable, SoftDeletes, HasVisibility;
use HasApiTokens, HasFactory, HasPermissions, HasRoles, HasUuids, Impersonate, LogsActivity, Notifiable, SoftDeletes;
protected $table = 'users';
@@ -44,6 +47,13 @@ class User extends Authenticatable
'two_factor_secret',
'two_factor_recovery_codes',
'two_factor_confirmed_at',
'gender',
'marriage_status',
'member_number',
'member_type',
'join_date',
'birth_date',
'birth_place',
];
/**
@@ -70,6 +80,13 @@ class User extends Authenticatable
'email_verified_at' => 'datetime',
'password' => 'hashed',
'status' => 'string',
'gender' => 'string',
'marriage_status' => 'string',
'member_number' => 'integer',
'member_type' => 'string',
'join_date' => 'date',
'birth_date' => 'date',
'birth_place' => 'string',
];
}
@@ -82,6 +99,26 @@ class User extends Authenticatable
return ActiveRoleService::getActiveRole($this);
}
public function addresses()
{
return $this->hasMany(Address::class);
}
public function employments()
{
return $this->hasMany(Employment::class);
}
public function bankDetails()
{
return $this->hasMany(BankDetail::class);
}
public function heirs()
{
return $this->hasMany(Heir::class);
}
public function hasPermissionAction($action): bool
{
$role = $this->activeRole();