From a3280091c58f25047e3ecccd865bcf480a4a01b0 Mon Sep 17 00:00:00 2001 From: Thekindbull Date: Tue, 2 Sep 2025 10:11:29 +0800 Subject: [PATCH] clients table updated --- app/Livewire/ClientsTable.php | 65 +++++++++--- app/Models/Deal/Client.php | 30 ++++++ .../Http/Controllers/ContractsController.php | 1 - app/Modules/Contracts/Views/index.blade.php | 15 +++ .../livewire/clients-table.blade copy.php | 70 +++++++++++++ .../views/livewire/clients-table.blade.php | 99 +++++++++---------- 6 files changed, 212 insertions(+), 68 deletions(-) create mode 100644 app/Models/Deal/Client.php create mode 100644 resources/views/livewire/clients-table.blade copy.php diff --git a/app/Livewire/ClientsTable.php b/app/Livewire/ClientsTable.php index 5fdcbfa..3a02df4 100644 --- a/app/Livewire/ClientsTable.php +++ b/app/Livewire/ClientsTable.php @@ -6,12 +6,12 @@ use Livewire\WithPagination; use Livewire\WithoutUrlPagination; +use App\Models\User; use App\Models\Agent\Agent; use App\Models\Company\CompanyAdmin; use App\Models\Deal\Deal; - use App\Models\Deal\DealStatus; - +use App\Models\Deal\Client; class ClientsTable extends Component { use WithPagination, WithoutUrlPagination; @@ -32,48 +32,85 @@ public function getDeals() $deals = false; $user = auth()->user(); + $clients = false; + if ($admin = CompanyAdmin::where('user_id', $user->id)->first()) { - $deals = Deal::whereIn('agent_id', function ($query) use ($admin) + /*$deals = Deal::whereIn('agent_id', function ($query) use ($admin) { $query->select('id'); $query->from('agents'); $query->where('company_id', $admin->company_id); + });*/ + $agentsOfCompany = Agent::where('company_id', $admin->company_id)->get()->pluck('id'); + $clients = Client::whereIn('id', function ($query) use ($agentsOfCompany) + { + $query->select('client_id') + ->from('deals') + ->whereIn('agent_id', $agentsOfCompany); }); } elseif ($agent = Agent::where('user_id', $user->id)->first()) { - $deals = Deal::where('agent_id', $agent->id); + //$deals = Deal::where('agent_id', $agent->id); + + $clients = Client::whereIn('id', function ($query) use ($agent) + { + $query->select('client_id') + ->from('deals') + ->where('agent_id', $agent->id); + + }); } - return $deals; + $clients = $clients->orderBy('name'); + return $clients; } public function render() { - $deals = $this->getDeals(); + $clients = $this->getDeals(); if ($this->status && $this->status == DealStatus::UNIQUE) { - $deals = $deals + /*$deals = $deals ->whereIn('status', [DealStatus::UNIQUE]) - ->orderBy('id', 'desc')->paginate($this->count, ['*'], 'unique_clients'); + ->orderBy('id', 'desc')->paginate($this->count, ['*'], 'unique_clients');*/ + $clients = $clients->whereHas('deals', function ($query) + { + $query->where('status', DealStatus::UNIQUE); + })->paginate($this->count, ['*'], 'unique_clients'); + + } elseif ($this->status && $this->status == DealStatus::NOT_UNIQUE) { - $deals = $deals + /*$deals = $deals ->whereIn('status', [DealStatus::MODERATION, DealStatus::NEW , DealStatus::NOT_UNIQUE]) - ->orderBy('id', 'desc')->paginate($this->count, ['*'], 'not_unique_clients'); + ->orderBy('id', 'desc')->paginate($this->count, ['*'], 'not_unique_clients');*/ + $clients = $clients->whereHas('deals', function ($query) + { + $query->whereIn('status', [DealStatus::MODERATION, DealStatus::NEW , DealStatus::NOT_UNIQUE]); + })->paginate($this->count, ['*'], 'not_unique_clients'); } else { - $deals = $deals->orderBy('id', 'desc')->paginate($this->count, ['*'], 'all_clients'); + /*$deals = $deals->orderBy('id', 'desc')->paginate($this->count, ['*'], 'all_clients');*/ + $clients = $clients->paginate($this->count, ['*'], 'all_clients'); } - ; - return view( 'livewire.clients-table', [ - 'deals' => $deals, + 'clients' => $clients, 'statuses' => DealStatus::class ] ); } + function getClients() + { + /*$clients = User::whereIn('id', function ($query) + { + + });*/ + $clients = false; + //$clients = Client::ofAgent(); + return $clients; + } } diff --git a/app/Models/Deal/Client.php b/app/Models/Deal/Client.php new file mode 100644 index 0000000..52c7727 --- /dev/null +++ b/app/Models/Deal/Client.php @@ -0,0 +1,30 @@ +hasMany(Deal::class, 'client_id'); + } + + public function dealsWithContracts() + { + return $this->hasMany(Deal::class, 'client_id')->whereHas('contracts'); + } + public function ofAgent(Agent $agent) + { + return $this->deals->where('agent_id', $agent->id); + } +} diff --git a/app/Modules/Contracts/Http/Controllers/ContractsController.php b/app/Modules/Contracts/Http/Controllers/ContractsController.php index 0b663ac..ab3b12a 100644 --- a/app/Modules/Contracts/Http/Controllers/ContractsController.php +++ b/app/Modules/Contracts/Http/Controllers/ContractsController.php @@ -24,7 +24,6 @@ public function index(Request $request) { $filter = $request->filter; } - return view('contracts::index', [ 'mode' => $mode, 'filter' => $filter diff --git a/app/Modules/Contracts/Views/index.blade.php b/app/Modules/Contracts/Views/index.blade.php index c0c885a..9745416 100644 --- a/app/Modules/Contracts/Views/index.blade.php +++ b/app/Modules/Contracts/Views/index.blade.php @@ -3,6 +3,21 @@
+ $filterValue) { + if (!is_array($filterValue)) { + $filterFormArray['filter[' . $key . ']'] = $filterValue; + } else { + foreach ($filterValue as $num => $value) { + $filterFormArray['filter[' . $key . '][' . $num . ']'] = $value; + } + } + } + ?> + @foreach ($filterFormArray as $key => $filterValue) + + @endforeach diff --git a/resources/views/livewire/clients-table.blade copy.php b/resources/views/livewire/clients-table.blade copy.php new file mode 100644 index 0000000..b81df7c --- /dev/null +++ b/resources/views/livewire/clients-table.blade copy.php @@ -0,0 +1,70 @@ +
+
+ @if ($deals->count() == 0) +
Нет данных для отображения
+ @endif + + + @php($clientId = false) + @php($dealsCountForClient = 0) + @foreach ($deals as $deal) + + + + @if ($mode == 'full') + + + + + @if ($deal->contract) + + @else + + @endif + @endif + + @endforeach + +
+ {{ $deal->user->name }} + @if ($deal->status == $statuses::MODERATION) +
+ + На проверке уникальности + +
+ @endif +
+ {{ $deal->user->phone }} + + {{ $deal->user->email }} + + {{ $deal->complex->city->name }} + + + + + + + + + + + + + + +
+
+ @if ($mode == 'full') +
+ {{ $deals->links('vendor.pagination.bootstrap-5', ['scrollTo' => false]) }} +
+ @endif +
diff --git a/resources/views/livewire/clients-table.blade.php b/resources/views/livewire/clients-table.blade.php index 57ba1e9..0dd55f4 100644 --- a/resources/views/livewire/clients-table.blade.php +++ b/resources/views/livewire/clients-table.blade.php @@ -1,68 +1,61 @@
- @if ($deals->count() == 0) + @if ($clients->count() == 0)
Нет данных для отображения
@endif - - - @foreach ($deals as $deal) - - - - @if ($mode == 'full') - - - - - @if ($deal->contract) - - @else - @endif - @endif - - @endforeach - -
- {{ $deal->user->name }} - @if ($deal->status == $statuses::MODERATION) -
- - На проверке уникальности - -
- @endif -
- {{ $deal->user->phone }} - - {{ $deal->user->email }} - - {{ $deal->complex->city->name }} - - + - - - - - - - -
+
+ @endif +
+ @endforeach +
@if ($mode == 'full')
- {{ $deals->links('vendor.pagination.bootstrap-5', ['scrollTo' => false]) }} + {{ $clients->links('vendor.pagination.bootstrap-5', ['scrollTo' => false]) }}
@endif