hasMany(Models\Account::class); } protected function agents() { return $this->hasMany(static::class,'parent_id','id'); } protected function clients() { return $this->hasMany(\App\User::class); } public function invoices() { return $this->hasManyThrough(Models\Invoice::class,Models\Account::class); } public function payments() { return $this->hasManyThrough(Models\Payment::class,Models\Account::class); } public function services() { return $this->hasManyThrough(Models\Service::class,Models\Account::class); } protected function supplier() { return $this->belongsTo(static::class,'parent_id','id'); } protected function suppliers() { return $this->hasMany(static::class,'parent_id','id'); } /** * Logged in users full name * * @return string */ public function getFullNameAttribute() { return sprintf('%s %s',$this->firstname,$this->lastname); } /** * Return a Carbon Date if it has a value. * * @param $value * @return \Leenooks\Carbon * @todo This attribute is not in the schema */ public function getLastAccessAttribute($value) { if (! is_null($value)) return new Carbon($value); } public function getInvoicesDueAttribute() { return $this->invoices ->where('active',TRUE) ->sortBy('id') ->transform(function ($item) { if ($item->due) return $item; }) ->reverse() ->filter(); } public function getPaymentHistoryAttribute() { return $this->payments ->sortBy('date_payment') ->reverse(); } public function getServicesActiveAttribute() { return $this->services ->where('active',TRUE); } /** * @deprecated Use static::getFullNameAttribute() * @return mixed */ public function getNameAttribute() { return $this->full_name; } // List all the agents, including agents of agents public function all_agents() { $result = collect(); foreach ($this->agents()->orderBy('id')->get() as $o) { if (! $o->active) continue; $result->push($o->all_agents()); $result->push($this); } return $result->flatten(); } public function all_clients() { // List all the clients of my agents } public function all_suppliers() { // For each supplier, so if that supplier has a parent } public function role() { // If I have agents and no parent, I am the wholesaler if (is_null($this->parent_id) AND $this->all_agents()->count()) return 'Wholesaler'; // If I have agents and a parent, I am a reseller elseif ($this->parent_id AND $this->all_agents()->count()) return 'Reseller'; // If I have no agents and a parent, I am a customer elseif (! $this->all_agents()->count()) return 'Customer'; } }