status = $status; $this->count = $count; $this->mode = $mode; $this->filter = []; } public function goToPage($page) { $this->currentPage = $page; } #[On('clientsTableFilterUpdated')] public function appendFilter($filter) { if ($filter) { $this->filter = $filter; } else { $this->filter = []; } $this->render(); } #[On('clientCreated')] public function getDeals() { $deals = false; $clients = false; $user = auth()->user(); if ($cityManager = CityManager::where('user_id', auth()->id())->first()) { $companies = $cityManager->city->companies->pluck('id'); $deals = Deal::whereIn('agent_id', function ($query) use ($companies) { $query->select('id'); $query->from('agents'); $query->whereIn('company_id', $companies); }); } else if ($company = AdminCompanyOfUser()) { $deals = Deal::whereIn('agent_id', function ($query) use ($company) { $query->select('id'); $query->from('agents'); $query->where('company_id', $company->id); }); } elseif ($agent = Agent::where('user_id', $user->id)->first()) { $deals = Deal::where('agent_id', $agent->id); } if (array_key_exists('status', $this->filter)) { $deals->where('status', $this->filter['status']); } if (array_key_exists('complexes', $this->filter)) { $complexes = []; foreach ($this->filter['complexes'] as $selectedComplex) { $complexes[] = $selectedComplex['id']; } $deals->whereIn('complex_id', $complexes); } if (!$deals) { return Client::where('id', 0); } return $deals; } function getClients() { $deals = $this->getDeals(); $clients = Client::join('deal_clients', 'users.id', '=', 'deal_clients.client_id') ->whereIn('users.id', function ($query) use ($deals) { $query->select('client_id') ->from('deal_clients') ->whereIn('deal_id', $deals->get()->pluck('id')); }) ->orderBy('deal_clients.id', 'desc') ->with('deals'); $clients = $clients->select('users.*'); $clients = $clients->orderBy('name'); if (array_key_exists('search', $this->filter) && $searchString = trim($this->filter['search'])) { $clients->whereFullText(['name', 'phone', 'email'], $this->filter['search']); } if (array_key_exists('status', $this->filter) && $this->status == DealStatus::UNIQUE) { $clients = $clients->whereHas('deals', function ($query) { $query->where('status', DealStatus::UNIQUE); }); } elseif (array_key_exists('status', $this->filter) && $this->status == DealStatus::NOT_UNIQUE) { $clients = $clients->whereHas('deals', function ($query) { $query->whereIn('status', [DealStatus::MODERATION, DealStatus::NEW , DealStatus::NOT_UNIQUE]); }); } //$clients = $clients->skip($this->currentPage)->take(10)->get(); return $clients; } public function render() { $clients = $this->getClients(); if ($this->clientsCount != $clients->count()) { $this->clientsCount = $clients->count(); $this->currentPage = 1; }; $clients = $clients->skip(($this->currentPage - 1) * $this->count)->take($this->count)->get(); return view( 'livewire.clients-table', [ 'clients' => $clients, 'statuses' => DealStatus::class ] ); } }