示例#1
0
 }
 if (!$error) {
     $supplier = new Fournisseur($db);
     $result = $supplier->fetch($id_fourn);
     if (isset($_POST['ref_fourn_price_id'])) {
         $object->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']);
     }
     $ret = $object->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr, $delivery_time_days);
     if ($ret < 0) {
         $error++;
         setEventMessage($object->error, $object->errors, 'errors');
     } else {
         if ($price_expression !== '') {
             //Check the expression validity by parsing it
             $priceparser = new PriceParser($db);
             $price_result = $priceparser->parseProductSupplier($id, $price_expression, $quantity, $tva_tx);
             if ($price_result < 0) {
                 //Expression is not valid
                 $error++;
                 setEventMessage($priceparser->translatedError(), 'errors');
             }
         }
         if (!$error && !empty($conf->dynamicprices->enabled)) {
             $ret = $object->setPriceExpression($price_expression);
             if ($ret < 0) {
                 $error++;
                 setEventMessage($object->error, 'errors');
             }
         }
     }
 }
 /**
  *	Read price used by a provider
  *	We enter as input couple prodfournprice/qty or triplet qty/product_id/fourn_ref
  *
  *  @param     	int		$prodfournprice     Id du tarif = rowid table product_fournisseur_price
  *  @param     	double	$qty                Quantity asked
  *	@param		int		$product_id			Filter on a particular product id
  * 	@param		string	$fourn_ref			Filter on a supplier ref
  *  @return    	int 						<-1 if KO, -1 if qty not enough, 0 si ok mais rien trouve, id_product si ok et trouve. May also initialize some properties like (->ref_supplier, buyprice, fourn_pu, vatrate_supplier...)
  */
 function get_buyprice($prodfournprice, $qty, $product_id = 0, $fourn_ref = 0)
 {
     $result = 0;
     // We do select by searching with qty and prodfournprice
     $sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity,";
     $sql .= " pfp.fk_product, pfp.ref_fourn, pfp.fk_soc, pfp.tva_tx, pfp.fk_supplier_price_expression";
     $sql .= " FROM " . MAIN_DB_PREFIX . "product_fournisseur_price as pfp";
     $sql .= " WHERE pfp.rowid = " . $prodfournprice;
     if ($qty) {
         $sql .= " AND pfp.quantity <= " . $qty;
     }
     dol_syslog(get_class($this) . "::get_buyprice", LOG_DEBUG);
     $resql = $this->db->query($sql);
     if ($resql) {
         $obj = $this->db->fetch_object($resql);
         if ($obj && $obj->quantity > 0) {
             if (!empty($obj->fk_supplier_price_expression)) {
                 require_once DOL_DOCUMENT_ROOT . '/product/dynamic_price/class/price_parser.class.php';
                 $priceparser = new PriceParser($this->db);
                 $price_result = $priceparser->parseProductSupplier($obj->fk_product, $obj->fk_supplier_price_expression, $obj->quantity, $obj->tva_tx);
                 if ($price_result >= 0) {
                     $obj->price = $price_result;
                 }
             }
             $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;
             // Ref supplier
             $this->vatrate_supplier = $obj->tva_tx;
             // Vat ref supplier
             $result = $obj->fk_product;
             return $result;
         } else {
             // We do same select again but searching with qty, ref and id product
             $sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pfp.fk_soc,";
             $sql .= " pfp.fk_product, pfp.ref_fourn as ref_supplier, pfp.tva_tx, pfp.fk_supplier_price_expression";
             $sql .= " FROM " . MAIN_DB_PREFIX . "product_fournisseur_price as pfp";
             $sql .= " WHERE pfp.ref_fourn = '" . $fourn_ref . "'";
             $sql .= " AND pfp.fk_product = " . $product_id;
             $sql .= " AND pfp.quantity <= " . $qty;
             $sql .= " ORDER BY pfp.quantity DESC";
             $sql .= " LIMIT 1";
             dol_syslog(get_class($this) . "::get_buyprice", LOG_DEBUG);
             $resql = $this->db->query($sql);
             if ($resql) {
                 $obj = $this->db->fetch_object($resql);
                 if ($obj && $obj->quantity > 0) {
                     if (!empty($obj->fk_supplier_price_expression)) {
                         require_once DOL_DOCUMENT_ROOT . '/product/dynamic_price/class/price_parser.class.php';
                         $priceparser = new PriceParser($this->db);
                         $price_result = $priceparser->parseProductSupplier($obj->fk_product, $obj->fk_supplier_price_expression, $obj->quantity, $obj->tva_tx);
                         if ($result >= 0) {
                             $obj->price = $price_result;
                         }
                     }
                     $this->buyprice = $obj->price;
                     // deprecated
                     $this->fourn_qty = $obj->quantity;
                     // min quantity for price
                     $this->fourn_pu = $obj->price / $obj->quantity;
                     // Prix unitaire du produit pour le fournisseur $fourn_id
                     $this->ref_fourn = $obj->ref_supplier;
                     // deprecated
                     $this->ref_supplier = $obj->ref_supplier;
                     // Ref supplier
                     $this->vatrate_supplier = $obj->tva_tx;
                     // Vat ref supplier
                     $result = $obj->fk_product;
                     return $result;
                 } else {
                     return -1;
                     // Ce produit n'existe pas avec cette ref fournisseur ou existe mais qte insuffisante
                 }
             } else {
                 $this->error = $this->db->lasterror();
                 return -3;
             }
         }
     } else {
         $this->error = $this->db->lasterror();
         return -2;
     }
 }
 /**
  *  Load properties for minimum price
  *
  *  @param	int		$prodid	    Product id
  *  @param	int		$qty		Minimum quantity
  *  @return int					<0 if KO, 0=Not found of no product id provided, >0 if OK
  */
 function find_min_price_product_fournisseur($prodid, $qty = 0)
 {
     global $conf;
     if (empty($prodid)) {
         dol_syslog("Warning function find_min_price_product_fournisseur were called with prodid empty. May be a bug.", LOG_WARNING);
         return 0;
     }
     $this->product_fourn_price_id = '';
     $this->product_fourn_id = '';
     $this->fourn_ref = '';
     $this->fourn_price = '';
     $this->fourn_qty = '';
     $this->fourn_remise_percent = '';
     $this->fourn_remise = '';
     $this->fourn_unitprice = '';
     $this->fourn_id = '';
     $this->fourn_name = '';
     $this->delivery_time_days = '';
     $this->id = '';
     $sql = "SELECT s.nom as supplier_name, s.rowid as fourn_id,";
     $sql .= " pfp.rowid as product_fourn_price_id, pfp.ref_fourn,";
     $sql .= " pfp.price, pfp.quantity, pfp.unitprice, pfp.tva_tx, pfp.charges, pfp.unitcharges, ";
     $sql .= " pfp.remise, pfp.remise_percent, pfp.fk_supplier_price_expression, pfp.delivery_time_days";
     $sql .= " FROM " . MAIN_DB_PREFIX . "societe as s, " . MAIN_DB_PREFIX . "product_fournisseur_price as pfp";
     $sql .= " WHERE s.entity IN (" . getEntity('societe', 1) . ")";
     $sql .= " AND pfp.fk_product = " . $prodid;
     $sql .= " AND pfp.fk_soc = s.rowid";
     if ($qty > 0) {
         $sql .= " AND pfp.quantity <= " . $qty;
     }
     dol_syslog(get_class($this) . "::find_min_price_product_fournisseur", LOG_DEBUG);
     $resql = $this->db->query($sql);
     if ($resql) {
         $record_array = array();
         //Store each record to array for later search of min
         while ($record = $this->db->fetch_array($resql)) {
             $record_array[] = $record;
         }
         if (count($record_array) == 0) {
             $this->db->free($resql);
             return 0;
         } else {
             $min = -1;
             foreach ($record_array as $record) {
                 $fourn_price = $record["price"];
                 $fourn_unitprice = $record["unitprice"];
                 if (!empty($record["fk_supplier_price_expression"])) {
                     $priceparser = new PriceParser($this->db);
                     $price_result = $priceparser->parseProductSupplier($prodid, $record["fk_supplier_price_expression"], $record["quantity"], $record["tva_tx"]);
                     if ($price_result >= 0) {
                         $fourn_price = price2num($price_result, 'MU');
                         if ($record["quantity"] != 0) {
                             $fourn_unitprice = price2num($fourn_price / $record["quantity"], 'MU');
                         } else {
                             $fourn_unitprice = $fourn_price;
                         }
                     }
                 }
                 if ($fourn_unitprice < $min || $min == -1) {
                     $this->product_fourn_price_id = $record["product_fourn_price_id"];
                     $this->fourn_ref = $record["ref_fourn"];
                     $this->fourn_price = $fourn_price;
                     $this->fourn_qty = $record["quantity"];
                     $this->fourn_remise_percent = $record["remise_percent"];
                     $this->fourn_remise = $record["remise"];
                     $this->fourn_unitprice = $fourn_unitprice;
                     $this->fourn_charges = $record["charges"];
                     // deprecated
                     $this->fourn_unitcharges = $record["unitcharges"];
                     // deprecated
                     $this->fourn_tva_tx = $record["tva_tx"];
                     $this->fourn_id = $record["fourn_id"];
                     $this->fourn_name = $record["supplier_name"];
                     $this->delivery_time_days = $record["delivery_time_days"];
                     $this->fk_supplier_price_expression = $record["fk_supplier_price_expression"];
                     $this->id = $prodid;
                     $min = $this->fourn_unitprice;
                 }
             }
         }
         $this->db->free($resql);
         return 1;
     } else {
         $this->error = $this->db->error();
         return -1;
     }
 }
 $sql .= " WHERE pfp.fk_product = " . $idprod;
 $sql .= " AND p.tobuy = 1";
 $sql .= " AND s.fournisseur = 1";
 $sql .= " ORDER BY s.nom, pfp.ref_fourn DESC";
 dol_syslog("Ajax::getSupplierPrices", LOG_DEBUG);
 $result = $db->query($sql);
 if ($result) {
     $num = $db->num_rows($result);
     if ($num) {
         require_once DOL_DOCUMENT_ROOT . '/product/dynamic_price/class/price_parser.class.php';
         $i = 0;
         while ($i < $num) {
             $objp = $db->fetch_object($result);
             if (!empty($objp->fk_supplier_price_expression)) {
                 $priceparser = new PriceParser($db);
                 $price_result = $priceparser->parseProductSupplier($idprod, $objp->fk_supplier_price_expression, $objp->quantity, $objp->tva_tx);
                 if ($price_result >= 0) {
                     $objp->fprice = $price_result;
                     if ($objp->quantity >= 1) {
                         $objp->unitprice = $objp->fprice / $objp->quantity;
                     }
                 }
             }
             $price = $objp->fprice * (1 - $objp->remise_percent / 100);
             $unitprice = $objp->unitprice * (1 - $objp->remise_percent / 100);
             $title = $objp->name . ' - ' . $objp->ref_fourn . ' - ';
             if ($objp->quantity == 1) {
                 $title .= price($price, 0, $langs, 0, 0, -1, $conf->currency) . "/";
             }
             $title .= $objp->quantity . ' ' . ($objp->quantity == 1 ? $langs->trans("Unit") : $langs->trans("Units"));
             if ($objp->quantity > 1) {
示例#5
0
 /**
  *	Return list of suppliers prices for a product
  *
  *  @param		int		$productid       Id of product
  *  @param      string	$htmlname        Name of HTML field
  *  @return		void
  */
 function select_product_fourn_price($productid, $htmlname = 'productfournpriceid')
 {
     global $langs, $conf;
     $langs->load('stocks');
     $sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,";
     $sql .= " pfp.ref_fourn, pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,";
     $sql .= " pfp.fk_supplier_price_expression, pfp.fk_product, pfp.tva_tx, s.nom as name";
     $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 . "societe as s ON pfp.fk_soc = s.rowid";
     $sql .= " WHERE p.entity IN (" . getEntity('product', 1) . ")";
     $sql .= " AND p.tobuy = 1";
     $sql .= " AND s.fournisseur = 1";
     $sql .= " AND p.rowid = " . $productid;
     $sql .= " ORDER BY s.nom, pfp.ref_fourn DESC";
     dol_syslog(get_class($this) . "::select_product_fourn_price", LOG_DEBUG);
     $result = $this->db->query($sql);
     if ($result) {
         $num = $this->db->num_rows($result);
         $form = '<select class="flat" name="' . $htmlname . '">';
         if (!$num) {
             $form .= '<option value="0">-- ' . $langs->trans("NoSupplierPriceDefinedForThisProduct") . ' --</option>';
         } else {
             require_once DOL_DOCUMENT_ROOT . '/product/dynamic_price/class/price_parser.class.php';
             $form .= '<option value="0">&nbsp;</option>';
             $i = 0;
             while ($i < $num) {
                 $objp = $this->db->fetch_object($result);
                 $opt = '<option value="' . $objp->idprodfournprice . '"';
                 //if there is only one supplier, preselect it
                 if ($num == 1) {
                     $opt .= ' selected';
                 }
                 $opt .= '>' . $objp->name . ' - ' . $objp->ref_fourn . ' - ';
                 if (!empty($objp->fk_supplier_price_expression)) {
                     $priceparser = new PriceParser($this->db);
                     $price_result = $priceparser->parseProductSupplier($objp->fk_product, $objp->fk_supplier_price_expression, $objp->quantity, $objp->tva_tx);
                     if ($price_result >= 0) {
                         $objp->fprice = $price_result;
                         if ($objp->quantity >= 1) {
                             $objp->unitprice = $objp->fprice / $objp->quantity;
                         }
                     }
                 }
                 if ($objp->quantity == 1) {
                     $opt .= price($objp->fprice, 1, $langs, 0, 0, -1, $conf->currency) . "/";
                 }
                 $opt .= $objp->quantity . ' ';
                 if ($objp->quantity == 1) {
                     $opt .= $langs->trans("Unit");
                 } else {
                     $opt .= $langs->trans("Units");
                 }
                 if ($objp->quantity > 1) {
                     $opt .= " - ";
                     $opt .= price($objp->unitprice, 1, $langs, 0, 0, -1, $conf->currency) . "/" . $langs->trans("Unit");
                 }
                 if ($objp->duration) {
                     $opt .= " - " . $objp->duration;
                 }
                 $opt .= "</option>\n";
                 $form .= $opt;
                 $i++;
             }
             $form .= '</select>';
             $this->db->free($result);
         }
         return $form;
     } else {
         dol_print_error($this->db);
     }
 }