BUG 11510 Números de casos duplicados SOLVED

- Al parecer existe un problema de concurrencia al crear los casos en processmaker, de tal forma que si se intenta crear 2 casos al mismo tiempo el número del caso termina siendo el mismo para ambos casos.
- Added sequences table for control of the applications.
This commit is contained in:
Hector Cortez
2013-05-23 18:23:59 -04:00
parent 1723ba968e
commit 1d3c341f9c
8 changed files with 1520 additions and 8 deletions

View File

@@ -347,6 +347,7 @@ class Application extends BaseApplication
*/
public function create($sProUid, $sUsrUid)
{
require_once ("classes/model/Sequences.php");
$con = Propel::getConnection('workflow');
try {
@@ -371,15 +372,21 @@ class Application extends BaseApplication
$c = new Criteria();
$c->clearSelectColumns();
$c->addSelectColumn('MAX(' . ApplicationPeer::APP_NUMBER . ')'); //the appnumber is based in all processes
//active, not only in the specified
//process guid
$oSequences = new Sequences();
$oSequences->lockSequenceTable();
$result = ApplicationPeer::doSelectRS($c);
$result->next();
$row = $result->getRow();
if ($oSequences->nameExists("APP_NUMBER") ) {
$maxNumber = $oSequences->getSequeceNumber("APP_NUMBER");
} else {
$c->addSelectColumn('MAX(' . ApplicationPeer::APP_NUMBER . ')'); //the appnumber is based in all processes
//active, not only in the specified
//process guid
$result = ApplicationPeer::doSelectRS($c);
$result->next();
$row = $result->getRow();
$maxNumber = $row[0] + 1;
}
$maxNumber = $row[0] + 1;
$this->setAppNumber($maxNumber);
if ($this->validate()) {
@@ -395,6 +402,8 @@ class Application extends BaseApplication
$con->commit();
$oSequences->unlockSequenceTable();
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
return $this->getAppUid();
} else {
$msg = '';
@@ -402,7 +411,8 @@ class Application extends BaseApplication
foreach ($this->getValidationFailures() as $objValidationFailure) {
$msg .= $objValidationFailure->getMessage() . "<br/>";
}
$oSequences->unlockSequenceTable();
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
throw (new PropelException('The APPLICATION row cannot be created!', new PropelException($msg)));
}
} catch (Exception $e) {