PMCORE-3709

This commit is contained in:
Paula.Quispe
2022-04-08 12:51:19 -04:00
parent 4d262146bd
commit 9fd71632a2
10 changed files with 197 additions and 16 deletions

View File

@@ -5,8 +5,10 @@ namespace ProcessMaker\BusinessModel;
use Exception;
use G;
use ProcessMaker\BusinessModel\Variable;
use ProcessMaker\Model\AdditionalTables;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\Dynaform;
use ProcessMaker\Model\Fields;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\ProcessVariables;
use Tests\TestCase;
@@ -16,7 +18,6 @@ use Tests\TestCase;
*/
class VariableTest extends TestCase
{
/**
* Test it create variables related to the process
*
@@ -272,4 +273,30 @@ class VariableTest extends TestCase
$variable = new Variable();
$result = $variable->executeSqlControl(null, []);
}
/**
* This verify the exception
* @test
* @covers \ProcessMaker\BusinessModel\Variable::throwExceptionIfVariableIsAssociatedAditionalTable()
*/
public function it_should_test_exception_when_a_variable_is_related_table()
{
//assert
$this->expectException(Exception::class);
// Create process variable
$variable = factory(ProcessVariables::class)->create();
$result = ProcessVariables::getVariable($variable->VAR_UID);
$this->assertNotEmpty($result);
// Create tables
$table = factory(AdditionalTables::class)->create([
'PRO_UID' => $variable->PRO_UID,
]);
// Create fields
$fields = factory(Fields::class)->create([
'ADD_TAB_UID' => $table->ADD_TAB_UID,
'FLD_NAME' => $variable->VAR_NAME,
]);
$variable = new Variable();
$res = $variable->throwExceptionIfVariableIsAssociatedAditionalTable($variable->VAR_UID);
}
}

View File

@@ -44,6 +44,31 @@ class AdditionalTablesTest extends TestCase
$this->assertCount(1, $table->offline([$table->ADD_TAB_OFFLINE])->get());
}
/**
* Test scope query to get the offline tables
*
* @covers \ProcessMaker\Model\AdditionalTables::scopeProcess()
* @test
*/
public function it_filter_process()
{
$table = factory(AdditionalTables::class)->create();
$this->assertCount(1, $table->process($table->PRO_UID)->get());
}
/**
* Test scope query to get tables related to the process
*
* @covers \ProcessMaker\Model\AdditionalTables::getTables()
* @test
*/
public function it_get_tables_related_to_process()
{
$table = factory(AdditionalTables::class)->create();
$result = AdditionalTables::getTables($table->PRO_UID);
$this->assertNotEmpty($result);
}
/**
* Test get the structure of offline tables
*

View File

@@ -42,4 +42,19 @@ class FieldsTest extends TestCase
$result = Fields::getFields($fields->ADD_TAB_UID);
$this->assertNotEmpty($result);
}
/**
* Test scope and search a field related to the specific ADD_TAB_UID
*
* @covers \ProcessMaker\Model\Fields::scopeField()
* @covers \ProcessMaker\Model\Fields::scopeFieldOrLabel()
* @covers \ProcessMaker\Model\Fields::searchVariable()
* @test
*/
public function it_search_field()
{
$fields = factory(Fields::class)->create();
$result = Fields::searchVariable($fields->ADD_TAB_UID, $fields->FLD_NAME);
$this->assertNotEmpty($result);
}
}

View File

@@ -54,6 +54,19 @@ class ProcessVariablesTest extends TestCase
$this->assertEquals($process[0]['PRO_UID'], $result[1]['PRJ_UID']);
}
/**
* Test it return a variable related to the VAR_UID
*
* @covers \ProcessMaker\Model\ProcessVariables::getVariable()
* @test
*/
public function it_get_variable()
{
$table = factory(ProcessVariables::class)->create();
$result = ProcessVariables::getVariable($table->VAR_UID);
$this->assertNotEmpty($result);
}
/**
* Test it return the variables related to the PRO_ID
*
@@ -76,6 +89,8 @@ class ProcessVariablesTest extends TestCase
/**
* Test it return the variables by type related to the PRO_ID
*
* @covers \ProcessMaker\Model\ProcessVariables::scopeProcessId()
* @covers \ProcessMaker\Model\ProcessVariables::scopeTypeId()
* @covers \ProcessMaker\Model\ProcessVariables::getVariablesByType()
* @test
*/

View File

@@ -28538,8 +28538,8 @@ msgstr "Variable for Value Based Assignment"
# TRANSLATION
# LABEL/ID_VARIABLE_ASSOCIATED_WITH_REPORT_TABLE
#: LABEL/ID_VARIABLE_ASSOCIATED_WITH_REPORT_TABLE
msgid "The variable with \"{0}\", it is associated with a report table."
msgstr "The variable with \"{0}\", it is associated with a report table."
msgid "The variable \"{0}\" Is associated with a report table, that requires to be removed first before allowing deleting it."
msgstr "The variable \"{0}\" Is associated with a report table, that requires to be removed first before allowing deleting it.""
# TRANSLATION
# LABEL/ID_VARIABLE_IN_USE

View File

@@ -61742,7 +61742,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_VARIABLES_RECEIVED','en','variables received','2014-01-15') ,
( 'LABEL','ID_VARIABLES_SENT','en','variables sent','2014-01-15') ,
( 'LABEL','ID_VARIABLES_VALUE_ASSIGNMENT','en','Variable for Value Based Assignment','2014-01-15') ,
( 'LABEL','ID_VARIABLE_ASSOCIATED_WITH_REPORT_TABLE','en','The variable with "{0}", it is associated with a report table.','2016-02-05') ,
( 'LABEL','ID_VARIABLE_ASSOCIATED_WITH_REPORT_TABLE','en','The variable \"{0}\" Is associated with a report table, that requires to be removed first before allowing deleting it.','2022-04-08') ,
( 'LABEL','ID_VARIABLE_IN_USE','en','This variable can not be deleted because it is being used in DynaForm : {0}. To delete it, first remove it from the DynaForm.','2015-04-08') ,
( 'LABEL','ID_VARIABLE_NO_IS_GRID','en','The Variable with {0}: "{1}" is not a grid','2016-02-23') ,
( 'LABEL','ID_VARIABLE_PICKER','en','pmVariablePicker','2014-01-15') ,

View File

@@ -7,6 +7,8 @@ use Cases as ClassesCases;
use Exception;
use G;
use PmDynaform;
use ProcessMaker\Model\AdditionalTables as AT;
use ProcessMaker\Model\Fields;
use ProcessMaker\Model\ProcessVariables;
use ProcessMaker\Util\Common;
@@ -570,18 +572,19 @@ class Variable
public function throwExceptionIfVariableIsAssociatedAditionalTable($variableUid)
{
try {
$criteria = new \Criteria('workflow');
$criteria->addSelectColumn(\ProcessVariablesPeer::VAR_UID);
$criteria->addJoin(\ProcessVariablesPeer::PRJ_UID, \AdditionalTablesPeer::PRO_UID, \Criteria::INNER_JOIN);
$arrayCondition = [];
$arrayCondition[] = array(\AdditionalTablesPeer::ADD_TAB_UID, \FieldsPeer::ADD_TAB_UID, \Criteria::EQUAL);
$arrayCondition[] = array(\ProcessVariablesPeer::VAR_NAME, \FieldsPeer::FLD_NAME, \Criteria::EQUAL);
$criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
$criteria->add(\ProcessVariablesPeer::VAR_UID, $variableUid, \Criteria::EQUAL);
$rsCriteria = \ProcessVariablesPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
throw new Exception(G::LoadTranslation('ID_VARIABLE_ASSOCIATED_WITH_REPORT_TABLE', array($variableUid)));
// Get variable name
$varInfo = ProcessVariables::getVariable($variableUid);
$varName = $varInfo['VAR_NAME'];
$proUid = $varInfo['PRJ_UID'];
// Get the tables related to the process
$tables = AT::getTables($proUid);
if (!empty($tables)) {
foreach ($tables as $value) {
$exist = Fields::searchVariable($value['ADD_TAB_UID'], $varName);
if ($exist) {
throw new Exception(G::LoadTranslation('ID_VARIABLE_ASSOCIATED_WITH_REPORT_TABLE', [$varName]));
}
}
}
} catch (Exception $e) {
throw $e;

View File

@@ -32,6 +32,34 @@ class AdditionalTables extends Model
return $query->where('ADD_TAB_OFFLINE', '=', 1);
}
/**
* Scope a query to get the tables related to the process
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param string $proUid
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeProcess($query, string $proUid)
{
return $query->where('PRO_UID', $proUid);
}
/**
* Get tables related to the process
*
* @param string $proUid
* @return array
*/
public static function getTables(string $proUid)
{
$query = AdditionalTables::query()->select();
$query->process($proUid);
$result = $query->get()->values()->toArray();
return $result;
}
/**
* Get the structure of offline tables
*

View File

@@ -32,6 +32,39 @@ class Fields extends Model
return $query->where('ADD_TAB_UID', '=', $tabUid);
}
/**
* Scope a query to get the field name
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param string $name
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeField($query, $name)
{
return $query->where('FLD_NAME', $name);
}
/**
* Scope a query to get the field name or label name
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param string $field
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeFieldOrLabel($query, $field)
{
$query->where(function ($query) use ($field) {
$query->field($field);
$fieldLabel = $field . '_label';
$query->orWhere(function ($query) use ($fieldLabel) {
$query->field($fieldLabel);
});
});
return $query;
}
/**
* Get the offline tables
*
@@ -52,4 +85,22 @@ class Fields extends Model
return $data;
}
/**
* Search a field related to the table
*
* @param string $tabUid
* @param string $field
*
* @return bool
*/
public static function searchVariable(string $tabUid, string $field)
{
$query = Fields::query();
$query->table($tabUid);
$query->fieldOrLabel($field);
$result = $query->get()->values()->toArray();
return !empty($result);
}
}

View File

@@ -87,6 +87,23 @@ class ProcessVariables extends Model
return $query->where('VAR_FIELD_TYPE_ID', $typeId);
}
/**
* Return the variable information
*
* @param string $varUid
*
* @return array
*/
public static function getVariable(string $varUid)
{
$query = ProcessVariables::query()->select();
$query->where('VAR_UID', $varUid)->limit(1);
$result = $query->get()->values()->toArray();
$result = head($result);
return $result;
}
/**
* Return the variables list
*