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);