Fix into categorie functions

This commit is contained in:
Laurent Destailleur 2012-08-05 23:58:42 +02:00
parent e53ae6eea2
commit 816e317dd2
2 changed files with 17 additions and 7 deletions

View File

@ -139,11 +139,13 @@ class Categorie
{
$this->error=$langs->trans("ImpossibleAddCat");
$this->error.=" : ".$langs->trans("CategoryExistsAtSameLevel");
dol_syslog($this->error, LOG_ERR);
return -4;
}
$this->db->begin();
dol_syslog(get_class($this).'::create sql='.$sql);
$sql = "INSERT INTO ".MAIN_DB_PREFIX."categorie (label, description,";
if ($conf->global->CATEGORY_ASSIGNED_TO_A_CUSTOMER)
{
@ -163,7 +165,8 @@ class Categorie
//$sql.= ",".$this->parentId;
$sql.= ")";
$res = $this->db->query($sql);
dol_syslog(get_class($this).'::create sql='.$sql);
$res = $this->db->query($sql);
if ($res)
{
$id = $this->db->last_insert_id(MAIN_DB_PREFIX."categorie");
@ -867,6 +870,8 @@ class Categorie
/**
* Check if no category with same label already exists for this cat's parent or root and for this cat's type
* TODO For the moment, the unique key is on the type, label, entity. We must remove table llx_categorie_association
* to replace with a field fk_parent. This will allow to extend unique key with the level.
*
* @return boolean 1 if already exist, 0 otherwise, -1 if error
*/
@ -887,17 +892,14 @@ class Categorie
}
else // mother_id undefined (so it's root)
{
/* We have to select any rowid from llx_categorie which which category's type and label
* are equals to those of the calling category, AND which doesn't exist in categorie association
* as children (rowid != fk_categorie_fille)
/* We have to select any rowid from llx_categorie that is not at root level
*/
$sql = "SELECT c.rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."categorie as c ";
$sql.= " JOIN ".MAIN_DB_PREFIX."categorie_association as ca";
$sql.= " ON c.rowid!=ca.fk_categorie_fille";
$sql.= " WHERE c.type=".$this->type;
$sql.= " AND c.label='".$this->db->escape($this->label)."'";
$sql.= " AND c.entity IN (".getEntity('category',1).")";
$sql.= " AND c.rowid NOT IN (SELECT ca.fk_categorie_fille FROM ".MAIN_DB_PREFIX."categorie_association as ca)";
}
dol_syslog(get_class($this)."::already_exists sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);

View File

@ -131,7 +131,14 @@ class CategorieTest extends PHPUnit_Framework_TestCase
// We create a category
$localobject=new Categorie($this->savdb);
$localobject->initAsSpecimen();
$resultFirstCreate=$localobject->create($user);
// Check it does not exist (return 0)
$resultCheck=$localobject->already_exists();
print __METHOD__." resultCheck=".$resultCheck."\n";
$this->assertEquals(0, $resultCheck);
// Create
$resultFirstCreate=$localobject->create($user);
print __METHOD__." resultFirstCreate=".$resultFirstCreate."\n";
$this->assertGreaterThan(0, $resultFirstCreate);
@ -139,6 +146,7 @@ class CategorieTest extends PHPUnit_Framework_TestCase
$localobject2=new Categorie($this->savdb);
$localobject2->initAsSpecimen();
// Check it does exist (return 1)
$resultCheck=$localobject2->already_exists();
print __METHOD__." resultCheck=".$resultCheck."\n";
$this->assertGreaterThan(0, $resultCheck);