belongsTo(Account::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 getNameAttribute() { if (! isset($this->getServiceDetail()->name)) return 'Unknown'; return $this->getServiceDetail()->name; } 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-%04s.%05s',$this->site_id,$this->account_id,$this->id); } public function getServiceIdUrlAttribute() { return sprintf('%s',$this->id,$this->service_id); } public function getServiceNumberAttribute() { return sprintf('%02s.%04s.%04s',$this->site_id,$this->account_id,$this->id); } }