From 76109b21c470666376ecefda5a6ebeb3127bfe59 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 26 Sep 2007 23:19:39 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Regression,=20l'ajout=20d'un=20produit?= =?UTF-8?q?=20pr=E9d=E9fini=20de=20fournisseur=20sur=20une=20facture=20fou?= =?UTF-8?q?rnisseur=20plantait?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/fourn/facture/fiche.php | 102 ++++++++++++++++----------------- htdocs/html.form.class.php | 4 +- htdocs/product.class.php | 31 +++++----- 3 files changed, 70 insertions(+), 67 deletions(-) diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index 5696291f63a..08ef93b7e90 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -248,60 +248,60 @@ if ($_REQUEST['action'] == 'update_line') if ($_GET['action'] == 'add_ligne') { - $facfou = new FactureFournisseur($db, '', $_GET['facid']); + $facfou = new FactureFournisseur($db, '', $_GET['facid']); - if ($_POST['idprod']) - { - $nv_prod = new Product($db); - $nv_prod->fetch($_POST['idprod']); - - // cas spécial pour lequel on a les meme référence que le fournisseur - // $label = '['.$nv_prod->ref.'] - '. $nv_prod->libelle; - $label = $nv_prod->libelle; - - $result=$nv_prod->get_buyprice($_POST['socid'], $_POST['qty']); - if ($result > 0) - { - $societe=''; - if ($_POST['socid']) - { - $societe=new Societe($db); - $societe->fetch($_POST['socid']); - } + if ($_POST['prodfournpriceid']) + { + $nv_prod = new Product($db); + $idprod=$nv_prod->get_buyprice($_POST['prodfournpriceid'], $_POST['qty']); + if ($idprod > 0) + { + $result=$nv_prod->fetch($idprod); + + // cas spécial pour lequel on a les meme référence que le fournisseur + // $label = '['.$nv_prod->ref.'] - '. $nv_prod->libelle; + $label = $nv_prod->libelle; - $tvatx=get_default_tva($societe,$mysoc,$nv_prod->tva_tx); + $societe=''; + if ($_POST['socid']) + { + $societe=new Societe($db); + $societe->fetch($_POST['socid']); + } - $facfou->addline($label, $nv_prod->fourn_pu, $tvatx, $_POST['qty'], $_POST['idprod']); - } - if ($result == -1) - { - // Quantité insuffisante - $mesg='
'.$langs->trans("ErrorQtyTooLowForThisSupplier").'
'; - } - } - else - { - $tauxtva = price2num($_POST['tauxtva']); - if (! $_POST['label']) - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")).'
'; - } - else - { - if (!empty($_POST['amount'])) - { - $ht = price2num($_POST['amount']); - $facfou->addline($_POST['label'], $ht, $tauxtva, $_POST['qty']); - } - else - { - $ttc = price2num($_POST['amountttc']); - $ht = $ttc / (1 + ($tauxtva / 100)); - $facfou->addline($_POST['label'], $ht, $tauxtva, $_POST['qty']); - } + $tvatx=get_default_tva($societe,$mysoc,$nv_prod->tva_tx); + + $result=$facfou->addline($label, $nv_prod->fourn_pu, $tvatx, $_POST['qty'], $idprod); } - } - $_GET['action'] = ''; + if ($idprod == -1) + { + // Quantité insuffisante + $mesg='
'.$langs->trans("ErrorQtyTooLowForThisSupplier").'
'; + } + } + else + { + $tauxtva = price2num($_POST['tauxtva']); + if (! $_POST['label']) + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")).'
'; + } + else + { + if (!empty($_POST['amount'])) + { + $ht = price2num($_POST['amount']); + $facfou->addline($_POST['label'], $ht, $tauxtva, $_POST['qty']); + } + else + { + $ttc = price2num($_POST['amountttc']); + $ht = $ttc / (1 + ($tauxtva / 100)); + $facfou->addline($_POST['label'], $ht, $tauxtva, $_POST['qty']); + } + } + } + $_GET['action'] = ''; } @@ -817,7 +817,7 @@ else $var=! $var; print ''; print ''; - $html->select_produits_fournisseurs($fac->socid,'','idprod',$filtre); + $html->select_produits_fournisseurs($fac->socid,'','prodfournpriceid',$filtre); print ''; print ''; print ' '; diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php index 6e4c6445150..dff1e19593d 100644 --- a/htdocs/html.form.class.php +++ b/htdocs/html.form.class.php @@ -1149,7 +1149,7 @@ class Form /** \brief Retourne la liste des produits de fournisseurs - \param socid Id société (0 pour aucun filtre) + \param socid Id société fournisseur (0 pour aucun filtre) \param selected Produit présélectionné \param htmlname Nom de la zone select \param filtretype Pour filtre sur type de produit @@ -1174,7 +1174,7 @@ class Form 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); + dolibarr_syslog("Form::select_produits_fournisseurs sql=".$sql,LOG_DEBUG); $result=$this->db->query($sql); if ($result) diff --git a/htdocs/product.class.php b/htdocs/product.class.php index c038a4c5531..4302bfae12e 100644 --- a/htdocs/product.class.php +++ b/htdocs/product.class.php @@ -96,8 +96,6 @@ class Product //! Id du fournisseur var $product_fourn_id; - //! Ref fournisseur - var $fourn_ref; /** * \brief Constructeur de la classe @@ -660,21 +658,23 @@ class Product /** - * \brief Lit le prix pratiqué par un fournisseur - * \param prodfournprice Id du tarif - * \param qty Quantité du produit - * \return int <0 si ko, 0 si ok mais rien trouvé, 1 si ok et trouvé + * \brief Lit le prix pratiqué par un fournisseur + * On renseigne le couple prodfournprice/qty ou le triplet qty/product_id/fourn_ref) + * \param prodfournprice Id du tarif = rowid table product_fournisseur_price + * \param qty Quantité du produit + * \return int <0 si ko, 0 si ok mais rien trouvé, id_product si ok et trouvé */ - function get_buyprice($prodfournprice,$qty,$product_id,$fourn_ref) + function get_buyprice($prodfournprice,$qty,$product_id=0,$fourn_ref=0) { $result = 0; - $sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pf.ref_fourn"; + $sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity,"; + $sql.= " pf.fk_product, pf.ref_fourn"; $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product_fournisseur as pf"; $sql.= " WHERE pf.rowid = pfp.fk_product_fournisseur"; $sql.= " AND pfp.rowid = ".$prodfournprice; $sql.= " AND pfp.quantity <= ".$qty; - dolibarr_syslog("Product::get_buyprice $prodfournprice,$qty sql=$sql"); + dolibarr_syslog("Product::get_buyprice $prodfournprice,$qty sql=".$sql); $resql = $this->db->query($sql); if ($resql) @@ -685,19 +685,21 @@ class Product $this->buyprice = $obj->price; // \deprecated $this->fourn_pu = $obj->price / $obj->quantity; // Prix unitaire du produit pour le fournisseur $fourn_id $this->ref_fourn = $obj->ref_fourn; - return 1; + $result=$obj->fk_product; + return $result; } else { // On refait le meme select sur la ref et l'id du produit - $sql = "SELECT pfp.price as price, pfp.quantity as quantity, pf.fk_soc, pf.ref_fourn"; + $sql = "SELECT pfp.price as price, pfp.quantity as quantity, pf.fk_soc"; + $sql.= " pf.fk_product, pf.ref_fourn"; $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product_fournisseur as pf"; $sql.= " WHERE pf.rowid = pfp.fk_product_fournisseur"; $sql.= " AND pf.ref_fourn = '".$fourn_ref."'"; $sql.= " AND pf.fk_product = ".$product_id; $sql.= " AND quantity <= ".$qty; - $sql.= " ORDER BY pfp.quantity DESC"; - $sql.= " LIMIT 1"; + $sql.= " ORDER BY pfp.quantity DESC"; + $sql.= " LIMIT 1"; $resql = $this->db->query($sql); if ($resql) @@ -708,7 +710,8 @@ class Product $this->buyprice = $obj->price; // \deprecated $this->fourn_pu = $obj->price / $obj->quantity; // Prix unitaire du produit pour le fournisseur $fourn_id $this->ref_fourn = $obj->ref_fourn; - return 1; + $result=$obj->fk_product; + return $result; } else {