belongsTo(PurchaseOrder::class)->withTrashed(); } /** * @return mixed */ public function entity() { return $this->belongsTo(PurchaseOrder::class)->withTrashed(); } /** * @return mixed */ public function contact() { return $this->belongsTo(VendorContact::class, 'vendor_contact_id', 'id')->withTrashed(); } /** * @return mixed */ public function user() { return $this->belongsTo(User::class)->withTrashed(); } public function company() { return $this->belongsTo(Company::class); } public function getName() { return $this->key; } public function markViewed() { $this->viewed_date = Carbon::now(); $this->save(); } public function getPortalLink() :string { if (Ninja::isHosted()) { $domain = $this->company->domain(); } else { $domain = config('ninja.app_url'); } switch ($this->company->portal_mode) { case 'subdomain': return $domain.'/vendor/'; case 'iframe': return $domain.'/vendor/'; case 'domain': return $domain.'/vendor/'; default: return ''; } } public function getLink() :string { $entity_type = Str::snake(class_basename($this->entityType())); if (Ninja::isHosted()) { $domain = $this->company->domain(); } else { $domain = config('ninja.app_url'); } switch ($this->company->portal_mode) { case 'subdomain': return $domain.'/vendor/'.$entity_type.'/'.$this->key; case 'iframe': return $domain.'/vendor/'.$entity_type.'/'.$this->key; case 'domain': return $domain.'/vendor/'.$entity_type.'/'.$this->key; default: return ''; } } public function getAdminLink($use_react_link = false) :string { return $use_react_link ? $this->getReactLink() : $this->getLink().'?silent=true'; } private function getReactLink(): string { $entity_type = Str::snake(class_basename($this->entityType())); return config('ninja.react_url')."/#/{$entity_type}s/{$this->{$entity_type}->hashed_id}/edit"; } }