d2d.emegrendeles.hu/app/Models/Supplier.php
2026-04-26 05:37:07 +02:00

91 lines
2.7 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
class Supplier extends BaseAuditable
{
use SoftDeletes;
protected $guarded = ['id', 'created_at', ' updated_at'];
protected $appends = ['productGroupNames'];
public function getProductGroupNamesAttribute(): string
{
return $this->productGroup()->pluck('name');
}
public function contact(): \Illuminate\Database\Eloquent\Relations\MorphMany
{
return $this->morphMany(Contact::class, 'contactable');
}
public function contactOrderMail(): \Illuminate\Database\Eloquent\Relations\MorphMany
{
return $this->morphMany(Contact::class, 'contactable')->where('type', 'like', 'orderMail');
}
public function productGroup(): BelongsToMany
{
return $this->belongsToMany(ProductGroup::class, 'supplier_product_group')->withTimestamps();
}
public function service(): BelongsToMany
{
return $this->belongsToMany(Service::class, 'supplier_services')->withTimestamps();
}
public function profitCenter(): BelongsToMany
{
return $this->belongsToMany(ProfitCenter::class)->withTimestamps();
}
public function users(): HasMany
{
return $this->hasMany(User::class);
}
public function attachment(): \Illuminate\Database\Eloquent\Relations\MorphMany
{
return $this->morphMany(Attachment::class, 'attachable');
}
public function syncContactRelations(array $contactIds): bool
{
return $this->syncMorph(Contact::class, 'contactable', $contactIds);
}
public function syncMorph($class, $classFunctionName, $ids = []): bool
{
$f = new \ReflectionClass($class);
$relationFunctionName = lcfirst($f->getShortName());
if (method_exists($this, $relationFunctionName)) {
$associated = $this->$relationFunctionName()->pluck('id')->toArray();
$needToRemove = array_diff($associated, $ids);
$needToAdd = array_diff($ids, $associated);
if (count($needToRemove) > 0) {
foreach ($needToRemove as $id) {
$item = $class::find($id);
$item->$classFunctionName()->dissociate($this);
$item->save();
}
}
if (count($needToAdd) > 0) {
foreach ($needToAdd as $id) {
$item = $class::find($id);
$item->$classFunctionName()->associate($this);
$item->save();
}
}
return true;
}
return false;
}
}