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/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/ProcessMaker/Http/Controllers/TaskController.php b/ProcessMaker/Http/Controllers/TaskController.php
index a0c8095bee..ac20276af4 100644
--- a/ProcessMaker/Http/Controllers/TaskController.php
+++ b/ProcessMaker/Http/Controllers/TaskController.php
@@ -15,6 +15,8 @@
use ProcessMaker\Models\ProcessRequestToken;
use ProcessMaker\Models\UserResourceView;
use ProcessMaker\Nayra\Contracts\Bpmn\ScriptTaskInterface;
+use ProcessMaker\Package\SavedSearch\Http\Controllers\SavedSearchController;
+use ProcessMaker\Package\SavedSearch\Models\SavedSearch;
use ProcessMaker\Traits\HasControllerAddons;
use ProcessMaker\Traits\SearchAutocompleteTrait;
@@ -43,7 +45,18 @@ public function index()
$userFilter = SaveSession::getConfigFilter('taskFilter', Auth::user());
- return view('tasks.index', compact('title', 'userFilter'));
+ // Get default Saved search config
+ $defaultSavedSearch = SavedSearch::firstSystemSearchFor(
+ Auth::user(),
+ SavedSearch::KEY_TASKS,
+ );
+ if ($defaultSavedSearch) {
+ $defaultColumns = SavedSearchController::adjustColumnsOf($defaultSavedSearch->columns);
+ } else {
+ $defaultColumns = null;
+ }
+
+ return view('tasks.index', compact('title', 'userFilter', 'defaultColumns'));
}
public function edit(ProcessRequestToken $task, string $preview = '')
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..6c2dbfc225 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,
@@ -102,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;
@@ -114,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 {
diff --git a/resources/js/requests/components/RequestsListing.vue b/resources/js/requests/components/RequestsListing.vue
index d1b3bf72ca..cffc8440a6 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;
@@ -502,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/requests/index.js b/resources/js/requests/index.js
index e05d764b79..00d6322f96 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 || null,
filter: "",
pmql: "",
urlPmql: "",
@@ -22,7 +23,7 @@ new Vue({
additions: [],
},
created() {
- const params = {};
+ let status;
switch (Processmaker.status) {
case "":
diff --git a/resources/js/tasks/components/TasksList.vue b/resources/js/tasks/components/TasksList.vue
index a57360d4db..c9a9590ddc 100644
--- a/resources/js/tasks/components/TasksList.vue
+++ b/resources/js/tasks/components/TasksList.vue
@@ -240,8 +240,12 @@ export default {
if (Array.isArray(newData.data) && newData.data.length > 0) {
for (let record of newData.data) {
//format Status
- record["case_number"] = this.formatCaseNumber(record.process_request);
- record["case_title"] = this.formatCaseTitle(record.process_request);
+ 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);
@@ -268,18 +272,18 @@ export default {
openRequest(data) {
return `/requests/${data.id}`;
},
- formatCaseNumber(processRequest) {
+ formatCaseNumber(processRequest, record) {
return `
- # ${processRequest.case_number}
+ # ${processRequest.case_number || record.case_number}
`;
},
- formatCaseTitle(processRequest) {
+ formatCaseTitle(processRequest, record) {
return `
- ${processRequest.case_title_formatted || ""}
+ ${processRequest.case_title_formatted || record.case_title || ""}
`;
},
formatActiveTask(row) {
@@ -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 = {
diff --git a/resources/js/tasks/index.js b/resources/js/tasks/index.js
index e5acd43f5c..8f6d4e5a9e 100644
--- a/resources/js/tasks/index.js
+++ b/resources/js/tasks/index.js
@@ -5,6 +5,7 @@ new Vue({
el: "#tasks",
components: { TasksList },
data: {
+ columns: window.Processmaker.defaultColumns || null,
filter: "",
pmql: "",
urlPmql: "",
diff --git a/resources/views/requests/index.blade.php b/resources/views/requests/index.blade.php
index 285fd97b53..398ccc175e 100644
--- a/resources/views/requests/index.blade.php
+++ b/resources/views/requests/index.blade.php
@@ -89,11 +89,33 @@ function() use ($title) { return [__($title), null]; }
+
+ @if(Route::has('package.savedsearch.defaults.edit'))
+
+
+
+ @endif
+
+
-
+
@@ -110,6 +132,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
diff --git a/resources/views/tasks/index.blade.php b/resources/views/tasks/index.blade.php
index 0b62c9d3c2..c27192eec0 100644
--- a/resources/views/tasks/index.blade.php
+++ b/resources/views/tasks/index.blade.php
@@ -64,11 +64,33 @@
+
+ @if(Route::has('package.savedsearch.defaults.edit'))
+
+
+
+ @endif
+
-
+
@@ -82,6 +104,7 @@
@section('js')
@endsection