diff --git a/workflow/engine/classes/class.consolidatedCases.php b/workflow/engine/classes/class.consolidatedCases.php index 03e7578db..3e5d9ae39 100644 --- a/workflow/engine/classes/class.consolidatedCases.php +++ b/workflow/engine/classes/class.consolidatedCases.php @@ -1,138 +1,263 @@ setTasUid($sTasUid); - $oCaseConsolidated->setConStatus('INACTIVE'); - $oCaseConsolidated->save(); - }else{ - $oCaseConsolidated->delete(); - } - return 1; - } - $rptUid = null; - $criteria = new Criteria(); - $criteria->addSelectColumn(ReportTablePeer::REP_TAB_UID); - $criteria->add(ReportTablePeer::REP_TAB_UID, $sRepTabUid); - $rsCriteria = ReportTablePeer::doSelectRS($criteria); - - if ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); - $rptUid = $row[0]; - } - - $rpts = new ReportTables(); - if ($rptUid != null) { - $rpts->deleteReportTable($rptUid); - } - - $sClassName = $tableName; - $sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; - - @unlink($sPath . $sClassName . '.php'); - @unlink($sPath . $sClassName . 'Peer.php'); - @unlink($sPath . PATH_SEP . 'map' . PATH_SEP . $sClassName . 'MapBuilder.php'); - @unlink($sPath . PATH_SEP . 'om' . PATH_SEP . 'Base' . $sClassName . '.php'); - @unlink($sPath . PATH_SEP . 'om' . PATH_SEP . 'Base' . $sClassName . 'Peer.php'); - - $sRepTabUid = ''; + $Status = $data['con_status']; + $TasUid = $data['tas_uid']; + $DynUid = $data['dyn_uid']; + $ProUid = $data['pro_uid']; + $RepTabUid = $data['rep_uid']; + $TableName = $data['table_name']; + $Title = $data['title']; + if($this->isUpdateFields($data) && $Status) { + return true; + } + if ($this->existTable && $Status) { + throw (new \Exception(\G::LoadTranslation("ID_TABLE_ALREADY_EXISTS"))); } - $_POST['form']['PRO_UID'] = $sProUid; - $_POST['form']['REP_TAB_UID'] = $sRepTabUid; - $_POST['form']['REP_TAB_NAME'] = $tableName; + if ($RepTabUid != '') { + $this->deleteRepTab($RepTabUid, $Status, $TasUid, $TableName); + if(!$Status){ + return true; + } + $RepTabUid = ''; + } + + $_POST['form']['PRO_UID'] = $ProUid; + $_POST['form']['REP_TAB_UID'] = $RepTabUid; + $_POST['form']['REP_TAB_NAME'] = $TableName; $_POST['form']['REP_TAB_TYPE'] = "NORMAL"; $_POST['form']['REP_TAB_GRID'] = ''; $_POST['form']['REP_TAB_CONNECTION'] = 'wf'; $_POST['form']['REP_TAB_CREATE_DATE'] = date("Y-m-d H:i:s"); $_POST['form']['REP_TAB_STATUS'] = 'ACTIVE'; - $_POST['form']['REP_TAB_TITLE'] = $title; + $_POST['form']['REP_TAB_TITLE'] = $Title; $_POST['form']['FIELDS'] = array(); - G::LoadClass("reportTables"); - $oReportTable = new ReportTable(); - $sOldTableName = $_POST['form']['REP_TAB_NAME']; $sOldConnection = $_POST['form']['REP_TAB_CONNECTION']; - $oReportTable->create($_POST['form']); - $_POST['form']['REP_TAB_UID'] = $oReportTable->getRepTabUid(); + $_POST['form']['REP_TAB_UID'] = $this->createReportTable($_POST['form']); - $oReportVar = new ReportVar(); $oReportTables = new ReportTables(); $oReportTables->deleteAllReportVars($_POST['form']['REP_TAB_UID']); - $aFields = array(); G::LoadClass("pmDynaform"); $pmDyna = new pmDynaform(array()); - $pmDyna->fields["CURRENT_DYNAFORM"] = $sDynUid; + $pmDyna->fields["CURRENT_DYNAFORM"] = $DynUid; $dataDyna = $pmDyna->getDynaform(); $json = G::json_decode($dataDyna["DYN_CONTENT"]); $fieldsDyna = $json->items[0]->items; - foreach ($fieldsDyna as $value) { + $valueType = array( + 'text', + 'textarea', + 'dropdown', + 'checkbox', + 'datetime', + 'yesno', + 'date', + 'hidden', + 'currency', + 'percentage', + 'link' + ); + + 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'){ + if (isset($val->type)) { + if (in_array($val->type, $valueType)) { $_POST['form']['FIELDS'][] = $val->name . '-' . $val->type; } - } + } } } - - $aFieldsClases = array(); - $i = 1; - $aFieldsClases[$i]['FLD_NAME'] = 'APP_UID'; - $aFieldsClases[$i]['FLD_NULL'] = 'off'; - $aFieldsClases[$i]['FLD_KEY'] = 'on'; - $aFieldsClases[$i]['FLD_AUTO_INCREMENT'] = 'off'; - $aFieldsClases[$i]['FLD_DESCRIPTION'] = ''; - $aFieldsClases[$i]['FLD_TYPE'] = 'VARCHAR' ; - $aFieldsClases[$i]['FLD_SIZE'] = 32; - $i++; - $aFieldsClases[$i]['FLD_NAME'] = 'APP_NUMBER'; - $aFieldsClases[$i]['FLD_NULL'] = 'off'; - $aFieldsClases[$i]['FLD_KEY'] = 'on'; - $aFieldsClases[$i]['FLD_AUTO_INCREMENT'] = 'off'; - $aFieldsClases[$i]['FLD_DESCRIPTION'] = ''; - $aFieldsClases[$i]['FLD_TYPE'] = 'VARCHAR' ; - $aFieldsClases[$i]['FLD_SIZE'] = 255; - foreach ($_POST['form']['FIELDS'] as $sField) { + list($aFieldsClass, $aFields) = $this->createReportVariables($_POST['form']['REP_TAB_UID'], $ProUid, $_POST['form']['FIELDS']); + + $_POST['form']['REP_TAB_TYPE'] = "NORMAL"; + $oReportTables->dropTable($sOldTableName, $sOldConnection); + $oReportTables->createTable($_POST['form']['REP_TAB_NAME'], $_POST['form']['REP_TAB_CONNECTION'], $_POST['form']['REP_TAB_TYPE'], $aFields); + $oReportTables->populateTable($_POST['form']['REP_TAB_NAME'], $_POST['form']['REP_TAB_CONNECTION'], $_POST['form']['REP_TAB_TYPE'], $aFields, $_POST['form']['PRO_UID'], ''); + $sRepTabUid = $_POST['form']['REP_TAB_UID']; + + $oCaseConsolidated = CaseConsolidatedCorePeer::retrieveByPK($TasUid); + if (!(is_object($oCaseConsolidated)) || get_class($oCaseConsolidated) != 'CaseConsolidatedCore') { + $oCaseConsolidated = new CaseConsolidatedCore(); + $oCaseConsolidated->setTasUid($TasUid); + } + if ($this->existCaseConsolidate) { + $oCaseConsolidated->delete(); + $oCaseConsolidated = CaseConsolidatedCorePeer::retrieveByPK($TasUid); + } + + if (!(is_object($oCaseConsolidated)) || get_class($oCaseConsolidated) != 'CaseConsolidatedCore') { + $oCaseConsolidated = new CaseConsolidatedCore(); + $oCaseConsolidated->setTasUid($TasUid); + } + + $oCaseConsolidated->setConStatus('ACTIVE'); + $oCaseConsolidated->setDynUid($DynUid); + $oCaseConsolidated->setRepTabUid($sRepTabUid); + $oCaseConsolidated->save(); + + $sClassName = $TableName; + $oAdditionalTables = new AdditionalTables(); + $oAdditionalTables->createPropelClasses($TableName, $sClassName, $aFieldsClass, $TasUid); + } + + public function deleteRepTab($RepTabUid, $Status, $TasUid, $TableName) + { + if (!$Status) { + $oCaseConsolidated = CaseConsolidatedCorePeer::retrieveByPK($TasUid); + if (!(is_object($oCaseConsolidated)) || get_class($oCaseConsolidated) != 'CaseConsolidatedCore') { + $oCaseConsolidated = new CaseConsolidatedCore(); + $oCaseConsolidated->setTasUid($TasUid); + $oCaseConsolidated->setConStatus('INACTIVE'); + $oCaseConsolidated->save(); + } else { + $oCaseConsolidated->delete(); + } + return; + } + + $rptUid = null; + $criteria = new Criteria(); + $criteria->addSelectColumn(ReportTablePeer::REP_TAB_UID); + $criteria->add(ReportTablePeer::REP_TAB_UID, $RepTabUid); + $rsCriteria = ReportTablePeer::doSelectRS($criteria); + + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $rptUid = $row[0]; + } + + $rpts = new ReportTables(); + if ($rptUid != null) { + $rpts->deleteReportTable($rptUid); + } + + $sClassName = $TableName; + $sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + + @unlink($sPath . $sClassName . '.php'); + @unlink($sPath . $sClassName . 'Peer.php'); + @unlink($sPath . PATH_SEP . 'map' . PATH_SEP . $sClassName . 'MapBuilder.php'); + @unlink($sPath . PATH_SEP . 'om' . PATH_SEP . 'Base' . $sClassName . '.php'); + @unlink($sPath . PATH_SEP . 'om' . PATH_SEP . 'Base' . $sClassName . 'Peer.php'); + return; + } + + public function isUpdateFields($data) + { + $oSession = new DBSession(new DBConnection()); + $oTables = $oSession->Execute('SHOW TABLES FROM ' . DB_NAME); + $this->existTable = false; + while ($aRow = $oTables->read()) { + if (in_array($data['table_name'], $aRow)) { + $this->existTable = true; + break; + } + } + $this->existTableName = $this->existTableName($data['table_name']); + $this->existCaseConsolidate = $this->existCaseConsolidate($data['tas_uid']); + unset($data['title']); + unset($data['con_status']); + $diff = $data; + if ($this->existTableName) { + $diff = array_diff($data, $this->rowRepTab); + } + if ($this->existCaseConsolidate){ + $diff = array_diff($diff, $this->rowCaseConsCore); + } + return count($diff) <= 0; + } + + public function existTableName($name) + { + $criteria = new Criteria(); + $criteria->add(ReportTablePeer::REP_TAB_NAME, $name); + $rsCriteria = ReportTablePeer::doSelectRS($criteria); + $existName = false; + if ($rsCriteria->next()) { + $this->rowRepTab = $rsCriteria->getRow(); + $existName = true; + } + return $existName; + } + + public function existCaseConsolidate($taskUid) + { + $criteria = new Criteria(); + $criteria->add(CaseConsolidatedCorePeer::TAS_UID, $taskUid); + $rsCriteria = CaseConsolidatedCorePeer::doSelectRS($criteria); + $existCaseConsolidate = false; + if ($rsCriteria->next()) { + $this->rowCaseConsCore = $rsCriteria->getRow(); + $existCaseConsolidate = true; + } + return $existCaseConsolidate; + } + + public function createReportTable($dataRepTab) + { + G::LoadClass("reportTables"); + $oReportTable = new ReportTable(); + $oReportTable->create($dataRepTab); + return $oReportTable->getRepTabUid(); + } + + public function createReportVariables($RepTabUid, $ProUid, $formFields) + { + $oReportVar = new ReportVar(); + $fieldsClass = array(); + $fields = array(); + $i = 1; + $fieldsClass[$i]['FLD_NAME'] = 'APP_UID'; + $fieldsClass[$i]['FLD_NULL'] = 'off'; + $fieldsClass[$i]['FLD_KEY'] = 'on'; + $fieldsClass[$i]['FLD_AUTO_INCREMENT'] = 'off'; + $fieldsClass[$i]['FLD_DESCRIPTION'] = ''; + $fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ; + $fieldsClass[$i]['FLD_SIZE'] = 32; + $i++; + $fieldsClass[$i]['FLD_NAME'] = 'APP_NUMBER'; + $fieldsClass[$i]['FLD_NULL'] = 'off'; + $fieldsClass[$i]['FLD_KEY'] = 'on'; + $fieldsClass[$i]['FLD_AUTO_INCREMENT'] = 'off'; + $fieldsClass[$i]['FLD_DESCRIPTION'] = ''; + $fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ; + $fieldsClass[$i]['FLD_SIZE'] = 255; + + foreach ($formFields as $sField) { $aField = explode('-', $sField); if ($aField[1] == 'title' || $aField[1] == 'submit') { continue; } $i++; - $aFieldsClases[$i]['FLD_NAME'] = $aField[0]; - $aFieldsClases[$i]['FLD_NULL'] = 'off'; - $aFieldsClases[$i]['FLD_KEY'] = 'off'; - $aFieldsClases[$i]['FLD_AUTO_INCREMENT'] = 'off'; - $aFieldsClases[$i]['FLD_DESCRIPTION'] = ''; + $fieldsClass[$i]['FLD_NAME'] = $aField[0]; + $fieldsClass[$i]['FLD_NULL'] = 'off'; + $fieldsClass[$i]['FLD_KEY'] = 'off'; + $fieldsClass[$i]['FLD_AUTO_INCREMENT'] = 'off'; + $fieldsClass[$i]['FLD_DESCRIPTION'] = ''; switch ($aField[1]) { case 'currency': case 'percentage': $sType = 'number'; - $aFieldsClases[$i]['FLD_TYPE'] = 'FLOAT' ; - $aFieldsClases[$i]['FLD_SIZE'] = 255; + $fieldsClass[$i]['FLD_TYPE'] = 'FLOAT' ; + $fieldsClass[$i]['FLD_SIZE'] = 255; break; case 'text': case 'password': @@ -143,67 +268,34 @@ class ConsolidatedCases case 'hidden': case "link": $sType = 'char'; - $aFieldsClases[$i]['FLD_TYPE'] = 'VARCHAR' ; - $aFieldsClases[$i]['FLD_SIZE'] = 255; + $fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ; + $fieldsClass[$i]['FLD_SIZE'] = 255; break; case 'textarea': $sType = 'text'; - $aFieldsClases[$i]['FLD_TYPE'] = 'TEXT' ; - $aFieldsClases[$i]['FLD_SIZE'] = ''; + $fieldsClass[$i]['FLD_TYPE'] = 'TEXT' ; + $fieldsClass[$i]['FLD_SIZE'] = ''; break; case 'date': $sType = 'date'; - $aFieldsClases[$i]['FLD_TYPE'] = 'DATE' ; - $aFieldsClases[$i]['FLD_SIZE'] = ''; + $fieldsClass[$i]['FLD_TYPE'] = 'DATE' ; + $fieldsClass[$i]['FLD_SIZE'] = ''; break; default: $sType = 'char'; - $aFieldsClases[$i]['FLD_TYPE'] = 'VARCHAR' ; - $aFieldsClases[$i]['FLD_SIZE'] = 255; + $fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ; + $fieldsClass[$i]['FLD_SIZE'] = 255; break; } - $oReportVar->create(array('REP_TAB_UID' => $_POST['form']['REP_TAB_UID'], - 'PRO_UID' => $_POST['form']['PRO_UID'], - 'REP_VAR_NAME' => $aField[0], - 'REP_VAR_TYPE' => $sType)); - $aFields[] = array('sFieldName' => $aField[0], 'sType' => $sType); + $oReportVar->create(array( + 'REP_TAB_UID' => $RepTabUid, + 'PRO_UID' => $ProUid, + 'REP_VAR_NAME' => $aField[0], + 'REP_VAR_TYPE' => $sType) + ); + $fields[] = array('sFieldName' => $aField[0], 'sType' => $sType); } - - $_POST['form']['REP_TAB_TYPE'] = "NORMAL"; - $oReportTables->dropTable($sOldTableName, $sOldConnection); - $oReportTables->createTable($_POST['form']['REP_TAB_NAME'], $_POST['form']['REP_TAB_CONNECTION'], $_POST['form']['REP_TAB_TYPE'], $aFields); - $oReportTables->populateTable($_POST['form']['REP_TAB_NAME'], $_POST['form']['REP_TAB_CONNECTION'], $_POST['form']['REP_TAB_TYPE'], $aFields, $_POST['form']['PRO_UID'], ''); - $sRepTabUid = $_POST['form']['REP_TAB_UID']; - - $oCaseConsolidated = CaseConsolidatedCorePeer::retrieveByPK($sTasUid); - if (!(is_object($oCaseConsolidated)) || get_class($oCaseConsolidated) != 'CaseConsolidatedCore') { - $oCaseConsolidated = new CaseConsolidatedCore(); - $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); - } - - $oCaseConsolidated->setConStatus('ACTIVE'); - $oCaseConsolidated->setDynUid($sDynUid); - $oCaseConsolidated->setRepTabUid($sRepTabUid); - $oCaseConsolidated->save(); - - $sClassName = $tableName; - $oAdditionalTables = new AdditionalTables(); - $oAdditionalTables->createPropelClasses($tableName, $sClassName, $aFieldsClases, $sTasUid); + return array($fieldsClass, $fields); } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php index cca5eaf8e..d4de092b6 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php @@ -442,15 +442,15 @@ class Task G::LoadClass("consolidatedCases"); $consolidated = new \ConsolidatedCases(); $dataConso = array( - 'con_status' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_enable'], - 'tas_uid' => $arrayProperty['TAS_UID'], - 'dyn_uid' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_dynaform'], - 'pro_uid' => $arrayProperty['PRO_UID'], - 'rep_uid' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_report_table'], - 'table_name' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_table'], - 'title' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_title'] + 'con_status' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_enable'], + 'tas_uid' => $arrayProperty['TAS_UID'], + 'dyn_uid' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_dynaform'], + 'pro_uid' => $arrayProperty['PRO_UID'], + 'rep_uid' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_report_table'], + 'table_name' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_table'], + 'title' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_title'] ); - $consolidated->saveConsolidated($dataConso); + $consolidated->processConsolidated($dataConso); } } $arrayResult["status"] = "OK";