From 4fb2e4b7da365fbcd7c611d40baefb88bca9398b Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Tue, 6 Feb 2024 17:37:30 -0400 Subject: [PATCH 1/8] Get default columns from saved search --- .../Http/Controllers/RequestController.php | 15 ++++++++++++++- .../js/requests/components/RequestsListing.vue | 3 ++- resources/js/requests/index.js | 3 ++- resources/views/requests/index.blade.php | 3 ++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/ProcessMaker/Http/Controllers/RequestController.php b/ProcessMaker/Http/Controllers/RequestController.php index 6f03db4b49..ed4d43d82e 100644 --- a/ProcessMaker/Http/Controllers/RequestController.php +++ b/ProcessMaker/Http/Controllers/RequestController.php @@ -22,6 +22,8 @@ use ProcessMaker\Models\ScreenVersion; use ProcessMaker\Models\UserResourceView; use ProcessMaker\Package\PackageComments\PackageServiceProvider; +use ProcessMaker\Package\SavedSearch\Http\Controllers\SavedSearchController; +use ProcessMaker\Package\SavedSearch\Models\SavedSearch; use ProcessMaker\RetryProcessRequest; use ProcessMaker\Traits\HasControllerAddons; use ProcessMaker\Traits\SearchAutocompleteTrait; @@ -61,8 +63,19 @@ public function index($type = null) $userFilter = SaveSession::getConfigFilter('requestFilter', Auth::user()); + // Get default Saved search config + $defaultSavedSearch = SavedSearch::firstSystemSearchFor( + Auth::user(), + SavedSearch::KEY_REQUESTS, + ); + if ($defaultSavedSearch) { + $defaultColumns = SavedSearchController::adjustColumnsOf($defaultSavedSearch->columns); + } else { + $defaultColumns = null; + } + return view('requests.index', compact( - ['type', 'title', 'currentUser', 'userFilter'] + ['type', 'title', 'currentUser', 'userFilter', 'defaultColumns'] )); } diff --git a/resources/js/requests/components/RequestsListing.vue b/resources/js/requests/components/RequestsListing.vue index d1b3bf72ca..740b16a858 100644 --- a/resources/js/requests/components/RequestsListing.vue +++ b/resources/js/requests/components/RequestsListing.vue @@ -367,7 +367,8 @@ export default { }, }; }, - transform(data) { + transform(dataInput) { + const data = _.cloneDeep(dataInput); // Clean up fields for meta pagination so vue table pagination can understand data.meta.last_page = data.meta.total_pages; data.meta.from = (data.meta.current_page - 1) * data.meta.per_page; diff --git a/resources/js/requests/index.js b/resources/js/requests/index.js index e05d764b79..b370e815a5 100644 --- a/resources/js/requests/index.js +++ b/resources/js/requests/index.js @@ -12,6 +12,7 @@ new Vue({ CounterCard, CounterCardGroup, RequestsListing }, data: { + columns: window.Processmaker.defaultColumns || [], filter: "", pmql: "", urlPmql: "", @@ -22,7 +23,7 @@ new Vue({ additions: [], }, created() { - const params = {}; + let status; switch (Processmaker.status) { case "": diff --git a/resources/views/requests/index.blade.php b/resources/views/requests/index.blade.php index 285fd97b53..518fa8c39f 100644 --- a/resources/views/requests/index.blade.php +++ b/resources/views/requests/index.blade.php @@ -93,7 +93,7 @@ function() use ($title) { return [__($title), null]; } - + @@ -110,6 +110,7 @@ function() use ($title) { return [__($title), null]; } window.Processmaker.user = @json($currentUser); window.Processmaker.status = '{{ $type }}'; window.Processmaker.filter_user = @json($userFilter); + window.Processmaker.defaultColumns = @json($defaultColumns); @endsection From ab8f19533d775441b98406fb170d22b8276d424b Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Tue, 6 Feb 2024 17:37:42 -0400 Subject: [PATCH 2/8] Setup columns --- resources/js/components/shared/Column.vue | 4 ++-- resources/js/components/shared/ColumnConfig.vue | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/resources/js/components/shared/Column.vue b/resources/js/components/shared/Column.vue index 95350fe072..8f068d236c 100644 --- a/resources/js/components/shared/Column.vue +++ b/resources/js/components/shared/Column.vue @@ -10,7 +10,7 @@ {{ item.label }}
- +
@@ -22,7 +22,7 @@ import DataFormats from '../../data-formats'; export default { - props: ["column","withoutConfig","withoutRemove","withoutFormat"], + props: ["column","withoutConfig","withoutRemove","withoutFormat","forceEnableConfig"], data() { return { item: this.column diff --git a/resources/js/components/shared/ColumnConfig.vue b/resources/js/components/shared/ColumnConfig.vue index 2a6c1c182e..e5e0d80ad6 100644 --- a/resources/js/components/shared/ColumnConfig.vue +++ b/resources/js/components/shared/ColumnConfig.vue @@ -10,16 +10,16 @@ - + - + - + {{ $t('Sortable') }} @@ -44,6 +44,12 @@ export default { DataFormatSelector, DataMaskSelector }, + props: { + editOnlyLabel: { + type: Boolean, + default: false, + }, + }, data() { return { disabled: true, From 900c5fb26ff39b429b215b381fee7c69ad473355 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Tue, 6 Feb 2024 17:54:57 -0400 Subject: [PATCH 3/8] Config column properties --- resources/js/components/shared/ColumnConfig.vue | 8 +++++--- resources/js/components/shared/DataFormatSelector.vue | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/resources/js/components/shared/ColumnConfig.vue b/resources/js/components/shared/ColumnConfig.vue index e5e0d80ad6..6c2dbfc225 100644 --- a/resources/js/components/shared/ColumnConfig.vue +++ b/resources/js/components/shared/ColumnConfig.vue @@ -10,16 +10,16 @@ - + - + - + {{ $t('Sortable') }} @@ -108,6 +108,7 @@ export default { onShow() { this.index = this.$parent.columnToConfig.index; + this.original.default = this.$parent.columnToConfig.data.default; this.original.label = this.$parent.columnToConfig.data.label; this.original.field = this.$parent.columnToConfig.data.field; this.original.sortable = this.$parent.columnToConfig.data.sortable; @@ -120,6 +121,7 @@ export default { this.title = this.$t('Configure {{name}}', {name: this.original.label}); } + this.column.default = this.original.default; this.column.label = this.original.label; this.column.field = this.original.field; this.column.sortable = this.original.sortable; diff --git a/resources/js/components/shared/DataFormatSelector.vue b/resources/js/components/shared/DataFormatSelector.vue index bd3219e812..50bb1ff9e0 100644 --- a/resources/js/components/shared/DataFormatSelector.vue +++ b/resources/js/components/shared/DataFormatSelector.vue @@ -11,6 +11,7 @@ :searchable="true" :internal-search="true" :allow-empty="false" + :disabled="disabled" > @@ -24,7 +25,11 @@ export default { value: { type: String, default: 'string' - } + }, + disabled: { + type: Boolean, + default: false, + }, }, data() { return { From 792d589e4f49735a8bde8476f4d771ce2eb28188 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 7 Feb 2024 14:26:39 -0400 Subject: [PATCH 4/8] Add button to edit default request list --- resources/views/requests/index.blade.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/resources/views/requests/index.blade.php b/resources/views/requests/index.blade.php index 518fa8c39f..b28bf8dd12 100644 --- a/resources/views/requests/index.blade.php +++ b/resources/views/requests/index.blade.php @@ -89,6 +89,14 @@ function() use ($title) { return [__($title), null]; } + + From 5dd528cc059952e5bf0238c81e204e073264021a Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 7 Feb 2024 15:15:35 -0400 Subject: [PATCH 5/8] When columns is null show the default columns --- resources/js/requests/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/requests/index.js b/resources/js/requests/index.js index b370e815a5..00d6322f96 100644 --- a/resources/js/requests/index.js +++ b/resources/js/requests/index.js @@ -12,7 +12,7 @@ new Vue({ CounterCard, CounterCardGroup, RequestsListing }, data: { - columns: window.Processmaker.defaultColumns || [], + columns: window.Processmaker.defaultColumns || null, filter: "", pmql: "", urlPmql: "", From ad3991e5f338cb7b217d6d92c9b73ba5b3005b6b Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 7 Feb 2024 15:30:10 -0400 Subject: [PATCH 6/8] Fix code smells --- resources/views/requests/index.blade.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/resources/views/requests/index.blade.php b/resources/views/requests/index.blade.php index b28bf8dd12..332af5df2b 100644 --- a/resources/views/requests/index.blade.php +++ b/resources/views/requests/index.blade.php @@ -91,7 +91,10 @@ function() use ($title) { return [__($title), null]; } + - + @@ -82,6 +104,7 @@ @section('js') @endsection From 3c2cd94fed9fc505f95e8d8fb2c6fcc06a072cd3 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Thu, 8 Feb 2024 07:19:32 -0400 Subject: [PATCH 8/8] Fix advanced filter and order --- .../Http/Controllers/Api/TaskController.php | 22 +++++++++++++++++++ .../requests/components/RequestsListing.vue | 2 +- resources/js/tasks/components/TasksList.vue | 6 ++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/ProcessMaker/Http/Controllers/Api/TaskController.php b/ProcessMaker/Http/Controllers/Api/TaskController.php index d4b0321ea9..16506b0855 100644 --- a/ProcessMaker/Http/Controllers/Api/TaskController.php +++ b/ProcessMaker/Http/Controllers/Api/TaskController.php @@ -185,8 +185,30 @@ public function index(Request $request, $getTotal = false, User $user = null) // order by one or more columns $orderColumns = explode(',', $request->input('order_by', 'updated_at')); foreach ($orderColumns as $column) { + $parts = explode('.', $column); + $table = count($parts) > 1 ? array_shift($parts) : 'process_request_tokens'; + $columnName = array_pop($parts); if (!Str::contains($column, '.')) { $query->orderBy($column, $request->input('order_direction', 'asc')); + } elseif ($table === 'process_request' || $table === 'processRequest') { + if ($columnName === 'id') { + $query->orderBy( + 'process_request_id', + $request->input('order_direction', 'asc') + ); + } else { + // Raw sort by (select column from process_requests ...) + $query->orderBy( + DB::raw("(select + $columnName + from + process_requests + where + process_requests.id = process_request_tokens.process_request_id + )"), + $request->input('order_direction', 'asc') + ); + } } } diff --git a/resources/js/requests/components/RequestsListing.vue b/resources/js/requests/components/RequestsListing.vue index 740b16a858..cffc8440a6 100644 --- a/resources/js/requests/components/RequestsListing.vue +++ b/resources/js/requests/components/RequestsListing.vue @@ -503,7 +503,7 @@ export default { */ storeFilterConfiguration() { let url = "users/store_filter_configuration/requestFilter"; - if (this.$props.columns) { + if (this.$props.columns && this.savedSearch) { url = "saved-searches/" + this.savedSearch + "/advanced-filters"; } let config = { diff --git a/resources/js/tasks/components/TasksList.vue b/resources/js/tasks/components/TasksList.vue index e1400c4057..c9a9590ddc 100644 --- a/resources/js/tasks/components/TasksList.vue +++ b/resources/js/tasks/components/TasksList.vue @@ -242,6 +242,10 @@ export default { //format Status record["case_number"] = this.formatCaseNumber(record.process_request, record); record["case_title"] = this.formatCaseTitle(record.process_request, record); + if (record.process_request) { + record.process_request["case_number"] = record["case_number"]; + record.process_request["case_title"] = record["case_title"]; + } record["status"] = this.formatStatus(record); record["assignee"] = this.formatAvatar(record["user"]); record["request"] = this.formatRequest(record); @@ -522,7 +526,7 @@ export default { */ storeFilterConfiguration() { let url = "users/store_filter_configuration/taskFilter"; - if (this.$props.columns) { + if (this.$props.columns && this.savedSearch) { url = "saved-searches/" + this.savedSearch + "/advanced-filters"; } let config = {