PMCORE-540

This commit is contained in:
Paula Quispe
2020-02-17 14:09:54 -04:00
parent 8851292713
commit 4280cdfe37
3 changed files with 124 additions and 17 deletions

View File

@@ -5,6 +5,7 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\Model;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
use ProcessMaker\Model\Application; use ProcessMaker\Model\Application;
use ProcessMaker\Model\Process; use ProcessMaker\Model\Process;
use ProcessMaker\Model\User;
use Tests\TestCase; use Tests\TestCase;
/** /**
@@ -16,10 +17,43 @@ class ApplicationTest extends TestCase
{ {
use DatabaseTransactions; use DatabaseTransactions;
/**
* Test belongs to APP_CUR_USER
*
* @covers \ProcessMaker\Model\Application::currentUser()
* @test
*/
public function it_has_a_current_user()
{
$application = factory(Application::class)->create([
'APP_CUR_USER' => function () {
return factory(User::class)->create()->USR_UID;
}
]);
$this->assertInstanceOf(User::class, $application->currentUser);
}
/**
* Test belongs to APP_INIT_USER
*
* @covers \ProcessMaker\Model\Application::creatorUser()
* @test
*/
public function it_has_a_init_user()
{
$application = factory(Application::class)->create([
'APP_INIT_USER' => function () {
return factory(User::class)->create()->USR_UID;
}
]);
$this->assertInstanceOf(User::class, $application->creatoruser);
}
/** /**
* This checks if return the columns used * This checks if return the columns used
* *
* @covers \ProcessMaker\Model\Application::getByProUid() * @covers \ProcessMaker\Model\Application::getByProUid()
* @covers \ProcessMaker\Model\Application::scopeProUid()
* @test * @test
*/ */
public function it_return_cases_by_process() public function it_return_cases_by_process()
@@ -36,6 +70,7 @@ class ApplicationTest extends TestCase
* This checks if return the columns used * This checks if return the columns used
* *
* @covers \ProcessMaker\Model\Application::getCase() * @covers \ProcessMaker\Model\Application::getCase()
* @covers \ProcessMaker\Model\Application::scopeAppUid()
* @test * @test
*/ */
public function it_return_case_information() public function it_return_case_information()
@@ -45,4 +80,34 @@ class ApplicationTest extends TestCase
$this->assertArrayHasKey('APP_STATUS', $result); $this->assertArrayHasKey('APP_STATUS', $result);
$this->assertArrayHasKey('APP_INIT_USER', $result); $this->assertArrayHasKey('APP_INIT_USER', $result);
} }
/**
* This checks if the columns was updated correctly
*
* @covers \ProcessMaker\Model\Application::updateColumns()
* @test
*/
public function it_update_columns()
{
// No column will be updated
$application = factory(Application::class)->create();
$result = Application::updateColumns($application->APP_UID, []);
$this->isEmpty($result);
// Tried to update APP_ROUTING_DATA
$application = factory(Application::class)->create();
$result = Application::updateColumns($application->APP_UID, ['APP_ROUTING_DATA' => '']);
$this->assertArrayHasKey('APP_ROUTING_DATA', $result);
// We can not update with a empty user
$application = factory(Application::class)->create();
$result = Application::updateColumns($application->APP_UID, ['APP_CUR_USER' => '']);
$this->assertArrayNotHasKey('APP_CUR_USER', $result);
// Tried to update APP_CUR_USER
$application = factory(Application::class)->create();
$result = Application::updateColumns($application->APP_UID, ['APP_CUR_USER' => '00000000000000000000000000000001']);
$this->assertArrayHasKey('APP_CUR_USER', $result);
}
} }

View File

@@ -1,20 +1,27 @@
<?php <?php
/**
* Route case
*/
use ProcessMaker\Model\Application as ModelApplication;
class Derivation class Derivation
{ {
var $case; var $case;
protected $appCurrentUser;
protected $arraySiblings;
protected $aSP;
protected $context;
protected $flagControl; protected $flagControl;
protected $flagControlMulInstance; protected $flagControlMulInstance;
protected $sys; protected $flagUpdateList;
protected $context; protected $iNewDelIndex;
protected $regexpTaskTypeToInclude; protected $regexpTaskTypeToInclude;
protected $removeList;
protected $sys;
public $node; public $node;
public $userLogged = null; public $userLogged = null;
protected $flagUpdateList;
protected $removeList;
protected $aSP;
protected $iNewDelIndex;
protected $arraySiblings;
public function __construct() public function __construct()
{ {
@@ -888,7 +895,10 @@ class Derivation
$aContext['appUid'] = $currentDelegation['APP_UID']; $aContext['appUid'] = $currentDelegation['APP_UID'];
$aContext['delIndex'] = $currentDelegation['DEL_INDEX']; $aContext['delIndex'] = $currentDelegation['DEL_INDEX'];
// Remove the fields that will update with the thread creation
unset($appFields['APP_ROUTING_DATA']); unset($appFields['APP_ROUTING_DATA']);
$this->appCurrentUser = $appFields['APP_CUR_USER'];
unset($appFields['APP_CUR_USER']);
//We close the current derivation, then we'll try to derivate to each defined route //We close the current derivation, then we'll try to derivate to each defined route
$this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); $this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] );
@@ -1237,6 +1247,7 @@ class Derivation
$nextDel['DEL_PRIORITY'] = 3; $nextDel['DEL_PRIORITY'] = 3;
} }
$newDelegationUser = '';
switch ($nextDel['TAS_ASSIGN_TYPE']) { switch ($nextDel['TAS_ASSIGN_TYPE']) {
case 'CANCEL_MI': case 'CANCEL_MI':
case 'STATIC_MI': case 'STATIC_MI':
@@ -1266,12 +1277,14 @@ class Derivation
$row = $criteriaMultiR->getRow(); $row = $criteriaMultiR->getRow();
$delPrevious = $row['DEL_PREVIOUS']; $delPrevious = $row['DEL_PREVIOUS'];
} }
// Get the user that will create the new case
$newDelegationUser = $this->verifyCurrentUserInTask($nextDel, $aSP);
// Create new delegation // Create new delegation
$iNewDelIndex = $this->case->newAppDelegation( $iNewDelIndex = $this->case->newAppDelegation(
$appFields['PRO_UID'], $appFields['PRO_UID'],
$currentDelegation['APP_UID'], $currentDelegation['APP_UID'],
$nextDel['TAS_UID'], $nextDel['TAS_UID'],
$this->verifyCurrentUserInTask($nextDel, $aSP), $newDelegationUser,
$currentDelegation['DEL_INDEX'], $currentDelegation['DEL_INDEX'],
$nextDel['DEL_PRIORITY'], $nextDel['DEL_PRIORITY'],
$delType, $delType,
@@ -1297,10 +1310,15 @@ class Derivation
} }
} }
$application = new Application(); /** Update the table application */
$result = $application->update(['APP_UID' => $currentDelegation['APP_UID'], 'APP_ROUTING_DATA' => serialize($arrayRoutingData)]); $applicationFields = [
'APP_ROUTING_DATA' => $arrayRoutingData,
'APP_CUR_USER' => $newDelegationUser
];
$colUpdated = ModelApplication::updateColumns($currentDelegation['APP_UID'], $applicationFields);
$appFields['APP_CUR_USER'] = !empty($colUpdated['APP_CUR_USER']) ? $colUpdated['APP_CUR_USER'] : $this->appCurrentUser;
//We updated the information relate to APP_THREAD // We updated the information relate to APP_THREAD
$iAppThreadIndex = $appFields['DEL_THREAD']; $iAppThreadIndex = $appFields['DEL_THREAD'];
$isUpdatedThread = false; $isUpdatedThread = false;
if (isset($currentDelegation['ROUTE_TYPES']) && sizeof($currentDelegation['ROUTE_TYPES']) > 1) { if (isset($currentDelegation['ROUTE_TYPES']) && sizeof($currentDelegation['ROUTE_TYPES']) > 1) {

View File

@@ -16,20 +16,22 @@ class Application extends Model
return $this->hasMany(Delegation::class, 'APP_UID', 'APP_UID'); return $this->hasMany(Delegation::class, 'APP_UID', 'APP_UID');
} }
public function parent()
{
return $this->hasOne(Application::class, 'APP_PARENT', 'APP_UID');
}
public function currentUser() public function currentUser()
{ {
return $this->hasOne(User::class, 'APP_CUR_USER', 'USR_UID'); return $this->belongsTo(User::class, 'APP_CUR_USER', 'USR_UID');
}
public function creatorUser()
{
return $this->belongsTo(User::class, 'APP_INIT_USER', 'USR_UID');
} }
/** /**
* Scope for query to get the application by APP_UID. * Scope for query to get the application by APP_UID.
*
* @param \Illuminate\Database\Eloquent\Builder $query * @param \Illuminate\Database\Eloquent\Builder $query
* @param string $appUid * @param string $appUid
*
* @return \Illuminate\Database\Eloquent\Builder * @return \Illuminate\Database\Eloquent\Builder
*/ */
public function scopeAppUid($query, $appUid) public function scopeAppUid($query, $appUid)
@@ -85,4 +87,26 @@ class Application extends Model
return $firstElement; return $firstElement;
} }
/**
* Update properties
*
* @param string $appUid
* @param array $fields
*
* @return array
*/
public static function updateColumns($appUid, $fields)
{
$properties = [];
$properties['APP_ROUTING_DATA'] = !empty($fields['APP_ROUTING_DATA']) ? serialize($fields['APP_ROUTING_DATA']) : serialize([]);
// This column will to update only when the thread is related to the user
if (!empty($fields['APP_CUR_USER'])) {
$properties['APP_CUR_USER'] = $fields['APP_CUR_USER'];
}
Application::query()->appUid($appUid)->update($properties);
return $properties;
}
} }