belongsTo(SupplierDetail::class); } /* ATTRIBUTES */ public function getBaseCostTaxableAttribute(): float { return Tax::tax_calc($this->attributes['base_cost'],config('site')->taxes); } /** * 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; } /** * This contract term is the highest of * + The defined contract_term * + The default months in a billing interval * * @return int */ public function getContractTermAttribute(): int { return max(Invoice::billing_period(static::getBillingIntervalAttribute()),Arr::get($this->attributes,'contract_term')); } public function getMinCostAttribute(): float { return $this->attributes['setup_cost']+$this->attributes['base_cost']*Invoice::billing_term($this->getContractTermAttribute(),$this->getBillingIntervalAttribute()); } public function getMinCostTaxableAttribute(): float { return Tax::tax_calc($this->getMinCostAttribute(),config('site')->taxes); } public function getNameAttribute(): string { return $this->product_id ?: 'Supplier PID Unknown'; } public function getNameLongAttribute(): string { return $this->product_desc ?: 'Supplier NAME Unknown'; } public function getSetupCostTaxableAttribute(): float { return Tax::tax_calc($this->attributes['setup_cost'],config('site')->taxes); } }