function setAsset(&$PDOdb, &$AssetOf, $forReal = false)
 {
     global $db, $user, $conf;
     if (!$conf->global->USE_LOT_IN_OF || empty($this->lot_number)) {
         return true;
     }
     dol_include_once('/asset/class/asset.class.php');
     $completeSql = '';
     $sql = 'SELECT rowid FROM ' . MAIN_DB_PREFIX . 'asset';
     $is_cumulate = TAsset_type::getIsCumulate($PDOdb, $this->fk_product);
     $is_perishable = TAsset_type::getIsPerishable($PDOdb, $this->fk_product);
     //si on cherche à déstocker 5 * 0.10 Kg alors on ne cherche pas un équipement avec + de 5Kg en stock mais bien + de 0.50Kg
     list($qty, $qty_stock) = $this->convertQty();
     //echo $this->qty;exit;
     //Si type equipement est cumulable alors on destock 1 ou +sieurs équipements jusqu'à avoir la qté nécéssaire
     if ($is_cumulate) {
         $sql .= ' WHERE status != "USED" ';
         if (!$conf->global->ASSET_NEGATIVE_DESTOCK) {
             $sql .= ' AND contenancereel_value > 0 ';
         }
         if ($is_perishable) {
             $completeSql = ' AND DATE_FORMAT(dluo, "%Y-%m-%d") >= DATE_FORMAT(NOW(), "%Y-%m-%d") ORDER BY dluo ASC, date_cre ASC, contenancereel_value ASC';
         } else {
             $completeSql = ' ORDER BY date_cre ASC, contenancereel_value ASC';
         }
     } else {
         $sql .= ' WHERE status != "USED" ';
         if (!$conf->global->ASSET_NEGATIVE_DESTOCK) {
             $sql .= ' AND contenancereel_value >= ' . ($qty - $qty_sotck) . ' ';
         }
         // - la quantité déjà utilisé
         if ($is_perishable) {
             $completeSql = ' AND DATE_FORMAT(dluo, "%Y-%m-%d") >= DATE_FORMAT(NOW(), "%Y-%m-%d") ORDER BY dluo ASC, contenancereel_value ASC, date_cre ASC LIMIT 1';
         } else {
             $completeSql = ' ORDER BY contenancereel_value ASC, date_cre ASC LIMIT 1';
         }
     }
     $sql .= ' AND fk_product = ' . $this->fk_product;
     if ($conf->global->USE_LOT_IN_OF) {
         $sql .= ' AND lot_number = "' . $this->lot_number . '"';
     }
     $sql .= $completeSql;
     //echo $sql.'<br>';
     $Tab = $PDOdb->ExecuteAsArray($sql);
     $no_error = true;
     if ($this->type == 'NEEDED' && ($AssetOf->status == 'OPEN' || !$forReal)) {
         if ($qty_stock == $qty) {
             return true;
         }
         //qty_stock = qté déjà utilisé et qty = qté de besoin, donc si egal alors pas besoin de chercher d'autre équipement
         $nbAssetFound = count($Tab);
         $mvmt_stock_already_done = $nbAssetFound > 0 ? true : false;
         $qty_needed = $qty - $qty_stock;
         // - la quantité déjà utilisé
         if ($nbAssetFound == 0 && !$conf->global->ASSET_NEGATIVE_DESTOCK) {
             $AssetOf->errors[] = "La quantité d'équipement pour le produit ID " . $this->fk_product . " dans le lot n°" . $this->lot_number . ", est insuffisante pour la conception du ou des produits à créer.";
             $no_error = false;
         } else {
             //On fait un 1er tour pour vérifier la qté
             $qtyIsEnough = $this->checkAddAssetLink($PDOdb, $Tab, $qty_needed, $forReal, false);
             if (!$qtyIsEnough && !$conf->global->ASSET_NEGATIVE_DESTOCK) {
                 $AssetOf->errors[] = "La quantité d'équipement pour le produit ID " . $this->fk_product . " dans le lot n°" . $this->lot_number . ", est insuffisante pour la conception du ou des produits à créer.";
             } else {
                 $this->checkAddAssetLink($PDOdb, $Tab, $qty_needed, $forReal);
             }
             $no_error = $qtyIsEnough;
         }
     }
     //TODO on créé un équipement si non trouver, voir pour réintégrer ce comportement sur paramétrage
     /*
     		$this->fk_asset = $idAsset;
     		$this->save($PDOdb, $conf);
     */
     if (!$no_error && !$conf->global->ASSET_NEGATIVE_DESTOCK) {
         return false;
     } else {
         return true;
     }
 }