From 6ce76cd0a61fc6559dc5e97d4d1002e01300d2d4 Mon Sep 17 00:00:00 2001 From: Andrew Drake Date: Sun, 25 Aug 2024 11:14:36 +1000 Subject: [PATCH] Fixed search --- CHANGELOG.md | 14 +++++-- config/package.php | 2 +- .../views/deals/partials/card-board.blade.php | 4 +- .../views/leads/partials/card-board.blade.php | 2 +- .../quotes/partials/card-board.blade.php | 4 +- src/Http/Controllers/DealController.php | 40 ++++++++++-------- src/Http/Controllers/DeliveryController.php | 11 ++++- src/Http/Controllers/InvoiceController.php | 11 ++++- src/Http/Controllers/LeadController.php | 41 +++++++++++-------- src/Http/Controllers/OrderController.php | 11 ++++- .../Controllers/PurchaseOrderController.php | 11 ++++- src/Http/Controllers/QuoteController.php | 40 ++++++++++-------- src/Http/Livewire/LiveDealBoard.php | 25 +++++------ src/Http/Livewire/LiveLeadBoard.php | 26 ++++++------ src/Http/Livewire/LiveQuoteBoard.php | 25 +++++------ 15 files changed, 161 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 102ca745..65153a24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,17 +12,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - SMS - Payments - -## 1.2.1 - 2023-08-24 +## 1.2.2 - 2024-08-25 +### Fixed +- Kanban board search +- Search when not using encrypted fields +- Bug when custom field has been deleted + +## 1.2.1 - 24-08-24 ### Fixed - Force seed pipeline settings -## 1.2.0 - 2023-08-24 +## 1.2.0 - 2024-08-24 ### Added - Kanban boards - Custom Fields @@ -38,7 +44,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - But when added organization - Version check -## 1.1.0 - 2023-06-17 +## 1.1.0 - 2024-06-17 ### Added - Support for Laravel 11 - Product barcode diff --git a/config/package.php b/config/package.php index a709c65d..fbdadb84 100644 --- a/config/package.php +++ b/config/package.php @@ -13,6 +13,6 @@ | */ - 'version' => '1.2.1', + 'version' => '1.2.2', ]; diff --git a/resources/views/deals/partials/card-board.blade.php b/resources/views/deals/partials/card-board.blade.php index 16b83ca4..6eb09073 100644 --- a/resources/views/deals/partials/card-board.blade.php +++ b/resources/views/deals/partials/card-board.blade.php @@ -22,8 +22,8 @@ @endcomponent @component('laravel-crm::components.card-table') - - + + @endcomponent diff --git a/resources/views/leads/partials/card-board.blade.php b/resources/views/leads/partials/card-board.blade.php index b7c6f368..29408b8d 100644 --- a/resources/views/leads/partials/card-board.blade.php +++ b/resources/views/leads/partials/card-board.blade.php @@ -23,7 +23,7 @@ @component('laravel-crm::components.card-table') - + @endcomponent diff --git a/resources/views/quotes/partials/card-board.blade.php b/resources/views/quotes/partials/card-board.blade.php index 1ec8cfb2..26a6d2d1 100644 --- a/resources/views/quotes/partials/card-board.blade.php +++ b/resources/views/quotes/partials/card-board.blade.php @@ -22,8 +22,8 @@ @endcomponent @component('laravel-crm::components.card-table') - - + + @endcomponent diff --git a/src/Http/Controllers/DealController.php b/src/Http/Controllers/DealController.php index 839c834c..e963e3ed 100644 --- a/src/Http/Controllers/DealController.php +++ b/src/Http/Controllers/DealController.php @@ -285,15 +285,6 @@ public function search(Request $request) { $viewSetting = auth()->user()->crmSettings()->where('name', 'view_deals')->first(); - if(! $viewSetting) { - auth()->user()->crmSettings()->create([ - 'name' => 'view_deals', - 'value' => 'list', - ]); - } elseif($viewSetting->value == 'board') { - return redirect(route('laravel-crm.deals.board')); - } - $searchValue = Deal::searchValue($request); if (! $searchValue || trim($searchValue) == '') { @@ -318,8 +309,15 @@ public function search(Request $request) foreach ($record->getSearchable() as $field) { if (Str::contains($field, '.')) { $field = explode('.', $field); - if ($record->{$field[1]} && $descryptedField = decrypt($record->{$field[1]})) { - if (Str::contains(strtolower($descryptedField), strtolower($searchValue))) { + + if(config('laravel-crm.encrypt_db_fields')) { + $relatedField = decrypt($record->{$field[1]}); + } else { + $relatedField = $record->{$field[1]}; + } + + if ($record->{$field[1]} && $relatedField) { + if (Str::contains(strtolower($relatedField), strtolower($searchValue))) { return $record; } } @@ -331,12 +329,20 @@ public function search(Request $request) } }); - return view('laravel-crm::deals.index', [ - 'deals' => $deals, - 'searchValue' => $searchValue ?? null, - 'viewSetting' => $viewSetting->value ?? null, - 'pipeline' => Pipeline::where('model', get_class(new Deal()))->first(), - ]); + if($viewSetting->value === 'board') { + return view('laravel-crm::deals.board', [ + 'deals' => $deals, + 'searchValue' => $searchValue ?? null, + 'viewSetting' => $viewSetting->value ?? null + ]); + } else { + return view('laravel-crm::deals.index', [ + 'deals' => $deals, + 'searchValue' => $searchValue ?? null, + 'viewSetting' => $viewSetting->value ?? null, + 'pipeline' => Pipeline::where('model', get_class(new Deal()))->first(), + ]); + } } /** diff --git a/src/Http/Controllers/DeliveryController.php b/src/Http/Controllers/DeliveryController.php index a550abff..c576a5b2 100644 --- a/src/Http/Controllers/DeliveryController.php +++ b/src/Http/Controllers/DeliveryController.php @@ -240,8 +240,15 @@ public function search(Request $request) foreach ($record->getSearchable() as $field) { if (Str::contains($field, '.')) { $field = explode('.', $field); - if ($record->{$field[1]} && $descryptedField = decrypt($record->{$field[1]})) { - if (Str::contains(strtolower($descryptedField), strtolower($searchValue))) { + + if(config('laravel-crm.encrypt_db_fields')) { + $relatedField = decrypt($record->{$field[1]}); + } else { + $relatedField = $record->{$field[1]}; + } + + if ($record->{$field[1]} && $relatedField) { + if (Str::contains(strtolower($relatedField), strtolower($searchValue))) { return $record; } } diff --git a/src/Http/Controllers/InvoiceController.php b/src/Http/Controllers/InvoiceController.php index d0a52c31..2be68270 100644 --- a/src/Http/Controllers/InvoiceController.php +++ b/src/Http/Controllers/InvoiceController.php @@ -254,8 +254,15 @@ public function search(Request $request) foreach ($record->getSearchable() as $field) { if (Str::contains($field, '.')) { $field = explode('.', $field); - if ($record->{$field[1]} && $descryptedField = decrypt($record->{$field[1]})) { - if (Str::contains(strtolower($descryptedField), strtolower($searchValue))) { + + if(config('laravel-crm.encrypt_db_fields')) { + $relatedField = decrypt($record->{$field[1]}); + } else { + $relatedField = $record->{$field[1]}; + } + + if ($record->{$field[1]} && $relatedField) { + if (Str::contains(strtolower($relatedField), strtolower($searchValue))) { return $record; } } diff --git a/src/Http/Controllers/LeadController.php b/src/Http/Controllers/LeadController.php index 0a5d66e5..899135f3 100644 --- a/src/Http/Controllers/LeadController.php +++ b/src/Http/Controllers/LeadController.php @@ -74,7 +74,6 @@ public function index(Request $request) $leads = Lead::filter($params)->whereNull('converted_at')->latest()->paginate(30); } - return view('laravel-crm::leads.index', [ 'leads' => $leads, 'viewSetting' => $viewSetting->value ?? null, @@ -280,15 +279,6 @@ public function search(Request $request) { $viewSetting = auth()->user()->crmSettings()->where('name', 'view_leads')->first(); - if(! $viewSetting) { - auth()->user()->crmSettings()->create([ - 'name' => 'view_leads', - 'value' => 'list', - ]); - } elseif($viewSetting->value == 'board') { - return redirect(route('laravel-crm.leads.board')); - } - $searchValue = Lead::searchValue($request); if (! $searchValue || trim($searchValue) == '') { @@ -314,8 +304,15 @@ public function search(Request $request) foreach ($record->getSearchable() as $field) { if (Str::contains($field, '.')) { $field = explode('.', $field); - if ($record->{$field[1]} && $descryptedField = decrypt($record->{$field[1]})) { - if (Str::contains(strtolower($descryptedField), strtolower($searchValue))) { + + if(config('laravel-crm.encrypt_db_fields')) { + $relatedField = decrypt($record->{$field[1]}); + } else { + $relatedField = $record->{$field[1]}; + } + + if ($record->{$field[1]} && $relatedField) { + if (Str::contains(strtolower($relatedField), strtolower($searchValue))) { return $record; } } @@ -327,12 +324,20 @@ public function search(Request $request) } }); - return view('laravel-crm::leads.index', [ - 'leads' => $leads, - 'searchValue' => $searchValue ?? null, - 'viewSetting' => $viewSetting->value ?? null, - 'pipeline' => Pipeline::where('model', get_class(new Lead()))->first(), - ]); + if($viewSetting->value === 'board') { + return view('laravel-crm::leads.board', [ + 'leads' => $leads, + 'searchValue' => $searchValue ?? null, + 'viewSetting' => $viewSetting->value ?? null + ]); + } else { + return view('laravel-crm::leads.index', [ + 'leads' => $leads, + 'searchValue' => $searchValue ?? null, + 'viewSetting' => $viewSetting->value ?? null, + 'pipeline' => Pipeline::where('model', get_class(new Lead()))->first(), + ]); + } } /** diff --git a/src/Http/Controllers/OrderController.php b/src/Http/Controllers/OrderController.php index 317fc63f..ed9d79aa 100644 --- a/src/Http/Controllers/OrderController.php +++ b/src/Http/Controllers/OrderController.php @@ -344,8 +344,15 @@ public function search(Request $request) foreach ($record->getSearchable() as $field) { if (Str::contains($field, '.')) { $field = explode('.', $field); - if ($record->{$field[1]} && $descryptedField = decrypt($record->{$field[1]})) { - if (Str::contains(strtolower($descryptedField), strtolower($searchValue))) { + + if(config('laravel-crm.encrypt_db_fields')) { + $relatedField = decrypt($record->{$field[1]}); + } else { + $relatedField = $record->{$field[1]}; + } + + if ($record->{$field[1]} && $relatedField) { + if (Str::contains(strtolower($relatedField), strtolower($searchValue))) { return $record; } } diff --git a/src/Http/Controllers/PurchaseOrderController.php b/src/Http/Controllers/PurchaseOrderController.php index 18c02057..62df5ef0 100644 --- a/src/Http/Controllers/PurchaseOrderController.php +++ b/src/Http/Controllers/PurchaseOrderController.php @@ -316,8 +316,15 @@ public function search(Request $request) foreach ($record->getSearchable() as $field) { if (Str::contains($field, '.')) { $field = explode('.', $field); - if ($record->{$field[1]} && $descryptedField = decrypt($record->{$field[1]})) { - if (Str::contains(strtolower($descryptedField), strtolower($searchValue))) { + + if(config('laravel-crm.encrypt_db_fields')) { + $relatedField = decrypt($record->{$field[1]}); + } else { + $relatedField = $record->{$field[1]}; + } + + if ($record->{$field[1]} && $relatedField) { + if (Str::contains(strtolower($relatedField), strtolower($searchValue))) { return $record; } } diff --git a/src/Http/Controllers/QuoteController.php b/src/Http/Controllers/QuoteController.php index cc34935a..be95219e 100644 --- a/src/Http/Controllers/QuoteController.php +++ b/src/Http/Controllers/QuoteController.php @@ -305,15 +305,6 @@ public function search(Request $request) { $viewSetting = auth()->user()->crmSettings()->where('name', 'view_quotes')->first(); - if(! $viewSetting) { - auth()->user()->crmSettings()->create([ - 'name' => 'view_quotes', - 'value' => 'list', - ]); - } elseif($viewSetting->value == 'board') { - return redirect(route('laravel-crm.quotes.board')); - } - $searchValue = Quote::searchValue($request); if (! $searchValue || trim($searchValue) == '') { @@ -339,8 +330,15 @@ public function search(Request $request) foreach ($record->getSearchable() as $field) { if (Str::contains($field, '.')) { $field = explode('.', $field); - if ($record->{$field[1]} && $descryptedField = decrypt($record->{$field[1]})) { - if (Str::contains(strtolower($descryptedField), strtolower($searchValue))) { + + if(config('laravel-crm.encrypt_db_fields')) { + $relatedField = decrypt($record->{$field[1]}); + } else { + $relatedField = $record->{$field[1]}; + } + + if ($record->{$field[1]} && $relatedField) { + if (Str::contains(strtolower($relatedField), strtolower($searchValue))) { return $record; } } @@ -352,12 +350,20 @@ public function search(Request $request) } }); - return view('laravel-crm::quotes.index', [ - 'quotes' => $quotes, - 'searchValue' => $searchValue ?? null, - 'viewSetting' => $viewSetting->value ?? null, - 'pipeline' => Pipeline::where('model', get_class(new Quote()))->first(), - ]); + if($viewSetting->value === 'board') { + return view('laravel-crm::quotes.board', [ + 'quotes' => $quotes, + 'searchValue' => $searchValue ?? null, + 'viewSetting' => $viewSetting->value ?? null + ]); + } else { + return view('laravel-crm::quotes.index', [ + 'quotes' => $quotes, + 'searchValue' => $searchValue ?? null, + 'viewSetting' => $viewSetting->value ?? null, + 'pipeline' => Pipeline::where('model', get_class(new Quote()))->first(), + ]); + } } /** diff --git a/src/Http/Livewire/LiveDealBoard.php b/src/Http/Livewire/LiveDealBoard.php index a5720c59..d234cbce 100644 --- a/src/Http/Livewire/LiveDealBoard.php +++ b/src/Http/Livewire/LiveDealBoard.php @@ -11,6 +11,8 @@ class LiveDealBoard extends KanbanBoard { public $model = 'deal'; + public $deals; + public function stages(): Collection { if($pipeline = Pipeline::where('model', get_class(new Deal()))->first()) { @@ -30,17 +32,16 @@ public function onStageChanged($recordId, $stageId, $fromOrderedIds, $toOrderedI public function records(): Collection { - return Deal::get() - ->map(function (Deal $deal) { - return [ - 'id' => $deal->id, - 'title' => $deal->title, - 'labels' => $deal->labels, - 'stage' => $deal->pipelineStage->id ?? $this->firstStageId(), - 'number' => $deal->deal_id, - 'amount' => $deal->amount, - 'currency' => $deal->currency, - ]; - }); + return $this->deals->map(function (Deal $deal) { + return [ + 'id' => $deal->id, + 'title' => $deal->title, + 'labels' => $deal->labels, + 'stage' => $deal->pipelineStage->id ?? $this->firstStageId(), + 'number' => $deal->deal_id, + 'amount' => $deal->amount, + 'currency' => $deal->currency, + ]; + }); } } diff --git a/src/Http/Livewire/LiveLeadBoard.php b/src/Http/Livewire/LiveLeadBoard.php index acd798d9..a515f0c6 100644 --- a/src/Http/Livewire/LiveLeadBoard.php +++ b/src/Http/Livewire/LiveLeadBoard.php @@ -10,6 +10,9 @@ class LiveLeadBoard extends KanbanBoard { public $model = 'lead'; + + public $leads; + public function stages(): Collection { if($pipeline = Pipeline::where('model', get_class(new Lead()))->first()) { @@ -29,17 +32,16 @@ public function onStageChanged($recordId, $stageId, $fromOrderedIds, $toOrderedI public function records(): Collection { - return Lead::get() - ->map(function (Lead $lead) { - return [ - 'id' => $lead->id, - 'title' => $lead->title, - 'labels' => $lead->labels, - 'stage' => $lead->pipelineStage->id ?? $this->firstStageId(), - 'number' => $lead->lead_id, - 'amount' => $lead->amount, - 'currency' => $lead->currency, - ]; - }); + return $this->leads->map(function (Lead $lead) { + return [ + 'id' => $lead->id, + 'title' => $lead->title, + 'labels' => $lead->labels, + 'stage' => $lead->pipelineStage->id ?? $this->firstStageId(), + 'number' => $lead->lead_id, + 'amount' => $lead->amount, + 'currency' => $lead->currency, + ]; + }); } } diff --git a/src/Http/Livewire/LiveQuoteBoard.php b/src/Http/Livewire/LiveQuoteBoard.php index c7d1a2d3..0449f066 100644 --- a/src/Http/Livewire/LiveQuoteBoard.php +++ b/src/Http/Livewire/LiveQuoteBoard.php @@ -11,6 +11,8 @@ class LiveQuoteBoard extends KanbanBoard { public $model = 'quote'; + public $quotes; + public function stages(): Collection { if($pipeline = Pipeline::where('model', get_class(new Quote()))->first()) { @@ -30,17 +32,16 @@ public function onStageChanged($recordId, $stageId, $fromOrderedIds, $toOrderedI public function records(): Collection { - return Quote::get() - ->map(function (Quote $quote) { - return [ - 'id' => $quote->id, - 'title' => $quote->title, - 'labels' => $quote->labels, - 'stage' => $quote->pipelineStage->id ?? $this->firstStageId(), - 'number' => $quote->quote_id, - 'amount' => $quote->total, - 'currency' => $quote->currency, - ]; - }); + return $this->quotes->map(function (Quote $quote) { + return [ + 'id' => $quote->id, + 'title' => $quote->title, + 'labels' => $quote->labels, + 'stage' => $quote->pipelineStage->id ?? $this->firstStageId(), + 'number' => $quote->quote_id, + 'amount' => $quote->total, + 'currency' => $quote->currency, + ]; + }); } }