diff --git a/database/factories/AppDelayFactory.php b/database/factories/AppDelayFactory.php
index 4027adc1c..fee432649 100644
--- a/database/factories/AppDelayFactory.php
+++ b/database/factories/AppDelayFactory.php
@@ -9,8 +9,8 @@ $factory->define(\ProcessMaker\Model\AppDelay::class, function (Faker $faker) {
'PRO_UID' => G::generateUniqueID(),
'APP_UID' => G::generateUniqueID(),
'APP_NUMBER' => $faker->unique()->numberBetween(1000),
- 'APP_THREAD_INDEX' => 1,
- 'APP_DEL_INDEX' => $faker->unique()->numberBetween(10),
+ 'APP_THREAD_INDEX' => $faker->unique()->numberBetween(100),
+ 'APP_DEL_INDEX' => $faker->unique()->numberBetween(100),
'APP_TYPE' => $faker->randomElement($actions),
'APP_STATUS' => 'TO_DO',
'APP_NEXT_TASK' => 0,
@@ -28,56 +28,33 @@ $factory->define(\ProcessMaker\Model\AppDelay::class, function (Faker $faker) {
// Create a delegation with the foreign keys
$factory->state(\ProcessMaker\Model\AppDelay::class, 'paused_foreign_keys', function (Faker $faker) {
// Create values in the foreign key relations
- $user = factory(\ProcessMaker\Model\User::class)->create();
- $process = factory(\ProcessMaker\Model\Process::class)->create();
- $task = factory(\ProcessMaker\Model\Task::class)->create([
- 'PRO_UID' => $process->PRO_UID,
- 'PRO_ID' => $process->PRO_ID
- ]);
- $application = factory(\ProcessMaker\Model\Application::class)->create([
- 'PRO_UID' => $process->PRO_UID,
- 'APP_INIT_USER' => $user->USR_UID,
- 'APP_CUR_USER' => $user->USR_UID
- ]);
- $delegation1 = factory(\ProcessMaker\Model\Delegation::class)->create([
- 'PRO_UID' => $process->PRO_UID,
- 'PRO_ID' => $process->PRO_ID,
- 'TAS_UID' => $task->TAS_UID,
- 'TAS_ID' => $task->TAS_ID,
- 'APP_NUMBER' => $application->APP_NUMBER,
- 'APP_UID' => $application->APP_UID,
- 'DEL_THREAD_STATUS' => 'CLOSED',
- 'USR_UID' => $user->USR_UID,
- 'USR_ID' => $user->USR_ID,
- 'DEL_PREVIOUS' => 0,
- 'DEL_INDEX' => 1
- ]);
- $delegation = factory(\ProcessMaker\Model\Delegation::class)->create([
- 'PRO_UID' => $process->PRO_UID,
- 'PRO_ID' => $process->PRO_ID,
- 'TAS_UID' => $task->TAS_UID,
- 'TAS_ID' => $task->TAS_ID,
- 'APP_NUMBER' => $application->APP_NUMBER,
- 'APP_UID' => $application->APP_UID,
+ $delegation1 = factory(\ProcessMaker\Model\Delegation::class)->states('closed')->create();
+ $delegation2 = factory(\ProcessMaker\Model\Delegation::class)->states('foreign_keys')->create([
+ 'PRO_UID' => $delegation1->PRO_UID,
+ 'PRO_ID' => $delegation1->PRO_ID,
+ 'TAS_UID' => $delegation1->TAS_UID,
+ 'TAS_ID' => $delegation1->TAS_ID,
+ 'APP_NUMBER' => $delegation1->APP_NUMBER,
+ 'APP_UID' => $delegation1->APP_UID,
'DEL_THREAD_STATUS' => 'OPEN',
- 'USR_UID' => $user->USR_UID,
- 'USR_ID' => $user->USR_ID,
+ 'USR_UID' => $delegation1->USR_UID,
+ 'USR_ID' => $delegation1->USR_ID,
'DEL_PREVIOUS' => $delegation1->DEL_INDEX,
- 'DEL_INDEX' => $delegation1->DEL_INDEX++
+ 'DEL_INDEX' => $faker->unique()->numberBetween(2000),
]);
// Return with default values
return [
'APP_DELAY_UID' => G::generateUniqueID(),
- 'PRO_UID' => $process->PRO_UID,
- 'PRO_ID' => $process->PRO_ID,
- 'APP_UID' => $application->APP_UID,
- 'APP_NUMBER' => $application->APP_NUMBER,
- 'APP_DEL_INDEX' => $delegation->DEL_INDEX,
+ 'PRO_UID' => $delegation2->PRO_UID,
+ 'PRO_ID' => $delegation2->PRO_ID,
+ 'APP_UID' => $delegation2->APP_UID,
+ 'APP_NUMBER' => $delegation2->APP_NUMBER,
+ 'APP_DEL_INDEX' => $delegation2->DEL_INDEX,
'APP_TYPE' => 'PAUSE',
- 'APP_STATUS' => $application->APP_STATUS,
- 'APP_DELEGATION_USER' => $user->USR_UID,
- 'APP_DELEGATION_USER_ID' => $user->USR_ID,
+ 'APP_STATUS' => 'TO_DO',
+ 'APP_DELEGATION_USER' => $delegation2->USR_UID,
+ 'APP_DELEGATION_USER_ID' => $delegation2->USR_ID,
'APP_ENABLE_ACTION_USER' => G::generateUniqueID(),
'APP_ENABLE_ACTION_DATE' => $faker->dateTime(),
'APP_DISABLE_ACTION_USER' => 0,
diff --git a/database/factories/CaseListFactory.php b/database/factories/CaseListFactory.php
new file mode 100644
index 000000000..b78e2c6fa
--- /dev/null
+++ b/database/factories/CaseListFactory.php
@@ -0,0 +1,26 @@
+define(\ProcessMaker\Model\CaseList::class, function (Faker $faker) {
+ return [
+ 'CAL_ID' => $faker->unique()->numberBetween(1, 2000),
+ 'CAL_TYPE' => 'inbox',
+ 'CAL_NAME' => $faker->title,
+ 'CAL_DESCRIPTION' => $faker->text,
+ 'ADD_TAB_UID' => function () {
+ $table = factory(\ProcessMaker\Model\AdditionalTables::class)->create();
+ return $table->ADD_TAB_UID;
+ },
+ 'CAL_COLUMNS' => '[]',
+ 'USR_ID' => function () {
+ $user = factory(\ProcessMaker\Model\User::class)->create();
+ return $user->USR_ID;
+ },
+ 'CAL_ICON_LIST' => 'deafult.png',
+ 'CAL_ICON_COLOR' => 'red',
+ 'CAL_ICON_COLOR_SCREEN' => 'blue',
+ 'CAL_CREATE_DATE' => $faker->dateTime(),
+ 'CAL_UPDATE_DATE' => $faker->dateTime()
+ ];
+});
diff --git a/database/factories/DelegationFactory.php b/database/factories/DelegationFactory.php
index 2a863935c..916de97fb 100644
--- a/database/factories/DelegationFactory.php
+++ b/database/factories/DelegationFactory.php
@@ -69,7 +69,7 @@ $factory->state(\ProcessMaker\Model\Delegation::class, 'foreign_keys', function
return [
'DELEGATION_ID' => $faker->unique()->numberBetween(5000),
'APP_UID' => $application->APP_UID,
- 'DEL_INDEX' => 1,
+ 'DEL_INDEX' => $faker->unique()->numberBetween(2000),
'APP_NUMBER' => $application->APP_NUMBER,
'DEL_PREVIOUS' => 0,
'PRO_UID' => $process->PRO_UID,
@@ -176,7 +176,17 @@ $factory->state(\ProcessMaker\Model\Delegation::class, 'closed', function (Faker
// Create a last delegation
$factory->state(\ProcessMaker\Model\Delegation::class, 'last_thread', function (Faker $faker) {
+
return [
'DEL_LAST_INDEX' => 1,
];
});
+
+// Create a first delegation
+$factory->state(\ProcessMaker\Model\Delegation::class, 'first_thread', function (Faker $faker) {
+
+ return [
+ 'DEL_INDEX' => 1,
+ 'DEL_PREVIOUS' => 0,
+ ];
+});
diff --git a/resources/assets/js/api/Process.js b/resources/assets/js/api/Process.js
index ed4ef4d83..53da31241 100644
--- a/resources/assets/js/api/Process.js
+++ b/resources/assets/js/api/Process.js
@@ -1,6 +1,6 @@
import ApiInstance from "./Api.js";
import Services from "./Services";
-let Api = new ApiInstance( Services );
+let Api = new ApiInstance(Services);
export let process = {
list: {
@@ -12,5 +12,13 @@ export let process = {
keys: {}
});
}
+ },
+ categories(dt) {
+ return Api.fetch({
+ service: "CATEGORIES",
+ method: "get",
+ data: dt,
+ keys: {}
+ });
}
};
\ No newline at end of file
diff --git a/resources/assets/js/components/dataViews/vueCardView/VueCardView.vue b/resources/assets/js/components/dataViews/vueCardView/VueCardView.vue
index ef5bf1860..141249b70 100644
--- a/resources/assets/js/components/dataViews/vueCardView/VueCardView.vue
+++ b/resources/assets/js/components/dataViews/vueCardView/VueCardView.vue
@@ -15,9 +15,18 @@
:column="column"
:headings="options.headings"
>
+
-
+
@@ -45,12 +54,20 @@ export default {
};
},
mounted() {
-
+ this.filterOptions();
},
methods: {
classBtn(cls) {
return "btn btn-slim btn-force-radius v-btn-header " + cls;
},
+ /**
+ * Filter the column send_by
+ */
+ filterOptions() {
+ this.options.columns = this.options.columns.filter(function(item) {
+ return item !== "send_by";
+ });
+ }
},
};
diff --git a/resources/assets/js/components/dataViews/vueListView/VueListView.vue b/resources/assets/js/components/dataViews/vueListView/VueListView.vue
index be32ad834..872077c9c 100644
--- a/resources/assets/js/components/dataViews/vueListView/VueListView.vue
+++ b/resources/assets/js/components/dataViews/vueListView/VueListView.vue
@@ -7,7 +7,7 @@
>
-
+
+
+
+
-
+
@@ -46,12 +57,20 @@ export default {
};
},
mounted() {
-
+ this.filterOptions();
},
methods: {
classBtn(cls) {
return "btn btn-slim btn-force-radius v-btn-header " + cls;
},
+ /**
+ * Filter the column send_by
+ */
+ filterOptions() {
+ this.options.columns = this.options.columns.filter(function(item) {
+ return item !== "send_by";
+ });
+ }
},
};
diff --git a/resources/assets/js/components/vuetable/CurrentUserCell.vue b/resources/assets/js/components/vuetable/CurrentUserCell.vue
index 3d6b94bd7..681dc281d 100644
--- a/resources/assets/js/components/vuetable/CurrentUserCell.vue
+++ b/resources/assets/js/components/vuetable/CurrentUserCell.vue
@@ -69,7 +69,7 @@ export default {
.ellipsis {
white-space: nowrap;
- width: 140px;
+ width: auto;
overflow: hidden;
text-overflow: ellipsis;
}
diff --git a/resources/assets/js/components/vuetable/OwnerCell.vue b/resources/assets/js/components/vuetable/OwnerCell.vue
new file mode 100644
index 000000000..dd9cb3e36
--- /dev/null
+++ b/resources/assets/js/components/vuetable/OwnerCell.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{data.userInfo}}
+ {{data.userPosition}}
+ {{data.userEmail}}
+
+
+
+
+
+
+
+
+
diff --git a/resources/assets/js/home/Inbox/Todo.vue b/resources/assets/js/home/Inbox/Todo.vue
index 6c067cf7a..c18cb3d27 100644
--- a/resources/assets/js/home/Inbox/Todo.vue
+++ b/resources/assets/js/home/Inbox/Todo.vue
@@ -40,6 +40,9 @@
+
+
+
{{ props.row.USERNAME_DISPLAY_FORMAT }}
@@ -69,7 +72,7 @@
-
-
+
+ {{ props["headings"][props.column] }} :
+
+
+
+
-
+
+ {{ props["headings"][props.column] }} :
+
+
+
+
@@ -205,7 +223,7 @@ import defaultMixins from "./defaultMixins";
import Ellipsis from '../../components/utils/ellipsis.vue';
import ModalPauseCase from '../modal/ModalPauseCase.vue';
import ModalReassignCase from '../modal/ModalReassignCase.vue';
-
+import CurrentUserCell from "../../components/vuetable/CurrentUserCell.vue";
export default {
name: "Todo",
@@ -222,6 +240,7 @@ export default {
Ellipsis,
ModalPauseCase,
ModalReassignCase,
+ CurrentUserCell,
},
props: ["defaultOption", "filters"],
data() {
@@ -240,6 +259,7 @@ export default {
"case_title",
"process_name",
"task",
+ "send_by",
"due_date",
"delegation_date",
"priority",
@@ -254,6 +274,7 @@ export default {
case_title: this.$i18n.t("ID_CASE_TITLE"),
process_name: this.$i18n.t("ID_PROCESS_NAME"),
task: this.$i18n.t("ID_TASK"),
+ send_by: this.$i18n.t("ID_SEND_BY"),
due_date: this.$i18n.t("ID_DUE_DATE"),
delegation_date: this.$i18n.t("ID_DELEGATION_DATE"),
priority: this.$i18n.t("ID_PRIORITY"),
@@ -455,6 +476,7 @@ export default {
DELAYED_MSG: v.TAS_STATUS === "OVERDUE" ? v.DELAY : "",
},
],
+ USER_DATA: this.formatUser(v.SEND_BY_INFO),
USERNAME_DISPLAY_FORMAT: utils.userNameDisplayFormat({
userName: v.USR_LASTNAME,
firstName: v.USR_LASTNAME,
@@ -472,6 +494,30 @@ export default {
});
return data;
},
+ /**
+ * Set the format to show user's information
+ * @return {array} dataFormat
+ */
+ formatUser(data) {
+ var dataFormat = [],
+ userDataFormat;
+ userDataFormat = utils.userNameDisplayFormat({
+ userName: data.user_tooltip.usr_firstname,
+ firstName: data.user_tooltip.usr_lastname,
+ lastName: data.user_tooltip.usr_username,
+ format: window.config.FORMATS.format || null
+ });
+ dataFormat.push({
+ USERNAME_DISPLAY_FORMAT: userDataFormat,
+ EMAIL: data.user_tooltip.usr_email,
+ POSITION: data.user_tooltip.usr_position,
+ AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
+ window.config.SYS_URI +
+ `users/users_ViewPhotoGrid?pUID=${data.user_tooltip.user_id}` : "",
+ UNASSIGNED: userDataFormat !== "" ? true : false
+ });
+ return dataFormat;
+ },
/**
* Open selected cases in the inbox
*
diff --git a/resources/assets/js/home/Inbox/defaultMixins.js b/resources/assets/js/home/Inbox/defaultMixins.js
index 0fe506578..35149017a 100644
--- a/resources/assets/js/home/Inbox/defaultMixins.js
+++ b/resources/assets/js/home/Inbox/defaultMixins.js
@@ -40,25 +40,25 @@ export default {
this.openCase(item);
},
headings: {
- detail: "",
case_number: this.$i18n.t("ID_MYCASE_NUMBER"),
case_title: this.$i18n.t("ID_CASE_TITLE"),
process_name: this.$i18n.t("ID_PROCESS_NAME"),
task: this.$i18n.t("ID_TASK"),
+ send_by: this.$i18n.t("ID_SEND_BY"),
current_user: this.$i18n.t("ID_CURRENT_USER"),
due_date: this.$i18n.t("ID_DUE_DATE"),
delegation_date: this.$i18n.t("ID_DELEGATION_DATE"),
priority: this.$i18n.t("ID_PRIORITY")
},
columns: [
- "detail",
"case_number",
"case_title",
"process_name",
"due_date",
"delegation_date",
"priority",
- "task"
+ "task",
+ "send_by",
],
requestFunction(data) {
return that.getCases(data);
diff --git a/resources/assets/js/home/Paused/Paused.vue b/resources/assets/js/home/Paused/Paused.vue
index 9dd4dbfc3..7a8935e41 100644
--- a/resources/assets/js/home/Paused/Paused.vue
+++ b/resources/assets/js/home/Paused/Paused.vue
@@ -38,6 +38,9 @@
+
+
+
{{ props.row.USERNAME_DISPLAY_FORMAT }}
@@ -67,7 +70,7 @@
-
-
+
+ {{ props["headings"][props.column] }} :
+
+
+
+
-
+
+ {{ props["headings"][props.column] }} :
+
+
+
+
@@ -204,6 +222,7 @@ import VueListView from "../../components/dataViews/vueListView/VueListView.vue"
import defaultMixins from "./defaultMixins";
import Ellipsis from '../../components/utils/ellipsis.vue';
import ModalReassignCase from '../modal/ModalReassignCase.vue';
+import CurrentUserCell from "../../components/vuetable/CurrentUserCell.vue";
export default {
name: "Paused",
@@ -220,6 +239,7 @@ export default {
VueCardView,
VueListView,
ModalReassignCase,
+ CurrentUserCell,
},
props: ["defaultOption", "filters"],
data() {
@@ -238,6 +258,7 @@ export default {
"case_title",
"process_name",
"task",
+ "send_by",
"due_date",
"delegation_date",
"priority",
@@ -252,6 +273,7 @@ export default {
case_title: this.$i18n.t("ID_CASE_TITLE"),
process_name: this.$i18n.t("ID_PROCESS_NAME"),
task: this.$i18n.t("ID_TASK"),
+ send_by: this.$i18n.t("ID_SEND_BY"),
due_date: this.$i18n.t("ID_DUE_DATE"),
delegation_date: this.$i18n.t("ID_DELEGATION_DATE"),
priority: this.$i18n.t("ID_PRIORITY"),
@@ -449,6 +471,7 @@ export default {
this.$i18n.t("ID_DELAYED") + ":" : this.statusTitle[v.TAS_STATUS],
DELAYED_MSG: v.TAS_STATUS === "OVERDUE" ? v.DELAY : ""
}],
+ USER_DATA: this.formatUser(v.SEND_BY_INFO),
USERNAME_DISPLAY_FORMAT: utils.userNameDisplayFormat({
userName: v.USR_LASTNAME,
firstName: v.USR_LASTNAME,
@@ -466,6 +489,30 @@ export default {
});
return data;
},
+ /**
+ * Set the format to show user's information
+ * @return {array} dataFormat
+ */
+ formatUser(data) {
+ var dataFormat = [],
+ userDataFormat;
+ userDataFormat = utils.userNameDisplayFormat({
+ userName: data.user_tooltip.usr_firstname,
+ firstName: data.user_tooltip.usr_lastname,
+ lastName: data.user_tooltip.usr_username,
+ format: window.config.FORMATS.format || null
+ });
+ dataFormat.push({
+ USERNAME_DISPLAY_FORMAT: userDataFormat,
+ EMAIL: data.user_tooltip.usr_email,
+ POSITION: data.user_tooltip.usr_position,
+ AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
+ window.config.SYS_URI +
+ `users/users_ViewPhotoGrid?pUID=${data.user_tooltip.user_id}` : "",
+ UNASSIGNED: userDataFormat !== "" ? true : false
+ });
+ return dataFormat;
+ },
/**
* Open selected cases in the inbox
*
diff --git a/resources/assets/js/home/Paused/defaultMixins.js b/resources/assets/js/home/Paused/defaultMixins.js
index 70ed7e29c..c385daa21 100644
--- a/resources/assets/js/home/Paused/defaultMixins.js
+++ b/resources/assets/js/home/Paused/defaultMixins.js
@@ -39,25 +39,25 @@ export default {
this.openCase(item);
},
headings: {
- detail: "",
case_number: this.$i18n.t("ID_MYCASE_NUMBER"),
case_title: this.$i18n.t("ID_CASE_TITLE"),
process_name: this.$i18n.t("ID_PROCESS_NAME"),
task: this.$i18n.t("ID_TASK"),
+ send_by: this.$i18n.t("ID_SEND_BY"),
current_user: this.$i18n.t("ID_CURRENT_USER"),
due_date: this.$i18n.t("ID_DUE_DATE"),
delegation_date: this.$i18n.t("ID_DELEGATION_DATE"),
priority: this.$i18n.t("ID_PRIORITY")
},
columns: [
- "detail",
"case_number",
"case_title",
"process_name",
"due_date",
"delegation_date",
"priority",
- "task"
+ "task",
+ "send_by",
],
requestFunction(data) {
return that.getCases(data);
diff --git a/resources/assets/js/home/Unassigned/Unassigned.vue b/resources/assets/js/home/Unassigned/Unassigned.vue
index 557ce8f95..168e9a885 100644
--- a/resources/assets/js/home/Unassigned/Unassigned.vue
+++ b/resources/assets/js/home/Unassigned/Unassigned.vue
@@ -36,6 +36,9 @@
+
+
+
{{ props.row.DUE_DATE }}
@@ -62,7 +65,7 @@
-
+
+ {{ props["headings"][props.column] }} :
+
+
+
+
-
+
+ {{ props["headings"][props.column] }} :
+
+
+
+
@@ -199,6 +218,7 @@ import VueCardView from "../../components/dataViews/vueCardView/VueCardView.vue"
import VueListView from "../../components/dataViews/vueListView/VueListView.vue";
import defaultMixins from "./defaultMixins";
import ModalPauseCase from '../modal/ModalPauseCase.vue';
+import CurrentUserCell from "../../components/vuetable/CurrentUserCell.vue";
export default {
name: "Unassigned",
@@ -215,6 +235,7 @@ export default {
VueCardView,
VueListView,
ModalPauseCase,
+ CurrentUserCell,
},
props: ["defaultOption", "filters"],
data() {
@@ -233,6 +254,7 @@ export default {
"case_title",
"process_name",
"task",
+ "send_by",
"due_date",
"delegation_date",
"priority",
@@ -246,6 +268,7 @@ export default {
case_title: this.$i18n.t("ID_CASE_TITLE"),
process_name: this.$i18n.t("ID_PROCESS_NAME"),
task: this.$i18n.t("ID_TASK"),
+ send_by: this.$i18n.t("ID_SEND_BY"),
due_date: this.$i18n.t("ID_DUE_DATE"),
delegation_date: this.$i18n.t("ID_DELEGATION_DATE"),
priority: this.$i18n.t("ID_PRIORITY"),
@@ -413,6 +436,7 @@ export default {
this.$i18n.t("ID_DELAYED") + ":" : this.statusTitle[v.TAS_STATUS],
DELAYED_MSG: v.TAS_STATUS === "OVERDUE" ? v.DELAY : ""
}],
+ USER_DATA: this.formatUser(v.SEND_BY_INFO),
DUE_DATE: v.DEL_TASK_DUE_DATE_LABEL,
DELEGATION_DATE: v.DEL_DELEGATE_DATE_LABEL,
PRIORITY: v.DEL_PRIORITY_LABEL,
@@ -424,6 +448,30 @@ export default {
});
return data;
},
+ /**
+ * Set the format to show user's information
+ * @return {array} dataFormat
+ */
+ formatUser(data) {
+ var dataFormat = [],
+ userDataFormat;
+ userDataFormat = utils.userNameDisplayFormat({
+ userName: data.user_tooltip.usr_firstname,
+ firstName: data.user_tooltip.usr_lastname,
+ lastName: data.user_tooltip.usr_username,
+ format: window.config.FORMATS.format || null
+ });
+ dataFormat.push({
+ USERNAME_DISPLAY_FORMAT: userDataFormat,
+ EMAIL: data.user_tooltip.usr_email,
+ POSITION: data.user_tooltip.usr_position,
+ AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
+ window.config.SYS_URI +
+ `users/users_ViewPhotoGrid?pUID=${data.user_tooltip.user_id}` : "",
+ UNASSIGNED: userDataFormat !== "" ? true : false
+ });
+ return dataFormat;
+ },
/**
* Claim case
*
diff --git a/resources/assets/js/home/Unassigned/defaultMixins.js b/resources/assets/js/home/Unassigned/defaultMixins.js
index 50292a00f..8da3f1637 100644
--- a/resources/assets/js/home/Unassigned/defaultMixins.js
+++ b/resources/assets/js/home/Unassigned/defaultMixins.js
@@ -39,25 +39,25 @@ export default {
this.openCase(item);
},
headings: {
- detail: "",
case_number: this.$i18n.t("ID_MYCASE_NUMBER"),
case_title: this.$i18n.t("ID_CASE_TITLE"),
process_name: this.$i18n.t("ID_PROCESS_NAME"),
task: this.$i18n.t("ID_TASK"),
+ send_by: this.$i18n.t("ID_SEND_BY"),
current_user: this.$i18n.t("ID_CURRENT_USER"),
due_date: this.$i18n.t("ID_DUE_DATE"),
delegation_date: this.$i18n.t("ID_DELEGATION_DATE"),
priority: this.$i18n.t("ID_PRIORITY")
},
columns: [
- "detail",
"case_number",
"case_title",
"process_name",
"due_date",
"delegation_date",
"priority",
- "task"
+ "task",
+ "send_by",
],
requestFunction(data) {
return that.getCases(data);
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php
index 41238d060..8b60300ab 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php
@@ -5,7 +5,9 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\DB;
use ProcessMaker\BusinessModel\Cases\Draft;
+use ProcessMaker\Model\AdditionalTables;
use ProcessMaker\Model\Application;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\User;
@@ -354,6 +356,7 @@ class DraftTest extends TestCase
* It tests the getCountersByProcesses() method with the category filter
*
* @covers \ProcessMaker\BusinessModel\Cases\Draft::getCountersByProcesses()
+ * @covers \ProcessMaker\BusinessModel\Cases\AbstractCases::getCountersByProcesses()
* @test
*/
public function it_should_test_get_counters_by_processes_method_category()
@@ -643,6 +646,7 @@ class DraftTest extends TestCase
* It tests the getCountersByRange() method
*
* @covers \ProcessMaker\BusinessModel\Cases\Draft::getCountersByRange()
+ * @covers \ProcessMaker\BusinessModel\Cases\AbstractCases::getCountersByProcesses()
* @test
*/
public function it_should_test_get_counters_by_range_method()
@@ -717,4 +721,49 @@ class DraftTest extends TestCase
$res = $draft->getCountersByRange(null, '2021-05-20', '2021-05-22');
$this->assertCount(3, $res);
}
+
+ /**
+ * This tests the getCustomListCount() method.
+ * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCustomListCount()
+ * @test
+ */
+ public function it_should_test_getCustomListCount_method()
+ {
+ $cases = $this->createManyDraft(3);
+
+ $additionalTables = factory(AdditionalTables::class)->create();
+ $query = ""
+ . "CREATE TABLE IF NOT EXISTS `{$additionalTables->ADD_TAB_NAME}` ("
+ . "`APP_UID` varchar(32) NOT NULL,"
+ . "`APP_NUMBER` int(11) NOT NULL,"
+ . "`APP_STATUS` varchar(10) NOT NULL,"
+ . "`VAR1` varchar(255) DEFAULT NULL,"
+ . "`VAR2` varchar(255) DEFAULT NULL,"
+ . "`VAR3` varchar(255) DEFAULT NULL,"
+ . "PRIMARY KEY (`APP_UID`),"
+ . "KEY `indexTable` (`APP_UID`))";
+ DB::statement($query);
+
+ $caseList = factory(CaseList::class)->create([
+ 'CAL_TYPE' => 'draft',
+ 'ADD_TAB_UID' => $additionalTables->ADD_TAB_UID,
+ 'USR_ID' => $cases->USR_ID
+ ]);
+
+ $draft = new Draft();
+ $draft->setUserId($cases->USR_ID);
+ $draft->setUserUid($cases->USR_UID);
+
+ $res = $draft->getCustomListCount($caseList->CAL_ID, 'draft');
+
+ //assertions
+ $this->assertArrayHasKey('label', $res);
+ $this->assertArrayHasKey('name', $res);
+ $this->assertArrayHasKey('description', $res);
+ $this->assertArrayHasKey('tableName', $res);
+ $this->assertArrayHasKey('total', $res);
+
+ $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']);
+ $this->assertEquals(3, $res['total']);
+ }
}
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php
index d606af43c..84fe7cd68 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php
@@ -5,7 +5,9 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\DB;
use ProcessMaker\BusinessModel\Cases\Inbox;
+use ProcessMaker\Model\AdditionalTables;
use ProcessMaker\Model\Application;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\Task;
@@ -199,6 +201,7 @@ class InboxTest extends TestCase
* @covers \ProcessMaker\BusinessModel\Cases\Inbox::getData()
* @covers \ProcessMaker\BusinessModel\Cases\Inbox::getColumnsView()
* @covers \ProcessMaker\BusinessModel\Cases\Inbox::filters()
+ * @covers \ProcessMaker\Model\Delegation::scopeTask()
* @test
*/
public function it_filter_by_task()
@@ -611,4 +614,49 @@ class InboxTest extends TestCase
$res = $inbox->getCountersByRange(null, '2021-05-20', '2021-05-23');
$this->assertCount(1, $res);
}
+
+ /**
+ * This tests the getCustomListCount() method.
+ * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCustomListCount()
+ * @test
+ */
+ public function it_should_test_getCustomListCounts_method()
+ {
+ $cases = $this->createMultipleInbox(3);
+
+ $additionalTables = factory(AdditionalTables::class)->create();
+ $query = ""
+ . "CREATE TABLE IF NOT EXISTS `{$additionalTables->ADD_TAB_NAME}` ("
+ . "`APP_UID` varchar(32) NOT NULL,"
+ . "`APP_NUMBER` int(11) NOT NULL,"
+ . "`APP_STATUS` varchar(10) NOT NULL,"
+ . "`VAR1` varchar(255) DEFAULT NULL,"
+ . "`VAR2` varchar(255) DEFAULT NULL,"
+ . "`VAR3` varchar(255) DEFAULT NULL,"
+ . "PRIMARY KEY (`APP_UID`),"
+ . "KEY `indexTable` (`APP_UID`))";
+ DB::statement($query);
+
+ $caseList = factory(CaseList::class)->create([
+ 'CAL_TYPE' => 'inbox',
+ 'ADD_TAB_UID' => $additionalTables->ADD_TAB_UID,
+ 'USR_ID' => $cases->USR_ID
+ ]);
+
+ $inbox = new Inbox();
+ $inbox->setUserId($cases->USR_ID);
+ $inbox->setUserUid($cases->USR_UID);
+
+ $res = $inbox->getCustomListCount($caseList->CAL_ID, 'inbox');
+
+ //assertions
+ $this->assertArrayHasKey('label', $res);
+ $this->assertArrayHasKey('name', $res);
+ $this->assertArrayHasKey('description', $res);
+ $this->assertArrayHasKey('tableName', $res);
+ $this->assertArrayHasKey('total', $res);
+
+ $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']);
+ $this->assertEquals(3, $res['total']);
+ }
}
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php
index 85873a905..65f05310c 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php
@@ -5,8 +5,10 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\DB;
use ProcessMaker\BusinessModel\Cases\Paused;
+use ProcessMaker\Model\AdditionalTables;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\AppDelay;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\Task;
@@ -606,4 +608,49 @@ class PausedTest extends TestCase
$res = $paused->getCountersByRange(null, '2021-05-20', '2021-05-23');
$this->assertCount(1, $res);
}
+
+ /**
+ * This tests the getCustomListCount() method.
+ * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCustomListCount()
+ * @test
+ */
+ public function it_should_test_getCustomListCounts_method()
+ {
+ $cases = $this->createMultiplePaused(3);
+
+ $additionalTables = factory(AdditionalTables::class)->create();
+ $query = ""
+ . "CREATE TABLE IF NOT EXISTS `{$additionalTables->ADD_TAB_NAME}` ("
+ . "`APP_UID` varchar(32) NOT NULL,"
+ . "`APP_NUMBER` int(11) NOT NULL,"
+ . "`APP_STATUS` varchar(10) NOT NULL,"
+ . "`VAR1` varchar(255) DEFAULT NULL,"
+ . "`VAR2` varchar(255) DEFAULT NULL,"
+ . "`VAR3` varchar(255) DEFAULT NULL,"
+ . "PRIMARY KEY (`APP_UID`),"
+ . "KEY `indexTable` (`APP_UID`))";
+ DB::statement($query);
+
+ $caseList = factory(CaseList::class)->create([
+ 'CAL_TYPE' => 'paused',
+ 'ADD_TAB_UID' => $additionalTables->ADD_TAB_UID,
+ 'USR_ID' => $cases->USR_ID
+ ]);
+
+ $paused = new Paused();
+ $paused->setUserId($cases->USR_ID);
+ $paused->setUserUid($cases->USR_UID);
+
+ $res = $paused->getCustomListCount($caseList->CAL_ID, 'paused');
+
+ //assertions
+ $this->assertArrayHasKey('label', $res);
+ $this->assertArrayHasKey('name', $res);
+ $this->assertArrayHasKey('description', $res);
+ $this->assertArrayHasKey('tableName', $res);
+ $this->assertArrayHasKey('total', $res);
+
+ $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']);
+ $this->assertEquals(3, $res['total']);
+ }
}
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php
index 6b78560ab..5f940b329 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php
@@ -5,9 +5,11 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\DB;
use ProcessMaker\BusinessModel\Cases\Unassigned;
+use ProcessMaker\Model\AdditionalTables;
use ProcessMaker\Model\AppAssignSelfServiceValue;
use ProcessMaker\Model\AppAssignSelfServiceValueGroup;
use ProcessMaker\Model\Application;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\GroupUser;
use ProcessMaker\Model\Groupwf;
@@ -657,4 +659,68 @@ class UnassignedTest extends TestCase
$res = $unassigned->getCountersByRange(null, '2021-05-20', '2021-05-23');
$this->assertCount(1, $res);
}
+
+ /**
+ * It tests the getCustomListCount() method
+ * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCustomListCount()
+ * @test
+ */
+ public function it_should_test_getCustomListCount_method()
+ {
+ $cases = $this->createMultipleUnassigned(0);
+
+ $additionalTables = factory(AdditionalTables::class)->create();
+ $query = ""
+ . "CREATE TABLE IF NOT EXISTS `{$additionalTables->ADD_TAB_NAME}` ("
+ . "`APP_UID` varchar(32) NOT NULL,"
+ . "`APP_NUMBER` int(11) NOT NULL,"
+ . "`APP_STATUS` varchar(10) NOT NULL,"
+ . "`VAR1` varchar(255) DEFAULT NULL,"
+ . "`VAR2` varchar(255) DEFAULT NULL,"
+ . "`VAR3` varchar(255) DEFAULT NULL,"
+ . "PRIMARY KEY (`APP_UID`),"
+ . "KEY `indexTable` (`APP_UID`))";
+ DB::statement($query);
+
+ $caseList = factory(CaseList::class)->create([
+ 'CAL_TYPE' => 'unassigned',
+ 'ADD_TAB_UID' => $additionalTables->ADD_TAB_UID,
+ 'USR_ID' => $cases->USR_ID
+ ]);
+
+ $unassigned = new Unassigned();
+ $unassigned->setUserId($cases->USR_ID);
+ $unassigned->setUserUid($cases->USR_UID);
+
+ $res = $unassigned->getCustomListCount($caseList->CAL_ID, 'unassigned');
+
+ //assertions
+ $this->assertArrayHasKey('label', $res);
+ $this->assertArrayHasKey('name', $res);
+ $this->assertArrayHasKey('description', $res);
+ $this->assertArrayHasKey('tableName', $res);
+ $this->assertArrayHasKey('total', $res);
+
+ $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']);
+ $this->assertEquals(0, $res['total']);
+
+ //for user or group
+ $cases = $this->createSelfServiceUserOrGroup();
+
+ $unassigned = new Unassigned();
+ $unassigned->setUserUid($cases['taskUser']->USR_UID);
+ $unassigned->setUserId($cases['delegation']->USR_ID);
+
+ $res = $unassigned->getCustomListCount($caseList->CAL_ID, 'unassigned');
+
+ //assertions
+ $this->assertArrayHasKey('label', $res);
+ $this->assertArrayHasKey('name', $res);
+ $this->assertArrayHasKey('description', $res);
+ $this->assertArrayHasKey('tableName', $res);
+ $this->assertArrayHasKey('total', $res);
+
+ $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']);
+ $this->assertEquals(0, $res['total']);
+ }
}
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php
index c479aaa36..ba0e97d7e 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php
@@ -5,6 +5,7 @@ namespace ProcessMaker\BusinessModel;
use Exception;
use G;
use Illuminate\Support\Facades\DB;
+use ProcessMaker\Model\AppDelay;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Documents;
@@ -380,4 +381,45 @@ class CasesTest extends TestCase
// Get DynaForms assigned as steps for the second task when the application status is COMPLETED
self::assertCount(1, Cases::dynaFormsByApplication($application->APP_UID, $task2->TAS_UID, '', 'COMPLETED'));
}
+
+ /**
+ * It test the case info used in the PMFCaseLink
+ *
+ * @covers \ProcessMaker\BusinessModel\Cases::getStatusInfo()
+ * @covers \ProcessMaker\Model\AppDelay::getPaused()
+ * @test
+ */
+ public function it_should_test_case_status_info()
+ {
+ // Get status info when the case is PAUSED
+ $table = factory(AppDelay::class)->states('paused_foreign_keys')->create();
+ $cases = new Cases();
+ $result = $cases->getStatusInfo($table->APP_UID, $table->APP_DEL_INDEX, $table->APP_DELEGATION_USER);
+ $this->assertNotEmpty($result);
+ $this->assertArrayHasKey('APP_STATUS', $result);
+ $this->assertArrayHasKey('DEL_INDEX', $result);
+ $this->assertArrayHasKey('PRO_UID', $result);
+ // Get status info when the case is UNASSIGNED
+ // Get status info when the case is TO_DO
+ $table = factory(Delegation::class)->states('foreign_keys')->create();
+ $cases = new Cases();
+ $result = $cases->getStatusInfo($table->APP_UID, $table->DEL_INDEX, $table->USR_UID);
+ $this->assertNotEmpty($result);
+ $this->assertArrayHasKey('APP_STATUS', $result);
+ $this->assertArrayHasKey('DEL_INDEX', $result);
+ $this->assertArrayHasKey('PRO_UID', $result);
+ // Get status info when the case is COMPLETED
+ $table = factory(Application::class)->states('completed')->create();
+ $table = factory(Delegation::class)->states('foreign_keys')->create([
+ 'APP_NUMBER' => $table->APP_NUMBER,
+ 'APP_UID' => $table->APP_UID,
+ ]);
+ $cases = new Cases();
+ $result = $cases->getStatusInfo($table->APP_UID, $table->DEL_INDEX, $table->USR_UID);
+ $this->assertNotEmpty($result);
+ $this->assertArrayHasKey('APP_STATUS', $result);
+ $this->assertArrayHasKey('DEL_INDEX', $result);
+ $this->assertArrayHasKey('PRO_UID', $result);
+ }
+
}
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/TableTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/TableTest.php
new file mode 100644
index 000000000..1344dafca
--- /dev/null
+++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/TableTest.php
@@ -0,0 +1,56 @@
+create();
+
+ $proUid = $additionalTables->PRO_UID;
+ $search = $additionalTables->ADD_TAB_NAME;
+
+ $table = new Table();
+ $result = $table->getTables($proUid, true, false, $search);
+
+ //assertions
+ $this->assertNotEmpty($result);
+ $this->assertEquals($additionalTables->ADD_TAB_NAME, $result[0]['rep_tab_name']);
+
+ $search = '';
+ $table = new Table();
+ $result = $table->getTables($proUid, true, false, $search);
+
+ //assertions
+ $this->assertNotEmpty($result);
+ $this->assertEquals($additionalTables->ADD_TAB_NAME, $result[0]['rep_tab_name']);
+ }
+}
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/AppDelayTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/AppDelayTest.php
new file mode 100644
index 000000000..b703b5bc3
--- /dev/null
+++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/AppDelayTest.php
@@ -0,0 +1,102 @@
+states('paused_foreign_keys')->create();
+ $this->assertCount(1, $table->type('PAUSE')->get());
+ }
+
+ /**
+ * This test scopeNotDisabled
+ *
+ * @covers \ProcessMaker\Model\AppDelay::scopeNotDisabled()
+ * @test
+ */
+ public function it_return_scope_not_action_disable()
+ {
+ $table = factory(AppDelay::class)->states('paused_foreign_keys')->create();
+ $this->assertCount(1, $table->notDisabled()->get());
+ }
+
+ /**
+ * This test scopeCase
+ *
+ * @covers \ProcessMaker\Model\AppDelay::scopeCase()
+ * @test
+ */
+ public function it_return_scope_case()
+ {
+ $table = factory(AppDelay::class)->states('paused_foreign_keys')->create();
+ $this->assertCount(1, $table->case($table->APP_NUMBER)->get());
+ }
+
+ /**
+ * This test scopeIndex
+ *
+ * @covers \ProcessMaker\Model\AppDelay::scopeIndex()
+ * @test
+ */
+ public function it_return_scope_index()
+ {
+ $table = factory(AppDelay::class)->states('paused_foreign_keys')->create();
+ $this->assertCount(1, $table->index($table->APP_DEL_INDEX)->get());
+ }
+
+ /**
+ * This test scopeDelegateUser
+ *
+ * @covers \ProcessMaker\Model\AppDelay::scopeDelegateUser()
+ * @test
+ */
+ public function it_return_scope_delegate_user()
+ {
+ $table = factory(AppDelay::class)->states('paused_foreign_keys')->create();
+ $this->assertCount(1, $table->delegateUser($table->APP_DELEGATION_USER)->get());
+ }
+
+ /**
+ * This test getPaused
+ *
+ * @covers \ProcessMaker\Model\AppDelay::getPaused()
+ * @covers \ProcessMaker\Model\AppDelay::scopeCase()
+ * @covers \ProcessMaker\Model\AppDelay::scopeIndex()
+ * @covers \ProcessMaker\Model\AppDelay::scopeDelegateUser()
+ * @test
+ */
+ public function it_return_paused_threads()
+ {
+ $table = factory(AppDelay::class)->states('paused_foreign_keys')->create();
+ $result = AppDelay::getPaused($table->APP_NUMBER, $table->APP_DEL_INDEX, $table->APP_DELEGATION_USER);
+ $this->assertNotEmpty($result);
+ }
+}
\ No newline at end of file
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php
index ad649350f..ae8b1edca 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php
@@ -170,7 +170,7 @@ class DelegationTest extends TestCase
*/
public function it_return_scope_case_started()
{
- $table = factory(Delegation::class)->states('foreign_keys')->create();
+ $table = factory(Delegation::class)->states('first_thread')->create();
$this->assertCount(1, $table->caseStarted($table->DEL_INDEX)->get());
}
@@ -532,7 +532,7 @@ class DelegationTest extends TestCase
{
$table = factory(Delegation::class)->states('foreign_keys')->create();
$cases = [$table->APP_NUMBER];
- $rangeCases = [$table->APP_NUMBER.'-'.$table->APP_NUMBER];
+ $rangeCases = [$table->APP_NUMBER . '-' . $table->APP_NUMBER];
$this->assertCount(1, $table->casesOrRangeOfCases($cases, $rangeCases)->get());
}
@@ -2150,6 +2150,8 @@ class DelegationTest extends TestCase
//Review the self-service records
$result = Delegation::getSelfService($user->USR_UID);
$this->assertEquals(25, count($result));
+ $result = Delegation::getSelfService($user->USR_UID, ['APP_DELEGATION.APP_NUMBER', 'APP_DELEGATION.DEL_INDEX'], null, null,null, null, null, 0, 15);
+ $this->assertEquals(15, count($result));
}
/**
@@ -3369,7 +3371,7 @@ class DelegationTest extends TestCase
*/
public function it_get_cases_started_by_specific_user()
{
- $delegation = factory(Delegation::class)->states('foreign_keys')->create();
+ $delegation = factory(Delegation::class)->states('first_thread')->create();
$result = Delegation::casesStartedBy($delegation->USR_ID);
$this->assertNotEmpty($result);
}
diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po
index 32c5fc237..8d825507e 100755
--- a/workflow/engine/content/translations/english/processmaker.en.po
+++ b/workflow/engine/content/translations/english/processmaker.en.po
@@ -4493,6 +4493,12 @@ msgstr "City"
msgid "Claim"
msgstr "Claim"
+# TRANSLATION
+# LABEL/ID_CLAIM_THIS_CASE
+#: LABEL/ID_CLAIM_THIS_CASE
+msgid "Claim this case"
+msgstr "Claim this case"
+
# TRANSLATION
# LABEL/ID_CLASSIC_EDITOR
#: LABEL/ID_CLASSIC_EDITOR
@@ -24671,6 +24677,12 @@ msgstr "An error has occurred, please verify on which server \"SendMail\" has be
msgid "send at"
msgstr "send at"
+# TRANSLATION
+# LABEL/ID_SEND_BY
+#: LABEL/ID_SEND_BY
+msgid "Send By"
+msgstr "Send By"
+
# TRANSLATION
# LABEL/ID_SEND_EMAIL_CASE_PARTICIPANTS
#: LABEL/ID_SEND_EMAIL_CASE_PARTICIPANTS
diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql
index c711385dc..b40a740d7 100755
--- a/workflow/engine/data/mysql/insert.sql
+++ b/workflow/engine/data/mysql/insert.sql
@@ -57561,6 +57561,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_CITY','en','City','2020-12-15') ,
( 'LABEL','ID_CHOOSE_TIME','en','Choose a time','2014-08-27') ,
( 'LABEL','ID_CLAIM','en','Claim','2014-01-15') ,
+( 'LABEL','ID_CLAIM_THIS_CASE','en','Claim this case','2021-08-03') ,
( 'LABEL','ID_CLASSIC_EDITOR','en','Classic Editor','2014-01-15') ,
( 'LABEL','ID_CLASS_ALREADY_EXISTS','en','Class already exists','2014-01-15') ,
( 'LABEL','ID_CLASS_TABLE_DOESNT_EXIST','en','This Class Table doesn''t exist!','2014-01-15') ,
@@ -61026,6 +61027,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_SENDING_REQUEST_SALES_DEPARTMENT','en','Sending request to ProcessMaker Sales Department, please wait...','2014-09-18') ,
( 'LABEL','ID_SENDMAIL_NOT_INSTALLED','en','An error has occured, please verify on which server "SendMail" has been installed or any other mail service, and if it has been configured correctly.','2014-01-15') ,
( 'LABEL','ID_SEND_AT','en','send at','2014-01-15') ,
+( 'LABEL','ID_SEND_BY','en','Send By','2021-08-02') ,
( 'LABEL','ID_SEND_EMAIL_CASE_PARTICIPANTS','en','Send Email (Case Participants)','2014-01-15') ,
( 'LABEL','ID_SEND_EMAIL_TO_PARTICIPANTS','en','Send email to participants','2020-12-01') ,
( 'LABEL','ID_SENT','en','Participated','2016-07-11') ,
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php
index 2d00d45b0..b4270196b 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php
@@ -46,6 +46,7 @@ use ProcessMaker\BusinessModel\User as BmUser;
use ProcessMaker\Core\System;
use ProcessMaker\Exception\UploadException;
use ProcessMaker\Exception\CaseNoteUploadFile;
+use ProcessMaker\Model\AppDelay as Delay;
use ProcessMaker\Model\Application as ModelApplication;
use ProcessMaker\Model\AppNotes as Notes;
use ProcessMaker\Model\AppTimeoutAction;
@@ -2456,33 +2457,25 @@ class Cases
/**
* This function get the status information
*
- * @param object $rsCriteria
+ * @param array $result
+ * @param string $status
*
* @return array
* @throws Exception
*/
- private function getStatusInfoDataByRsCriteria($rsCriteria)
+ private function getStatusInfoFormatted(array $result, string $status = '')
{
try {
- $arrayData = [];
-
- if ($rsCriteria->next()) {
- $record = $rsCriteria->getRow();
-
- $arrayData = [
- 'APP_STATUS' => $record['APP_STATUS'],
- 'DEL_INDEX' => [],
- 'PRO_UID' => $record['PRO_UID']
- ];
+ $record = head($result);
+ $arrayData = [
+ 'APP_STATUS' => empty($status) ? $record['APP_STATUS'] : $status,
+ 'DEL_INDEX' => [],
+ 'PRO_UID' => $record['PRO_UID']
+ ];
+ $arrayData['DEL_INDEX'][] = $record['DEL_INDEX'];
+ foreach ($result as $record) {
$arrayData['DEL_INDEX'][] = $record['DEL_INDEX'];
-
- while ($rsCriteria->next()) {
- $record = $rsCriteria->getRow();
-
- $arrayData['DEL_INDEX'][] = $record['DEL_INDEX'];
- }
}
-
//Return
return $arrayData;
} catch (Exception $e) {
@@ -2493,8 +2486,8 @@ class Cases
/**
* Get status info Case
*
- * @param string $applicationUid Unique id of Case
- * @param int $delIndex Delegation index
+ * @param string $appUid Unique id of Case
+ * @param int $index Delegation index
* @param string $userUid Unique id of User
*
* @return array Return an array with status info Case, array empty otherwise
@@ -2502,179 +2495,120 @@ class Cases
*
* @see workflow/engine/methods/cases/main_init.php
* @see workflow/engine/methods/cases/opencase.php
- * @see ProcessMaker\BusinessModel\Cases->setCaseVariables()
- * @see ProcessMaker\BusinessModel\Cases\InputDocument->getCasesInputDocuments()
- * @see ProcessMaker\BusinessModel\Cases\InputDocument->throwExceptionIfHaventPermissionToDelete()
- * @see ProcessMaker\BusinessModel\Cases\OutputDocument->throwExceptionIfCaseNotIsInInbox()
- * @see ProcessMaker\BusinessModel\Cases\OutputDocument->throwExceptionIfHaventPermissionToDelete()
+ * @see \ProcessMaker\BusinessModel\Cases::setCaseVariables()
+ * @see \ProcessMaker\BusinessModel\Cases\InputDocument::getCasesInputDocuments()
+ * @see \ProcessMaker\BusinessModel\Cases\InputDocument::throwExceptionIfHaventPermissionToDelete()
+ * @see \ProcessMaker\BusinessModel\Cases\OutputDocument::throwExceptionIfCaseNotIsInInbox()
+ * @see \ProcessMaker\BusinessModel\Cases\OutputDocument::throwExceptionIfHaventPermissionToDelete()
*/
- public function getStatusInfo($applicationUid, $delIndex = 0, $userUid = "")
+ public function getStatusInfo(string $appUid, int $index = 0, string $userUid = "")
{
try {
- //Verify data
- $this->throwExceptionIfNotExistsCase($applicationUid, $delIndex,
- $this->getFieldNameByFormatFieldName("APP_UID"));
-
- //Get data
- //Status is PAUSED
- $delimiter = DBAdapter::getStringDelimiter();
-
- $criteria = new Criteria("workflow");
-
- $criteria->setDistinct();
- $criteria->addSelectColumn($delimiter . 'PAUSED' . $delimiter . ' AS APP_STATUS');
- $criteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX . " AS DEL_INDEX");
- $criteria->addSelectColumn(AppDelayPeer::PRO_UID);
-
- $criteria->add(AppDelayPeer::APP_UID, $applicationUid, Criteria::EQUAL);
- $criteria->add(AppDelayPeer::APP_TYPE, "PAUSE", Criteria::EQUAL);
- $criteria->add(
- $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL)->addOr(
- $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, 0, Criteria::EQUAL))
- );
-
- if ($delIndex != 0) {
- $criteria->add(AppDelayPeer::APP_DEL_INDEX, $delIndex, Criteria::EQUAL);
+ $arrayData = [];
+ // Verify data
+ $this->throwExceptionIfNotExistsCase($appUid, $index, $this->getFieldNameByFormatFieldName("APP_UID"));
+ // Get the case number
+ $caseNumber = ModelApplication::getCaseNumber($appUid);
+ // Status is PAUSED
+ $result = Delay::getPaused($caseNumber, $index, $userUid);
+ if (!empty($result)) {
+ $arrayData = $this->getStatusInfoFormatted($result, 'PAUSED');
+ return $arrayData;
}
- if ($userUid != "") {
- $criteria->add(AppDelayPeer::APP_DELEGATION_USER, $userUid, Criteria::EQUAL);
+ // Status is UNASSIGNED
+ $query = Delegation::query()->select([
+ 'APP_DELEGATION.APP_NUMBER',
+ 'APP_DELEGATION.DEL_INDEX',
+ 'APP_DELEGATION.PRO_UID'
+ ]);
+ $query->taskAssignType('SELF_SERVICE');
+ $query->threadOpen()->withoutUserId();
+ // Filter specific user
+ if (!empty($userUid)) {
+ $delegation = new Delegation();
+ $delegation->casesUnassigned($query, $userUid);
+ }
+ // Filter specific case
+ $query->case($caseNumber);
+ // Filter specific index
+ if (is_int($index)) {
+ $query->index($index);
+ }
+ $results = $query->get();
+ $arrayData = $results->values()->toArray();
+ if (!empty($arrayData)) {
+ $arrayData = $this->getStatusInfoFormatted($arrayData, 'UNASSIGNED');
+ return $arrayData;
}
- $rsCriteria = AppDelayPeer::doSelectRS($criteria);
- $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ // Status is TO_DO, DRAFT
+ $query = Delegation::query()->select([
+ 'APPLICATION.APP_STATUS',
+ 'APP_DELEGATION.APP_NUMBER',
+ 'APP_DELEGATION.DEL_INDEX',
+ 'APP_DELEGATION.PRO_UID'
+ ]);
+ $query->joinApplication();
+ // Filter the status TO_DO and DRAFT
+ $query->casesInProgress([1, 2]);
+ // Filter the OPEN thread
+ $query->threadOpen();
+ // Filter specific case
+ $query->case($caseNumber);
+ // Filter specific index
+ if ($index > 0) {
+ $query->index($index);
+ }
+ // Filter specific user
+ if (!empty($userUid)) {
+ $userId = !empty($userUid) ? User::getId($userUid) : 0;
+ $query->userId($userId);
+ }
+ $results = $query->get();
+ $arrayData = $results->values()->toArray();
- $arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria);
+ if (!empty($arrayData)) {
+ $arrayData = $this->getStatusInfoFormatted($arrayData);
+ return $arrayData;
+ }
+ // Status is CANCELLED, COMPLETED
+ $query = Delegation::query()->select([
+ 'APPLICATION.APP_STATUS',
+ 'APP_DELEGATION.APP_NUMBER',
+ 'APP_DELEGATION.DEL_INDEX',
+ 'APP_DELEGATION.PRO_UID'
+ ]);
+ $query->joinApplication();
+ // Filter the status COMPLETED and CANCELLED
+ $query->casesDone([3, 4]);
+ // Filter specific case
+ $query->case($caseNumber);
+ // Filter specific index
+ if ($index > 0) {
+ $query->index($index);
+ }
+ // Filter specific user
+ if (!empty($userUid)) {
+ $userId = !empty($userUid) ? User::getId($userUid) : 0;
+ $query->userId($userId);
+ }
+ $query->lastThread();
+ $results = $query->get();
+ $arrayData = $results->values()->toArray();
+ if (!empty($arrayData)) {
+ $arrayData = $this->getStatusInfoFormatted($arrayData);
+ return $arrayData;
+ }
+
+ // Status is PARTICIPATED
+ $arrayData = Delegation::getParticipatedInfo($appUid);
if (!empty($arrayData)) {
return $arrayData;
}
- //Status is UNASSIGNED
- if ($userUid != '') {
- $appCacheView = new AppCacheView();
-
- $criteria = $appCacheView->getUnassignedListCriteria($userUid);
- } else {
- $criteria = new Criteria('workflow');
-
- $criteria->add(AppCacheViewPeer::DEL_FINISH_DATE, null, Criteria::ISNULL);
- $criteria->add(AppCacheViewPeer::USR_UID, '', Criteria::EQUAL);
- }
-
- $criteria->setDistinct();
- $criteria->clearSelectColumns();
- $criteria->addSelectColumn($delimiter . 'UNASSIGNED' . $delimiter . ' AS APP_STATUS');
- $criteria->addSelectColumn(AppCacheViewPeer::DEL_INDEX);
- $criteria->addSelectColumn(AppCacheViewPeer::PRO_UID);
-
- $criteria->add(AppCacheViewPeer::APP_UID, $applicationUid, Criteria::EQUAL);
-
- if ($delIndex != 0) {
- $criteria->add(AppCacheViewPeer::DEL_INDEX, $delIndex, Criteria::EQUAL);
- }
-
- $rsCriteria = AppCacheViewPeer::doSelectRS($criteria);
- $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
-
- $arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria);
-
- if (!empty($arrayData)) {
- return $arrayData;
- }
-
- //Status is TO_DO, DRAFT
- $criteria = new Criteria("workflow");
-
- $criteria->setDistinct();
- $criteria->addSelectColumn(ApplicationPeer::APP_STATUS);
- $criteria->addSelectColumn(ApplicationPeer::PRO_UID);
- $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX);
-
- $arrayCondition = array();
- $arrayCondition[] = array(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL);
- $arrayCondition[] = array(
- ApplicationPeer::APP_UID,
- $delimiter . $applicationUid . $delimiter,
- Criteria::EQUAL
- );
- $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
-
- $criteria->add(
- $criteria->getNewCriterion(ApplicationPeer::APP_STATUS, "TO_DO", Criteria::EQUAL)->addAnd(
- $criteria->getNewCriterion(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL))->addAnd(
- $criteria->getNewCriterion(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))
- )->addOr(
- $criteria->getNewCriterion(ApplicationPeer::APP_STATUS, "DRAFT", Criteria::EQUAL)->addAnd(
- $criteria->getNewCriterion(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))
- );
-
- if ($delIndex != 0) {
- $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL);
- }
-
- if ($userUid != "") {
- $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL);
- }
-
- $rsCriteria = ApplicationPeer::doSelectRS($criteria);
- $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
-
- $arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria);
-
- if (!empty($arrayData)) {
- return $arrayData;
- }
-
- //Status is CANCELLED, COMPLETED
- $criteria = new Criteria("workflow");
-
- $criteria->addSelectColumn(ApplicationPeer::APP_STATUS);
- $criteria->addSelectColumn(ApplicationPeer::PRO_UID);
- $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX);
-
- $arrayCondition = array();
- $arrayCondition[] = array(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL);
- $arrayCondition[] = array(
- ApplicationPeer::APP_UID,
- $delimiter . $applicationUid . $delimiter,
- Criteria::EQUAL
- );
- $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
-
- if ($delIndex != 0) {
- $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL);
- }
-
- if ($userUid != "") {
- $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL);
- }
-
- $criteria2 = clone $criteria;
-
- $criteria2->setDistinct();
-
- $criteria2->add(ApplicationPeer::APP_STATUS, ['CANCELLED', 'COMPLETED'], Criteria::IN);
- $criteria2->add(AppDelegationPeer::DEL_LAST_INDEX, 1, Criteria::EQUAL);
-
- $rsCriteria2 = ApplicationPeer::doSelectRS($criteria2);
- $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC);
-
- $arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria2);
-
- if (!empty($arrayData)) {
- return $arrayData;
- }
-
- //Status is PARTICIPATED
- $arrayData = Delegation::getParticipatedInfo($applicationUid);
-
- if (!empty($arrayData)) {
- return $arrayData;
- }
-
- //Return
- return array();
+ return $arrayData;
} catch (Exception $e) {
throw $e;
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php
index 5886f9265..cc9d47f4d 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php
@@ -1492,8 +1492,7 @@ class AbstractCases implements CasesInterface
/**
* Count how many cases has each process
- *
- * @param string $list
+ *
* @param int $category
* @param bool $topTen
* @param array $processes
@@ -1528,7 +1527,7 @@ class AbstractCases implements CasesInterface
$query->topTen('TOTAL', 'DESC');
}
if (!empty($processes)) {
- $query->inProcesses($processes);
+ $query->processInList($processes);
}
return $query->get()->values()->toArray();
}
@@ -1574,7 +1573,7 @@ class AbstractCases implements CasesInterface
}
$query->joinProcess();
if (!is_null($processId)) {
- $query->inProcesses([$processId]);
+ $query->processInList([$processId]);
}
if (!is_null($dateFrom)) {
$query->where('APP_DELEGATION.DEL_DELEGATE_DATE', '>=', $dateFrom);
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php
index 9ce4c1989..dc560506c 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php
@@ -4,6 +4,7 @@ namespace ProcessMaker\BusinessModel\Cases;
use G;
use ProcessMaker\Model\Application;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\User;
@@ -166,4 +167,44 @@ class Draft extends AbstractCases
// Return the number of rows
return $query->count(['APP_DELEGATION.APP_NUMBER']);
}
+
+ /**
+ * Returns the total cases of the custom draft list.
+ * @param int $id
+ * @param string $type
+ * @return array
+ */
+ public function getCustomListCount(int $id, string $type): array
+ {
+ $caseList = CaseList::where('CAL_ID', '=', $id)
+ ->where('CAL_TYPE', '=', $type)
+ ->leftJoin('ADDITIONAL_TABLES', 'ADDITIONAL_TABLES.ADD_TAB_UID', '=', 'CASE_LIST.ADD_TAB_UID')
+ ->select([
+ 'CASE_LIST.*',
+ 'ADDITIONAL_TABLES.ADD_TAB_NAME'
+ ])
+ ->get()
+ ->first();
+
+ $query = Delegation::query()->select();
+ $query->draft($this->getUserId());
+
+ $name = '';
+ $description = '';
+ $tableName = '';
+ if (!is_null($caseList)) {
+ $name = $caseList->CAL_NAME;
+ $description = $caseList->CAL_DESCRIPTION;
+ $tableName = $caseList->ADD_TAB_NAME;
+ $query->leftJoin($caseList->ADD_TAB_NAME, $caseList->ADD_TAB_NAME . '.APP_UID', '=', 'APP_DELEGATION.APP_UID');
+ }
+ $count = $query->count(['APP_DELEGATION.APP_NUMBER']);
+ return [
+ 'label' => G::LoadTranslation('ID_NUMBER_OF_CASES_DRAFT') . $count,
+ 'name' => $name,
+ 'description' => $description,
+ 'tableName' => $tableName,
+ 'total' => $count
+ ];
+ }
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Inbox.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Inbox.php
index 67d6754d5..f31a5eb63 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Inbox.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Inbox.php
@@ -4,6 +4,7 @@ namespace ProcessMaker\BusinessModel\Cases;
use G;
use ProcessMaker\Model\Application;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\User;
@@ -179,4 +180,44 @@ class Inbox extends AbstractCases
// Return the number of rows
return $query->count(['APP_DELEGATION.APP_NUMBER']);
}
+
+ /**
+ * Returns the total cases of the custom inbox list.
+ * @param int $id
+ * @param string $type
+ * @return array
+ */
+ public function getCustomListCount(int $id, string $type): array
+ {
+ $caseList = CaseList::where('CAL_ID', '=', $id)
+ ->where('CAL_TYPE', '=', $type)
+ ->leftJoin('ADDITIONAL_TABLES', 'ADDITIONAL_TABLES.ADD_TAB_UID', '=', 'CASE_LIST.ADD_TAB_UID')
+ ->select([
+ 'CASE_LIST.*',
+ 'ADDITIONAL_TABLES.ADD_TAB_NAME'
+ ])
+ ->get()
+ ->first();
+
+ $query = Delegation::query()->select();
+ $query->inbox($this->getUserId());
+
+ $name = '';
+ $description = '';
+ $tableName = '';
+ if (!is_null($caseList)) {
+ $name = $caseList->CAL_NAME;
+ $description = $caseList->CAL_DESCRIPTION;
+ $tableName = $caseList->ADD_TAB_NAME;
+ $query->leftJoin($caseList->ADD_TAB_NAME, $caseList->ADD_TAB_NAME . '.APP_UID', '=', 'APP_DELEGATION.APP_UID');
+ }
+ $count = $query->count(['APP_DELEGATION.APP_NUMBER']);
+ return [
+ 'label' => G::LoadTranslation('ID_NUMBER_OF_CASES_INBOX') . $count,
+ 'name' => $name,
+ 'description' => $description,
+ 'tableName' => $tableName,
+ 'total' => $count
+ ];
+ }
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php
index 9cdbb0d85..1b920bb3f 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php
@@ -3,6 +3,7 @@
namespace ProcessMaker\BusinessModel\Cases;
use G;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\User;
@@ -173,4 +174,44 @@ class Paused extends AbstractCases
// Return the number of rows
return $query->count(['APP_DELEGATION.APP_NUMBER']);
}
+
+ /**
+ * Returns the total cases of the custom paused list.
+ * @param int $id
+ * @param string $type
+ * @return array
+ */
+ public function getCustomListCount(int $id, string $type): array
+ {
+ $caseList = CaseList::where('CAL_ID', '=', $id)
+ ->where('CAL_TYPE', '=', $type)
+ ->leftJoin('ADDITIONAL_TABLES', 'ADDITIONAL_TABLES.ADD_TAB_UID', '=', 'CASE_LIST.ADD_TAB_UID')
+ ->select([
+ 'CASE_LIST.*',
+ 'ADDITIONAL_TABLES.ADD_TAB_NAME'
+ ])
+ ->get()
+ ->first();
+
+ $query = Delegation::query()->select();
+ $query->paused($this->getUserId());
+
+ $name = '';
+ $description = '';
+ $tableName = '';
+ if (!is_null($caseList)) {
+ $name = $caseList->CAL_NAME;
+ $description = $caseList->CAL_DESCRIPTION;
+ $tableName = $caseList->ADD_TAB_NAME;
+ $query->leftJoin($caseList->ADD_TAB_NAME, $caseList->ADD_TAB_NAME . '.APP_UID', '=', 'APP_DELEGATION.APP_UID');
+ }
+ $count = $query->count(['APP_DELEGATION.APP_NUMBER']);
+ return [
+ 'label' => G::LoadTranslation('ID_NUMBER_OF_CASES_PAUSED') . $count,
+ 'name' => $name,
+ 'description' => $description,
+ 'tableName' => $tableName,
+ 'total' => $count
+ ];
+ }
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Unassigned.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Unassigned.php
index bab220af2..5c86ea9c1 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Unassigned.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Unassigned.php
@@ -4,6 +4,7 @@ namespace ProcessMaker\BusinessModel\Cases;
use G;
use ProcessMaker\Model\Application;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\User;
@@ -181,4 +182,44 @@ class Unassigned extends AbstractCases
// Return the number of rows
return $query->count(['APP_DELEGATION.APP_NUMBER']);
}
+
+ /**
+ * Returns the total cases of the custom unassigned list.
+ * @param int $id
+ * @param string $type
+ * @return array
+ */
+ public function getCustomListCount(int $id, string $type): array
+ {
+ $caseList = CaseList::where('CAL_ID', '=', $id)
+ ->where('CAL_TYPE', '=', $type)
+ ->leftJoin('ADDITIONAL_TABLES', 'ADDITIONAL_TABLES.ADD_TAB_UID', '=', 'CASE_LIST.ADD_TAB_UID')
+ ->select([
+ 'CASE_LIST.*',
+ 'ADDITIONAL_TABLES.ADD_TAB_NAME'
+ ])
+ ->get()
+ ->first();
+
+ $query = Delegation::query()->select();
+ $query->selfService($this->getUserId());
+
+ $name = '';
+ $description = '';
+ $tableName = '';
+ if (!is_null($caseList)) {
+ $name = $caseList->CAL_NAME;
+ $description = $caseList->CAL_DESCRIPTION;
+ $tableName = $caseList->ADD_TAB_NAME;
+ $query->leftJoin($caseList->ADD_TAB_NAME, $caseList->ADD_TAB_NAME . '.APP_UID', '=', 'APP_DELEGATION.APP_UID');
+ }
+ $count = $query->count(['APP_DELEGATION.APP_NUMBER']);
+ return [
+ 'label' => G::LoadTranslation('ID_NUMBER_OF_CASES_UNASSIGNED') . $count,
+ 'name' => $name,
+ 'description' => $description,
+ 'tableName' => $tableName,
+ 'total' => $count
+ ];
+ }
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php
index b2d504532..6f155f7e1 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php
@@ -8,6 +8,7 @@ use Fields;
use G;
use PmTable;
use ProcessMaker\BusinessModel\ReportTable as BusinessModelRpt;
+use ProcessMaker\Model\AdditionalTables as ModelAdditionalTables;
use stdClass;
class Table
@@ -23,34 +24,25 @@ class Table
'or','throw','protected','public','static','switch','xor','try','use','var','while'];
/**
- * List of Tables in process
- * @var string $pro_uid. Uid for process
- * @var string $reportFlag. If is report table
- *
- * @author Brayan Pereyra (Cochalo)
- * @copyright Colosa - Bolivia
- *
+ * List of Tables in process.
+ * @param string $proUid
+ * @param bool $reportFlag
+ * @param bool $offline
+ * @param string $search
* @return array
*/
- public function getTables($pro_uid = '', $reportFlag = false, $offline = false)
+ public function getTables(string $proUid = '', bool $reportFlag = false, bool $offline = false, string $search = ''): array
{
- //VALIDATION
if ($reportFlag) {
- $pro_uid = $this->validateProUid($pro_uid);
+ $proUid = $this->validateProUid($proUid);
}
-
- $reportTables = array();
- $oCriteria = new \Criteria('workflow');
- $oCriteria->addSelectColumn(\AdditionalTablesPeer::ADD_TAB_UID);
- $oCriteria->add(\AdditionalTablesPeer::PRO_UID, $pro_uid, \Criteria::EQUAL);
- $oDataset = \AdditionalTablesPeer::doSelectRS($oCriteria);
- $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
- while ($oDataset->next()) {
- $row = $oDataset->getRow();
- $reportTables[] = $this->getTable($row['ADD_TAB_UID'], $pro_uid, $reportFlag, false);
- }
-
- return $reportTables;
+ $additionalTables = ModelAdditionalTables::where('PRO_UID', '=', $proUid)
+ ->where('ADD_TAB_NAME', 'LIKE', "%{$search}%")
+ ->get();
+ $additionalTables->transform(function ($object) use ($proUid, $reportFlag) {
+ return $this->getTable($object->ADD_TAB_UID, $proUid, $reportFlag, false);
+ });
+ return $additionalTables->toArray();
}
/**
diff --git a/workflow/engine/src/ProcessMaker/Model/AppDelay.php b/workflow/engine/src/ProcessMaker/Model/AppDelay.php
index aaef99c09..20018aaeb 100644
--- a/workflow/engine/src/ProcessMaker/Model/AppDelay.php
+++ b/workflow/engine/src/ProcessMaker/Model/AppDelay.php
@@ -30,4 +30,94 @@ class AppDelay extends Model
'APP_ENABLE_ACTION_DATE',
'APP_DISABLE_ACTION_DATE',
];
+
+ /**
+ * Scope a query to filter a specific type
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param string $type
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeType($query, string $type = 'PAUSE')
+ {
+ return $query->where('APP_DELAY.APP_TYPE', $type);
+ }
+ /**
+ * Scope a query to filter a specific disable action
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeNotDisabled($query)
+ {
+ return $query->where('APP_DELAY.APP_DISABLE_ACTION_USER', 0);
+ }
+
+ /**
+ * Scope a query to filter a specific case
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param int $appNumber
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeCase($query, int $appNumber)
+ {
+ return $query->where('APP_DELAY.APP_NUMBER', $appNumber);
+ }
+
+ /**
+ * Scope a query to filter a specific index
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param int $index
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeIndex($query, int $index)
+ {
+ return $query->where('APP_DELAY.APP_DEL_INDEX', $index);
+ }
+
+ /**
+ * Scope a query to filter a specific user
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param string $user
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeDelegateUser($query, string $user)
+ {
+ return $query->where('APP_DELAY.APP_DELEGATION_USER', $user);
+ }
+
+ /**
+ * Get the thread paused
+ *
+ * @param int $appNumber
+ * @param int $index
+ * @param string $userUid
+ *
+ * @return array
+ */
+ public static function getPaused(int $appNumber, int $index, string $userUid = '')
+ {
+ $query = AppDelay::query()->select([
+ 'APP_NUMBER',
+ 'APP_DEL_INDEX AS DEL_INDEX',
+ 'PRO_UID'
+ ]);
+ $query->type('PAUSE')->notDisabled();
+ $query->case($appNumber);
+ // Filter specific index
+ if ($index > 0) {
+ $query->index($index);
+ }
+ // Filter specific delegate user
+ if (!empty($userUid)) {
+ $query->delegateUser($userUid);
+ }
+ // Get the result
+ $results = $query->get();
+
+ return $results->values()->toArray();
+ }
}
diff --git a/workflow/engine/src/ProcessMaker/Model/CaseList.php b/workflow/engine/src/ProcessMaker/Model/CaseList.php
index 1e1f30f50..ae67f7bcd 100644
--- a/workflow/engine/src/ProcessMaker/Model/CaseList.php
+++ b/workflow/engine/src/ProcessMaker/Model/CaseList.php
@@ -173,9 +173,10 @@ class CaseList extends Model
* @param string $search
* @param int $offset
* @param int $limit
+ * @param bool $paged
* @return array
*/
- public static function getSetting(string $type, string $search, int $offset, int $limit): array
+ public static function getSetting(string $type, string $search, int $offset, int $limit, bool $paged = true): array
{
$order = 'asc';
$model = CaseList::where('CAL_TYPE', '=', $type)
@@ -198,7 +199,11 @@ class CaseList extends Model
$count = $model->count();
- $data = $model->offset($offset)->limit($limit)->get();
+ if ($paged === true) {
+ $model->offset($offset)->limit($limit);
+ }
+ $data = $model->get();
+
$data->transform(function ($item, $key) {
if (is_null($item->CAL_COLUMNS)) {
$item->CAL_COLUMNS = '[]';
diff --git a/workflow/engine/src/ProcessMaker/Model/Delegation.php b/workflow/engine/src/ProcessMaker/Model/Delegation.php
index 8d0fd30f1..95a65027b 100644
--- a/workflow/engine/src/ProcessMaker/Model/Delegation.php
+++ b/workflow/engine/src/ProcessMaker/Model/Delegation.php
@@ -173,18 +173,6 @@ class Delegation extends Model
return $query->where('DEL_INDEX', '=', 1);
}
- /**
- * Scope a query to get the in-progress
- *
- * @param \Illuminate\Database\Eloquent\Builder $query
- *
- * @return \Illuminate\Database\Eloquent\Builder
- */
- public function scopeCaseInProgress($query)
- {
- return $query->statusIds([Application::STATUS_DRAFT, Application::STATUS_TODO]);
- }
-
/**
* Scope a query to get the to_do cases
*
@@ -777,19 +765,6 @@ class Delegation extends Model
return $query->whereIn('APP_DELEGATION.PRO_ID', $processes);
}
- /**
- * Scope where in processes
- *
- * @param \Illuminate\Database\Eloquent\Builder $query
- * @param array $processes
- *
- * @return \Illuminate\Database\Eloquent\Builder
- */
- public function scopeInProcesses($query, array $processes)
- {
- return $query->whereIn('PROCESS.PRO_ID', $processes);
- }
-
/**
* Scope the Inbox cases
*
@@ -812,26 +787,6 @@ class Delegation extends Model
return $query;
}
- /**
- * Scope the Inbox cases
- *
- * @param \Illuminate\Database\Eloquent\Builder $query
- *
- * @return \Illuminate\Database\Eloquent\Builder
- */
- public function scopeInboxWithoutUser($query)
- {
- // This scope is for the join with the APP_DELEGATION table
- $query->joinApplication();
- $query->status(Application::STATUS_TODO);
- // Scope for the restriction of the task that must not be searched for
- $query->excludeTaskTypes(Task::DUMMY_TASKS);
- // Scope that establish that the DEL_THREAD_STATUS must be OPEN
- $query->threadOpen();
-
- return $query;
- }
-
/**
* Scope a self service cases
*
@@ -1417,7 +1372,7 @@ class Delegation extends Model
* @param string $appUid
* @return array
*
- * @see \ProcessMaker\BusinessModel\Cases:getStatusInfo()
+ * @see \ProcessMaker\BusinessModel\Cases::getStatusInfo()
*/
public static function getParticipatedInfo($appUid)
{
diff --git a/workflow/engine/src/ProcessMaker/Model/User.php b/workflow/engine/src/ProcessMaker/Model/User.php
index 752d1f2a4..44add6a7d 100644
--- a/workflow/engine/src/ProcessMaker/Model/User.php
+++ b/workflow/engine/src/ProcessMaker/Model/User.php
@@ -215,6 +215,7 @@ class User extends Model
public static function getInformation(int $usrId)
{
$query = User::query()->select([
+ 'USR_ID',
'USR_USERNAME',
'USR_FIRSTNAME',
'USR_LASTNAME',
@@ -226,6 +227,7 @@ class User extends Model
$results = $query->get();
$info = [];
$results->each(function ($item) use (&$info) {
+ $info['usr_id'] = $item->USR_ID;
$info['usr_username'] = $item->USR_USERNAME;
$info['usr_firstname'] = $item->USR_FIRSTNAME;
$info['usr_lastname'] = $item->USR_LASTNAME;
diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Home.php b/workflow/engine/src/ProcessMaker/Services/Api/Home.php
index 597ec65ab..e2c87f706 100644
--- a/workflow/engine/src/ProcessMaker/Services/Api/Home.php
+++ b/workflow/engine/src/ProcessMaker/Services/Api/Home.php
@@ -14,6 +14,7 @@ use ProcessMaker\BusinessModel\Cases\Paused;
use ProcessMaker\BusinessModel\Cases\Search;
use ProcessMaker\BusinessModel\Cases\Supervising;
use ProcessMaker\BusinessModel\Cases\Unassigned;
+use ProcessMaker\Model\CaseList;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\ProcessCategory;
@@ -609,6 +610,30 @@ class Home extends Api
if ($menuInstance->Id[$i] === 'ID_CASE_ARCHIVE_SEARCH') {
$option->icon = "fas fa-archive";
}
+ //custom cases list
+ if (in_array($menuInstance->Id[$i], $optionsWithCounter)) {
+ $mapKeys = [
+ 'CASES_INBOX' => 'inbox',
+ 'CASES_DRAFT' => 'draft',
+ 'CASES_SELFSERVICE' => 'unassigned',
+ 'CASES_PAUSED' => 'paused'
+ ];
+ $option->customCasesList = [];
+ $result = CaseList::getSetting($mapKeys[$menuInstance->Id[$i]], '', 0, 10, false);
+ foreach ($result['data'] as $value) {
+ $option->customCasesList[] = [
+ "href" => "casesListExtJs?action=" . $mapKeys[$menuInstance->Id[$i]],
+ "id" => $value['id'],
+ "title" => $value['name'],
+ "description" => $value['description'],
+ "icon" => $value['iconList'],
+ "badge" => [
+ "text" => "0",
+ "class" => "badge-custom"
+ ]
+ ];
+ }
+ }
// Add option to the menu
$menuHome[] = $option;
}
@@ -727,10 +752,48 @@ class Home extends Api
$result = [];
$result['label'] = $text . $count;
$result['total'] = $count;
-
return $result;
}
+ /**
+ * Get task counters for inbox, draft, paused, and unassigned for custom case lists.
+ * @url GET /:task/counter/caseList/:id
+ * @param string $task
+ * @param int $id
+ * @return array
+ * @access protected
+ * @class AccessControl {@permission PM_CASES}
+ */
+ public function getCustomCaseListCounter(string $task, int $id)
+ {
+ try {
+ $usrUid = $this->getUserId();
+ $usrId = !empty($usrUid) ? User::getId($usrUid) : 0;
+ switch ($task) {
+ case 'inbox':
+ $taskList = new Inbox();
+ break;
+ case 'draft':
+ $taskList = new Draft();
+ break;
+ case 'paused':
+ $taskList = new Paused();
+ break;
+ case 'unassigned':
+ $taskList = new Unassigned();
+ break;
+ default:
+ return [];
+ }
+ $taskList->setUserUid($usrUid);
+ $taskList->setUserId($usrId);
+ $result = $taskList->getCustomListCount($id, $task);
+ return $result;
+ } catch (Exception $e) {
+ throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
+ }
+ }
+
/**
* Get the tasks counters for todo, draft, paused and unassigned
*
diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/ReportTable.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/ReportTable.php
index 004afda62..63bc90253 100644
--- a/workflow/engine/src/ProcessMaker/Services/Api/Project/ReportTable.php
+++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/ReportTable.php
@@ -1,33 +1,29 @@
- * @copyright Colosa - Bolivia
- *
* @protected
*/
class ReportTable extends Api
{
/**
- * @param string $prj_uid {@min 1} {@max 32}
- *
- * @author Brayan Pereyra (Cochalo)
- * @copyright Colosa - Bolivia
+ * Get list of the report tables by project.
+ * @url GET /:proUid/report-tables
+ * @param string $proUid {@min 1} {@max 32}
+ * @param string $search
* @return array
- *
- * @url GET /:prj_uid/report-tables
+ * @throws RestException
*/
- public function doGetReportTables($prj_uid)
+ public function doGetReportTables(string $proUid, string $search = '')
{
try {
- $oReportTable = new \ProcessMaker\BusinessModel\Table();
- $response = $oReportTable->getTables($prj_uid, true);
+ $reportTable = new Table();
+ $response = $reportTable->getTables($proUid, true, false, $search);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
@@ -38,9 +34,6 @@ class ReportTable extends Api
* @param string $prj_uid {@min 1} {@max 32}
* @param string $rep_uid {@min 1} {@max 32}
* @return array
- * @author Brayan Pereyra (Cochalo)
- * @copyright Colosa - Bolivia
- *
* @url GET /:prj_uid/report-table/:rep_uid
*/
public function doGetReportTable($prj_uid, $rep_uid)
@@ -58,9 +51,6 @@ class ReportTable extends Api
* @param string $prj_uid {@min 1} {@max 32}
* @param string $rep_uid {@min 1} {@max 32}
* @return array
- * @author Brayan Pereyra (Cochalo)
- * @copyright Colosa - Bolivia
- *
* @url GET /:prj_uid/report-table/:rep_uid/populate
*/
public function doGetPopulateReportTable($prj_uid, $rep_uid)
@@ -78,9 +68,6 @@ class ReportTable extends Api
* @param string $prj_uid {@min 1} {@max 32}
* @param string $rep_uid {@min 1} {@max 32}
* @return array
- * @author Brayan Pereyra (Cochalo)
- * @copyright Colosa - Bolivia
- *
* @url GET /:prj_uid/report-table/:rep_uid/data
*/
public function doGetReportTableData($prj_uid, $rep_uid)
diff --git a/workflow/engine/templates/cases/open.js b/workflow/engine/templates/cases/open.js
index 14f117908..adca3bdf9 100644
--- a/workflow/engine/templates/cases/open.js
+++ b/workflow/engine/templates/cases/open.js
@@ -416,7 +416,7 @@ Ext.onReady(function(){
buttonCancel = new Ext.Button({
buttonAlign: 'center',
- text: 'Cancel',
+ text: _("ID_CANCEL"),
handler: redirectHistory,
cls: 'cancelSummary',
width: '100px',
@@ -427,7 +427,7 @@ Ext.onReady(function(){
buttonClaimCase = new Ext.Button({
buttonAlign: 'center',
ui: 'round',
- text: 'Claim this case',
+ text: _("ID_CLAIM_THIS_CASE"),
handler: claimCase,
cls: 'claimCaseSummary',
width: '120px',