belongsTo(Country::class); } public function external() { return $this->belongsToMany(External\Integrations::class,'external_account',NULL,'external_integration_id'); } public function invoices() { return $this->hasMany(Invoice::class); } public function language() { return $this->belongsTo(Language::class); } public function payments() { return $this->hasMany(Payment::class); } public function services($active=FALSE) { $query = $this->hasMany(Service::class); return $active ? $query->active() : $query; } public function user() { return $this->belongsTo(User::class); } /* SCOPES */ /** * Search for a record * * @param $query * @param string $term * @return */ public function scopeSearch($query,string $term) { // Build our where clause if (is_numeric($term)) { $query->where('id','like','%'.$term.'%'); } else { $query->where('company','like','%'.$term.'%') ->orWhere('address1','like','%'.$term.'%') ->orWhere('address2','like','%'.$term.'%') ->orWhere('city','like','%'.$term.'%'); } return $query; } /* ATTRIBUTES */ public function getActiveDisplayAttribute($value) { return sprintf('%s',$this->active ? 'success' : 'danger',$this->active ? 'Active' : 'Inactive'); } /** * @deprecated use getAIDAttribute() */ public function getAccountIdAttribute() { return $this->getAIDAttribute(); } /** * @deprecated use getUrlAdminAttribute() */ public function getAccountIdUrlAttribute() { return $this->getUrlAdminAttribute(); } /** * Get the address for the account * * @return array */ public function getAddressAttribute(): array { return [ $this->address1, $this->address2, sprintf('%s %s %s',$this->city.(($this->state OR $this->zip) ? ',' : ''),$this->state,$this->zip) ]; } /** * Return the Account Unique Identifier * @return string * @deprecated use getSIDAttribute() */ public function getAIDAttribute() { return $this->getSIDAttribute(); } /** * Account Local ID * * @return string */ public function getLIDAttribute(): string { return sprintf('%04s',$this->id); } public function getNameAttribute() { return $this->company ?: ($this->user_id ? $this->user->SurFirstName : 'AID:'.$this->id); } public function getServicesCountHtmlAttribute() { return sprintf('%s /%s',$this->services()->noEagerLoads()->where('active',TRUE)->count(),$this->services()->noEagerLoads()->count()); } /** * Account System ID * * @return string */ public function getSIDAttribute(): string { return sprintf('%02s-%s',$this->site_id,$this->getLIDAttribute()); } public function getSwitchUrlAttribute() { return sprintf('',$this->user_id); } public function getTypeAttribute() { return $this->company ? 'Business' : 'Private'; } /** * Return the Admin URL to manage the account * * @return string */ public function getUrlAdminAttribute(): string { return sprintf('%s',$this->id,$this->account_id); } /** * Return the User URL to manage the account * * @return string */ public function getUrlUserAttribute(): string { return sprintf('%s',$this->id,$this->account_id); } /* GENERAL METHODS */ /** * Get the due invoices on an account * * @return mixed */ public function dueInvoices() { return $this->invoices->filter(function($item) { return $item->active AND $item->due > 0; }); } /** * Get the external account ID for a specific integration * * @param External\Integrations $o * @return mixed */ public function ExternalAccounting(External\Integrations $o) { return $this ->external() ->where('id','=',$o->id) ->where('site_id','=',$this->site_id) ->first(); } }