This commit is contained in:
Roly Rudy Gutierrez Pinto
2019-01-24 10:49:25 -04:00
parent 28105f8766
commit af5a44c221
3 changed files with 171 additions and 113 deletions

View File

@@ -462,30 +462,56 @@ function setCasesListFields($arrayCasesListField, $arrayField)
return $arrayFieldResult;
}
/**
* Get the Custom Case List configuration data.
*
* @global string $action
* @global array $confCasesList
* @global string $tabUid
*/
function fieldSet()
{
global $conf;
global $confCasesList;
global $action;
global $confCasesList;
global $tabUid;
if (is_array($confCasesList)) {
$validConfig = isset($confCasesList["first"]) && isset($confCasesList["second"]);
$confCasesList = (array) $confCasesList;
$result = [];
$sw1 = !empty($confCasesList);
$sw2 = $tabUid === "" || (!empty($tabUid) && !empty($confCasesList['PMTable']) && $confCasesList['PMTable'] === $tabUid);
if ($sw1 && $sw2) {
$result = $confCasesList;
//remove used elements
$data = $result['second']['data'];
$fields = getFieldsByTabUid($result['PMTable']);
foreach ($data as $value1) {
foreach ($fields as $key => $value2) {
$swName = $value1['name'] === $value2['name'];
$swFieldType = $value1['fieldType'] === $value2['fieldType'];
if ($swName && $swFieldType) {
unset($fields[$key]);
break;
}
}
}
$result['first']['data'] = array_values($fields);
} else {
$validConfig = false;
}
if (!$validConfig) {
$arrayField = getDefaultFields($action, 0);
$fields = getFieldsByTabUid($tabUid);
$arrayField = getDefaultFields($action, 0);
$arrayConfig = getDefaultConfig($action, 0);
$result = genericJsonResponse("", array(), $arrayField, $arrayConfig["rowsperpage"], $arrayConfig["dateformat"]);
$conf->saveObject($result, "casesList", $action, "", "", "");
echo G::json_encode($result);
} else {
echo G::json_encode($confCasesList);
$generic = genericJsonResponse($tabUid, [], $arrayField, $arrayConfig["rowsperpage"], $arrayConfig["dateformat"]);
$result = $generic;
$result['first']['data'] = $fields;
}
if (is_array($result) && isset($result['second']['data'])) {
foreach ($result['second']['data'] as $key => $value) {
$result['second']['data'][$key]['align_label'] = $result['second']['data'][$key]['align'];
}
}
echo G::json_encode($result);
}
function fieldReset($translation)
@@ -690,11 +716,6 @@ try {
switch ($xaction) {
case "FIELD_SET":
if (is_array($confCasesList) && isset($confCasesList['second']['data'])) {
foreach ($confCasesList['second']['data'] as $key => $value) {
$confCasesList['second']['data'][$key]['align_label'] = $confCasesList['second']['data'][$key]['align'];
}
}
fieldSet();
break;
case "FIELD_RESET":
@@ -744,44 +765,53 @@ function genericJsonResponse($pmtable, $first, $second, $rowsperpage, $dateForma
return $result;
}
/**
* Get row from PM Table.
*
* @param string $tabUid
*/
function xgetFieldsFromPMTable($tabUid)
{
$rows = array();
$result = array();
// $rows[] = array ( 'name' => 'val 1', 'gridIndex' => '21', 'fieldType' => 'PM Table' );
// $rows[] = array ( 'name' => 'val 2', 'gridIndex' => '22', 'fieldType' => 'PM Table' );
// $rows[] = array ( 'name' => 'val 3', 'gridIndex' => '23', 'fieldType' => 'PM Table' );
//$result['success'] = true;
//$result['totalCount'] = count($rows);
$oCriteria = new Criteria('workflow');
$oCriteria->clearSelectColumns ( );
$oCriteria->setDistinct();
$oCriteria->addSelectColumn ( FieldsPeer::FLD_NAME );
$oCriteria->addSelectColumn ( FieldsPeer::FLD_UID );
$oCriteria->addSelectColumn ( FieldsPeer::FLD_INDEX );
$oCriteria->add (FieldsPeer::ADD_TAB_UID, $tabUid , CRITERIA::EQUAL );
$oCriteria->add (FieldsPeer::FLD_NAME, 'APP_UID' , CRITERIA::NOT_EQUAL );
$oCriteria->addAnd (FieldsPeer::FLD_NAME, 'APP_NUMBER' , CRITERIA::NOT_EQUAL );
$oCriteria->addDescendingOrderByColumn('FLD_INDEX');
$oDataset = FieldsPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
$index = count($rows);
while ($aRow = $oDataset->getRow()) {
$aRow['index'] = ++$index;
$aTempRow['name'] = $aRow['FLD_NAME'];
$aTempRow['gridIndex'] = $aRow['index'];
$aTempRow['fieldType'] = 'PM Table';
$rows[] = $aTempRow;
$oDataset->next();
}
$result['data'] = $rows;
print G::json_encode( $result ) ;
$result = [];
$result['data'] = getFieldsByTabUid($tabUid);
print G::json_encode($result);
}
/**
/**
* Get rows from Fields table.
*
* @param string $tabUid
* @return array
*/
function getFieldsByTabUid($tabUid)
{
$rows = [];
$criteria = new Criteria('workflow');
$criteria->clearSelectColumns();
$criteria->setDistinct();
$criteria->addSelectColumn(FieldsPeer::FLD_NAME);
$criteria->addSelectColumn(FieldsPeer::FLD_UID);
$criteria->addSelectColumn(FieldsPeer::FLD_INDEX);
$criteria->add(FieldsPeer::ADD_TAB_UID, $tabUid, CRITERIA::EQUAL);
$criteria->add(FieldsPeer::FLD_NAME, 'APP_UID', CRITERIA::NOT_EQUAL);
$criteria->addAnd(FieldsPeer::FLD_NAME, 'APP_NUMBER', CRITERIA::NOT_EQUAL);
$criteria->addDescendingOrderByColumn('FLD_INDEX');
$dataSet = FieldsPeer::doSelectRS($criteria);
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataSet->next();
$index = 0;
while ($row = $dataSet->getRow()) {
$row['index'] = ++$index;
$tempRow['name'] = $row['FLD_NAME'];
$tempRow['gridIndex'] = $row['index'];
$tempRow['fieldType'] = 'PM Table';
$rows[] = $tempRow;
$dataSet->next();
}
return $rows;
}
/**
*
* @param Array $fields
* @return Array

View File

@@ -4,6 +4,7 @@ namespace ProcessMaker\BusinessModel;
use AdditionalTables;
use AdditionalTablesPeer;
use Configurations;
use G;
use Exception;
@@ -578,11 +579,60 @@ class ReportTable
$result->trace = $e->getTraceAsString();
}
$this->updateCaseListFieldsConfiguration($columns);
//Return
return $result;
}
/**
* Update the Custom Case List fields configuration.
*
* @param array $columns
*/
public function updateCaseListFieldsConfiguration($columns)
{
$actions = [
"todo", "draft", "sent", "unassigned", "paused", "completed", "cancelled"
];
$conf = new Configurations();
foreach ($actions as $action) {
$confCasesList = $conf->loadObject("casesList", $action, "", "", "");
if (is_array($confCasesList) && !empty($confCasesList)) {
$this->removeNonExistentElementsCustomCaseList($confCasesList['first']['data'], $columns);
$this->removeNonExistentElementsCustomCaseList($confCasesList['second']['data'], $columns);
$conf->saveObject($confCasesList, "casesList", $action);
}
}
}
/**
* Remove non existent elements in Custom Case List.
*
* @param array $data
* @param array $columns
*/
public function removeNonExistentElementsCustomCaseList(&$data, $columns)
{
$n = count($data);
for ($key = 0; $key < $n; $key++) {
if ($data[$key]['fieldType'] === 'PM Table') {
$remove = true;
foreach ($columns as $column) {
if ($data[$key]['name'] === $column->field_name) {
$remove = false;
break;
}
}
if ($remove === true) {
unset($data[$key]);
$data = array_values($data);
$key = 0;
$n = count($data);
}
}
}
}
/**
* Create the structure of tables
*

View File

@@ -64,7 +64,7 @@ Ext.onReady(function () {
success: function (response, opts)
{
var dataResponse = eval("(" + response.responseText + ")"); //json
var dataResponse = Ext.util.JSON.decode(response.responseText);
switch (option) {
case "FIELD_SET":
@@ -85,8 +85,11 @@ Ext.onReady(function () {
break;
case "FIELD_SAVE":
configDefaultResponseText = response.responseText;
Ext.Msg.alert(_("ID_INFO"), _("ID_SAVED"));
location.reload(true);
var windowAlert = Ext.Msg.alert(_("ID_INFO"), _("ID_SAVED"));
fieldSet(dataResponse);
setTimeout(function () {
windowAlert.getDialog().close();
}, 500);
break;
}
},
@@ -166,59 +169,34 @@ Ext.onReady(function () {
}}
});
// create the Data Store to list PMTables in the dropdown
var pmTablesDropdown = new Ext.form.ComboBox ({
width : '180',
xtype : 'combo',
emptyText: _("ID_EMPTY_PMTABLE"),
displayField : 'ADD_TAB_NAME',
valueField : 'ADD_TAB_UID',
triggerAction: 'all',
store : PmTableStore,
listeners: {
'select': function() {
var tableUid = this.value;
Ext.Ajax.request({
url: 'proxyPMTablesFieldList',
success: function(response) {
var dataResponse = Ext.util.JSON.decode(response.responseText);
var rec = Ext.data.Record.create(pmFields);
//alert(firstGrid.store);
var index;
var record;
var count = firstGrid.store.getTotalCount();
// removing all the PM Table fields from the first grid
do {
index = firstGrid.store.find('fieldType','PM Table');
record = firstGrid.store.getAt(index);
if (index>=0) {
firstGrid.store.remove(record);
}
} while (index>=0);
// removing all the PM Table fields from the second grid
do {
index = secondGrid.store.find('fieldType','PM Table');
record = secondGrid.store.getAt(index);
if (index>=0) {
secondGrid.store.remove(record);
}
} while (index>=0);
for (var i = 0; i <= dataResponse.data.length-1; i++) {
var d = new rec( dataResponse.data[i] );
firstGrid.store.add(d);
// create the Data Store to list PMTables in the dropdown
var pmTablesDropdown = new Ext.form.ComboBox({
width: '180',
xtype: 'combo',
emptyText: _("ID_EMPTY_PMTABLE"),
displayField: 'ADD_TAB_NAME',
valueField: 'ADD_TAB_UID',
triggerAction: 'all',
store: PmTableStore,
listeners: {
'select': function () {
var tableUid = this.value;
Ext.Ajax.request({
url: 'proxyPMTablesFieldList',
params: {
xaction: 'FIELD_SET',
action: currentAction,
table: tableUid
},
success: function (response) {
var dataResponse = Ext.util.JSON.decode(response.responseText);
fieldSet(dataResponse);
},
failure: function () {}
});
}
firstGrid.store.commitChanges();
},
failure: function(){},
params: {xaction: 'getFieldsFromPMTable', table: tableUid }
});
}
}
});
}
});
// COMPONENT DEPRECATED remove it in the next revision of the enterprise plugin
// create the Dropdown for rows per page
@@ -573,7 +551,7 @@ Ext.onReady(function () {
text: _("ID_RESET"),
handler: function ()
{
var dataResponse = eval("(" + configDefaultResponseText + ")"); //json
var dataResponse = Ext.util.JSON.decode(configDefaultResponseText);
fieldSet(dataResponse);
}