diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php index 94f2f31f743..12aceae8347 100644 --- a/htdocs/fourn/commande/fiche.php +++ b/htdocs/fourn/commande/fiche.php @@ -142,6 +142,7 @@ if ($_POST['action'] == 'addligne' && $user->rights->fournisseur->commande->cree $tva_tx, $prodfournprice->product_id, $_POST['idprodfournprice'], + $prodfournprice->fourn_ref, $_POST['remise_percent'], 'HT' ); diff --git a/htdocs/fourn/fournisseur.commande.class.php b/htdocs/fourn/fournisseur.commande.class.php index ff1f0c7befe..99e5efeaa45 100644 --- a/htdocs/fourn/fournisseur.commande.class.php +++ b/htdocs/fourn/fournisseur.commande.class.php @@ -650,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, $fk_prod_fourn_price=0, $remise_percent=0, $price_base_type='HT') + function addline($desc, $pu, $qty, $txtva, $fk_product=0, $fk_prod_fourn_price=0, $fourn_ref='', $remise_percent=0, $price_base_type='HT') { global $langs; @@ -677,7 +677,7 @@ class CommandeFournisseur extends Commande $prod = new Product($this->db, $fk_product); if ($prod->fetch($fk_product) > 0) { - $result=$prod->get_buyprice($fk_prod_fourn_price,$qty); + $result=$prod->get_buyprice($fk_prod_fourn_price,$qty,$fk_product,$fourn_ref); if ($result > 0) { $label = $prod->libelle; diff --git a/htdocs/product.class.php b/htdocs/product.class.php index f2721b27eb5..fb8968903f9 100644 --- a/htdocs/product.class.php +++ b/htdocs/product.class.php @@ -96,6 +96,8 @@ class Product //! Id du fournisseur var $product_fourn_id; + //! Ref fournisseur + var $fourn_ref; /** * \brief Constructeur de la classe @@ -665,7 +667,7 @@ class Product * \param qty Quantité du produit * \return int <0 si ko, 0 si ok mais rien trouvé, 1 si ok et trouvé */ - function get_buyprice($prodfournprice,$qty) + function get_buyprice($prodfournprice,$qty,$product_id,$fourn_ref) { $result = 0; $sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pf.ref_fourn"; @@ -689,23 +691,30 @@ class Product } else { - // On refait le meme select mais sans critere de quantite - $sql = "SELECT pfp.price as price, pfp.quantity as quantity, pf.fk_soc"; + // 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.= " 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 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"; + $resql = $this->db->query($sql); if ($resql) { - $num=$this->db->num_rows($result); - if ($num) + $obj = $this->db->fetch_object($resql); + if ($obj && $obj->quantity > 0) { - return -1; // Ce produit existe chez ce fournisseur mais qté insuffisante + $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; } else { - return 0; // Ce produit n'existe pas chez ce fournisseur + return -1; // Ce produit existe chez ce fournisseur mais qté insuffisante } } else