diff --git a/ProcessMaker/Filters/Filter.php b/ProcessMaker/Filters/Filter.php index 2ae8b71ca4..04e381a2da 100644 --- a/ProcessMaker/Filters/Filter.php +++ b/ProcessMaker/Filters/Filter.php @@ -13,6 +13,8 @@ class Filter { const TYPE_PARTICIPANTS = 'Participants'; + const TYPE_PARTICIPANTS_FULLNAME = 'ParticipantsFullName'; + const TYPE_STATUS = 'Status'; const TYPE_FIELD = 'Field'; @@ -195,6 +197,9 @@ private function valueAliasMethod() case self::TYPE_PARTICIPANTS: $method = 'valueAliasParticipant'; break; + case self::TYPE_PARTICIPANTS_FULLNAME: + $method = 'valueAliasParticipantByFullName'; + break; case self::TYPE_STATUS: $method = 'valueAliasStatus'; break; diff --git a/ProcessMaker/Models/ProcessRequest.php b/ProcessMaker/Models/ProcessRequest.php index 43c3ea179c..7c10244fcf 100644 --- a/ProcessMaker/Models/ProcessRequest.php +++ b/ProcessMaker/Models/ProcessRequest.php @@ -725,6 +725,26 @@ public function valueAliasParticipant($value, $expression) } } + /** + * PMQL value alias for participant field by fullname. + * @param string $value + * @return callable + */ + public function valueAliasParticipantByFullName($value, $expression) + { + return function ($query) use ($value, $expression) { + $query->whereIn('id', function ($subquery) use ($value, $expression) { + $subquery->select('process_request_id')->from('process_request_tokens') + ->whereIn('user_id', function ($subquery) use ($value, $expression) { + $subquery->select('id') + ->from('users') + ->whereRaw("CONCAT(firstname, ' ', lastname) " . $expression->operator . " ?", [$value]); + }) + ->whereIn('element_type', ['task', 'userTask', 'startEvent']); + }); + }; + } + /** * Get the process version used by this request * diff --git a/resources/js/common/PMColumnFilterPopoverCommonMixin.js b/resources/js/common/PMColumnFilterPopoverCommonMixin.js index 6b03592443..0e749b1269 100644 --- a/resources/js/common/PMColumnFilterPopoverCommonMixin.js +++ b/resources/js/common/PMColumnFilterPopoverCommonMixin.js @@ -123,7 +123,7 @@ const PMColumnFilterCommonMixin = { if (column.format) { format = column.format; } - if (column.field === "status" || column.field === "assignee" || column.field === "participants" || column.field === 'process') { + if (column.field === "status" || column.field === "assignee") { format = "stringSelect"; } return format; @@ -136,17 +136,14 @@ const PMColumnFilterCommonMixin = { if (column.field === "assignee") { formatRange = this.viewAssignee; } - if (column.field === "participants") { - formatRange = this.viewParticipants; - } - if (column.field === "process") { - formatRange = this.viewProcesses; - } return formatRange; }, getOperators(column) { let operators = []; - if (column.field === "status" || column.field === "assignee" || column.field === "participants" || column.field === 'process') { + if (column.field === "case_title" || column.field === "name" || column.field === "process" || column.field === "task_name" || column.field === "participants") { + operators = ["=", "in", "contains", "regex"]; + } + if (column.field === "status" || column.field === "assignee") { operators = ["=", "in"]; } return operators; diff --git a/resources/js/components/PMColumnFilterPopover/PMColumnFilterForm.vue b/resources/js/components/PMColumnFilterPopover/PMColumnFilterForm.vue index c905b7d675..476ed8f79e 100644 --- a/resources/js/components/PMColumnFilterPopover/PMColumnFilterForm.vue +++ b/resources/js/components/PMColumnFilterPopover/PMColumnFilterForm.vue @@ -2,7 +2,8 @@