Works on migration management positioning lines

Phase 4 : llx_expeditiondet et llx_livraisondet
This commit is contained in:
Regis Houssin 2010-09-06 16:31:28 +00:00
parent 9b1b24cf56
commit b9ba88a5d2
13 changed files with 88 additions and 31 deletions

View File

@ -1574,6 +1574,9 @@ class Propal extends CommonObject
$sql = "DELETE FROM ".MAIN_DB_PREFIX."propaldet WHERE fk_propal = ".$this->id; $sql = "DELETE FROM ".MAIN_DB_PREFIX."propaldet WHERE fk_propal = ".$this->id;
if ( $this->db->query($sql) ) if ( $this->db->query($sql) )
{ {
// Delete all rang of files
$this->delAllRangOfLines();
$sql = "DELETE FROM ".MAIN_DB_PREFIX."propal WHERE rowid = ".$this->id; $sql = "DELETE FROM ".MAIN_DB_PREFIX."propal WHERE rowid = ".$this->id;
if ( $this->db->query($sql) ) if ( $this->db->query($sql) )
{ {

View File

@ -1993,6 +1993,9 @@ class Commande extends CommonObject
$err++; $err++;
} }
// Delete all rang of lines
$this->delAllRangOfLines();
// Delete order // Delete order
$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande WHERE rowid = ".$this->id; $sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande WHERE rowid = ".$this->id;
dol_syslog("Commande::delete sql=".$sql); dol_syslog("Commande::delete sql=".$sql);

View File

@ -1801,7 +1801,7 @@ else
} }
else else
{*/ {*/
print '<a class="butAction" href="'.DOL_URL_ROOT.'/expedition/shipment.php?id='.$comid.'">'.$langs->trans('ShipProduct').'</a>'; print '<a class="butAction" href="'.DOL_URL_ROOT.'/expedition/shipment.php?id='.$commande->id.'">'.$langs->trans('ShipProduct').'</a>';
//} //}
} }
else else

View File

@ -1030,6 +1030,8 @@ class Facture extends CommonObject
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if ($resql) if ($resql)
{ {
$this->delAllRangOfLines();
// Appel des triggers // Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($this->db); $interface=new Interfaces($this->db);

View File

@ -754,7 +754,7 @@ class CommonObject
/** /**
* Add position of line (rang) * Add position of line (rang)
*/ */
function addRangOfLine($childid,$childtype,$rang) function addRangOfLine($childid,$childtype,$rang=0)
{ {
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'element_rang ('; $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'element_rang (';
$sql.= 'fk_parent, parenttype, fk_child, childtype, rang'; $sql.= 'fk_parent, parenttype, fk_child, childtype, rang';
@ -785,6 +785,21 @@ class CommonObject
} }
} }
/**
* 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) * Update position of line (rang)
*/ */

View File

@ -231,13 +231,19 @@ class Expedition extends CommonObject
$sql.= ", ".$qty; $sql.= ", ".$qty;
$sql.= ")"; $sql.= ")";
if (! $this->db->query($sql)) if ($this->db->query($sql))
{ {
$error++; $this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'expeditiondet');
}
if (! $error) return 1; $this->rang = 0; // TODO en attendant une gestion de la disposition
else return -1; $this->addRangOfLine($this->rowid,$this->element,$this->rang);
return 1;
}
else
{
return -1;
}
} }
/** /**
@ -544,17 +550,19 @@ class Expedition extends CommonObject
* *
* *
*/ */
function delete_line($id) function delete_line($lineid)
{ {
if ($this->statut == 0) if ($this->statut == 0)
{ {
$sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."expeditiondet";
$sql.= " WHERE rowid = ".$id; $sql.= " WHERE rowid = ".$lineid;
if ($this->db->query($sql) ) if ($this->db->query($sql) )
{ {
$this->update_price(); $this->update_price();
$this->delRangOfLine($lineid, $this->element);
return 1; return 1;
} }
else else
@ -679,6 +687,9 @@ class Expedition extends CommonObject
if ( $this->db->query($sql) ) if ( $this->db->query($sql) )
{ {
// Delete all rang of files
$this->delAllRangOfLines();
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element";
$sql.= " WHERE fk_target = ".$this->id; $sql.= " WHERE fk_target = ".$this->id;
$sql.= " AND targettype = '".$this->element."'"; $sql.= " AND targettype = '".$this->element."'";
@ -752,10 +763,14 @@ class Expedition extends CommonObject
$sql.= ", ed.qty as qty_shipped, ed.fk_origin_line, ed.fk_entrepot"; $sql.= ", ed.qty as qty_shipped, ed.fk_origin_line, ed.fk_entrepot";
$sql.= ", p.ref, p.fk_product_type, p.label, p.weight, p.weight_units, p.volume, p.volume_units"; $sql.= ", p.ref, p.fk_product_type, p.label, p.weight, p.weight_units, p.volume, p.volume_units";
$sql.= " FROM (".MAIN_DB_PREFIX."expeditiondet as ed,"; $sql.= " FROM (".MAIN_DB_PREFIX."expeditiondet as ed,";
$sql.= " ".MAIN_DB_PREFIX."commandedet as cd)"; $sql.= " ".MAIN_DB_PREFIX."commandedet as cd)"; // FIXME utiliser llx_element_element
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_rang as r ON r.fk_parent = ed.fk_expedition AND r.parenttype = '".$this->element."'";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = cd.fk_product"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = cd.fk_product";
$sql.= " WHERE ed.fk_expedition = ".$this->id; $sql.= " WHERE ed.fk_expedition = ".$this->id;
$sql.= " AND ed.fk_origin_line = cd.rowid"; $sql.= " AND r.fk_child = ed.rowid";
$sql.= " AND r.childtype = '".$this->element."'";
$sql.= " AND ed.fk_origin_line = cd.rowid"; // FIXME utiliser llx_element_element
$sql.= " ORDER by r.rang";
dol_syslog("Expedition::fetch_lines sql=".$sql); dol_syslog("Expedition::fetch_lines sql=".$sql);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);

View File

@ -49,6 +49,7 @@ $langs->load('other');
$langs->load('propal'); $langs->load('propal');
$origin = $_GET["origin"]?$_GET["origin"]:$_POST["origin"]; // Example: commande, propal $origin = $_GET["origin"]?$_GET["origin"]:$_POST["origin"]; // Example: commande, propal
if (empty($origin)) $origin = 'expedition';
$origin_id = isset($_REQUEST["id"])?$_REQUEST["id"]:''; $origin_id = isset($_REQUEST["id"])?$_REQUEST["id"]:'';
if (empty($origin_id)) $origin_id = $_GET["origin_id"]?$_GET["origin_id"]:$_POST["origin_id"]; // Id of order or propal if (empty($origin_id)) $origin_id = $_GET["origin_id"]?$_GET["origin_id"]:$_POST["origin_id"]; // Id of order or propal
if (empty($origin_id)) $origin_id = $_GET["object_id"]?$_GET["object_id"]:$_POST["object_id"]; // Id of order or propal if (empty($origin_id)) $origin_id = $_GET["object_id"]?$_GET["object_id"]:$_POST["object_id"]; // Id of order or propal
@ -57,7 +58,7 @@ $id = $origin_id;
// Security check // Security check
if ($user->societe_id) $socid=$user->societe_id; if ($user->societe_id) $socid=$user->societe_id;
$result=restrictedArea($user,$origin,$origin_id,''); $result=restrictedArea($user,$origin,$origin_id);
/* /*

View File

@ -394,11 +394,12 @@ if ($id > 0 || ! empty($ref))
$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,'; $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.= ' p.description as product_desc, p.fk_product_type as product_type';
$sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd"; $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."'";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid";
$sql.= " WHERE cd.fk_commande = ".$commande->id; $sql.= " WHERE cd.fk_commande = ".$commande->id;
// $sql.= " AND p.fk_product_type <> 1"; Why this line ? $sql.= " AND r.fk_child = cd.rowid";
//$sql.= " GROUP by cd.rowid, cd.fk_product"; $sql.= " AND r.childtype = '".$commande->element."'";
$sql.= " ORDER BY cd.rang, cd.rowid"; $sql.= " ORDER BY r.rang, cd.rowid";
//print $sql; //print $sql;
dol_syslog("commande.php sql=".$sql, LOG_DEBUG); dol_syslog("commande.php sql=".$sql, LOG_DEBUG);

View File

@ -25,6 +25,5 @@ create table llx_expeditiondet
fk_expedition integer NOT NULL, fk_expedition integer NOT NULL,
fk_origin_line integer, -- Correspondance de la ligne avec le document d'origine (propal, commande) fk_origin_line integer, -- Correspondance de la ligne avec le document d'origine (propal, commande)
fk_entrepot integer, -- Entrepot de depart du produit fk_entrepot integer, -- Entrepot de depart du produit
qty real, -- Quantity qty real -- Quantity
rang integer DEFAULT 0
)type=innodb; )type=innodb;

View File

@ -28,6 +28,5 @@ create table llx_livraisondet
description text, description text,
qty real, -- quantity qty real, -- quantity
subprice double(24,8) DEFAULT 0, -- prix unitaire subprice double(24,8) DEFAULT 0, -- prix unitaire
total_ht double(24,8) DEFAULT 0, -- Total HT de la ligne toute quantite total_ht double(24,8) DEFAULT 0 -- Total HT de la ligne toute quantite
rang integer DEFAULT 0
)type=innodb; )type=innodb;

View File

@ -38,6 +38,5 @@ create table llx_projet_task
fk_user_valid integer, -- user who validated the task fk_user_valid integer, -- user who validated the task
fk_statut smallint DEFAULT 0 NOT NULL, fk_statut smallint DEFAULT 0 NOT NULL,
note_private text, note_private text,
note_public text, note_public text
rang integer DEFAULT 0
)type=innodb; )type=innodb;

View File

@ -3074,6 +3074,12 @@ function migrate_element_rang($db,$langs,$conf)
$tables[] = array('name'=>'commandedet','element'=>'commande','fk_element'=>'fk_commande'); $tables[] = array('name'=>'commandedet','element'=>'commande','fk_element'=>'fk_commande');
//llx_facturedet //llx_facturedet
$tables[] = array('name'=>'facturedet','element'=>'facture','fk_element'=>'fk_facture'); $tables[] = array('name'=>'facturedet','element'=>'facture','fk_element'=>'fk_facture');
//llx_expeditiondet
$tables[] = array('name'=>'expeditiondet','element'=>'shipping','fk_element'=>'fk_expedition');
//llx_livraisondet
$tables[] = array('name'=>'livraisondet','element'=>'delivery','fk_element'=>'fk_livraison');
//llx_projet_task
//$tables[] = array('name'=>'projet_task','element'=>'project','fk_element'=>'fk_projet');
foreach($tables as $table) foreach($tables as $table)
{ {

View File

@ -224,15 +224,19 @@ class Livraison extends CommonObject
$sql.= $qty.")"; $sql.= $qty.")";
dol_syslog("Livraison::create_line sql=".$sql, LOG_DEBUG); dol_syslog("Livraison::create_line sql=".$sql, LOG_DEBUG);
if (! $this->db->query($sql) ) if ($this->db->query($sql))
{ {
$error++; $this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'livraisondet');
}
$this->rang = 0; // TODO en attendant une gestion de la disposition
$this->addRangOfLine($this->rowid,$this->element,$this->rang);
if ($error == 0 )
{
return 1; return 1;
} }
else
{
return -1;
}
} }
/** /**
@ -536,17 +540,19 @@ class Livraison extends CommonObject
* *
* *
*/ */
function delete_line($idligne) function delete_line($lineid)
{ {
if ($this->statut == 0) if ($this->statut == 0)
{ {
$sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet";
$sql.= " WHERE rowid = ".$idligne; $sql.= " WHERE rowid = ".$lineid;
if ($this->db->query($sql) ) if ($this->db->query($sql) )
{ {
$this->update_price(); $this->update_price();
$this->delRangOfLine($lineid, $this->element);
return 1; return 1;
} }
else else
@ -568,6 +574,9 @@ class Livraison extends CommonObject
$sql.= " WHERE fk_livraison = ".$this->id; $sql.= " WHERE fk_livraison = ".$this->id;
if ( $this->db->query($sql) ) if ( $this->db->query($sql) )
{ {
// Delete all rang of files
$this->delAllRangOfLines();
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element";
$sql.= " WHERE fk_target = ".$this->id; $sql.= " WHERE fk_target = ".$this->id;
$sql.= " AND targettype = '".$this->element."'"; $sql.= " AND targettype = '".$this->element."'";
@ -663,10 +672,15 @@ class Livraison extends CommonObject
$sql = "SELECT ld.rowid, ld.fk_product, ld.description, ld.subprice, ld.total_ht, ld.qty as qty_shipped,"; $sql = "SELECT ld.rowid, ld.fk_product, ld.description, ld.subprice, ld.total_ht, ld.qty as qty_shipped,";
$sql.= " cd.qty as qty_asked,"; $sql.= " cd.qty as qty_asked,";
$sql.= " p.ref, p.fk_product_type as fk_product_type, p.label as label, p.description as product_desc"; $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, ".MAIN_DB_PREFIX."livraisondet as ld"; $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."'";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on p.rowid = ld.fk_product"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on p.rowid = ld.fk_product";
$sql.= " WHERE ld.fk_origin_line = cd.rowid"; $sql.= " WHERE ld.fk_origin_line = cd.rowid";
$sql.= " AND ld.fk_livraison = ".$this->id; $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";
dol_syslog("Livraison::fetch_lignes sql=".$sql); dol_syslog("Livraison::fetch_lignes sql=".$sql);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);