diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index f4cd3aa4516..d51e0589ab4 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -534,7 +534,7 @@ class Propal extends CommonObject
if ($this->db->query($sql) )
{
$this->update_price();
-
+
$this->delRangOfLine($lineid, $this->element);
return 1;
@@ -930,15 +930,20 @@ class Propal extends CommonObject
*/
$sql = "SELECT d.description, d.price, d.tva_tx, d.localtax1_tx, d.localtax2_tx, d.qty, d.fk_remise_except, d.remise_percent, d.subprice, d.fk_product,";
$sql.= " d.info_bits, d.total_ht, d.total_tva, d.total_localtax1, d.total_localtax2, d.total_ttc, d.marge_tx, d.marque_tx, d.special_code, d.product_type,";
- $sql.= " p.ref, p.label, p.description as product_desc,";
- $sql.= " r.rang";
+ $sql.= " p.ref, p.label, p.description as product_desc";
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= " r.rang";
$sql.= " FROM ".MAIN_DB_PREFIX."propaldet as d";
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = d.fk_propal AND r.parenttype = '".$this->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = d.fk_propal AND r.parenttype = '".$this->element."'";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON d.fk_product = p.rowid";
$sql.= " WHERE d.fk_propal = ".$this->id;
- $sql.= " AND r.fk_child = d.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
- $sql.= " ORDER by r.rang";
+ //$sql.= " AND r.fk_child = d.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
+ //$sql.= " ORDER by r.rang";
$result = $this->db->query($sql);
if ($result)
@@ -1576,7 +1581,7 @@ class Propal extends CommonObject
{
// Delete all rang of lines
$this->delAllRangOfLines();
-
+
$sql = "DELETE FROM ".MAIN_DB_PREFIX."propal WHERE rowid = ".$this->id;
if ( $this->db->query($sql) )
{
@@ -2097,15 +2102,21 @@ class Propal extends CommonObject
$sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.marge_tx, pt.marque_tx, pt.pa_ht, pt.special_code,';
$sql.= ' pt.date_start, pt.date_end, pt.product_type,';
$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,';
- $sql.= ' p.description as product_desc,';
- $sql.= " r.rang";
+ $sql.= ' p.description as product_desc';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= " r.rang";
$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_propal AND r.parenttype = '".$this->element."'";
- $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid';
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_propal AND r.parenttype = '".$this->element."'";
+ //$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid';
$sql.= ' WHERE pt.fk_propal = '.$this->id;
- $sql.= " AND r.fk_child = pt.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
- $sql.= ' ORDER BY r.rang ASC, pt.rowid';
+ //$sql.= " AND r.fk_child = pt.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
+ //$sql.= ' ORDER BY r.rang ASC, pt.rowid';
+ $sql.= ' ORDER BY pt.rowid';
$resql = $this->db->query($sql);
if ($resql)
@@ -2224,15 +2235,20 @@ class PropaleLigne extends CommonObjectLine
$sql = 'SELECT pd.rowid, pd.fk_propal, pd.fk_product, pd.description, pd.price, pd.qty, pd.tva_tx,';
$sql.= ' pd.remise, pd.remise_percent, pd.fk_remise_except, pd.subprice,';
$sql.= ' pd.info_bits, pd.total_ht, pd.total_tva, pd.total_ttc, pd.marge_tx, pd.marque_tx, pd.special_code,';
- $sql.= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc,';
- $sql.= ' r.rang';
+ $sql.= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= ' r.rang';
$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pd';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pd.fk_propal AND r.parenttype = '".$this->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pd.fk_propal AND r.parenttype = '".$this->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pd.fk_product = p.rowid';
$sql.= ' WHERE pd.rowid = '.$rowid;
- $sql.= " AND r.fk_child = pd.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
-
+ //$sql.= " AND r.fk_child = pd.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
+
$result = $this->db->query($sql);
if ($result)
{
@@ -2331,9 +2347,9 @@ class PropaleLigne extends CommonObjectLine
if ($resql)
{
$this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'propaldet');
-
+
$this->addRangOfLine($this->fk_propal,'propal',$this->rowid,'propal',$this->rang);
-
+
if (! $notrigger)
{
// Appel des triggers
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 94be8f6312c..b6d214f6f0f 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -1233,16 +1233,21 @@ class Commande extends CommonObject
$sql = 'SELECT l.rowid, l.fk_product, l.product_type, l.fk_commande, l.description, l.price, l.qty, l.tva_tx,';
$sql.= ' l.localtax1_tx, l.localtax2_tx, l.fk_remise_except, l.remise_percent, l.subprice, l.marge_tx, l.marque_tx, l.info_bits,';
$sql.= ' l.total_ht, l.total_ttc, l.total_tva, l.total_localtax1, l.total_localtax2, l.date_start, l.date_end,';
- $sql.= ' p.ref as product_ref, p.description as product_desc, p.fk_product_type, p.label,';
- $sql.= ' r.rang';
+ $sql.= ' p.ref as product_ref, p.description as product_desc, p.fk_product_type, p.label';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= ' r.rang';
$sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as l';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_commande AND r.parenttype = '".$this->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_commande AND r.parenttype = '".$this->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON (p.rowid = l.fk_product)';
$sql.= ' WHERE l.fk_commande = '.$this->id;
- $sql.= " AND r.fk_child = l.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
+ //$sql.= " AND r.fk_child = l.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
if ($only_product) $sql .= ' AND p.fk_product_type = 0';
- $sql .= ' ORDER BY r.rang';
+ //$sql .= ' ORDER BY r.rang';
dol_syslog("Commande::fetch_lines sql=".$sql,LOG_DEBUG);
$result = $this->db->query($sql);
@@ -1477,7 +1482,7 @@ class Commande extends CommonObject
if ($result > 0)
{
$result=$this->update_price();
-
+
$this->delRangOfLine($lineid, $this->element);
if ($result > 0)
@@ -1992,7 +1997,7 @@ class Commande extends CommonObject
dol_syslog("CustomerOrder::delete error", LOG_ERR);
$err++;
}
-
+
// Delete all rang of lines
$this->delAllRangOfLines();
@@ -2420,15 +2425,21 @@ class Commande extends CommonObject
$sql.= ' l.date_start,';
$sql.= ' l.date_end,';
$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, ';
- $sql.= ' p.description as product_desc,';
- $sql.= ' r.rang';
+ $sql.= ' p.description as product_desc';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= ' r.rang';
$sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as l';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_commande AND r.parenttype = '".$this->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_commande AND r.parenttype = '".$this->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product=p.rowid';
$sql.= ' WHERE l.fk_commande = '.$this->id;
- $sql.= " AND r.fk_child = l.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
+ //$sql.= " AND r.fk_child = l.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
$sql.= ' ORDER BY r.rang ASC, l.rowid';
+ $sql.= ' ORDER BY l.rowid';
$resql = $this->db->query($sql);
if ($resql)
@@ -2544,15 +2555,20 @@ class OrderLine extends CommonObjectLine
$sql.= ' cd.remise, cd.remise_percent, cd.fk_remise_except, cd.subprice,';
$sql.= ' cd.info_bits, cd.total_ht, cd.total_tva, cd.total_localtax1, cd.total_localtax2, cd.total_ttc, cd.marge_tx, cd.marque_tx,';
$sql.= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc,';
- $sql.= ' cd.date_start, cd.date_end,';
- $sql.= ' r.rang';
+ $sql.= ' cd.date_start, cd.date_end';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= ' r.rang';
$sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as cd';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = cd.fk_commande AND r.parenttype = '".$this->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = cd.fk_commande AND r.parenttype = '".$this->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON cd.fk_product = p.rowid';
$sql.= ' WHERE cd.rowid = '.$rowid;
- $sql.= " AND r.fk_child = cd.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
-
+ //$sql.= " AND r.fk_child = cd.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
+
$result = $this->db->query($sql);
if ($result)
{
@@ -2699,7 +2715,7 @@ class OrderLine extends CommonObjectLine
if ($resql)
{
$this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'commandedet');
-
+
$this->addRangOfLine($this->fk_commande,'commande',$this->rowid,'commande',$this->rang);
if (! $notrigger)
diff --git a/htdocs/compta/commande/fiche.php b/htdocs/compta/commande/fiche.php
index f75f1611f0a..d2ce740fbe1 100644
--- a/htdocs/compta/commande/fiche.php
+++ b/htdocs/compta/commande/fiche.php
@@ -396,13 +396,19 @@ if ($id > 0 || ! empty($ref))
$sql.= ' l.date_end,';
$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,';
$sql.= ' p.description as product_desc';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
$sql.= ' FROM '.MAIN_DB_PREFIX."commandedet as l";
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_commande AND r.parenttype = '".$commande->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_commande AND r.parenttype = '".$commande->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product=p.rowid';
$sql.= " WHERE l.fk_commande = ".$commande->id;
- $sql.= " AND r.fk_child = l.rowid";
- $sql.= " AND r.childtype = '".$commande->element."'";
- $sql.= " ORDER BY r.rang, l.rowid";
+ //$sql.= " AND r.fk_child = l.rowid";
+ //$sql.= " AND r.childtype = '".$commande->element."'";
+ //$sql.= " ORDER BY r.rang, l.rowid";
+ $sql.=" ORDER BY l.rowid";
$resql = $db->query($sql);
if ($resql)
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 464dfde64ac..05003249e41 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -150,7 +150,7 @@ if ($_REQUEST['action'] == 'confirm_deleteproductline' && $_REQUEST['confirm'] =
{
// reorder lines
$fac->line_order(true);
-
+
// Define output language
$outputlangs = $langs;
$newlang='';
@@ -1769,13 +1769,19 @@ if ($_GET['action'] == 'create')
$sql = 'SELECT pt.rowid, pt.description, pt.fk_remise_except,';
$sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.product_type, pt.info_bits,';
$sql.= ' p.label as product, p.ref, p.fk_product_type, p.rowid as prodid';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_propal AND r.parenttype = '".$object->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_propal AND r.parenttype = '".$object->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product = p.rowid';
$sql.= ' WHERE pt.fk_propal = '.$object->id;
- $sql.= " AND r.fk_child = pt.rowid";
- $sql.= " AND r.childtype = '".$object->element."'";
- $sql.= ' ORDER BY r.rang ASC, pt.rowid';
+ //$sql.= " AND r.fk_child = pt.rowid";
+ //$sql.= " AND r.childtype = '".$object->element."'";
+ //$sql.= ' ORDER BY r.rang ASC, pt.rowid';
+ $sql.=" ORDER BY pt.rowid";
}
// TODO deplacer dans la classe
if ($_GET['origin'] == 'commande')
@@ -1786,13 +1792,19 @@ if ($_GET['action'] == 'create')
$sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.product_type, pt.info_bits,';
$sql.= ' pt.date_start as date_debut_prevue, pt.date_end as date_fin_prevue,';
$sql.= ' p.label as product, p.ref, p.fk_product_type, p.rowid as prodid';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
$sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as pt';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_commande AND r.parenttype = '".$object->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_commande AND r.parenttype = '".$object->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product = p.rowid';
$sql.= ' WHERE pt.fk_commande = '.$object->id;
- $sql.= " AND r.fk_child = pt.rowid";
- $sql.= " AND r.childtype = '".$object->element."'";
- $sql.= ' ORDER BY r.rang ASC, pt.rowid';
+ //$sql.= " AND r.fk_child = pt.rowid";
+ //$sql.= " AND r.childtype = '".$object->element."'";
+ //$sql.= ' ORDER BY r.rang ASC, pt.rowid';
+ $sql.=" ORDER BY pt.rowid";
}
// TODO deplacer dans la classe
if ($_GET['origin'] == 'contrat')
@@ -2655,12 +2667,13 @@ else
$sql.= ' p.ref as product_ref, p.fk_product_type, p.label as product_label,';
$sql.= ' p.description as product_desc';
$sql.= ' FROM '.MAIN_DB_PREFIX.'facturedet as l';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_facture AND r.parenttype = '".$fac->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_facture AND r.parenttype = '".$fac->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON l.fk_product=p.rowid';
$sql.= ' WHERE l.fk_facture = '.$fac->id;
- $sql.= " AND r.fk_child = l.rowid";
- $sql.= " AND r.childtype = '".$fac->element."'";
+ //$sql.= " AND r.fk_child = l.rowid";
+ //$sql.= " AND r.childtype = '".$fac->element."'";
$sql.= ' ORDER BY r.rang ASC, l.rowid';
+ $sql.= " ORDER BY l.rowid";
$resql = $db->query($sql);
if ($resql)
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 10d68ec07b7..d4675c99f8f 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -674,15 +674,20 @@ class Facture extends CommonObject
$sql.= ' l.localtax1_tx, l.localtax2_tx, l.remise, l.remise_percent, l.fk_remise_except, l.subprice,';
$sql.= ' l.date_start as date_start, l.date_end as date_end,';
$sql.= ' l.info_bits, l.total_ht, l.total_tva, l.total_localtax1, l.total_localtax2, l.total_ttc, l.fk_code_ventilation, l.fk_export_compta,';
- $sql.= ' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as label, p.description as product_desc,';
- $sql.= ' r.rang';
+ $sql.= ' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as label, p.description as product_desc';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= ' r.rang';
$sql.= ' FROM '.MAIN_DB_PREFIX.'facturedet as l';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_facture AND r.parenttype = '".$this->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = l.fk_facture AND r.parenttype = '".$this->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product = p.rowid';
$sql.= ' WHERE l.fk_facture = '.$this->id;
- $sql.= " AND r.fk_child = l.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
- $sql.= ' ORDER BY r.rang';
+ //$sql.= " AND r.fk_child = l.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
+ //$sql.= ' ORDER BY r.rang';
dol_syslog('Facture::fetch_lines sql='.$sql, LOG_DEBUG);
$result = $this->db->query($sql);
@@ -1028,7 +1033,7 @@ class Facture extends CommonObject
{
// Delete all rang of lines
$this->delAllRangOfLines();
-
+
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'facture WHERE rowid = '.$rowid;
$resql=$this->db->query($sql);
if ($resql)
@@ -1041,7 +1046,7 @@ class Facture extends CommonObject
$this->db->rollback();
return 0;
}
-
+
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($this->db);
@@ -1896,7 +1901,7 @@ class Facture extends CommonObject
}
$result=$this->update_price();
-
+
$this->delRangOfLine($lineid, $this->element);
// Appel des triggers
@@ -2995,7 +3000,7 @@ class FactureLigne extends CommonObjectLine
$sql.= ' WHERE fd.rowid = '.$rowid;
$sql.= " AND r.fk_child = fd.rowid";
$sql.= " AND r.childtype = '".$this->element."'";
-
+
$result = $this->db->query($sql);
if ($result)
{
@@ -3109,7 +3114,7 @@ class FactureLigne extends CommonObjectLine
if ($resql)
{
$this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'facturedet');
-
+
$this->addRangOfLine($this->fk_facture,'facture',$this->rowid,'facture',$this->rang);
// Si fk_remise_except defini, on lie la remise a la facture
diff --git a/htdocs/compta/propal.php b/htdocs/compta/propal.php
index bb3e0725b09..483ef90f646 100644
--- a/htdocs/compta/propal.php
+++ b/htdocs/compta/propal.php
@@ -326,14 +326,20 @@ if ($id > 0 || ! empty($ref))
$sql.= ' pt.product_type,';
$sql.= ' p.rowid as prodid, p.label as product_label, p.ref, p.fk_product_type, ';
$sql.= ' p.description as product_desc';
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt';
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_propal AND r.parenttype = '".$propal->element."'";
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = pt.fk_propal AND r.parenttype = '".$propal->element."'";
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid';
$sql.= ' WHERE pt.fk_propal = '.$propal->id;
- $sql.= " AND r.fk_child = pt.rowid";
- $sql.= " AND r.childtype = '".$propal->element."'";
- $sql.= ' ORDER BY r.rang ASC, pt.rowid';
-
+ //$sql.= " AND r.fk_child = pt.rowid";
+ //$sql.= " AND r.childtype = '".$propal->element."'";
+ //$sql.= ' ORDER BY r.rang ASC, pt.rowid';
+ $sql.=" ORDER BY pt.rowid";
+
$resql = $db->query($sql);
if ($resql)
{
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 9e941b159e9..9cb3b09a2a9 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -677,9 +677,19 @@ class CommonObject
*/
function line_order($renum=false)
{
- $sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.'element_rang';
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
+ if (! $this->table_element_line)
+ {
+ dol_syslog("CommonObject::line_order was called on objet with property table_element_line not defined",LOG_ERR);
+ return -1;
+ }
+ if (! $this->fk_element)
+ {
+ dol_syslog("CommonObject::line_order was called on objet with property fk_element not defined",LOG_ERR);
+ return -1;
+ }
+
+ $sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
+ $sql.= ' WHERE '.$this->fk_element.'='.$this->id;
if (! $renum) $sql.= ' AND rang = 0';
if ($renum) $sql.= ' AND rang <> 0';
$resql = $this->db->query($sql);
@@ -690,9 +700,8 @@ class CommonObject
}
if ($nl > 0)
{
- $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'element_rang';
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
+ $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';
$resql = $this->db->query($sql);
if ($resql)
@@ -708,7 +717,7 @@ class CommonObject
}
for ($i = 0 ; $i < sizeof($li) ; $i++)
{
- $sql = 'UPDATE '.MAIN_DB_PREFIX.'element_rang SET rang = '.($i+1);
+ $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.($i+1);
$sql.= ' WHERE rowid = '.$li[$i];
if (!$this->db->query($sql) )
{
@@ -750,62 +759,13 @@ class CommonObject
// Update position of line
$this->updateLineDown($rowid, $rang, $max);
}
-
- /**
- * Add position of line (rang)
- */
- function addRangOfLine($childid,$childtype,$rang=0)
- {
- $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'element_rang (';
- $sql.= 'fk_parent, parenttype, fk_child, childtype, rang';
- $sql.= ') VALUES (';
- $sql.= $this->id.', "'.$this->element.'", '.$childid.', "'.$childtype.'", '.$rang;
- $sql.= ')';
-
- if (! $this->db->query($sql) )
- {
- dol_print_error($this->db);
- }
- }
-
- /**
- * Delete position of line (rang)
- */
- function delRangOfLine($childid,$childtype)
- {
- $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'element_rang';
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
- $sql.= ' AND fk_child = '.$childid;
- $sql.= ' AND childtype = "'.$childtype.'"';
-
- if (! $this->db->query($sql) )
- {
- dol_print_error($this->db);
- }
- }
-
- /**
- * Delete all position of lines (rang)
- */
- function delAllRangOfLines()
- {
- $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'element_rang';
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
-
- if (! $this->db->query($sql) )
- {
- dol_print_error($this->db);
- }
- }
/**
* Update position of line (rang)
*/
function updateRangOfLine($rowid,$rang)
{
- $sql = 'UPDATE '.MAIN_DB_PREFIX.'element_rang SET rang = '.$rang;
+ $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.$rang;
$sql.= ' WHERE rowid = '.$rowid;
if (! $this->db->query($sql) )
{
@@ -820,16 +780,13 @@ class CommonObject
{
if ($rang > 1 )
{
- $sql = 'UPDATE '.MAIN_DB_PREFIX.'element_rang SET rang = '.$rang ;
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
+ $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.$rang ;
+ $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
$sql.= ' AND rang = '.($rang - 1);
if ($this->db->query($sql) )
{
- $sql = 'UPDATE '.MAIN_DB_PREFIX.'element_rang SET rang = '.($rang - 1);
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
- $sql.= ' AND fk_child = '.$rowid;
+ $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.($rang - 1);
+ $sql.= ' WHERE rowid = '.$rowid;
if (! $this->db->query($sql) )
{
dol_print_error($this->db);
@@ -849,16 +806,13 @@ class CommonObject
{
if ($rang < $max)
{
- $sql = 'UPDATE '.MAIN_DB_PREFIX.'element_rang SET rang = '.$rang;
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
- $sql.= ' AND rang = '.($rang + 1);
+ $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.$rang;
+ $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
+ $sql.= ' AND rang = '.($rang+1);
if ($this->db->query($sql) )
{
- $sql = 'UPDATE '.MAIN_DB_PREFIX.'element_rang SET rang = '.($rang + 1);
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
- $sql.= ' AND fk_child = '.$rowid;
+ $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.($rang+1);
+ $sql.= ' WHERE rowid = '.$rowid;
if (! $this->db->query($sql) )
{
dol_print_error($this->db);
@@ -877,10 +831,8 @@ class CommonObject
*/
function getRangOfLine($rowid)
{
- $sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.'element_rang';
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
- $sql.= ' AND fk_child = '.$rowid;
+ $sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.$this->table_element_line;
+ $sql.= ' WHERE rowid ='.$rowid;
$resql = $this->db->query($sql);
if ($resql)
{
@@ -895,9 +847,8 @@ class CommonObject
*/
function getIdOfLine($rang)
{
- $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'element_rang';
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
+ $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
+ $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
$sql.= ' AND rang = '.$rang;
$resql = $this->db->query($sql);
if ($resql)
@@ -913,9 +864,8 @@ class CommonObject
*/
function line_max()
{
- $sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.'element_rang';
- $sql.= ' WHERE fk_parent = '.$this->id;
- $sql.= ' AND parenttype = "'.$this->element.'"';
+ $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)
{
diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php
index 34a489edbb3..8531b917b3a 100644
--- a/htdocs/expedition/class/expedition.class.php
+++ b/htdocs/expedition/class/expedition.class.php
@@ -763,7 +763,8 @@ class Expedition extends CommonObject
$sql.= " FROM (".MAIN_DB_PREFIX."expeditiondet as ed,";
$sql.= " ".MAIN_DB_PREFIX."commandedet as cd)"; // FIXME utiliser llx_element_element
// FIXME: There is a bug when using a join with element_rang and
- // condition outside of left join. This give unpredicable results.
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
// $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
// Getting a "sort order" must be done outside of the request to get values
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = cd.fk_product";
diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php
index d37a8c8f20b..af5508f39ec 100644
--- a/htdocs/expedition/shipment.php
+++ b/htdocs/expedition/shipment.php
@@ -394,12 +394,18 @@ if ($id > 0 || ! empty($ref))
$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,';
$sql.= ' p.description as product_desc, p.fk_product_type as product_type';
$sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd";
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = cd.fk_commande AND r.parenttype = '".$commande->element."'";
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = cd.fk_commande AND r.parenttype = '".$commande->element."'";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid";
$sql.= " WHERE cd.fk_commande = ".$commande->id;
- $sql.= " AND r.fk_child = cd.rowid";
- $sql.= " AND r.childtype = '".$commande->element."'";
- $sql.= " ORDER BY r.rang, cd.rowid";
+ //$sql.= " AND r.fk_child = cd.rowid";
+ //$sql.= " AND r.childtype = '".$commande->element."'";
+ //$sql.= " ORDER BY r.rang, cd.rowid";
+ $sql.=" ORDER BY cd.rowid";
//print $sql;
dol_syslog("commande.php sql=".$sql, LOG_DEBUG);
diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php
index eba31a69dd4..dee50cb2a2a 100644
--- a/htdocs/install/upgrade2.php
+++ b/htdocs/install/upgrade2.php
@@ -300,8 +300,8 @@ if (GETPOST('action') && preg_match('/upgrade/i',GETPOST("action")))
if (versioncompare($versiontoarray,$afterversionarray) >= 0 && versioncompare($versiontoarray,$beforeversionarray) <= 0)
{
//print $langs->trans("AlreadyDone");
-
- migrate_element_rang($db,$langs,$conf);
+
+ //migrate_element_rang($db,$langs,$conf);
// Reload menus
migrate_reload_menu($db,$langs,$conf,$versionto);
@@ -3065,9 +3065,9 @@ function migrate_element_rang($db,$langs,$conf)
print '
';
print ''.$langs->trans('MigrationElementRang')."
\n";
-
+
$tables = array();
-
+
// llx_propaldet
$tables[] = array('name'=>'propaldet','element'=>'propal','fk_element'=>'fk_propal');
// llx_commandedet
@@ -3088,26 +3088,26 @@ function migrate_element_rang($db,$langs,$conf)
if ($obj)
{
$error = 0;
-
+
$db->begin();
-
+
$sql = "SELECT rowid, ".$table['fk_element'].", rang FROM ".MAIN_DB_PREFIX.$table['name'];
$resql = $db->query($sql);
if ($resql)
{
$i = 0;
$num = $db->num_rows($resql);
-
+
if ($num)
{
while ($i < $num)
{
$obj = $db->fetch_object($resql);
-
+
$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_rang (fk_parent,parenttype,fk_child,childtype,rang)";
$sql.= " VALUES (".$obj->$table['fk_element'].",'".$table['element']."',".$obj->rowid.",'".$table['element']."',".$obj->rang.")";
$resql2=$db->query($sql);
-
+
if (!$resql2)
{
$error++;
@@ -3117,13 +3117,14 @@ function migrate_element_rang($db,$langs,$conf)
$i++;
}
}
-
+
if ($error == 0)
{
$db->commit();
- $sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table['name']." DROP COLUMN rang";
- print "
".$langs->trans('FieldMigrated',$table['name'])."
\n";
- $db->query($sql);
+ // DDL sql order must not be done into the data migrate process
+ //$sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table['name']." DROP COLUMN rang";
+ //print "
".$langs->trans('FieldMigrated',$table['name'])."
\n";
+ //$db->query($sql);
}
else
{
diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php
index 30e952e7866..56fafb232a4 100644
--- a/htdocs/livraison/class/livraison.class.php
+++ b/htdocs/livraison/class/livraison.class.php
@@ -230,7 +230,7 @@ class Livraison extends CommonObject
$this->rang = 0; // TODO en attendant une gestion de la disposition
$this->addRangOfLine($this->rowid,$this->element,$this->rang);
-
+
return 1;
}
else
@@ -550,7 +550,7 @@ class Livraison extends CommonObject
if ($this->db->query($sql) )
{
$this->update_price();
-
+
$this->delRangOfLine($lineid, $this->element);
return 1;
@@ -576,7 +576,7 @@ class Livraison extends CommonObject
{
// Delete all rang of lines
$this->delAllRangOfLines();
-
+
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element";
$sql.= " WHERE fk_target = ".$this->id;
$sql.= " AND targettype = '".$this->element."'";
@@ -585,7 +585,7 @@ class Livraison extends CommonObject
$sql = "DELETE FROM ".MAIN_DB_PREFIX."livraison";
$sql.= " WHERE rowid = ".$this->id;
if ( $this->db->query($sql) )
- {
+ {
$this->db->commit();
// On efface le repertoire de pdf provisoire
@@ -674,13 +674,18 @@ class Livraison extends CommonObject
$sql.= " p.ref, p.fk_product_type as fk_product_type, p.label as label, p.description as product_desc";
$sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd"; // TODO utiliser llx_element_element
$sql.= ", ".MAIN_DB_PREFIX."livraisondet as ld";
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ld.fk_livraison AND r.parenttype = '".$this->element."'";
+ // FIXME: There is a bug when using a join with element_rang and
+ // condition outside of left join. This give unpredicable results as this is not
+ // a valid SQL syntax .
+ // $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
+ // Getting a "sort order" must be done outside of the request to get values
+ //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ld.fk_livraison AND r.parenttype = '".$this->element."'";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on p.rowid = ld.fk_product";
$sql.= " WHERE ld.fk_origin_line = cd.rowid";
$sql.= " AND ld.fk_livraison = ".$this->id;
- $sql.= " AND r.fk_child = ld.rowid";
- $sql.= " AND r.childtype = '".$this->element."'";
- $sql.= " ORDER by r.rang";
+ //$sql.= " AND r.fk_child = ld.rowid";
+ //$sql.= " AND r.childtype = '".$this->element."'";
+ //$sql.= " ORDER by r.rang";
dol_syslog("Livraison::fetch_lignes sql=".$sql);
$resql = $this->db->query($sql);