Merged in gproly/processmaker/HOR-1450 (pull request #4571)

HOR-1450
This commit is contained in:
Julio Cesar Laura Avendaño
2016-07-19 08:42:02 -04:00

View File

@@ -174,11 +174,27 @@ abstract class Importer
/*----------------------------------********---------------------------------*/
if($objectsToImport === ''){
/*----------------------------------********---------------------------------*/
try {
$this->verifyIfTheProcessHasStartedCases();
} catch (\Exception $e) {
throw $e;
}
$this->removeProject();
/*----------------------------------********---------------------------------*/
} else {
$granularObj = new \ProcessMaker\BusinessModel\Migrator\GranularImporter();
$objectList = $granularObj->loadObjectsListSelected($this->importData, $objectsToImport);
try {
foreach ($objectList as $rowObject) {
if ($rowObject['name'] === 'PROCESSDEFINITION') {
$this->verifyIfTheProcessHasStartedCases();
}
}
} catch (\Exception $e) {
$exception = new ImportException($e->getMessage());
$exception->setNameException($e->getMessage());
throw $exception;
}
try {
foreach ($objectList as $rowObject) {
if ($rowObject['name'] === 'PROCESSDEFINITION') {
@@ -351,6 +367,46 @@ abstract class Importer
$project->remove(true, false, $onlyDiagram);
}
/**
* Check tasks that have cases.
*
* @return boolean
*/
public function verifyIfTheProcessHasStartedCases()
{
$tasksIds = array();
$importedTasks = $this->importData["tables"]["workflow"]["tasks"];
foreach ($importedTasks as $value) {
$tasksIds[] = $value["TAS_UID"];
}
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\TaskPeer::TAS_UID);
$criteria->add(\TaskPeer::PRO_UID, $this->metadata["uid"], \Criteria::EQUAL);
$criteria->add(\TaskPeer::TAS_UID, $tasksIds, \Criteria::NOT_IN);
$ds = \TaskPeer::doSelectRS($criteria);
$ds->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$tasksEliminatedIds = array();
while ($ds->next()) {
$row = $ds->getRow();
$tasksEliminatedIds[] = $row["TAS_UID"];
}
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\AppDelegationPeer::TAS_UID);
$criteria->add(\AppDelegationPeer::PRO_UID, $this->metadata["uid"], \Criteria::EQUAL);
$criteria->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL);
$criteria->add(\AppDelegationPeer::TAS_UID, $tasksEliminatedIds, \Criteria::IN);
$ds = \AppDelegationPeer::doSelectRS($criteria);
$ds->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$ds->next();
$row = $ds->getRow();
if (isset($row["TAS_UID"])) {
$exception = new \Exception(\G::LoadTranslation("ID_PROCESS_CANNOT_BE_UPDATED_THERE_ARE_TASKS_WITH_ACTIVE_CASES"));
throw $exception;
}
}
/**
* Sets the temporal file save directory
* @param $dirName