osb/app/Models/Supplier/Type.php
2023-05-06 13:53:50 +10:00

90 lines
1.8 KiB
PHP

<?php
namespace App\Models\Supplier;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Leenooks\Traits\ScopeActive;
use App\Models\{Invoice,SupplierDetail};
use App\Traits\SiteID;
abstract class Type extends Model
{
use SiteID,ScopeActive;
/* RELATIONS */
/**
* The offering supplied with this product
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
final public function products()
{
return $this->hasMany(static::ProductModel,'supplier_item_id','id');
}
final public function supplier_detail()
{
return $this->belongsTo(SupplierDetail::class);
}
/* ATTRIBUTES */
public function getBaseCostAttribute(?float $val): float
{
return $val ?: 0;
}
/**
* This will return the category of the product (eg: domain, hosting, etc) which is the basis for all
* other logic of these types.
*
* @return string
*/
final public function getCategoryAttribute(): string
{
return strtolower((new \ReflectionClass($this))->getShortName());
}
/**
* Return a friendly name for this product, used for display
*
* @return string
*/
final public function getCategoryNameAttribute(): string
{
return static::category_name;
}
final public function getContractTermAttribute(?int $val): int
{
return $val ?: 1;
}
public function getMinCostAttribute(): float
{
return $this->setup_cost+$this->base_cost*$this->contract_term;
}
public function getNameAttribute(): string
{
return $this->product_id ?: 'Supplier PID Unknown';
}
public function getNameLongAttribute(): string
{
return $this->product_desc ?: 'Supplier NAME Unknown';
}
public function getSetupCostAttribute(?float $val): float
{
return $val ?: 0;
}
public function getSupplierAttribute(): Model
{
return $this->supplier_detail->supplier;
}
}