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("ImpossibleAddCat");
$this->error.=" : ".$langs->trans("CategoryExistsAtSameLevel"); $this->error.=" : ".$langs->trans("CategoryExistsAtSameLevel");
dol_syslog($this->error, LOG_ERR);
return -4; return -4;
} }
$this->db->begin(); $this->db->begin();
dol_syslog(get_class($this).'::create sql='.$sql);
$sql = "INSERT INTO ".MAIN_DB_PREFIX."categorie (label, description,"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."categorie (label, description,";
if ($conf->global->CATEGORY_ASSIGNED_TO_A_CUSTOMER) if ($conf->global->CATEGORY_ASSIGNED_TO_A_CUSTOMER)
{ {
@ -163,7 +165,8 @@ class Categorie
//$sql.= ",".$this->parentId; //$sql.= ",".$this->parentId;
$sql.= ")"; $sql.= ")";
$res = $this->db->query($sql); dol_syslog(get_class($this).'::create sql='.$sql);
$res = $this->db->query($sql);
if ($res) if ($res)
{ {
$id = $this->db->last_insert_id(MAIN_DB_PREFIX."categorie"); $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 * 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 * @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) else // mother_id undefined (so it's root)
{ {
/* We have to select any rowid from llx_categorie which which category's type and label /* We have to select any rowid from llx_categorie that is not at root level
* 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 = "SELECT c.rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."categorie as c "; $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.= " WHERE c.type=".$this->type;
$sql.= " AND c.label='".$this->db->escape($this->label)."'"; $sql.= " AND c.label='".$this->db->escape($this->label)."'";
$sql.= " AND c.entity IN (".getEntity('category',1).")"; $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); dol_syslog(get_class($this)."::already_exists sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);

View File

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