This commit is contained in:
Paula Quispe
2018-05-18 16:54:37 -04:00
parent 12ab6c9244
commit a5c324f57b
5 changed files with 166 additions and 100 deletions

View File

@@ -1,9 +1,11 @@
<?php
use \ProcessMaker\BusinessModel\WebEntryEvent;
use ProcessMaker\BusinessModel\User as BusinessModelUser;
use ProcessMaker\BusinessModel\WebEntryEvent;
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
/**
* A Cases object where you can do start, load, update, refresh about cases
* This object is applied to Task
@@ -4196,11 +4198,11 @@ class Cases
$dataList = [];
$rowDelay = AppDelay::buildAppDelayRow(
$caseFields['PRO_UID'],
$caseFields['PRO_ID'],
isset($caseFields['PRO_ID']) ? $caseFields['PRO_ID'] : 0,
$appUid,
$caseFields['APP_NUMBER'],
$value['DEL_INDEX'],
$value['DEL_THREAD'],
$value['DEL_INDEX'],
AppDelay::APP_TYPE_CANCEL,
Application::APP_STATUS_CANCELLED,
is_null($usrUid) ? '' : $usrUid
@@ -4247,7 +4249,7 @@ class Cases
/** Close the specific delIndex in APP_DELEGATION and APP_THREAD */
$this->CloseCurrentDelegation($appUid, $delIndex);
$resultDelegation = $delegation->Load($appUid, $delIndex);
$this->closeAppThread($appUid, $result['DEL_THREAD']);
$this->closeAppThread($appUid, $resultDelegation['DEL_THREAD']);
$result[] = $resultDelegation;
}
@@ -4257,114 +4259,114 @@ class Cases
/**
* Un cancel case
*
* @param string $caseUID
* @param string $userUID
* @return int
* @param string $appUid
* @param string $usrUid
*
* @return void
* @throws Exception
*/
public function unCancelCase($appUID, $userUID)
public function unCancelCase($appUid, $usrUid)
{
try {
$oUser = new \ProcessMaker\BusinessModel\User();
if (!$oUser->checkPermission($userUID, 'PM_UNCANCELCASE')) {
$user = new BusinessModelUser();
/** Review if the user has the permission PM_UNCANCELCASE */
if (!$user->checkPermission($usrUid, 'PM_UNCANCELCASE')) {
throw new Exception(G::LoadTranslation('ID_YOU_DO_NOT_HAVE_PERMISSION'));
}
$application = new Application();
$rowApplication = $application->load($appUID);
if ($rowApplication["APP_STATUS"] !== "CANCELLED") {
throw new Exception(G::LoadTranslation('ID_THE_APPLICATION_IS_NOT_CANCELED', [$appUID]));
$caseFields = $this->loadCase($appUid);
/** Review if the case has the status CANCELLED */
if ($caseFields["APP_STATUS"] !== Application::APP_STATUS_CANCELLED) {
throw new Exception(G::LoadTranslation('ID_THE_APPLICATION_IS_NOT_CANCELED', [$appUid]));
}
$criteriaAppDelay = new Criteria('workflow');
$criteriaAppDelay->add(AppDelayPeer::APP_UID, $appUID);
$criteriaAppDelay->add(AppDelayPeer::APP_STATUS, 'CANCELLED');
$criteriaAppDelay->add(AppDelayPeer::PRO_UID, $rowApplication['PRO_UID']);
$criteriaAppDelay->addDescendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE);
$resultSetAppDelay = AppDelayPeer::doSelectRS($criteriaAppDelay);
$resultSetAppDelay->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$resultSetAppDelay->next();
$rowAppDelay = $resultSetAppDelay->getRow();
if (!isset($rowAppDelay['APP_STATUS'])) {
throw new Exception(G::LoadTranslation('ID_THREAD_STATUS_DOES_NOT_EXIST_FOR_THE_APPLICATION.', [$appUID]));
}
//Load the USR_ID
$u = new Users();
$userId = $u->load($usrUid)['USR_ID'];
//Application
$rowApplication['APP_STATUS'] = 'TO_DO';
$rowApplication['APP_UPDATE_DATE'] = date('Y-m-d H:i:s');
$application->update($rowApplication);
//Get the list of thread that close with the CancelCase
$appDelay = new AppDelay();
$threadsCanceled = $appDelay->getThreadByStatus($appUid, Application::APP_STATUS_CANCELLED);
//AppDelegation
//Get all the threads in the AppDelay
foreach ($threadsCanceled as $row){
//Load the thread CLOSED
$appDelegation = new AppDelegation();
$rowAppDelegation = $appDelegation->Load($appUID, $rowAppDelay['APP_DEL_INDEX']);
$delegationClosed = $appDelegation->Load($appUid, $row['APP_DEL_INDEX']);
//Create an appDelegation for each thread
$appDelegation = new AppDelegation();
$delIndex = $appDelegation->createAppDelegation($rowAppDelegation['PRO_UID'], $rowAppDelegation['APP_UID'], $rowAppDelegation['TAS_UID'], $userUID, $rowAppDelay['APP_THREAD_INDEX']);
$delIndex = $appDelegation->createAppDelegation(
$delegationClosed['PRO_UID'],
$delegationClosed['APP_UID'],
$delegationClosed['TAS_UID'],
$usrUid,
$delegationClosed['DEL_THREAD'],
3,
false,
$delegationClosed['DEL_PREVIOUS'],
null,
false,
false,
0,
$delegationClosed['APP_NUMBER'],
$delegationClosed['TAS_ID'],
$userId,
$delegationClosed['PRO_ID']
);
//AppThread
//Update the appThread
$dataAppThread = [
'APP_UID' => $rowApplication['APP_UID'],
'APP_THREAD_INDEX' => $rowAppDelay['APP_THREAD_INDEX'],
'APP_UID' => $row['APP_UID'],
'APP_THREAD_INDEX' => $delegationClosed['DEL_THREAD'],
'APP_THREAD_STATUS' => 'OPEN',
'DEL_INDEX' => $delIndex
];
$appThread = new AppThread();
$appThread->update($dataAppThread);
$res = $appThread->update($dataAppThread);
//AppDelay
$dataAppDelay = [
'PRO_UID' => $rowApplication['PRO_UID'],
'APP_UID' => $rowApplication['APP_UID'],
'APP_THREAD_INDEX' => $rowAppDelay['APP_THREAD_INDEX'],
'APP_DELINDEX' => $delIndex,
'APP_TYPE' => 'UNCANCEL',
'APP_STATUS' => $rowApplication['APP_STATUS'],
'APP_NEXT_TASK' => 0,
'APP_DELEGATION_USER' => $userUID,
'APP_ENABLE_ACTION_USER' => $userUID,
'APP_ENABLE_ACTION_DATE' => date('Y-m-d H:i:s'),
'APP_DISABLE_ACTION_USER' => 0
];
$appDelay = new AppDelay();
$appDelay->create($dataAppDelay);
//New register in AppDelay
$newAppDelay = AppDelay::buildAppDelayRow(
$row['PRO_UID'],
$delegationClosed['PRO_ID'],
$row['APP_UID'],
$delegationClosed['APP_NUMBER'],
$row['APP_THREAD_INDEX'],
$delIndex,
AppDelay::APP_TYPE_UNCANCEL,
Application::APP_STATUS_TODO,
$usrUid,
$userId
);
$appDelay->create($newAppDelay);
//ListCanceled
$criteriaListCanceled = new Criteria("workflow");
$criteriaListCanceled->add(ListCanceledPeer::APP_UID, $appUID);
$resultSetListCanceled = ListCanceledPeer::doSelectRS($criteriaListCanceled);
$resultSetListCanceled->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$resultSetListCanceled->next();
$rowListCanceled = $resultSetListCanceled->getRow();
ListCanceledPeer::doDelete($criteriaListCanceled);
//New register in the listInbox
$newDelegation = array_merge($newAppDelay, $delegationClosed);
$newDelegation['USR_UID'] = $usrUid;
$newDelegation['DEL_INDEX'] = $delIndex;
$newDelegation['APP_STATUS'] = Application::APP_STATUS_TODO;
$inbox = new ListInbox();
//Get the previous user
//When the status of the case is DRAFT we does not have a previous thread
$previousUser = '';
if ($delegationClosed['DEL_PREVIOUS'] != 0){
$appDelegation = new AppDelegation();
$delegationPrevious = $appDelegation->Load($appUid, $delegationClosed['DEL_PREVIOUS']);
$previousUser = $delegationPrevious['USR_UID'];
}
//ListInbox
$rowListCanceled['DEL_PREVIOUS_USR_USERNAME'] = $rowListCanceled['DEL_CURRENT_USR_USERNAME'];
$rowListCanceled['DEL_PREVIOUS_USR_FIRSTNAME'] = $rowListCanceled['DEL_CURRENT_USR_FIRSTNAME'];
$rowListCanceled['DEL_PREVIOUS_USR_LASTNAME'] = $rowListCanceled['DEL_CURRENT_USR_LASTNAME'];
$rowListCanceled['APP_STATUS'] = 'TO_DO';
$rowListCanceled['APP_UPDATE_DATE'] = date('Y-m-d H:i:s');
$rowListCanceled['DEL_RISK_DATE'] = date('Y-m-d H:i:s');
$rowListCanceled['DEL_INDEX'] = $delIndex;
unset($rowListCanceled['DEL_CURRENT_USR_USERNAME']);
unset($rowListCanceled['DEL_CURRENT_USR_FIRSTNAME']);
unset($rowListCanceled['DEL_CURRENT_USR_LASTNAME']);
unset($rowListCanceled['APP_CANCELED_DATE']);
$inbox->newRow($newDelegation, $previousUser);
}
$this->putCaseInInboxList($rowListCanceled, $userUID);
//Update the status of the case
$caseFields['APP_STATUS'] = Application::APP_STATUS_TODO;
$this->updateCase($appUid, $caseFields);
//ListParticipatedLast
$criteriaListParticipatedLast = new Criteria("workflow");
$criteriaListParticipatedLast->add(ListParticipatedLastPeer::APP_UID, $appUID);
$resultSetListParticipatedLast = ListParticipatedLastPeer::doSelectRS($criteriaListParticipatedLast);
$resultSetListParticipatedLast->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$resultSetListParticipatedLast->next();
$rowListParticipatedLast = $resultSetListParticipatedLast->getRow();
$rowListParticipatedLast['APP_STATUS'] = 'TO_DO';
$rowListParticipatedLast['DEL_THREAD_STATUS'] = 'OPEN';
$rowListParticipatedLast['DEL_INIT_DATE'] = null;
$listParticipatedLast = new ListParticipatedLast();
$listParticipatedLast->update($rowListParticipatedLast);
} catch (Exception $oException) {
throw $oException;
//Remove the case from the list Canceled
$listCanceled = new ListCanceled();
$listCanceled->removeAll($appUid);
} catch (Exception $exception) {
throw $exception;
}
}

View File

@@ -2767,6 +2767,7 @@ function PMFCancelCase ($caseUid, $delIndex, $userUid)
{
$ws = new WsBase();
$result = $ws->cancelCase($caseUid, $delIndex, $userUid);
$result = (object)$result;
if ($result->status_code == 0) {
if (isset($_SESSION['APPLICATION']) && isset($_SESSION['INDEX'])) {

View File

@@ -13,6 +13,7 @@
class AppDelay extends BaseAppDelay
{
const APP_TYPE_CANCEL = 'CANCEL';
const APP_TYPE_UNCANCEL = 'UNCANCEL';
const APP_TYPE_PAUSE = 'PAUSE';
/**
@@ -161,6 +162,7 @@ class AppDelay extends BaseAppDelay
* @param string $appType
* @param string $appStatus
* @param string $usrUid
* @param integer $usrId
*
* @return array
*/
@@ -173,11 +175,11 @@ class AppDelay extends BaseAppDelay
$delIndex = 0,
$appType = 'CANCEL',
$appStatus = 'CANCELLED',
$usrUid = ''
$usrUid = '',
$usrId = 0
) {
$row = [];
$row['PRO_UID'] = $proUid;
$row['PRO_ID'] = $proId;
$row['APP_UID'] = $appUid;
$row['APP_NUMBER'] = $appNumber;
$row['APP_THREAD_INDEX'] = $appThreadIndex;
@@ -186,15 +188,56 @@ class AppDelay extends BaseAppDelay
$row['APP_STATUS'] = $appStatus;
$row['APP_ENABLE_ACTION_DATE'] = date('Y-m-d H:i:s');
//Load the PRO_ID if does not exit
if (empty($proId) || $proId === 0) {
$u = new Process();
$proId = $u->load($proUid)['PRO_ID'];
}
$row['PRO_ID'] = $proId;
//Define the user that execute the insert
if (empty($usrUid)) {
global $RBAC;
$usrUid = $RBAC->aUserInfo['USER_INFO']['USR_UID'];
$u = new Users();
$usrId = $u->load($usrUid)['USR_ID'];
}
$row['APP_DELEGATION_USER'] = $usrUid;
$row['APP_ENABLE_ACTION_USER'] = $usrUid;
$row['APP_DELEGATION_USER_ID'] = $usrId;
return $row;
}
/**
* Return all threads with the status canceled
*
* @param string $appUid
* @param string $status
*
* @return array
* @throws Exception
*/
public function getThreadByStatus($appUid, $status)
{
try {
$criteria = new Criteria('workflow');
$criteria->add(AppDelayPeer::APP_UID, $appUid);
$criteria->add(AppDelayPeer::APP_STATUS, $status);
$criteria->addDescendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE);
$dataset = AppDelayPeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
$result = [];
while ($row = $dataset->getRow()) {
$result[] = $row;
$dataset->next();
}
return $result;
} catch (Exception $error) {
throw $error;
}
}
}

View File

@@ -47,6 +47,7 @@ class Application extends BaseApplication
* @var string
*/
const APP_STATUS_CANCELLED = 'CANCELLED';
const APP_STATUS_TODO = 'TO_DO';
public static $app_status_values = ['DRAFT' => 1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4];
protected $app_title_content = '';
protected $app_description_content = '';

View File

@@ -190,6 +190,25 @@ class ListCanceled extends BaseListCanceled implements ListInterface
}
}
/**
* Remove all records related to the APP_UID
*
* @param string $appUid
*
* @return void
* @throws Exception
*/
public function removeAll($appUid)
{
try {
$criteria = new Criteria("workflow");
$criteria->add(ListCanceledPeer::APP_UID, $appUid);
ListCanceledPeer::doDelete($criteria);
} catch (Exception $e) {
throw $e;
}
}
public function loadFilters(&$criteria, $filters)
{
$filter = isset($filters['filter']) ? $filters['filter'] : "";