2024-08-01 13:53:10 -05:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
2024-08-07 12:45:01 -05:00
|
|
|
use Illuminate\Database\Eloquent\Concerns\HasUuids;
|
2024-08-01 13:53:10 -05:00
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
|
|
|
|
|
|
|
|
class Portfolio extends Model
|
|
|
|
|
{
|
|
|
|
|
use HasFactory;
|
2024-08-07 12:45:01 -05:00
|
|
|
use HasUuids;
|
2024-08-01 13:53:10 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The attributes that are mass assignable.
|
|
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
|
|
|
|
protected $fillable = [
|
|
|
|
|
'title',
|
|
|
|
|
'notes',
|
|
|
|
|
'wishlist',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
protected static function boot()
|
|
|
|
|
{
|
|
|
|
|
parent::boot();
|
|
|
|
|
|
|
|
|
|
static::saved(function ($model) {
|
|
|
|
|
self::syncUsers($model);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The attributes that should be hidden for arrays.
|
|
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
|
|
|
|
protected $hidden = [];
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The attributes that should be cast to native types.
|
|
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
2024-08-04 18:27:47 -05:00
|
|
|
protected $casts = [
|
|
|
|
|
'wishlist' => 'boolean'
|
|
|
|
|
];
|
2024-08-01 13:53:10 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The relationships that should always be eagerly loaded.
|
|
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
|
|
|
|
protected $with = ['users'];
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The attributes that should be appended.
|
|
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
|
|
|
|
protected $appends = ['owner_id'];
|
|
|
|
|
|
|
|
|
|
public function users()
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsToMany(User::class)->withPivot('owner');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// public function holdings()
|
|
|
|
|
// {
|
|
|
|
|
// return $this->hasMany(Holding::class, 'portfolio_id', 'id');
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// public function transactions()
|
|
|
|
|
// {
|
|
|
|
|
// return $this->hasMany(Transaction::class);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
public function scopeMyPortfolios()
|
|
|
|
|
{
|
|
|
|
|
return $this->whereRelation('users', 'id', auth()->user()->id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function scopeWithoutWishlists()
|
|
|
|
|
{
|
|
|
|
|
return $this->where(['wishlist' => false]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getOwnerIdAttribute()
|
|
|
|
|
{
|
|
|
|
|
return $this->users()->firstWhere('owner', 1)?->id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function syncUsers(self $model) {
|
|
|
|
|
// make sure we don't remove owner access
|
|
|
|
|
$user_id[$model->owner_id ?? auth()->user()->id] = ['owner' => true];
|
|
|
|
|
|
|
|
|
|
// // add other users
|
|
|
|
|
// foreach(request()->users ?? [] as $id) {
|
|
|
|
|
// $user_id[$id] = ['owner' => false];
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// save
|
|
|
|
|
$model->users()->sync($user_id);
|
|
|
|
|
}
|
|
|
|
|
}
|