diff --git a/gulliver/thirdparty/creole/common/PreparedStatementCommon.php b/gulliver/thirdparty/creole/common/PreparedStatementCommon.php index da46af85c..8ea604ce9 100755 --- a/gulliver/thirdparty/creole/common/PreparedStatementCommon.php +++ b/gulliver/thirdparty/creole/common/PreparedStatementCommon.php @@ -596,7 +596,7 @@ abstract class PreparedStatementCommon { if ( is_object ( $value ) ) { $this->boundInVars[$paramIndex] = "'" . $this->escape($value->__toString()) . "'"; } else { - $this->boundInVars[$paramIndex] = "'" . $this->escape((string)$value) . "'"; + @$this->boundInVars[$paramIndex] = "'" . $this->escape((string)$value) . "'"; } } } diff --git a/workflow/engine/classes/class.consolidatedCases.php b/workflow/engine/classes/class.consolidatedCases.php index c0c899013..03e7578db 100644 --- a/workflow/engine/classes/class.consolidatedCases.php +++ b/workflow/engine/classes/class.consolidatedCases.php @@ -87,10 +87,16 @@ class ConsolidatedCases $dataDyna = $pmDyna->getDynaform(); $json = G::json_decode($dataDyna["DYN_CONTENT"]); $fieldsDyna = $json->items[0]->items; - foreach ($fieldsDyna as $value) { - $_POST['form']['FIELDS'][] = $value[0]->name . '-' . $value[0]->type; + foreach ($fieldsDyna as $value) { + foreach ($value as $val) { + if(isset($val->type)){ + if ($val->type == 'text' || $val->type == 'textarea' || $val->type == 'dropdown' || $val->type == 'checkbox' || $val->type == 'datetime' || $val->type == 'yesno' || $val->type == 'date' || $val->type == 'hidden' || $val->type == 'currency' || $val->type == 'percentage' || $val->type == 'link'){ + $_POST['form']['FIELDS'][] = $val->name . '-' . $val->type; + } + } + } } - + $aFieldsClases = array(); $i = 1; $aFieldsClases[$i]['FLD_NAME'] = 'APP_UID'; @@ -176,16 +182,21 @@ class ConsolidatedCases $oCaseConsolidated->setTasUid($sTasUid); } - $criteria = new Criteria(); - $criteria->addSelectColumn(CaseConsolidatedCorePeer::TAS_UID); - $criteria->add(CaseConsolidatedCorePeer::TAS_UID, $sTasUid); - $rsCriteria = CaseConsolidatedCorePeer::doSelectRS($criteria); - if ($rsCriteria->next()) { + $criteria = new Criteria(); + $criteria->addSelectColumn(CaseConsolidatedCorePeer::TAS_UID); + $criteria->add(CaseConsolidatedCorePeer::TAS_UID, $sTasUid); + $rsCriteria = CaseConsolidatedCorePeer::doSelectRS($criteria); + if ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $oCaseConsolidated->delete(); - $oCaseConsolidated = CaseConsolidatedCorePeer::retrieveByPK($sTasUid); + $oCaseConsolidated = CaseConsolidatedCorePeer::retrieveByPK($sTasUid); } + if (!(is_object($oCaseConsolidated)) || get_class($oCaseConsolidated) != 'CaseConsolidatedCore') { + $oCaseConsolidated = new CaseConsolidatedCore(); + $oCaseConsolidated->setTasUid($sTasUid); + } + $oCaseConsolidated->setConStatus('ACTIVE'); $oCaseConsolidated->setDynUid($sDynUid); $oCaseConsolidated->setRepTabUid($sRepTabUid); diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index 577daadab..cb74d2dbd 100755 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -1656,7 +1656,7 @@ class pmTablesProxy extends HttpProxyController $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - $excludeFieldsList = array ('title','subtitle','link','file','button','reset','submit','listbox','checkgroup','grid','javascript', '' + $excludeFieldsList = array ('title','subtitle','link','file','button','reset','submit','listbox','checkgroup','grid','javascript','location','scannerCode','array' ); $labelFieldsTypeList = array ('dropdown','radiogroup'); @@ -1709,32 +1709,27 @@ class pmTablesProxy extends HttpProxyController $oDataset->next(); $row = $oDataset->getRow(); if (isset($row["PRJ_UID"])) { + $sProcessUID = $row["PRJ_UID"]; + $dynaformNotAllowedVariables = $this->getDynaformVariables($sProcessUID,$excludeFieldsList,false); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_UID); $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_NAME); $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_FIELD_TYPE); - $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_SQL); - $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_ACCEPTED_VALUES); $oCriteria->add(ProcessVariablesPeer::PRJ_UID, $row["PRJ_UID"]); $oDataset = ProcessVariablesPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $index = 0; while ($oDataset->next()) { $row = $oDataset->getRow(); - $fieldType = isset($row["VAR_FIELD_TYPE"]) ? $row["VAR_FIELD_TYPE"]: ''; - $varSql = isset($row["VAR_SQL"]) ? $row["VAR_SQL"] : ''; - $varProcessVariable = isset($row["VAR_ACCEPTED_VALUES"]) ? $row["VAR_ACCEPTED_VALUES"] : '[]'; - if(! in_array( $fieldType, $excludeFieldsList )){ - if(strlen($varSql) == 0 && $varProcessVariable == '[]'){ - array_push($fields, array( - "FIELD_UID" => $row["VAR_NAME"] . "-" . $row["VAR_FIELD_TYPE"], - "FIELD_NAME" => $row["VAR_NAME"], - "FIELD_VALIDATE" => "any", - "_index" => $index ++, - "_isset" => true - )); - } - } + if(!in_array($row["VAR_NAME"], $dynaformNotAllowedVariables) && !in_array($row["VAR_FIELD_TYPE"], $excludeFieldsList)) { + array_push($fields, array( + "FIELD_UID" => $row["VAR_NAME"] . "-" . $row["VAR_FIELD_TYPE"], + "FIELD_NAME" => $row["VAR_NAME"], + "FIELD_VALIDATE" => "any", + "_index" => $index ++, + "_isset" => true + )); + } } } @@ -1873,5 +1868,50 @@ class pmTablesProxy extends HttpProxyController } return $aFields; } + + /** + * Get all dynaform variables + * + * @param $sProcessUID + */ + public function getDynaformVariables($sProcessUID,$excludeFieldsList,$allowed = true) + { + $dynaformVariables = array(); + $oC = new Criteria( 'workflow' ); + $oC->addSelectColumn( DynaformPeer::DYN_CONTENT ); + $oC->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oData = DynaformPeer::doSelectRS( $oC ); + $oData->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oData->next(); + while ($aRowd = $oData->getRow()) { + $dynaform = G::json_decode($aRowd['DYN_CONTENT'],true); + if(is_array($dynaform) && sizeof($dynaform)) { + $items = $dynaform['items'][0]['items']; + foreach($items as $key => $val){ + foreach($val as $column) { + if($allowed) { + if(!in_array( $column['type'], $excludeFieldsList )){ + if(array_key_exists('variable',$column)) { + if($column['variable'] != "") { + $dynaformVariables[] = $column['variable']; + } + } + } + } else { + if(in_array( $column['type'], $excludeFieldsList )){ + if(array_key_exists('variable',$column)) { + if($column['variable'] != "") { + $dynaformVariables[] = $column['variable']; + } + } + } + } + } + } + } + $oData->next(); + } + return array_unique($dynaformVariables); + } } diff --git a/workflow/engine/methods/processes/consolidated.php b/workflow/engine/methods/processes/consolidated.php index b2db2a5cc..459c642e4 100644 --- a/workflow/engine/methods/processes/consolidated.php +++ b/workflow/engine/methods/processes/consolidated.php @@ -597,6 +597,21 @@ class ajax_con extends WebResource $oCaseConsolidated->setTasUid($sTasUid); } + $criteria = new Criteria(); + $criteria->addSelectColumn(CaseConsolidatedCorePeer::TAS_UID); + $criteria->add(CaseConsolidatedCorePeer::TAS_UID, $sTasUid); + $rsCriteria = CaseConsolidatedCorePeer::doSelectRS($criteria); + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $oCaseConsolidated->delete(); + $oCaseConsolidated = CaseConsolidatedCorePeer::retrieveByPK($sTasUid); + } + + if (!(is_object($oCaseConsolidated)) || get_class($oCaseConsolidated) != 'CaseConsolidatedCore') { + $oCaseConsolidated = new CaseConsolidatedCore(); + $oCaseConsolidated->setTasUid($sTasUid); + } + if ($sStatus == '1') { $oCaseConsolidated->setConStatus('ACTIVE'); } else { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php index e66eca758..6a379dea5 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php @@ -83,18 +83,18 @@ class Consolidated if (!isset($Fields["DEL_INIT_DATE"])) { $oCase->setDelInitDate($app_uid, $del_index); $aFields = $oCase->loadCase($app_uid, $del_index); - //Update data grid - $aData = $aFields['APP_DATA']; - foreach ($aData as $k => $dataField) { - if(is_array($dataField)){ - $pos = count($dataField); - if(isset($aData[$k][$pos][$fieldName])){ - $aData[$k][$pos][$fieldName] = $fieldValue; - } - } - } - $aFields['APP_DATA'] = $aData; - $oCase->updateCase($app_uid, $aFields); + //Update data grid + $aData = $aFields['APP_DATA']; + foreach ($aData as $k => $dataField) { + if(is_array($dataField)){ + $pos = count($dataField); + if(isset($aData[$k][$pos][$fieldName])){ + $aData[$k][$pos][$fieldName] = $fieldValue; + } + } + } + $aFields['APP_DATA'] = $aData; + $oCase->updateCase($app_uid, $aFields); //End update } @@ -394,7 +394,9 @@ class Consolidated foreach ($aTaskConsolidated as $key => $val) { foreach ($val as $iKey => $iVal) { if (self::checkValidDate($iVal)) { - $val[$iKey] = str_replace("-", "/", $val[$iKey]); + $iKeyView = str_replace("-", "/", $val[$iKey]); + $iKeyView = str_replace("T", " ", $iKeyView); + $val[$iKey] = $iKeyView; } } $response["data"][] = $val; @@ -465,28 +467,34 @@ class Consolidated $xmlfrm = new \stdclass(); $xmlfrm->fields = array(); foreach ($fieldsDyna as $key => $value) { - if ($value[0]->type == 'title' || $value[0]->type == 'submit') { - continue; - } - $temp = new \stdclass(); - $temp->type = $value[0]->type; - $temp->label = $value[0]->label; - $temp->name = $value[0]->name; - $temp->required = (isset($value[0]->required)) ? $value[0]->required : 0; - $temp->mode = (isset($value[0]->mode)) ? $value[0]->mode : 'edit'; - - if (!empty($value[0]->options)) { - $temp->storeData = '['; - foreach ($value[0]->options as $valueOption) { - $temp->storeData .= '["' . $valueOption['value'] . '", "' . $valueOption['label'] . '"],'; + foreach ($value as $val) { + if ($val->type == 'title' || $val->type == 'submit' || $val->type == 'panel' || $val->type == 'image' || $val->type == 'button' || $val->type == 'grid' || $val->type == 'checkgroup' || $val->type == 'radiogroup' || $val->type == 'radio' || $val->type == 'hidden' || $val->type == 'link' || $val->type == 'file' || $val->type == 'subform' || $val->type == 'label') { + continue; } - $temp->storeData = substr($temp->storeData,0,-1); - $temp->storeData .= ']'; - } + $temp = new \stdclass(); + $temp->type = $val->type; + $temp->label = $val->label; + $temp->name = $val->name; + $temp->required = (isset($val->required)) ? $val->required : 0; + $temp->mode = (isset($val->mode)) ? $val->mode : 'edit'; - $temp->readOnly = ($temp->mode == 'view') ? "1" : "0"; - $temp->colWidth = 200; - $xmlfrm->fields[] = $temp; + if (!empty($val->options)) { + $temp->storeData = '['; + foreach ($val->options as $valueOption) { + if(isset($valueOption->value)){ + $temp->storeData .= '["' . $valueOption->value . '", "' . $valueOption->label . '"],'; + }else{ + $temp->storeData .= '["' . $valueOption['value'] . '", "' . $valueOption['label'] . '"],'; + } + } + $temp->storeData = substr($temp->storeData,0,-1); + $temp->storeData .= ']'; + } + + $temp->readOnly = ($temp->mode == 'view') ? "1" : "0"; + $temp->colWidth = 200; + $xmlfrm->fields[] = $temp; + } } } else { $filename = $pro_uid . PATH_SEP . $dyn_uid . ".xml"; @@ -528,12 +536,12 @@ class Consolidated $required = (isset($field->required))? $field->required : null; $validate = (isset($field->validate))? strtolower($field->validate) : null; - $fieldReadOnly = ($readOnly . "" == "1")? "readOnly: true," : null; + $fieldReadOnly = ($readOnly . "" == "1" || $field->readOnly == 'view')? "readOnly: true," : null; $fieldRequired = ($required . "" == "1")? "allowBlank: false," : null; $fieldValidate = ($validate == "alpha" || $validate == "alphanum" || $validate == "email" || $validate == "int" || $validate == "real")? "vtype: \"$validate\"," : null; $fieldLabel = (($fieldRequired != null)? "* ": null) . $field->label; - $fieldDisabled = ($field->mode != "edit")? "true" : "false"; + $fieldDisabled = ($field->mode == "view")? "true" : "false"; switch ($field->type) { case "dropdown": @@ -633,7 +641,7 @@ class Consolidated return Ext.isDate(value)? value.dateFormat('{$dateFormat}') : value; } *"; - if ($field->mode != "edit") { + if ($field->mode == "view") { $editor = null; } @@ -735,6 +743,33 @@ class Consolidated $hasTextArea = true; break; + case "datetime": + $align = "center"; + $size = 100; + + if (isset($field->size)) { + $size = $field->size * 10; + } + + $width = $size; + + $editor = "* new Ext.form.DateField({ + format: \"$dateFormat\", + + $fieldReadOnly + $fieldRequired + $fieldValidate + cls: \"\" + }) *"; + + //$renderer = "* formatDate *"; + $renderer = "* function (value){ + return Ext.isDate(value)? value.dateFormat('{$dateFormat}') : value; + } *"; + + $caseColumns[] = array("header" => $fieldLabel, "dataIndex" => $field->name, "width" => (int)($width), "editor" => $editor, "renderer" => $renderer, "frame" => true, "clicksToEdit" => 1, "sortable" => true); + $caseReaderFields[] = array("name" => $field->name, "type" => "date"); + break; case "link": $align = 'center'; $size = 100; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php index 3ea4b80e3..cbd6e5df3 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php @@ -468,7 +468,13 @@ class FilesManager if (file_exists($path) && !is_dir($path)) { unlink($path); - } + } else { + $path = PATH_DATA_PUBLIC.$sProcessUID.DIRECTORY_SEPARATOR.$sFile; + + if (file_exists($path) && !is_dir($path)) { + unlink($path); + } + } $rs = \ProcessFilesPeer::doDelete($criteria); } catch (Exception $e) { diff --git a/workflow/engine/templates/cases/casesListConsolidated.js b/workflow/engine/templates/cases/casesListConsolidated.js index 2f3283d12..689ebf6ec 100644 --- a/workflow/engine/templates/cases/casesListConsolidated.js +++ b/workflow/engine/templates/cases/casesListConsolidated.js @@ -1,6 +1,6 @@ var grdNumRows = 0; // var grdRowLabel = []; // -var fieldGridGral = ''; +var fieldGridGral = ''; var fieldGridGralVal = ''; @@ -406,22 +406,27 @@ Ext.onReady(function () { text: "Derivate", //iconCls: 'ICON_CASES_PAUSED', handler : function (){ - htmlMessage = ""; - var selectedRow = Ext.getCmp(gridId).getSelectionModel().getSelections(); - var maxLenght = selectedRow.length; - for (var i in selectedRow) { - rowGrid = selectedRow[i].data - for (fieldGrid in rowGrid){ - if(fieldGrid != 'APP_UID' && fieldGrid != 'APP_NUMBER' && fieldGrid != 'APP_TITLE' && fieldGrid != 'DEL_INDEX' ){ - fieldGridGral = fieldGrid; - fieldGridGralVal = rowGrid[fieldGrid]; - } - } - if (selectedRow[i].data) { - //alert (derivateRequestAjax(selectedRow[i].data["company"])); - ajaxDerivationRequest(selectedRow[i].data["APP_UID"], selectedRow[i].data["DEL_INDEX"], maxLenght, selectedRow[i].data["APP_NUMBER"],fieldGridGral, fieldGridGralVal); - } - } + Ext.Msg.confirm('Confirm Routing', 'Route cases per batch?', + function(btn, text){ + if (btn=='yes'){ + htmlMessage = ""; + var selectedRow = Ext.getCmp(gridId).getSelectionModel().getSelections(); + var maxLenght = selectedRow.length; + for (var i in selectedRow) { + rowGrid = selectedRow[i].data + for (fieldGrid in rowGrid){ + if(fieldGrid != 'APP_UID' && fieldGrid != 'APP_NUMBER' && fieldGrid != 'APP_TITLE' && fieldGrid != 'DEL_INDEX' ){ + fieldGridGral = fieldGrid; + fieldGridGralVal = rowGrid[fieldGrid]; + } + } + if (selectedRow[i].data) { + ajaxDerivationRequest(selectedRow[i].data["APP_UID"], selectedRow[i].data["DEL_INDEX"], maxLenght, selectedRow[i].data["APP_NUMBER"],fieldGridGral, fieldGridGralVal); + } + } + } + } + ); } }); switch(action){ @@ -716,276 +721,267 @@ function renderSummary (val, p, r) { function generateGridClassic(proUid, tasUid, dynUid){ - var pager = 20; //pageSize + var pager = 20; //pageSize var pagei = 0; //start - Ext.Ajax.request({ - url: '../pmConsolidatedCL/proxyGenerateGrid', - success: function(response) { - //Obtenemos el column model y los reader fields de proxyGenerateGrid - var dataResponse = Ext.util.JSON.decode(response.responseText); - var viewConfigObject; - var textArea = dataResponse.hasTextArea; - - if (textArea == false) { - viewConfigObject = { //forceFit: true - }; - } else { - viewConfigObject = { - //forceFit:true, - enableRowBody:true, - showPreview:true, - getRowClass : function(record, rowIndex, p, store){ - if (this.showPreview) { - p.body = '