diff --git a/app/Jobs/ActionByEmail.php b/app/Jobs/ActionByEmail.php
new file mode 100644
index 000000000..0ae7b8a42
--- /dev/null
+++ b/app/Jobs/ActionByEmail.php
@@ -0,0 +1,14 @@
+define(\ProcessMaker\Model\AbeConfiguration::class, function (Faker $faker) {
- $process = \ProcessMaker\Model\Process::all()->random();
- $task = \ProcessMaker\Model\Task::all()->random();
- $dynaForm = \ProcessMaker\Model\Dynaform::all()->random();
- $emailServer = \ProcessMaker\Model\EmailServerModel::all()->random();
+ $process = factory(\ProcessMaker\Model\Process::class)->create();
+ $dynaform = factory(\ProcessMaker\Model\Dynaform::class)->create([
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ $task = factory(\ProcessMaker\Model\Task::class)->create([
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ $emailServer = factory(\ProcessMaker\Model\EmailServerModel::class)->create();
return [
'ABE_UID' => G::generateUniqueID(),
'PRO_UID' => $process->PRO_UID,
@@ -14,7 +18,7 @@ $factory->define(\ProcessMaker\Model\AbeConfiguration::class, function (Faker $f
'ABE_TYPE' => $faker->randomElement(['', 'LINK']),
'ABE_TEMPLATE' => 'actionByEmail.html',
'ABE_DYN_TYPE' => 'NORMAL',
- 'DYN_UID' => $dynaForm->DYN_UID,
+ 'DYN_UID' => $dynaform->DYN_UID,
'ABE_EMAIL_FIELD' => 'admin@processmaker.com',
'ABE_ACTION_FIELD' => '',
'ABE_CASE_NOTE_IN_RESPONSE' => $faker->randomElement(['0', '1']),
diff --git a/database/factories/AbeRequestFactory.php b/database/factories/AbeRequestFactory.php
index 9c2383fae..387f10357 100644
--- a/database/factories/AbeRequestFactory.php
+++ b/database/factories/AbeRequestFactory.php
@@ -3,12 +3,17 @@
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\AbeRequest::class, function (Faker $faker) {
- $process = \ProcessMaker\Model\Application::all()->random();
- $abeConfiguration = \ProcessMaker\Model\AbeConfiguration::all()->random();
+ $process = factory(\ProcessMaker\Model\Process::class)->create();
+ $abeConfiguration = factory(\ProcessMaker\Model\AbeConfiguration::class)->create([
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ $application = factory(\ProcessMaker\Model\Application::class)->create([
+ 'PRO_UID' => $process->PRO_UID
+ ]);
return [
'ABE_REQ_UID' => G::generateUniqueID(),
'ABE_UID' => $abeConfiguration->ABE_UID,
- 'APP_UID' => $process->APP_UID,
+ 'APP_UID' => $application->APP_UID,
'DEL_INDEX' => 0,
'ABE_REQ_SENT_TO' => $faker->email,
'ABE_REQ_SUBJECT' => '',
diff --git a/database/factories/DynaformFactory.php b/database/factories/DynaformFactory.php
index 428b5d28c..793d743d7 100644
--- a/database/factories/DynaformFactory.php
+++ b/database/factories/DynaformFactory.php
@@ -10,10 +10,12 @@ $factory->define(\ProcessMaker\Model\Dynaform::class, function(Faker $faker) {
$date = $faker->dateTime();
return [
'DYN_UID' => G::generateUniqueID(),
- 'DYN_ID' => $faker->unique()->numberBetween(1, 10000),
'DYN_TITLE' => $faker->sentence(2),
'DYN_DESCRIPTION' => $faker->sentence(5),
- 'PRO_UID' => G::generateUniqueID(),
+ 'PRO_UID' => function() {
+ $process = factory(Process::class)->create();
+ return $process->PRO_UID;
+ },
'DYN_TYPE' => 'xmlform',
'DYN_FILENAME' => '',
'DYN_CONTENT' => '',
@@ -27,7 +29,6 @@ $factory->state(\ProcessMaker\Model\Dynaform::class, 'foreign_keys', function (F
$date = $faker->dateTime();
return [
'DYN_UID' => G::generateUniqueID(),
- 'DYN_ID' => $faker->unique()->numberBetween(1, 10000),
'DYN_TITLE' => $faker->sentence(2),
'DYN_DESCRIPTION' => $faker->sentence(5),
'PRO_UID' => function() {
@@ -49,10 +50,12 @@ $factory->state(\ProcessMaker\Model\Dynaform::class, 'translations', function (F
$date = $faker->dateTime();
return [
'DYN_UID' => G::generateUniqueID(),
- 'DYN_ID' => $faker->unique()->numberBetween(1, 10000),
'DYN_TITLE' => $faker->sentence(2),
'DYN_DESCRIPTION' => $faker->sentence(5),
- 'PRO_UID' => G::generateUniqueID(),
+ 'PRO_UID' => function() {
+ $process = factory(Process::class)->create();
+ return $process->PRO_UID;
+ },
'DYN_TYPE' => 'xmlform',
'DYN_FILENAME' => '',
'DYN_CONTENT' => '',
diff --git a/database/factories/InputDocumentFactory.php b/database/factories/InputDocumentFactory.php
index 54481b00b..5d2200275 100644
--- a/database/factories/InputDocumentFactory.php
+++ b/database/factories/InputDocumentFactory.php
@@ -10,7 +10,6 @@ use ProcessMaker\Model\Process;
$factory->define(InputDocument::class, function(Faker $faker) {
return [
'INP_DOC_UID' => G::generateUniqueID(),
- 'INP_DOC_ID' => $faker->unique()->numberBetween(1, 10000),
'PRO_UID' => function() {
$process = factory(Process::class)->create();
return $process->PRO_UID;
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Cases/CasesTraitTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Cases/CasesTraitTest.php
index 60a064336..8b2a84eda 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/Cases/CasesTraitTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/Cases/CasesTraitTest.php
@@ -2,11 +2,17 @@
namespace Tests\unit\workflow\engine\src\ProcessMaker\Cases;
-use App\Jobs\CasesDispatch;
+use App\Jobs\RouteCase;
use Cases;
+use G;
use Illuminate\Support\Facades\Queue;
+use ProcessMaker\Model\AbeConfiguration;
+use ProcessMaker\Model\AbeRequest;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
+use ProcessMaker\Model\Dynaform;
+use ProcessMaker\Model\EmailServerModel;
+use ProcessMaker\Model\InputDocument;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\Route;
use ProcessMaker\Model\Step;
@@ -286,6 +292,162 @@ class CasesTraitTest extends TestCase
require_once PATH_METHODS . 'cases/cases_Derivate.php';
- Queue::assertPushed(CasesDispatch::class);
+ Queue::assertPushed(RouteCase::class);
+ }
+
+ /**
+ * This test verifies if ABE is completed.
+ * @test
+ * @covers Cases::routeCaseActionByEmail
+ */
+ public function it_should_verify_if_abe_is_completed()
+ {
+ $user = User::where('USR_ID', '=', 1)->get()->first();
+
+ $process = factory(Process::class)->create([
+ 'PRO_CREATE_USER' => $user->USR_UID
+ ]);
+ $dynaform = factory(Dynaform::class)->create([
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ $inpuDocument = factory(InputDocument::class)->create([
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ $task = factory(Task::class)->create([
+ 'TAS_ASSIGN_TYPE' => 'BALANCED',
+ 'TAS_GROUP_VARIABLE' => '',
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ factory(TaskUser::class)->create([
+ 'TAS_UID' => $task->TAS_UID,
+ 'USR_UID' => $user->USR_UID,
+ 'TU_RELATION' => 1,
+ 'TU_TYPE' => 1
+ ]);
+ $task2 = factory(Task::class)->create([
+ 'TAS_ASSIGN_TYPE' => 'BALANCED',
+ 'TAS_GROUP_VARIABLE' => '',
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ factory(TaskUser::class)->create([
+ 'TAS_UID' => $task2->TAS_UID,
+ 'USR_UID' => $user->USR_UID,
+ 'TU_RELATION' => 1,
+ 'TU_TYPE' => 1
+ ]);
+
+ $application = factory(Application::class)->create([
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+ $delegation1 = factory(Delegation::class)->create([
+ 'USR_UID' => $user->USR_UID,
+ 'PRO_UID' => $process->PRO_UID,
+ 'APP_UID' => $application->APP_UID,
+ 'TAS_UID' => $task->TAS_UID,
+ 'DEL_INDEX' => 1,
+ ]);
+ factory(Delegation::class)->create([
+ 'USR_UID' => $user->USR_UID,
+ 'PRO_UID' => $process->PRO_UID,
+ 'APP_UID' => $application->APP_UID,
+ 'TAS_UID' => $task2->TAS_UID,
+ 'DEL_INDEX' => 2,
+ 'DEL_PREVIOUS' => $delegation1->DEL_INDEX
+ ]);
+ factory(Route::class)->create([
+ 'TAS_UID' => $task->TAS_UID,
+ 'ROU_NEXT_TASK' => $task2->TAS_UID,
+ 'PRO_UID' => $process->PRO_UID
+ ]);
+
+ $emailServer = factory(EmailServerModel::class)->create();
+ $abeConfiguration = factory(AbeConfiguration::class)->create([
+ 'PRO_UID' => $process->PRO_UID,
+ 'DYN_UID' => $dynaform->DYN_UID,
+ 'TAS_UID' => $task2->TAS_UID,
+ 'ABE_EMAIL_SERVER_UID' => $emailServer->MESS_UID,
+ 'ABE_TYPE' => 'LINK',
+ 'ABE_CASE_NOTE_IN_RESPONSE' => 1,
+ ]);
+ $abeRequest = factory(AbeRequest::class)->create([
+ 'ABE_UID' => $abeConfiguration->ABE_UID,
+ 'APP_UID' => $application->APP_UID,
+ 'DEL_INDEX' => $delegation1->DEL_INDEX,
+ ]);
+ if (!defined('PATH_DOCUMENT')) {
+ define('PATH_DOCUMENT', PATH_DB . config('system.workspace') . PATH_SEP . 'files' . PATH_SEP);
+ }
+
+
+ $appUid = $delegation1->APP_UID;
+ $delIndex = $delegation1->DEL_INDEX;
+ $aber = $abeRequest->ABE_REQ_UID;
+ $dynUid = $dynaform->DYN_UID;
+ $forms = [];
+ $remoteAddr = '127.0.0.1';
+ $files = [
+ 'form' => [
+ 'name' => ['test'],
+ 'type' => ['test'],
+ 'size' => ['1000'],
+ 'tmp_name' => [tempnam(sys_get_temp_dir(), 'test')],
+ 'error' => [''],
+ ]
+ ];
+
+ $cases = new Cases();
+ $cases->routeCaseActionByEmail($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files);
+ }
+
+ /**
+ * This test verifies if the ABE form has been completed.
+ * @test
+ * @covers Cases::routeCaseActionByEmail
+ */
+ public function it_should_verify_if_abe_has_completed()
+ {
+ $delegation1 = factory(Delegation::class)->state('closed')->create();
+ $abeRequest = factory(AbeRequest::class)->create();
+ $dynaform = factory(Dynaform::class)->create([
+ 'PRO_UID' => $delegation1->PRO_UID
+ ]);
+
+ $appUid = $delegation1->APP_UID;
+ $delIndex = $delegation1->DEL_INDEX;
+ $aber = $abeRequest->ABE_REQ_UID;
+ $dynUid = $dynaform->DYN_UID;
+ $forms = [];
+ $remoteAddr = '127.0.0.1';
+ $files = [];
+
+ $this->expectException(\Exception::class);
+ $cases = new Cases();
+ $cases->routeCaseActionByEmail($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files);
+ }
+
+ /**
+ * This test verifies if the case has failed due to any circumstance.
+ * @test
+ * @covers Cases::routeCaseActionByEmail
+ */
+ public function it_should_test_an_exception_if_the_case_throws_an_incorrect_state()
+ {
+ $delegation1 = factory(Delegation::class)->create();
+ $abeRequest = factory(AbeRequest::class)->create();
+ $dynaform = factory(Dynaform::class)->create([
+ 'PRO_UID' => $delegation1->PRO_UID
+ ]);
+
+ $appUid = $delegation1->APP_UID;
+ $delIndex = $delegation1->DEL_INDEX;
+ $aber = $abeRequest->ABE_REQ_UID;
+ $dynUid = $dynaform->DYN_UID;
+ $forms = [];
+ $remoteAddr = '127.0.0.1';
+ $files = [];
+
+ $this->expectException(\Exception::class);
+ $cases = new Cases();
+ $cases->routeCaseActionByEmail($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files);
}
}
diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Core/JobsManagerTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Core/JobsManagerTest.php
index 423c722c7..5b2f5d5cd 100644
--- a/tests/unit/workflow/engine/src/ProcessMaker/Core/JobsManagerTest.php
+++ b/tests/unit/workflow/engine/src/ProcessMaker/Core/JobsManagerTest.php
@@ -116,7 +116,7 @@ class JobsManagerTest extends TestCase
$callback = function() {
};
- $actual = $this->object->dispatch('Email', $callback);
+ $actual = $this->object->dispatch(\App\Jobs\Email::class, $callback);
$this->assertInstanceOf(\Illuminate\Foundation\Bus\PendingDispatch::class, $actual);
}
diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php
index 898b2af56..ef1bb9352 100644
--- a/workflow/engine/classes/WsBase.php
+++ b/workflow/engine/classes/WsBase.php
@@ -1,5 +1,6 @@
dispatch('EmailEvent', $closure);
+ JobsManager::getSingleton()->dispatch(EmailEvent::class, $closure);
break;
default :
$spool = $closure();
diff --git a/workflow/engine/methods/cases/cases_Derivate.php b/workflow/engine/methods/cases/cases_Derivate.php
index 5acfad207..3d16da2c8 100644
--- a/workflow/engine/methods/cases/cases_Derivate.php
+++ b/workflow/engine/methods/cases/cases_Derivate.php
@@ -1,5 +1,6 @@
routeCase($processUid, $application, $postForm, $sStatus, $flagGmail, $tasUid, $index, $userLogged);
};
- JobsManager::getSingleton()->dispatch("CasesDispatch", $closure);
-
+ JobsManager::getSingleton()->dispatch(RouteCase::class, $closure);
+
//We close the related threads.
$cases = new Cases();
$cases->CloseCurrentDelegation($application, $index);
diff --git a/workflow/engine/methods/services/ActionsByEmailDataFormPost.php b/workflow/engine/methods/services/ActionsByEmailDataFormPost.php
index 27d8c3502..71dfe8492 100644
--- a/workflow/engine/methods/services/ActionsByEmailDataFormPost.php
+++ b/workflow/engine/methods/services/ActionsByEmailDataFormPost.php
@@ -4,14 +4,14 @@
* @see workflow/engine/methods/services/ActionsByEmailDataForm.php
* @link https://wiki.processmaker.com/3.3/Actions_by_Email#Link_to_Fill_a_Form
*/
-
-use ProcessMaker\BusinessModel\Cases\InputDocument;
-use ProcessMaker\ChangeLog\ChangeLog;
+use App\Jobs\ActionByEmail;
+use ProcessMaker\Core\JobsManager;
use ProcessMaker\Validation\ValidationUploadedFiles;
-if (PMLicensedFeatures::getSingleton()
- ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) {
-
+$featureEnable = PMLicensedFeatures::getSingleton()
+ ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=');
+if ($featureEnable) {
+
/**
* To do: The following evaluation must be moved after saving the data (so as not to lose the data entered in the form).
* It only remains because it is an old behavior, which must be defined by "Product Owner".
@@ -22,7 +22,7 @@ if (PMLicensedFeatures::getSingleton()
G::SendMessageText($validator->getMessage(), "ERROR");
$url = explode("sys" . config("system.workspace"), $_SERVER['HTTP_REFERER']);
G::header("location: " . "/sys" . config("system.workspace") . $url[1]);
- die();
+ return;
}
$G_PUBLISH = new Publisher();
@@ -53,111 +53,23 @@ if (PMLicensedFeatures::getSingleton()
$aber = G::decrypt($_REQUEST['ABER'], URL_KEY);
$dynUid = G::decrypt($_REQUEST['DYN_UID'], URL_KEY);
$forms = isset($_REQUEST['form']) ? $_REQUEST['form'] : [];
+ $remoteAddr = $_SERVER['REMOTE_ADDR'];
+ $files = $_FILES;
- //Load data related to the case
- $case = new Cases();
- $casesFields = $case->loadCase($appUid, $delIndex);
-
- // Check if the current thread is not finished
- if (!is_null($casesFields['DEL_FINISH_DATE'])) {
- throw new Exception(G::loadTranslation('ID_ABE_FORM_ALREADY_FILLED'));
- }
- // Merge the data
- $casesFields['APP_DATA'] = array_merge($casesFields['APP_DATA'], $forms);
-
- //Get current user info
- $delegation = new AppDelegation();
- $currentUsrUid = $delegation->getUserAssignedInThread($appUid, $delIndex);
- if (!is_null($currentUsrUid)) {
- $users = new Users();
- $userInfo = $users->loadDetails($currentUsrUid);
- $casesFields["APP_DATA"]["USER_LOGGED"] = $currentUsrUid;
- $casesFields["APP_DATA"]["USR_USERNAME"] = $userInfo['USR_USERNAME'];
- }
-
- foreach ($casesFields["APP_DATA"] as $index => $value) {
- $_SESSION[$index] = $value;
- }
-
- $casesFields['CURRENT_DYNAFORM'] = $dynUid;
- $casesFields['USER_UID'] = $casesFields['CURRENT_USER_UID'];
-
- ChangeLog::getChangeLog()
- ->getUsrIdByUsrUid($casesFields['USER_UID'], true)
- ->setSourceId(ChangeLog::FromABE);
-
- //Update case info
- $case->updateCase($appUid, $casesFields);
- if (isset($_FILES ['form'])) {
- if (isset($_FILES["form"]["name"]) && count($_FILES["form"]["name"]) > 0) {
- $oInputDocument = new InputDocument();
- $oInputDocument->uploadFileCase($_FILES, $case, $casesFields, $currentUsrUid, $appUid, $delIndex);
- }
- }
- $wsBaseInstance = new WsBase();
- $result = $wsBaseInstance->derivateCase(
- $casesFields['CURRENT_USER_UID'], $appUid, $delIndex, true
- );
- $code = (is_array($result) ? $result['status_code'] : $result->status_code);
-
- $dataResponses = array();
- $dataResponses['ABE_REQ_UID'] = $aber;
- $dataResponses['ABE_RES_CLIENT_IP'] = $_SERVER['REMOTE_ADDR'];
- $dataResponses['ABE_RES_DATA'] = serialize($forms);
- $dataResponses['ABE_RES_STATUS'] = 'PENDING';
- $dataResponses['ABE_RES_MESSAGE'] = '';
-
- try {
- require_once 'classes/model/AbeResponses.php';
-
- $abeAbeResponsesInstance = new AbeResponses();
- $dataResponses['ABE_RES_UID'] = $abeAbeResponsesInstance->createOrUpdate($dataResponses);
- } catch (Exception $error) {
- throw $error;
- }
-
- if ($code == 0) {
- //Save Cases Notes
- $dataAbeRequests = loadAbeRequest($aber);
- $dataAbeConfiguration = loadAbeConfiguration($dataAbeRequests['ABE_UID']);
-
- if ($dataAbeConfiguration['ABE_CASE_NOTE_IN_RESPONSE'] == 1) {
- $response = new stdclass();
- $response->usrUid = $casesFields['APP_DATA']['USER_LOGGED'];
- $response->appUid = $appUid;
- $response->delIndex = $delIndex;
- $response->noteText = "Check the information that was sent for the receiver: " . $dataAbeRequests['ABE_REQ_SENT_TO'];
- postNote($response);
- }
-
- $dataAbeRequests['ABE_REQ_ANSWERED'] = 1;
- $code == 0 ? uploadAbeRequest($dataAbeRequests) : '';
-
- $assign = $result['message'];
- $aMessage['MESSAGE'] = '' . G::loadTranslation('ID_ABE_INFORMATION_SUBMITTED') . '';
- } else {
- throw new Exception('An error occurred while the application was being processed.
- Error code: ' . $result->status_code . '
- Error message: ' . $result->message . '
');
- }
-
- // Update
- $dataResponses['ABE_RES_STATUS'] = ($code == 0 ? 'SENT' : 'ERROR');
- $dataResponses['ABE_RES_MESSAGE'] = ($code == 0 ? '-' : $result->message);
-
- try {
- $abeAbeResponsesInstance = new AbeResponses();
- $abeAbeResponsesInstance->createOrUpdate($dataResponses);
- } catch (Exception $error) {
- throw $error;
- }
+ //Now we dispatch the derivation of the case through Jobs Laravel.
+ $closure = function() use ($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files) {
+ $cases = new Cases();
+ $cases->routeCaseActionByEmail($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files);
+ };
+ JobsManager::getSingleton()->dispatch(ActionByEmail::class, $closure);
+ $message = [];
+ $message['MESSAGE'] = '' . G::loadTranslation('ID_ABE_INFORMATION_SUBMITTED') . '';
$_SESSION = unserialize($backupSession);
- $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', $aMessage);
+ $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', $message);
} catch (Exception $error) {
- $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', array('MESSAGE' => $error->getMessage() . ' Please contact to your system administrator.'));
+ $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', ['MESSAGE' => $error->getMessage() . ' Please contact to your system administrator.']);
}
$_SESSION = unserialize($backupSession);
G::RenderPage('publish', 'blank');
-}
-
+}
\ No newline at end of file
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Factories/Jobs.php b/workflow/engine/src/ProcessMaker/BusinessModel/Factories/Jobs.php
deleted file mode 100644
index d2df687f9..000000000
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Factories/Jobs.php
+++ /dev/null
@@ -1,43 +0,0 @@
-loadCase($application);
@@ -195,11 +202,131 @@ trait CasesTrait
}
// Set users drive - End
/*----------------------------------********---------------------------------*/
-
+
$result = [
'appFields' => $appFields,
'triggerDebug' => $triggerDebug
];
return (object) $result;
}
+
+ /**
+ * This initiates the routing of the case given the application and the form
+ * data in the email application interface.
+ * @param string $appUid
+ * @param int $delIndex
+ * @param string $aber
+ * @param string $dynUid
+ * @param array $forms
+ * @param string $remoteAddr
+ * @param array $files
+ * @return array
+ * @throws Exception
+ */
+ public function routeCaseActionByEmail($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files): array
+ {
+ //Load data related to the case
+ $case = new Cases();
+ $fields = $case->loadCase($appUid, $delIndex);
+
+ // Check if the current thread is not finished
+ if (!is_null($fields['DEL_FINISH_DATE'])) {
+ $message = G::loadTranslation('ID_ABE_FORM_ALREADY_FILLED');
+ Log::error($message);
+ throw new Exception($message);
+ }
+ // Merge the data
+ $fields['APP_DATA'] = array_merge($fields['APP_DATA'], $forms);
+
+ //Get current user info
+ $delegation = new AppDelegation();
+ $currentUsrUid = $delegation->getUserAssignedInThread($appUid, $delIndex);
+ if (!is_null($currentUsrUid)) {
+ $users = new Users();
+ $userInfo = $users->loadDetails($currentUsrUid);
+ $fields["APP_DATA"]["USER_LOGGED"] = $currentUsrUid;
+ $fields["APP_DATA"]["USR_USERNAME"] = $userInfo['USR_USERNAME'];
+ }
+
+ foreach ($fields["APP_DATA"] as $index => $value) {
+ $_SESSION[$index] = $value;
+ }
+
+ $fields['CURRENT_DYNAFORM'] = $dynUid;
+ $fields['USER_UID'] = $fields['CURRENT_USER_UID'];
+
+ ChangeLog::getChangeLog()
+ ->getUsrIdByUsrUid($fields['USER_UID'], true)
+ ->setSourceId(ChangeLog::FromABE);
+
+ //Update case info
+ $case->updateCase($appUid, $fields);
+ if (isset($files['form'])) {
+ if (isset($files["form"]["name"]) && count($files["form"]["name"]) > 0) {
+ $oInputDocument = new InputDocument();
+ $oInputDocument->uploadFileCase($files, $case, $fields, $currentUsrUid, $appUid, $delIndex);
+ }
+ }
+ $wsBase = new WsBase();
+ $result = $wsBase->derivateCase($fields['CURRENT_USER_UID'], $appUid, $delIndex, true);
+ $code = is_array($result) ? $result['status_code'] : $result->status_code;
+
+ $dataResponses = [];
+ $dataResponses['ABE_REQ_UID'] = $aber;
+ $dataResponses['ABE_RES_CLIENT_IP'] = $remoteAddr;
+ $dataResponses['ABE_RES_DATA'] = serialize($forms);
+ $dataResponses['ABE_RES_STATUS'] = 'PENDING';
+ $dataResponses['ABE_RES_MESSAGE'] = '';
+
+ try {
+ require_once 'classes/model/AbeResponses.php';
+ $abeResponses = new AbeResponses();
+ $dataResponses['ABE_RES_UID'] = $abeResponses->createOrUpdate($dataResponses);
+ } catch (Exception $error) {
+ $message = $error->getMessage();
+ Log::error($message);
+ throw $error;
+ }
+
+ if ($code == 0) {
+ //Save Cases Notes
+ $abeRequest = loadAbeRequest($aber);
+ $abeConfiguration = loadAbeConfiguration($abeRequest['ABE_UID']);
+
+ if ($abeConfiguration['ABE_CASE_NOTE_IN_RESPONSE'] == 1) {
+ $response = new stdclass();
+ $response->usrUid = $fields['APP_DATA']['USER_LOGGED'];
+ $response->appUid = $appUid;
+ $response->delIndex = $delIndex;
+ $response->noteText = "Check the information that was sent for the receiver: " . $abeRequest['ABE_REQ_SENT_TO'];
+ postNote($response);
+ }
+
+ $abeRequest['ABE_REQ_ANSWERED'] = 1;
+ $code == 0 ? uploadAbeRequest($abeRequest) : '';
+ } else {
+ $resStatusCode = is_array($result) ? $result['status_code'] : $result->status_code;
+ $resMessage = is_array($result) ? $result['message'] : $result->message;
+ $message = 'An error occurred while the application was being processed.
+ Error code: ' . $resStatusCode . '
+ Error message: ' . $resMessage . '
';
+ Log::error($message);
+ throw new Exception($message);
+ }
+
+ // Update
+ $resMessage = is_array($result) ? $result['message'] : $result->message;
+ $dataResponses['ABE_RES_STATUS'] = ($code == 0 ? 'SENT' : 'ERROR');
+ $dataResponses['ABE_RES_MESSAGE'] = ($code == 0 ? '-' : $resMessage);
+
+ try {
+ $abeResponses = new AbeResponses();
+ $abeResponses->createOrUpdate($dataResponses);
+ } catch (Exception $error) {
+ $message = $error->getMessage();
+ Log::error($message);
+ throw $error;
+ }
+ return $dataResponses;
+ }
}
diff --git a/workflow/engine/src/ProcessMaker/Core/JobsManager.php b/workflow/engine/src/ProcessMaker/Core/JobsManager.php
index e1df5de01..cda12a92c 100644
--- a/workflow/engine/src/ProcessMaker/Core/JobsManager.php
+++ b/workflow/engine/src/ProcessMaker/Core/JobsManager.php
@@ -5,7 +5,6 @@ namespace ProcessMaker\Core;
use Bootstrap;
use Exception;
use Illuminate\Support\Facades\Log;
-use ProcessMaker\BusinessModel\Factories\Jobs;
use ProcessMaker\Core\System;
use Propel;
@@ -187,7 +186,7 @@ class JobsManager
{
$environment = $this->getDataSnapshot();
- $instance = Jobs::create($name, function() use ($callback, $environment) {
+ $instance = $name::dispatch(function() use ($callback, $environment) {
try {
$this->recoverDataSnapshot($environment);
$callback($environment);