Fix: correct reorder line with fk_parent_line

Fix: problem with create order from proposals with fk_parent_line
This commit is contained in:
Regis Houssin 2011-04-09 15:59:45 +00:00
parent d6291a65a3
commit ecd673399f
3 changed files with 53 additions and 20 deletions

View File

@ -350,7 +350,7 @@ class Propal extends CommonObject
$rangtouse = $rang;
if ($rangtouse == -1)
{
$rangmax = $this->line_max();
$rangmax = $this->line_max($fk_parent_line);
$rangtouse = $rangmax + 1;
}
@ -399,6 +399,9 @@ class Propal extends CommonObject
$result=$this->line->insert();
if ($result > 0)
{
// Reorder if child line
if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
// Mise a jour informations denormalisees au niveau de la propale meme
$result=$this->update_price(1);
if ($result > 0)

View File

@ -592,11 +592,19 @@ class Commande extends CommonObject
if ($this->id)
{
$fk_parent_line=0;
$num=sizeof($this->lines);
/*
* Insertion du detail des produits dans la base
*/
for ($i = 0 ; $i < sizeof($this->lines) ; $i++)
for ($i=0;$i<$num;$i++)
{
// Reset fk_parent_line for no child products and special product
if (($this->lines[$i]->product_type != 9 && empty($this->lines[$i]->fk_parent_line)) || $this->lines[$i]->product_type == 9) {
$fk_parent_line = 0;
}
$result = $this->addline(
$this->id,
$this->lines[$i]->desc,
@ -615,7 +623,8 @@ class Commande extends CommonObject
$this->lines[$i]->date_end,
$this->lines[$i]->product_type,
$this->lines[$i]->rang,
$this->lines[$i]->special_code
$this->lines[$i]->special_code,
$fk_parent_line
);
if ($result < 0)
{
@ -624,6 +633,10 @@ class Commande extends CommonObject
$this->db->rollback();
return -1;
}
// Defined the new fk_parent_line
if ($result > 0 && $this->lines[$i]->product_type == 9) {
$fk_parent_line = $result;
}
}
// Mise a jour ref
@ -985,8 +998,8 @@ class Commande extends CommonObject
$this->line->price=$price;
$this->line->remise=$remise;
$result=$this->line->insert();
if ($result > 0)
$resInsert=$this->line->insert();
if ($resInsert > 0)
{
// Mise a jour informations denormalisees au niveau de la commande meme
$this->id=$commandeid; // TODO A virer
@ -994,7 +1007,7 @@ class Commande extends CommonObject
if ($result > 0)
{
$this->db->commit();
return 1;
return $resInsert;
}
else
{

View File

@ -700,7 +700,7 @@ class CommonObject
* Stocke un numero de rang pour toutes les lignes de detail d'un element qui n'en ont pas.
* @param renum true to renum all already ordered lines, false to renum only not already ordered lines.
*/
function line_order($renum=false)
function line_order($renum=false, $rowidorder='ASC')
{
if (! $this->table_element_line)
{
@ -727,7 +727,7 @@ class CommonObject
{
$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
$sql.= ' ORDER BY rang ASC, rowid ASC';
$sql.= ' ORDER BY rang ASC, rowid '.$rowidorder;
$resql = $this->db->query($sql);
if ($resql)
{
@ -736,14 +736,10 @@ class CommonObject
while ($i < $num)
{
$row = $this->db->fetch_row($resql);
$li[$i] = $row[0];
$this->updateRangOfLine($row[0], ($i+1));
$i++;
}
}
for ($i = 0 ; $i < sizeof($li) ; $i++)
{
$this->updateRangOfLine($li[$i], ($i+1));
}
}
}
@ -896,15 +892,36 @@ class CommonObject
* Get max value used for position of line (rang)
* @result int Max value of rang in table of lines
*/
function line_max()
function line_max($fk_parent_line=0)
{
$sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
$resql = $this->db->query($sql);
if ($resql)
// Search the last rang with fk_parent_line
if ($fk_parent_line)
{
$row = $this->db->fetch_row($resql);
return $row[0];
$sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
$sql.= ' AND fk_parent_line = '.$fk_parent_line;
$resql = $this->db->query($sql);
if ($resql)
{
$row = $this->db->fetch_row($resql);
if (! empty($row[0])) {
return $row[0];
} else {
return $this->getRangOfLine($fk_parent_line);
}
}
}
// If not, search the last rang of element
else
{
$sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
$resql = $this->db->query($sql);
if ($resql)
{
$row = $this->db->fetch_row($resql);
return $row[0];
}
}
}