Fix: Restore all behaviour of order management of line. The new one is too complex and could not work as it is done.

This commit is contained in:
Laurent Destailleur 2010-09-06 21:10:45 +00:00
parent f91b786de6
commit 46546a78ab
11 changed files with 208 additions and 183 deletions

View File

@ -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

View File

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

View File

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

View File

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

View File

@ -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

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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";

View File

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

View File

@ -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 '<br>';
print '<b>'.$langs->trans('MigrationElementRang')."</b><br>\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 "<br>".$langs->trans('FieldMigrated',$table['name'])."<br>\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 "<br>".$langs->trans('FieldMigrated',$table['name'])."<br>\n";
//$db->query($sql);
}
else
{

View File

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