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_ssl() { return $this->belongsTo(ServiceSsl::class,'id','service_id'); } public function product() { return $this->belongsTo(Product::class); } /** * 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 'SSL': return $this->service_ssl; default: abort(500,'Havent handled case for: '.$this->product->prod_plugin_file); } } public function getServiceExpireAttribute() { return 'TBA'; } public function getNextInvoiceAttribute() { return $this->date_next_invoice->format('Y-m-d'); } public function getServiceNameAttribute() { if (! isset($this->getServiceDetail()->name)) dd($this,$this->product,$this->getServiceDetail()); return sprintf('%s: %s',$this->product->name($this->account->language),$this->getServiceDetail()->name); } public function getServiceNumberAttribute() { return sprintf('%02s.%04s.%04s',$this->site_id,$this->account_id,$this->id); } }