Files
portal-api/app/Models/OrderItem.php
T

78 lines
1.9 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class OrderItem extends Model
{
use HasFactory;
protected $table = 'order_items';
protected $guarded = [];
protected $casts = [
'addons_meta' => 'array',
];
// -------------------------------------------------------------------------
// Relationships
// -------------------------------------------------------------------------
public function order()
{
return $this->belongsTo(Order::class, 'order_id');
}
public function product()
{
return $this->belongsTo(Product::class, 'product_id');
}
public function getProductAttribute(): ?Product
{
if ($this->relationLoaded('product')) {
return $this->getRelation('product');
}
return $this->product()->first();
}
public function pricing()
{
return $this->belongsTo(ProductPricings::class, 'product_pricing_id');
}
public function os()
{
return $this->belongsTo(Os::class, 'os_id');
}
/** The provisioned service spawned from this order line. */
public function service()
{
return $this->hasOne(Service::class, 'order_item_id');
}
// -------------------------------------------------------------------------
// Helpers
// -------------------------------------------------------------------------
public function getBillingLabelAttribute(): string
{
return match ((int) $this->months) {
0 => 'One Time',
1 => 'Monthly',
3 => 'Quarterly',
6 => 'Semi-Annually',
12 => 'Annually',
24 => '2 Years',
36 => '3 Years',
default => $this->months . ' Months',
};
}
}