diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 99686eed40d..5485cb31db6 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -889,17 +889,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) - */ - $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).")"; + /* 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.= " 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); diff --git a/test/phpunit/CategorieTest.php b/test/phpunit/CategorieTest.php index caa02a30538..5ceab0f40cd 100755 --- a/test/phpunit/CategorieTest.php +++ b/test/phpunit/CategorieTest.php @@ -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,8 +146,9 @@ 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"; + print __METHOD__." resultCheck=".$resultCheck."\n"; $this->assertGreaterThan(0, $resultCheck); $resultSecondCreate=$localobject2->create($user);