diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 9a763bcafab..856003a03e0 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1126,11 +1126,18 @@ if ($_GET['propalid'] > 0) } print "\n"; } - if ($conf->global->PRODUIT_USE_MARKUP) + if ($conf->global->PRODUIT_USE_MARKUP && $conf->use_ajax && $conf->global->MAIN_CONFIRM_AJAX) { + print '
'."\n"; + print '| '.img_calc($langs->trans("ToCalculateMarkup")).' | '; + print ''; + print ''; + print img_calc($langs->trans("ToCalculateMarkup")); + print ' | '; print ''.vatrate($objp->marge_tx).'% | '; print '
| ';
- print ''.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'';
- //print ' ('.$objp->ref_fourn.') - '.$objp->label;
+ print ''.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref_fourn.'';
+ print ' ('.$objp->ref.')';
print ' - '.$objp->label;
if ($objp->description) print ' '.nl2br($objp->description); print " | ";
print ''.vatrate($objp->tva_tx).'% | '; print ''.$objp->qty.' | '; if ($objp->remise_percent > 0) - { - print ''.$objp->remise_percent."% | \n"; - } + { + print ''.$objp->remise_percent."% | \n"; + } else - { - print ''; - } + { + print ' | '; + } print ' | '.price($objp->subprice)." | \n"; if ($commande->statut == 0 && $user->rights->fournisseur->commande->creer && $_GET["action"] <> 'valid' && $_GET["action"] != 'editline') { @@ -734,7 +739,7 @@ else $var=false; print "
| '; - $html->select_produits_fournisseurs($commande->fourn_id,'','idprod',$filtre); + $html->select_produits_fournisseurs($commande->fourn_id,'','idprodfournprice',$filtre); print ' | '; print ''; print ' | % | '; diff --git a/htdocs/fourn/fournisseur.commande.class.php b/htdocs/fourn/fournisseur.commande.class.php index cf21451c74e..d63503035c2 100644 --- a/htdocs/fourn/fournisseur.commande.class.php +++ b/htdocs/fourn/fournisseur.commande.class.php @@ -112,10 +112,12 @@ class CommandeFournisseur extends Commande // export pdf ----------- $this->lignes = array(); - $sql = 'SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice,'; + $sql = 'SELECT l.fk_prod_fourn_price, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice,'; $sql.= ' p.label, p.description as product_desc, p.ref, p.rowid as prodid'; $sql.= ' FROM '.MAIN_DB_PREFIX.'commande_fournisseurdet as l'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product=p.rowid'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_fournisseur_price as pfp ON l.fk_prod_fourn_price = pfp.rowid'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_fournisseur as pf ON pfp.fk_product_fournisseur = pf.rowid'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pf.fk_product = p.rowid'; $sql.= ' WHERE l.fk_commande = '.$this->id; $sql.= ' ORDER BY l.rowid'; $result = $this->db->query($sql); @@ -130,17 +132,17 @@ class CommandeFournisseur extends Commande $ligne = new CommandeFournisseurLigne(); - $ligne->desc = $objp->description; // Description ligne - $ligne->qty = $objp->qty; - $ligne->tva_tx = $objp->tva_tx; - $ligne->subprice = $objp->subprice; - $ligne->remise_percent = $objp->remise_percent; - $ligne->price = $objp->price; - $ligne->fk_product = $objp->fk_product; + $ligne->desc = $objp->description; // Description ligne + $ligne->qty = $objp->qty; + $ligne->tva_tx = $objp->tva_tx; + $ligne->subprice = $objp->subprice; + $ligne->remise_percent = $objp->remise_percent; + $ligne->price = $objp->price; + $ligne->fk_prod_fourn_price = $objp->fk_prod_fourn_price; - $ligne->libelle = $objp->label; // Label produit - $ligne->product_desc = $objp->product_desc; // Description produit - $ligne->ref = $objp->ref; + $ligne->libelle = $objp->label; // Label produit + $ligne->product_desc = $objp->product_desc; // Description produit + $ligne->ref = $objp->ref; $this->lignes[$i] = $ligne; //dolibarr_syslog("1 ".$ligne->desc); @@ -648,7 +650,7 @@ class CommandeFournisseur extends Commande * \param price_base_type HT or TTC * \param int <0 si ko, >0 si ok */ - function addline($desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0, $price_base_type='HT') + function addline($desc, $pu, $qty, $txtva, $fk_product=0, $fk_prod_fourn_price=0, $remise_percent=0, $price_base_type='HT') { global $langs; @@ -682,7 +684,7 @@ class CommandeFournisseur extends Commande $desc = $prod->description; $txtva = $prod->tva_tx; $pu = $prod->fourn_pu; - $ref = $prod->ref; + $ref = $prod->ref_fourn; } if ($result == 0 || $result == -1) { @@ -717,8 +719,8 @@ class CommandeFournisseur extends Commande $price = $pu - $remise; } - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet (fk_commande,label,description,fk_product, price, qty, tva_tx, remise_percent, subprice, remise, ref)"; - $sql .= " VALUES ($this->id, '" . addslashes($label) . "','" . addslashes($desc) . "',".$fk_product.",".price2num($price,'MU').", '$qty', $txtva, $remise_percent,'".price2num($subprice,'MU')."','".price2num($remise)."','".$ref."') ;"; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet (fk_commande,label,description,fk_prod_fourn_price, price, qty, tva_tx, remise_percent, subprice, remise, ref)"; + $sql .= " VALUES (".$this->id.", '" . addslashes($label) . "','" . addslashes($desc) . "',".$fk_prod_fourn_price.",".price2num($price,'MU').", '$qty', $txtva, $remise_percent,'".price2num($subprice,'MU')."','".price2num($remise)."','".$ref."') ;"; dolibarr_syslog('Fournisseur.commande.class::addline sql='.$sql); $resql=$this->db->query($sql); if ($resql) diff --git a/htdocs/fourn/fournisseur.product.class.php b/htdocs/fourn/fournisseur.product.class.php index c23f454a118..d98bfbaf7c5 100644 --- a/htdocs/fourn/fournisseur.product.class.php +++ b/htdocs/fourn/fournisseur.product.class.php @@ -42,6 +42,9 @@ class ProductFournisseur extends Product var $id ; var $fourn_ref; var $fourn; + var $fourn_qty; + var $product_fourn_id; + var $product_fourn_price_id; function ProductFournisseur($db) @@ -125,7 +128,7 @@ class ProductFournisseur extends Product /* Mise à jour du prix */ - $this->update_buyprice($this->fourn->id, $qty, $buyprice, $user); + $this->update_buyprice($qty, $buyprice, $user); /* Mise à jour de la référence */ @@ -146,25 +149,28 @@ class ProductFournisseur extends Product * \param user Objet user de l'utilisateur qui modifie * \param price_base_type HT or TTC */ - function update_buyprice($id_fourn, $qty, $buyprice, $user, $price_base_type='HT') + function update_buyprice($qty, $buyprice, $user, $price_base_type='HT') { $error=0; $this->db->begin(); - + // Supprime prix courant du fournisseur pour cette quantité $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price "; - $sql .= " WHERE "; - $sql .= " fk_product = ".$this->id; - $sql .= " AND fk_soc = ".$id_fourn; - $sql .= " AND quantity = ".$qty; - + if ($this->product_fourn_price_id) + { + $sql .= " WHERE rowid = ".$this->product_fourn_price_id; + } + else + { + $sql .= " WHERE fk_product_fournisseur = ".$this->product_fourn_id." AND quantity = ".$qty; + } + if ($this->db->query($sql)) { // Ajoute prix courant du fournisseur pour cette quantité $sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price"; $sql .= " SET datec = now()"; - $sql .= " ,fk_product = ".$this->id; - $sql .= " ,fk_soc = ".$id_fourn; + $sql .= " ,fk_product_fournisseur = ".$this->product_fourn_id; $sql .= " ,fk_user = ".$user->id; $sql .= " ,price = ".price2num($buyprice); $sql .= " ,quantity = ".$qty; @@ -180,8 +186,7 @@ class ProductFournisseur extends Product // Ajoute modif dans table log $sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price_log "; $sql .= " SET datec = now()"; - $sql .= " ,fk_product = ".$this->id; - $sql .= " ,fk_soc = ".$id_fourn; + $sql .= " ,fk_product_fournisseur = ".$this->product_fourn_id; $sql .= " ,fk_user = ".$user->id; $sql .= " ,price = ".price2num($buyprice); $sql .= " ,quantity = ".$qty; @@ -264,6 +269,7 @@ class ProductFournisseur extends Product { $result = $this->db->fetch_array(); $this->ref_fourn = $result["ref_fourn"]; + $this->product_fourn_id = $result["rowid"]; return 1; } else @@ -281,19 +287,23 @@ class ProductFournisseur extends Product */ function fetch_product_fournisseur_price($rowid) { - $sql = "SELECT rowid, fk_soc, ref_fourn, price, quantity, unitprice"; - $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price"; - $sql.= " WHERE rowid = ".$rowid; + $sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice"; + $sql.= ", pf.rowid as product_fourn_id, pf.fk_soc, pf.ref_fourn, pf.fk_product"; + $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product_fournisseur as pf"; + $sql.= " WHERE pfp.rowid = ".$rowid." AND pf.rowid = pfp.fk_product_fournisseur"; dolibarr_syslog("Product::fetch_product_fournisseur_price sql=".$sql); $resql = $this->db->query($sql) ; if ($resql) { $obj = $this->db->fetch_object($resql); - $this->fourn_ref = $obj->ref_fourn; - $this->fourn_price = $obj->price; - $this->fourn_qty = $obj->qty; - $this->fourn_unitprice = $obj->unitprice; + $this->product_fourn_price_id = $rowid; + $this->product_fourn_id = $obj->product_fourn_id; + $this->fourn_ref = $obj->ref_fourn; + $this->fourn_price = $obj->price; + $this->fourn_qty = $obj->quantity; + $this->fourn_unitprice = $obj->unitprice; + $this->product_id = $obj->fk_product; return 1; } else diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php index 7880b84e62e..ce92d3a9ac6 100644 --- a/htdocs/html.form.class.php +++ b/htdocs/html.form.class.php @@ -1144,16 +1144,17 @@ class Form global $langs,$conf; $sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,"; - $sql.= " pfp.price as fprice, pfp.quantity, pfp.unitprice"; + $sql.= " pf.ref_fourn, pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pf.rowid = pfp.fk_product_fournisseur"; $sql.= " WHERE p.envente = 1"; - if ($socid) $sql.= " AND pfp.fk_soc = ".$socid; + if ($socid) $sql.= " AND pf.fk_soc = ".$socid; if ($filtretype && $filtretype != '') $sql.=" AND p.fk_product_type=".$filtretype; if ($filtre) $sql.="$filtre"; - if ($ajaxkeysearch && $ajaxkeysearch != '') $sql.=" AND p.ref like '%".$ajaxkeysearch."%' OR p.label like '%".$ajaxkeysearch."%'"; - $sql.= " ORDER BY p.ref DESC"; - + if ($ajaxkeysearch && $ajaxkeysearch != '') $sql.=" AND (pf.ref_fourn like '%".$ajaxkeysearch."%' OR p.label like '%".$ajaxkeysearch."%')"; + $sql.= " ORDER BY pf.ref_fourn DESC"; + dolibarr_syslog("Form::select_produits_fournisseurs sql=$sql",LOG_DEBUG); $result=$this->db->query($sql); @@ -1187,10 +1188,10 @@ class Form { $objp = $this->db->fetch_object($result); - $opt = '|||||