Donation checkout via Ladill Pay (9% fee), church/giving QR pages, SSO, and platform scan forwarding. Co-authored-by: Cursor <cursoragent@cursor.com>
47 lines
1.2 KiB
PHP
47 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
/** Membership linking a user to an account (owner) whose QR codes they can manage. */
|
|
class QrTeamMember extends Model
|
|
{
|
|
public const ROLE_ADMIN = 'admin';
|
|
|
|
public const ROLE_MEMBER = 'member';
|
|
|
|
public const STATUS_INVITED = 'invited';
|
|
|
|
public const STATUS_ACTIVE = 'active';
|
|
|
|
protected $fillable = ['account_id', 'user_id', 'email', 'role', 'status', 'token', 'accepted_at'];
|
|
|
|
protected $casts = ['accepted_at' => 'datetime'];
|
|
|
|
public function account(): BelongsTo
|
|
{
|
|
return $this->belongsTo(User::class, 'account_id');
|
|
}
|
|
|
|
public function member(): BelongsTo
|
|
{
|
|
return $this->belongsTo(User::class, 'user_id');
|
|
}
|
|
|
|
public static function linkPendingInvitesFor(User $user): void
|
|
{
|
|
static::query()
|
|
->whereNull('user_id')
|
|
->where('status', self::STATUS_INVITED)
|
|
->whereRaw('LOWER(email) = ?', [strtolower($user->email)])
|
|
->update([
|
|
'user_id' => $user->id,
|
|
'status' => self::STATUS_ACTIVE,
|
|
'accepted_at' => now(),
|
|
'token' => null,
|
|
]);
|
|
}
|
|
}
|