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);