+
@@ -251,7 +250,6 @@ import MultiviewHeader from "../../components/headers/MultiviewHeader.vue";
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 ModalComments from "../modal/ModalComments.vue";
import { Event } from 'vue-tables-2';
import CurrentUserCell from "../../components/vuetable/CurrentUserCell.vue";
@@ -270,7 +268,6 @@ export default {
MultiviewHeader,
VueCardView,
VueListView,
- ModalPauseCase,
CurrentUserCell,
ModalComments
},
@@ -680,14 +677,6 @@ export default {
this.$refs["vueListView"].getData();
}
},
- /**
- * Show modal to pause a case
- * @param {objec} data
- */
- showModalPause(data) {
- this.$refs["modal-pause-case"].data = data;
- this.$refs["modal-pause-case"].show();
- },
/**
* Show options in the ellipsis
* @param {object} data
@@ -705,13 +694,6 @@ export default {
that.openComments(data);
}
},
- pause: {
- name: "pause case",
- icon: "far fa-pause-circle",
- fn: function() {
- that.showModalPause(data);
- }
- },
claim: {
name: "claim case",
icon: "fas fa-briefcase",
diff --git a/resources/assets/js/home/XCase.vue b/resources/assets/js/home/XCase.vue
index e2d9ef9fc..e1cb815c0 100644
--- a/resources/assets/js/home/XCase.vue
+++ b/resources/assets/js/home/XCase.vue
@@ -49,6 +49,12 @@ export default {
window.config.SYS_URI +
`cases/open?APP_UID=${this.dataCase.APP_UID}&DEL_INDEX=${this.dataCase.DEL_INDEX}&TAS_UID=${this.dataCase.TAS_UID}&action=${this.dataCase.ACTION}`;
}
+ if (this.dataCase.UNASSIGNED === true) {
+ this.path =
+ window.config.SYS_SERVER_AJAX +
+ window.config.SYS_URI +
+ `cases/open?APP_UID=${this.dataCase.APP_UID}&DEL_INDEX=${this.dataCase.DEL_INDEX}&action=unassigned`;
+ }
setTimeout(() => {
let that = this;
diff --git a/workflow/engine/classes/Derivation.php b/workflow/engine/classes/Derivation.php
index 334753bdd..1ad2fbbff 100644
--- a/workflow/engine/classes/Derivation.php
+++ b/workflow/engine/classes/Derivation.php
@@ -1496,8 +1496,8 @@ class Derivation
if ($taskNextDel->getTasAssignType() == "SELF_SERVICE" && !empty(trim($tasGroupVariable))) {
$nextTaskGroupVariable = trim($tasGroupVariable, " @#");
- if (isset($oldFields["APP_DATA"][$nextTaskGroupVariable])) {
- $dataVariable = $oldFields["APP_DATA"][$nextTaskGroupVariable];
+ if (isset($currentFields["APP_DATA"][$nextTaskGroupVariable])) {
+ $dataVariable = $currentFields["APP_DATA"][$nextTaskGroupVariable];
$dataVariable = (is_array($dataVariable))? $dataVariable : trim($dataVariable);
if (!empty($dataVariable)) {
@@ -1512,7 +1512,7 @@ class Derivation
}
}
// We will to send the notifications
- $sendNotificationsMobile = $this->sendNotificationsMobile($oldFields, $subProcessInfo, $newCase['INDEX']);
+ $sendNotificationsMobile = $this->sendNotificationsMobile($currentFields, $subProcessInfo, $newCase['INDEX']);
$nextTaskData = $taskNextDel->toArray(BasePeer::TYPE_FIELDNAME);
$nextTaskData['USR_UID'] = $subProcessInfo['USR_UID'];
$sendNotifications = $this->notifyAssignedUser($appFields, $nextTaskData, $newCase['INDEX']);
diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php
index 7174c853c..4eb0446e0 100644
--- a/workflow/engine/classes/WorkspaceTools.php
+++ b/workflow/engine/classes/WorkspaceTools.php
@@ -4200,6 +4200,20 @@ class WorkspaceTools
APP_STATUS_ID = 0");
$con->commit();
+ // Populating APPLICATION.APP_INIT_USER_ID
+ CLI::logging("-> Populating APPLICATION.APP_INIT_USER_ID \n");
+ $con->begin();
+ $stmt = $con->createStatement();
+ $rs = $stmt->executeQuery("UPDATE APPLICATION AS AP
+ INNER JOIN (
+ SELECT USERS.USR_UID, USERS.USR_ID
+ FROM USERS
+ ) AS USR
+ ON (AP.APP_INIT_USER = USR.USR_UID)
+ SET AP.APP_INIT_USER_ID = USR.USR_ID
+ WHERE AP.APP_INIT_USER_ID = 0");
+ $con->commit();
+
// Populating APPLICATION.APP_FINISH_DATE
CLI::logging("-> Populating APPLICATION.APP_FINISH_DATE \n");
$con->begin();
diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php
index 288078984..7bf693273 100644
--- a/workflow/engine/classes/WsBase.php
+++ b/workflow/engine/classes/WsBase.php
@@ -10,6 +10,7 @@ use ProcessMaker\ChangeLog\ChangeLog;
/*----------------------------------********---------------------------------*/
use ProcessMaker\Core\JobsManager;
use ProcessMaker\Core\System;
+use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
class WsBase
@@ -3284,29 +3285,36 @@ class WsBase
$_SESSION["INDEX"] = $delIndex;
$_SESSION["USER_LOGGED"] = $userUid;
+ // Validate the appUid
if (empty($caseUid)) {
$result = new WsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " caseUid");
-
$g->sessionVarRestore();
return $result;
}
+ // Validate the status
+ $caseInfo = Application::getCase($caseUid);
+ if ($caseInfo['APP_STATUS'] === Application::STATUS_DRAFT_NAME) {
+ $result = new WsResponse(100, G::LoadTranslation("ID_DRAFT_CASES_CAN_NOT_PAUSED"));
+ $g->sessionVarRestore();
+ return $result;
+ }
+ // Validate the index
if (empty($delIndex)) {
$result = new WsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " delIndex");
-
$g->sessionVarRestore();
return $result;
}
+ // Validate the user
if (empty($userUid)) {
$result = new WsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " userUid");
-
$g->sessionVarRestore();
return $result;
}
- //Validate if status is closed
+ // Validate if status is closed
$appDelegation = new AppDelegation();
$rows = $appDelegation->LoadParallel($caseUid, $delIndex);
if (empty($rows)) {
@@ -3314,7 +3322,7 @@ class WsBase
$g->sessionVarRestore();
return $result;
}
- //Validate if the case is paused
+ // Validate if the case is paused
$appDelay = new AppDelay();
$sw = $appDelay->isPaused($caseUid, $delIndex);
if ($sw === true) {
@@ -3322,6 +3330,7 @@ class WsBase
$g->sessionVarRestore();
return $result;
}
+ // Review the unpaused date
if (strlen($unpauseDate) >= 10) {
if (!preg_match("/^\d{4}-\d{2}-\d{2}| \d{2}:\d{2}:\d{2}$/", $unpauseDate)) {
$result = new WsResponse(100, G::LoadTranslation("ID_INVALID_DATA") . " $unpauseDate");
@@ -3336,7 +3345,7 @@ class WsBase
$case = new Cases();
$case->pauseCase($caseUid, $delIndex, $userUid, $unpauseDate);
- //Response
+ // Response
$result = self::messageExecuteSuccessfully();
$g->sessionVarRestore();
diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php
index 27ecc1875..095fae749 100644
--- a/workflow/engine/classes/model/AppDelegation.php
+++ b/workflow/engine/classes/model/AppDelegation.php
@@ -89,7 +89,7 @@ class AppDelegation extends BaseAppDelegation
$record = $rsCriteria->getRow();
if ($flagIncludeCurrentDel) {
- if (preg_match('/^(?:' . 'NORMAL|SCRIPT\-TASK|WEBENTRYEVENT|START\-MESSAGE\-EVENT|START\-TIMER\-EVENT' . ')$/', $record['TAS_TYPE'])) {
+ if (preg_match('/^(?:' . 'SERVICE\-TASK|NORMAL|SCRIPT\-TASK|WEBENTRYEVENT|START\-MESSAGE\-EVENT|START\-TIMER\-EVENT' . ')$/', $record['TAS_TYPE'])) {
$arrayAppDelegationPrevious = $record;
$flagPrevious = false;
}
diff --git a/workflow/engine/classes/model/ListMyInbox.php b/workflow/engine/classes/model/ListMyInbox.php
index 7fea0fd3c..05e8819bd 100644
--- a/workflow/engine/classes/model/ListMyInbox.php
+++ b/workflow/engine/classes/model/ListMyInbox.php
@@ -148,9 +148,9 @@ class ListMyInbox extends BaseListMyInbox implements ListInterface
$dataset->next();
$aRow = $dataset->getRow();
$data['DEL_CURRENT_USR_UID'] = $data['USR_UID'];
- $data['DEL_CURRENT_USR_USERNAME'] = $aRow['USR_USERNAME'];
- $data['DEL_CURRENT_USR_FIRSTNAME'] = $aRow['USR_FIRSTNAME'];
- $data['DEL_CURRENT_USR_LASTNAME'] = $aRow['USR_LASTNAME'];
+ $data['DEL_CURRENT_USR_USERNAME'] = is_array($aRow) ? $aRow['USR_USERNAME'] : '';
+ $data['DEL_CURRENT_USR_FIRSTNAME'] = is_array($aRow) ? $aRow['USR_FIRSTNAME'] : '';
+ $data['DEL_CURRENT_USR_LASTNAME'] = is_array($aRow) ? $aRow['USR_LASTNAME'] : '';
if ($data['DEL_INDEX'] == 1 && $data['APP_STATUS'] == 'TO_DO') {
$data['APP_CREATE_DATE'] = $data['APP_UPDATE_DATE'];
diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po
index aff4f1384..1541e9529 100755
--- a/workflow/engine/content/translations/english/processmaker.en.po
+++ b/workflow/engine/content/translations/english/processmaker.en.po
@@ -7049,6 +7049,12 @@ msgstr "Down Trigger"
msgid "Draft"
msgstr "Draft"
+# TRANSLATION
+# LABEL/ID_DRAFT_CASES_CAN_NOT_PAUSED
+#: LABEL/ID_DRAFT_CASES_CAN_NOT_PAUSED
+msgid "Draft cases can not be paused"
+msgstr "Draft cases can not be paused"
+
# TRANSLATION
# LABEL/ID_DRIVE_HELP_ENABLE
#: LABEL/ID_DRIVE_HELP_ENABLE
@@ -20741,6 +20747,12 @@ msgstr "There are no older session files"
msgid "You cannot open this case because on the reason below:
You do not have permission to see this case.
You have not participated in this case.
Case is already claimed."
msgstr "You cannot open this case because on the reason below:
You do not have permission to see this case.
You have not participated in this case.
Case is already claimed."
+# TRANSLATION
+# LABEL/ID_NO_PERMISSION_NO_PARTICIPATED_CASES
+#: LABEL/ID_NO_PERMISSION_NO_PARTICIPATED_CASES
+msgid "You do not have permission to see this case or you have not participated in it."
+msgstr "You do not have permission to see this case or you have not participated in it."
+
# TRANSLATION
# LABEL/ID_NO_PREVIOUS_USR_UID
#: LABEL/ID_NO_PREVIOUS_USR_UID
diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql
index 3ab5a506e..a2eedf8bd 100755
--- a/workflow/engine/data/mysql/insert.sql
+++ b/workflow/engine/data/mysql/insert.sql
@@ -58006,6 +58006,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_DOWNLOAD_SETTINGS','en','Download Settings','2020-12-10') ,
( 'LABEL','ID_DOWN_TRIGGER','en','Down Trigger','2015-02-20') ,
( 'LABEL','ID_DRAFT','en','Draft','2014-01-15') ,
+( 'LABEL','ID_DRAFT_CASES_CAN_NOT_PAUSED','en','Draft cases can not be paused','2021-10-01') ,
( 'LABEL','ID_DRIVE_HELP_ENABLE','en','When this option is enabled, all input, output and attached documents generated in your processes can be stored in Google Drive.','2016-01-05') ,
( 'LABEL','ID_DRILL_DOWN_NAVIGATOR','en','Drill Down Navigator','2020-08-26') ,
( 'LABEL','ID_DRILL','en','Drill','2021-08-26') ,
@@ -60361,6 +60362,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_NO_NEW_VERSIONS','en','No new versions available','2014-09-18') ,
( 'LABEL','ID_NO_OLDER_SESSION_FILES','en','There are no older session files','2014-01-15') ,
( 'LABEL','ID_NO_PERMISSION_NO_PARTICIPATED','en','You cannot open this case because on the reason below:
You do not have permission to see this case.
You have not participated in this case.
Case is already claimed.','2017-06-05') ,
+( 'LABEL','ID_NO_PERMISSION_NO_PARTICIPATED_CASES','en','You do not have permission to see this case or you have not participated in it.','2021-10-04') ,
( 'LABEL','ID_NO_PREVIOUS_USR_UID','en','The previous task doesn''t have any users.','2017-10-18') ,
( 'LABEL','ID_NO_REASSIGN','en','Do not reassign','2014-01-15') ,
( 'LABEL','ID_NO_RECORDS','en','No records','2014-01-15') ,
diff --git a/workflow/engine/methods/cases/ajaxListener.php b/workflow/engine/methods/cases/ajaxListener.php
index 368ce746f..13e738842 100644
--- a/workflow/engine/methods/cases/ajaxListener.php
+++ b/workflow/engine/methods/cases/ajaxListener.php
@@ -732,8 +732,12 @@ class Ajax
}
// End save
- $case = new Cases();
- $case->pauseCase($appUid, $delIndex, $_SESSION['USER_LOGGED'], $unpauseDate);
+ $case = new WsBase();
+ $response = $case->pauseCase($appUid, $delIndex, $_SESSION['USER_LOGGED'], $unpauseDate);
+ $response = (object) $response;
+ if ($response->status_code == 100) {
+ throw new Exception($response->message);
+ }
$app = new Application();
$caseData = $app->load($appUid);
$data['APP_NUMBER'] = $caseData['APP_NUMBER'];
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php
index c0c81bf22..8f707a0fc 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php
@@ -360,7 +360,7 @@ class ActionsByEmail
if ($data[$index]['ABE_MAILSERVER_OR_MAILCURRENT'] == 0) {
$delegation = new AppDelegation();
$previousTask = $delegation->getPreviousDelegationValidTask($data[$index]['APP_UID'], $data[$index]['DEL_INDEX']);
- if (in_array($previousTask['TAS_TYPE'], Task::DUMMY_TASKS)) {
+ if (in_array($previousTask['TAS_TYPE'], Task::DUMMY_TASKS) || in_array($previousTask['TAS_TYPE'], Task::$typesRunAutomatically)) {
$res = Task::getTask($previousTask['TAS_ID']);
$data[$index]['USER'] = $res->TAS_TITLE . ' (' . $previousTask['TAS_TYPE'] . ')';
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php
index 3af923c24..21df184d9 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Draft.php
@@ -164,7 +164,7 @@ class Draft extends AbstractCases
{
$query = Application::query()->select(['APPLICATION.APP_NUMBER']);
// Add the initial scope for draft cases for specific user
- $query->draft($this->getUserUid());
+ $query->draft($this->getUserId());
// Get only one case
$query->limit(1);
// Get result
diff --git a/workflow/engine/src/ProcessMaker/Model/Application.php b/workflow/engine/src/ProcessMaker/Model/Application.php
index 51359490e..811d111b0 100644
--- a/workflow/engine/src/ProcessMaker/Model/Application.php
+++ b/workflow/engine/src/ProcessMaker/Model/Application.php
@@ -14,6 +14,7 @@ class Application extends Model
public $timestamps = false;
// Status id
const STATUS_DRAFT = 1;
+ const STATUS_DRAFT_NAME = 'DRAFT';
const STATUS_TODO = 2;
const STATUS_COMPLETED = 3;
const STATUS_CANCELED = 4;
@@ -52,13 +53,13 @@ class Application extends Model
* Scope for query to get the creator
*
* @param \Illuminate\Database\Eloquent\Builder $query
- * @param string $usrUid
+ * @param int $usrId
*
* @return \Illuminate\Database\Eloquent\Builder
*/
- public function scopeCreator($query, $usrUid)
+ public function scopeCreator($query, $usrId)
{
- return $query->where('APP_INIT_USER', '=', $usrUid);
+ return $query->where('APP_INIT_USER_ID', '=', $usrId);
}
/**
@@ -359,7 +360,7 @@ class Application extends Model
* Scope the Draft cases
*
* @param \Illuminate\Database\Eloquent\Builder $query
- * @param string $user
+ * @param int $user
*
* @return \Illuminate\Database\Eloquent\Builder
*/
diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php b/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php
index 0e84bbb04..583129b61 100644
--- a/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php
+++ b/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php
@@ -46,7 +46,8 @@ class Metrics extends Api
*/
public function getProcessTotalCases($caseList, $category = null, $topTen = false, $processes = [])
{
- $usrId = $this->getUserId();
+ $usrUid = $this->getUserId();
+ $usrId = !empty($usrUid) ? User::getId($usrUid) : 0;
try {
switch ($caseList) {
case 'inbox':
@@ -60,6 +61,7 @@ class Metrics extends Api
break;
case 'unassigned':
$list = new Unassigned();
+ $list->setUserUid($usrUid);
break;
}
$list->setUserId($usrId);
@@ -89,7 +91,8 @@ class Metrics extends Api
*/
public function getTotalCasesByRange($caseList, $processId = null, $dateFrom = null, $dateTo = null, $groupBy = 'day')
{
- $usrId = $this->getUserId();
+ $usrUid = $this->getUserId();
+ $usrId = !empty($usrUid) ? User::getId($usrUid) : 0;
try {
switch ($caseList) {
case 'inbox':
@@ -103,6 +106,7 @@ class Metrics extends Api
break;
case 'unassigned':
$list = new Unassigned();
+ $list->setUserUid($usrUid);
break;
}
$list->setUserId($usrId);
@@ -179,7 +183,8 @@ class Metrics extends Api
public function getCasesRiskByProcess($caseList = 'inbox', $process, $dateFrom = null, $dateTo = null, $riskStatus = 'ON_TIME', $topCases = null)
{
try {
- $usrId = $this->getUserId();
+ $usrUid = $this->getUserId();
+ $usrId = !empty($usrUid) ? User::getId($usrUid) : 0;
switch ($caseList) {
case 'inbox':
$list = new Inbox();
@@ -192,6 +197,7 @@ class Metrics extends Api
break;
case 'unassigned':
$list = new Unassigned();
+ $list->setUserUid($usrUid);
break;
}
$list->setUserId($usrId);