Optimise User all_accounts(),all_clients(), added Invoice/Service to search

This commit is contained in:
Deon George
2020-01-12 23:42:32 +11:00
parent 34c0380c99
commit f13c084a4b
4 changed files with 104 additions and 31 deletions

View File

@@ -5,6 +5,8 @@ namespace App;
use App\Models\Site;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\Collection as DatabaseCollection;
use Laravel\Passport\HasApiTokens;
use Leenooks\Carbon;
@@ -221,39 +223,61 @@ class User extends Authenticatable
/** Functions */
public function all_accounts()
/**
* Get a list of accounts for the clients of this user
*
* @return DatabaseCollection
*/
public function all_accounts(): DatabaseCollection
{
$result = collect();
$result = new DatabaseCollection();
$clients = $this->all_clients();
$clients->load('accounts');
foreach ($this->all_clients() as $o)
{
$result->push($o->accounts->where('active',TRUE));
foreach ($clients->pluck('accounts') as $accounts) {
foreach ($accounts as $o) {
if (! $o->active)
continue;
$result->push($o);
}
}
// Include my accounts
$result->push($this->accounts);
return $result->flatten();
}
public function all_clients($level=0)
{
$result = collect();
foreach ($this->clients as $o)
{
foreach ($this->accounts as $o) {
if (! $o->active)
continue;
$o->level = $level;
$result->push($o);
// Include clients of agents
$result->push($o->all_clients($level+1));
}
return $result->flatten();
return $result;
}
/**
* Get a list of clients that this user is responsible for.
*
* @param int $level
* @return Collection
*/
public function all_clients($level=0,DatabaseCollection $clients=NULL): DatabaseCollection
{
$result = is_null($clients) ? $this->clients : $clients;
$result
->filter(function($item) { return $item->active; })
->transform(function($item) use ($level) { $item->level = $level; return $item; });
foreach ($result->pluck('clients') as $clients) {
foreach ($this->all_clients($level+1,$clients) as $o) {
if (! $o->active)
continue;
$result->push($o);
}
}
return $result;
}
public function all_client_service_inactive()