<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Service extends Model { protected $table = 'ab_service'; protected $with = ['product.descriptions','account.language','service_adsl','service_domain.tld','service_ssl','service_voip']; protected $dates = ['date_last_invoice','date_next_invoice']; protected $appends = [ 'category', 'next_invoice', 'product_name', 'service_id', 'service_id_url', 'service_name', 'status', ]; protected $visible = [ 'active', 'category', 'data_orig', 'id', 'next_invoice', 'product_name', 'service_id', 'service_id_url', 'service_name', 'status', ]; public function account() { return $this->belongsTo(\App\User::class); } public function service_adsl() { return $this->belongsTo(ServiceAdsl::class,'id','service_id'); } public function service_domain() { return $this->belongsTo(ServiceDomain::class,'id','service_id'); } public function service_host() { return $this->belongsTo(ServiceHost::class,'id','service_id'); } public function service_ssl() { return $this->belongsTo(ServiceSsl::class,'id','service_id'); } public function service_voip() { return $this->belongsTo(ServiceVoip::class,'id','service_id'); } public function product() { return $this->belongsTo(Product::class); } /** * Only query active categories */ public function scopeActive() { return $this->where('active',TRUE); } public function getCategoryAttribute() { return $this->product->prod_plugin_file; } public function getNextInvoiceAttribute() { return $this->date_next_invoice ? $this->date_next_invoice->format('Y-m-d') : NULL; } public function getProductNameAttribute() { return $this->product->name($this->account->language); } /** * This function will return the associated service model for the product type */ public function getServiceDetail() { switch ($this->product->prod_plugin_file) { case 'ADSL': return $this->service_adsl; case 'DOMAIN': return $this->service_domain; case 'HOST': return $this->service_host; case 'SSL': return $this->service_ssl; case 'VOIP': return $this->service_voip; default: return NULL; } } public function getStatusAttribute() { return $this->active ? 'Active' : 'Inactive'; } public function getServiceExpireAttribute() { return 'TBA'; } public function getServiceIdAttribute() { return sprintf('%02s-%05s',$this->site_id,$this->id); } public function getServiceIdUrlAttribute() { return sprintf('<a href="/u/service/view/%s">%s</a>',$this->id,$this->service_id); } public function getServiceNameAttribute() { if (! isset($this->getServiceDetail()->name)) return 'Unknown'; return $this->getServiceDetail()->name; } public function getServiceNumberAttribute() { return sprintf('%02s.%04s.%04s',$this->site_id,$this->account_id,$this->id); } }