Merged in bugfix/PMCORE-3114 (pull request #7999)
PMCORE-3114 Service - Import a custom case list Service from a JSON Approved-by: Julio Cesar Laura Avendaño
This commit is contained in:
committed by
Julio Cesar Laura Avendaño
commit
5cc714662e
@@ -120,7 +120,7 @@ class CaseListTest extends TestCase
|
|||||||
'createDate' => date('Y-m-d H:m:s'),
|
'createDate' => date('Y-m-d H:m:s'),
|
||||||
'updateDate' => date('Y-m-d H:m:s')
|
'updateDate' => date('Y-m-d H:m:s')
|
||||||
];
|
];
|
||||||
$caseList = CaseList::createSetting($data);
|
$caseList = CaseList::createSetting($data, $data['userId']);
|
||||||
|
|
||||||
//asserts
|
//asserts
|
||||||
$this->assertEquals($data['type'], $caseList->CAL_TYPE);
|
$this->assertEquals($data['type'], $caseList->CAL_TYPE);
|
||||||
@@ -154,7 +154,7 @@ class CaseListTest extends TestCase
|
|||||||
'createDate' => date('Y-m-d H:m:s'),
|
'createDate' => date('Y-m-d H:m:s'),
|
||||||
'updateDate' => date('Y-m-d H:m:s')
|
'updateDate' => date('Y-m-d H:m:s')
|
||||||
];
|
];
|
||||||
$model = CaseList::createSetting($data);
|
$model = CaseList::createSetting($data, $data['userId']);
|
||||||
|
|
||||||
$id = $model->CAL_ID;
|
$id = $model->CAL_ID;
|
||||||
$data2 = [
|
$data2 = [
|
||||||
@@ -162,7 +162,7 @@ class CaseListTest extends TestCase
|
|||||||
'name' => 'new name',
|
'name' => 'new name',
|
||||||
'description' => 'new deescription',
|
'description' => 'new deescription',
|
||||||
];
|
];
|
||||||
$caseList = CaseList::updateSetting($id, $data2);
|
$caseList = CaseList::updateSetting($id, $data2, $data['userId']);
|
||||||
|
|
||||||
//asserts
|
//asserts
|
||||||
$this->assertEquals($data2['type'], $caseList->CAL_TYPE);
|
$this->assertEquals($data2['type'], $caseList->CAL_TYPE);
|
||||||
@@ -196,7 +196,7 @@ class CaseListTest extends TestCase
|
|||||||
'createDate' => date('Y-m-d H:m:s'),
|
'createDate' => date('Y-m-d H:m:s'),
|
||||||
'updateDate' => date('Y-m-d H:m:s')
|
'updateDate' => date('Y-m-d H:m:s')
|
||||||
];
|
];
|
||||||
$model = CaseList::createSetting($data);
|
$model = CaseList::createSetting($data, $data['userId']);
|
||||||
|
|
||||||
$id = $model->CAL_ID;
|
$id = $model->CAL_ID;
|
||||||
$caseList = CaseList::deleteSetting($id);
|
$caseList = CaseList::deleteSetting($id);
|
||||||
@@ -233,10 +233,10 @@ class CaseListTest extends TestCase
|
|||||||
'iconColor' => 'red',
|
'iconColor' => 'red',
|
||||||
'iconColorScreen' => 'blue'
|
'iconColorScreen' => 'blue'
|
||||||
];
|
];
|
||||||
$model1 = CaseList::createSetting($data);
|
$model1 = CaseList::createSetting($data, $data['userId']);
|
||||||
$model2 = CaseList::createSetting($data);
|
$model2 = CaseList::createSetting($data, $data['userId']);
|
||||||
$model3 = CaseList::createSetting($data);
|
$model3 = CaseList::createSetting($data, $data['userId']);
|
||||||
$model4 = CaseList::createSetting($data);
|
$model4 = CaseList::createSetting($data, $data['userId']);
|
||||||
|
|
||||||
//assert total
|
//assert total
|
||||||
$result = CaseList::getSetting('inbox', '', 0, 10);
|
$result = CaseList::getSetting('inbox', '', 0, 10);
|
||||||
@@ -272,4 +272,80 @@ class CaseListTest extends TestCase
|
|||||||
$this->assertEquals(0, $result['total']);
|
$this->assertEquals(0, $result['total']);
|
||||||
$this->assertEquals(0, count($result['data']));
|
$this->assertEquals(0, count($result['data']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This tests the import method.
|
||||||
|
* @test
|
||||||
|
* @covers \ProcessMaker\Model\CaseList::import()
|
||||||
|
*/
|
||||||
|
public function it_should_test_import()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'type' => 'inbox',
|
||||||
|
'name' => 'test1',
|
||||||
|
'description' => 'my description',
|
||||||
|
'tableUid' => '',
|
||||||
|
'columns' => [],
|
||||||
|
'iconList' => 'deafult.png',
|
||||||
|
'iconColor' => 'red',
|
||||||
|
'iconColorScreen' => 'blue'
|
||||||
|
];
|
||||||
|
$json = json_encode($data);
|
||||||
|
$tempFile = sys_get_temp_dir() . '/test_' . random_int(10000, 99999);
|
||||||
|
file_put_contents($tempFile, $json);
|
||||||
|
$_FILES = [
|
||||||
|
'file_content' => [
|
||||||
|
'tmp_name' => $tempFile,
|
||||||
|
'error' => 0
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$request_data = [];
|
||||||
|
$ownerId = 1;
|
||||||
|
$result = CaseList::import($request_data, $ownerId);
|
||||||
|
|
||||||
|
//assert
|
||||||
|
$this->assertArrayHasKey('type', $result);
|
||||||
|
$this->assertArrayHasKey('name', $result);
|
||||||
|
$this->assertArrayHasKey('description', $result);
|
||||||
|
|
||||||
|
$this->assertEquals($data['type'], $result['type']);
|
||||||
|
$this->assertEquals($data['name'], $result['name']);
|
||||||
|
$this->assertEquals($data['description'], $result['description']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This tests the export method.
|
||||||
|
* @test
|
||||||
|
* @covers \ProcessMaker\Model\CaseList::export()
|
||||||
|
*/
|
||||||
|
public function it_should_test_export()
|
||||||
|
{
|
||||||
|
CaseList::truncate();
|
||||||
|
$data = [
|
||||||
|
'type' => 'inbox',
|
||||||
|
'name' => 'test export',
|
||||||
|
'description' => 'my description',
|
||||||
|
'tableUid' => '',
|
||||||
|
'columns' => [],
|
||||||
|
'userId' => 1,
|
||||||
|
'iconList' => 'deafult.png',
|
||||||
|
'iconColor' => 'red',
|
||||||
|
'iconColorScreen' => 'blue'
|
||||||
|
];
|
||||||
|
CaseList::createSetting($data, $data['userId']);
|
||||||
|
|
||||||
|
$result = CaseList::export($data['userId']);
|
||||||
|
|
||||||
|
//assert
|
||||||
|
$this->assertArrayHasKey('type', $result['data']);
|
||||||
|
$this->assertArrayHasKey('name', $result['data']);
|
||||||
|
$this->assertArrayHasKey('description', $result['data']);
|
||||||
|
|
||||||
|
$this->assertEquals($data['type'], $result['data']['type']);
|
||||||
|
$this->assertEquals($data['name'], $result['data']['name']);
|
||||||
|
$this->assertEquals($data['description'], $result['data']['description']);
|
||||||
|
|
||||||
|
//assert file export
|
||||||
|
$this->assertFileExists($result['filename']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace ProcessMaker\Model;
|
namespace ProcessMaker\Model;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use G;
|
||||||
use ProcessMaker\Core\System;
|
use ProcessMaker\Core\System;
|
||||||
use ProcessMaker\Model\AdditionalTables;
|
use ProcessMaker\Model\AdditionalTables;
|
||||||
use ProcessMaker\Model\User;
|
use ProcessMaker\Model\User;
|
||||||
@@ -98,12 +100,14 @@ class CaseList extends Model
|
|||||||
/**
|
/**
|
||||||
* Create and save this model from array values.
|
* Create and save this model from array values.
|
||||||
* @param array $values
|
* @param array $values
|
||||||
|
* @param int $ownerId
|
||||||
* @return object
|
* @return object
|
||||||
*/
|
*/
|
||||||
public static function createSetting(array $values)
|
public static function createSetting(array $values, int $ownerId)
|
||||||
{
|
{
|
||||||
$attributes = CaseList::getColumnNameFromAlias($values);
|
$attributes = CaseList::getColumnNameFromAlias($values);
|
||||||
|
|
||||||
|
$attributes['USR_ID'] = $ownerId;
|
||||||
$attributes['CAL_CREATE_DATE'] = date("Y-m-d H:i:s");
|
$attributes['CAL_CREATE_DATE'] = date("Y-m-d H:i:s");
|
||||||
$attributes['CAL_UPDATE_DATE'] = date("Y-m-d H:i:s");
|
$attributes['CAL_UPDATE_DATE'] = date("Y-m-d H:i:s");
|
||||||
if (empty($attributes['CAL_COLUMNS'])) {
|
if (empty($attributes['CAL_COLUMNS'])) {
|
||||||
@@ -120,12 +124,14 @@ class CaseList extends Model
|
|||||||
* Update and save this model from array values.
|
* Update and save this model from array values.
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @param array $values
|
* @param array $values
|
||||||
|
* @param int $ownerId
|
||||||
* @return object
|
* @return object
|
||||||
*/
|
*/
|
||||||
public static function updateSetting(int $id, array $values)
|
public static function updateSetting(int $id, array $values, int $ownerId)
|
||||||
{
|
{
|
||||||
$attributes = CaseList::getColumnNameFromAlias($values);
|
$attributes = CaseList::getColumnNameFromAlias($values);
|
||||||
|
|
||||||
|
$attributes['USR_ID'] = $ownerId;
|
||||||
$attributes['CAL_UPDATE_DATE'] = date("Y-m-d H:i:s");
|
$attributes['CAL_UPDATE_DATE'] = date("Y-m-d H:i:s");
|
||||||
if (empty($attributes['CAL_COLUMNS'])) {
|
if (empty($attributes['CAL_COLUMNS'])) {
|
||||||
$attributes['CAL_COLUMNS'] = [];
|
$attributes['CAL_COLUMNS'] = [];
|
||||||
@@ -212,4 +218,66 @@ class CaseList extends Model
|
|||||||
'data' => $data
|
'data' => $data
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The export creates a temporary file with record data in json format.
|
||||||
|
* @param int $id
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function export(int $id)
|
||||||
|
{
|
||||||
|
$model = CaseList::where('CAL_ID', '=', $id)
|
||||||
|
->leftJoin('USERS', 'USERS.USR_ID', '=', 'CASE_LIST.USR_ID')
|
||||||
|
->leftJoin('ADDITIONAL_TABLES', 'ADDITIONAL_TABLES.ADD_TAB_UID', '=', 'CASE_LIST.ADD_TAB_UID')
|
||||||
|
->select([
|
||||||
|
'CASE_LIST.*'
|
||||||
|
])
|
||||||
|
->get()
|
||||||
|
->first();
|
||||||
|
if (empty($model)) {
|
||||||
|
throw new Exception(G::LoadTranslation('ID_DOES_NOT_EXIST'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = CaseList::getAliasFromColumnName($model->toArray());
|
||||||
|
$result['columns'] = json_decode($result['columns']);
|
||||||
|
|
||||||
|
//clean invalid items
|
||||||
|
unset($result['id']);
|
||||||
|
unset($result['userId']);
|
||||||
|
unset($result['createDate']);
|
||||||
|
unset($result['updateDate']);
|
||||||
|
|
||||||
|
//random name to distinguish the different sessions
|
||||||
|
$filename = sys_get_temp_dir() . "/pm" . random_int(10000, 99999);
|
||||||
|
file_put_contents($filename, json_encode($result));
|
||||||
|
return [
|
||||||
|
'filename' => $filename,
|
||||||
|
'downloadFilename' => $result['name'] . ' ' . date('Y-m-d H:i:s') . '.json',
|
||||||
|
'data' => $result
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The import requires a $ _FILES content in json format to create a record.
|
||||||
|
* @param array $request_data
|
||||||
|
* @param int $ownerId
|
||||||
|
* @return array
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function import(array $request_data, int $ownerId)
|
||||||
|
{
|
||||||
|
if ($_FILES['file_content']['error'] !== UPLOAD_ERR_OK ||
|
||||||
|
$_FILES['file_content']['tmp_name'] === '') {
|
||||||
|
throw new Exception(G::LoadTranslation('ID_ERROR_UPLOADING_FILENAME'));
|
||||||
|
}
|
||||||
|
$content = file_get_contents($_FILES['file_content']['tmp_name']);
|
||||||
|
try {
|
||||||
|
$array = json_decode($content, true);
|
||||||
|
$caseList = CaseList::createSetting($array, $ownerId);
|
||||||
|
$result = CaseList::getAliasFromColumnName($caseList->toArray());
|
||||||
|
return $result;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
throw new Exception($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ class CaseList extends Api
|
|||||||
*/
|
*/
|
||||||
public function doPost(array $request_data)
|
public function doPost(array $request_data)
|
||||||
{
|
{
|
||||||
$caseList = CaseListBusinessModel::createSetting($request_data);
|
$ownerId = $this->getUserId();
|
||||||
|
$caseList = CaseListBusinessModel::createSetting($request_data, $ownerId);
|
||||||
$caseList = CaseListBusinessModel::getAliasFromColumnName($caseList->toArray());
|
$caseList = CaseListBusinessModel::getAliasFromColumnName($caseList->toArray());
|
||||||
return $caseList;
|
return $caseList;
|
||||||
}
|
}
|
||||||
@@ -55,7 +56,8 @@ class CaseList extends Api
|
|||||||
*/
|
*/
|
||||||
public function doPut(int $id, array $request_data)
|
public function doPut(int $id, array $request_data)
|
||||||
{
|
{
|
||||||
$caseList = CaseListBusinessModel::updateSetting($id, $request_data);
|
$ownerId = $this->getUserId();
|
||||||
|
$caseList = CaseListBusinessModel::updateSetting($id, $request_data, $ownerId);
|
||||||
if (is_null($caseList)) {
|
if (is_null($caseList)) {
|
||||||
throw new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_DOES_NOT_EXIST'));
|
throw new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_DOES_NOT_EXIST'));
|
||||||
}
|
}
|
||||||
@@ -145,4 +147,40 @@ class CaseList extends Api
|
|||||||
{
|
{
|
||||||
return CaseListBusinessModel::getSetting('unassigned', $search, $offset, $limit);
|
return CaseListBusinessModel::getSetting('unassigned', $search, $offset, $limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get unassigned Case List settings.
|
||||||
|
* @url GET /:id/export
|
||||||
|
* @access protected
|
||||||
|
* @class AccessControl {@permission PM_CASES}
|
||||||
|
* @throws RestException
|
||||||
|
*/
|
||||||
|
public function doExport(int $id)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$result = CaseListBusinessModel::export($id);
|
||||||
|
G::streamFile($result['filename'], true, $result['downloadFilename']);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get unassigned Case List settings.
|
||||||
|
* @url POST /import
|
||||||
|
* @param array $request_data
|
||||||
|
* @access protected
|
||||||
|
* @class AccessControl {@permission PM_CASES}
|
||||||
|
* @throws RestException
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function doImport(array $request_data)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$ownerId = $this->getUserId();
|
||||||
|
return CaseListBusinessModel::import($request_data, $ownerId);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user