}
     $nb_year_garantie += $prod->array_options['options_duree_garantie_fournisseur'];
     $asset->date_fin_garantie_fourn = strtotime('+' . $nb_year_garantie . 'year', $time_date_recep);
     $asset->date_fin_garantie_fourn = strtotime('+' . $extension_garantie . 'year', $asset->date_fin_garantie_fourn);
     $asset->fk_soc = $commandefourn->socid;
     $fk_entrepot = !empty($line['fk_warehouse']) && $line['fk_warehouse'] > 0 ? $line['fk_warehouse'] : GETPOST('id_entrepot');
     $asset->fk_entrepot = $fk_entrepot;
     $societe = new Societe($db);
     $societe->fetch('', $conf->global->MAIN_INFO_SOCIETE_NOM);
     $asset->fk_societe_localisation = $societe->id;
     $asset->etat = 0;
     //En stock
     //pre($asset,true);exit;
     // Le destockage dans Dolibarr est fait par la fonction de ventilation plus loin, donc désactivation du mouvement créé par l'équipement.
     //				$asset->save($PDOdb, $user,$langs->trans("Asset").' '.$asset->serial_number.' '. $langs->trans("DispatchSupplierOrder",$commandefourn->ref), $line['quantity'], false, $line['fk_product'], false,$fk_entrepot);
     $asset->save($PDOdb, $user, '', 0, false, 0, true, $fk_entrepot);
     @($TAssetVentil[$line['fk_product']][$fk_entrepot] += $line['quantity']);
     /*				$TImport[$k]['numserie'] = $asset->serial_number;
     
     				$stock = new TAssetStock;
     				$stock->mouvement_stock($PDOdb, $user, $asset->getId(), $asset->contenancereel_value, $langs->trans("DispatchSupplierOrder",$commandefourn->ref), $commandefourn->id);
     	*/
     if ($asset->serial_number != $line['numserie']) {
         $receptDetailLine = new TRecepDetail();
         $receptDetailLine->load($PDOdb, $line['commande_fournisseurdet_asset']);
         $receptDetailLine->numserie = $receptDetailLine->serial_number = $asset->serial_number;
         $receptDetailLine->save($PDOdb);
     }
     //Compteur pour chaque produit : 1 équipement = 1 quantité de produit ventilé
     //	$TProdVentil[$asset->fk_product]['qty'] += ($line['quantity']) ? $line['quantity'] : 1;
 }
 private function create_flacon_stock_mouvement(&$PDOdb, &$linedetail, $numref, $fk_soc = 0)
 {
     global $user, $langs, $conf;
     dol_include_once('/asset/class/asset.class.php');
     dol_include_once('/product/class/product.class.php');
     dol_include_once('/expedition/class/expedition.class.php');
     $asset = new TAsset();
     $asset->load($PDOdb, $linedetail->fk_asset);
     if ($conf->global->clilatoxan) {
         $poids_destocke = $this->calcule_poids_destocke($PDOdb, $linedetail);
         $poids_destocke = $poids_destocke * pow(10, $asset->contenancereel_units);
     } else {
         $poids_destocke = $linedetail->weight_reel;
     }
     /*pre($linedetail,true);
     		echo $poids_destocke;exit;*/
     //$asset->contenancereel_value = $asset->contenancereel_value - $poids_destocke;
     $asset->fk_societe_localisation = $fk_soc;
     //Vas destocker l'équipement mais pas dolibarr
     $asset->save($PDOdb, $user, $langs->trans("ShipmentValidatedInDolibarr", $numref), -$poids_destocke, false, 0, true);
     /*$stock = new TAssetStock;
     		$stock->mouvement_stock($PDOdb, $user, $asset->getId(), -$poids_destocke, $langs->trans("ShipmentValidatedInDolibarr",$numref), $linedetail->fk_expeditiondet);
     */
     return $poids_destocke;
 }
 function makeAsset(&$PDOdb, &$AssetOf, $fk_product, $qty_to_make, $idAsset = 0, $lot_number = '')
 {
     global $user, $conf;
     //INFO : si on utilise pas les lots on a pas besoin de créer des équipements => on gère uniquement des mvt de stock
     if (empty($conf->asset->enabled) || empty($conf->global->USE_LOT_IN_OF)) {
         return true;
     }
     if (!dol_include_once('/asset/class/asset.class.php')) {
         return true;
     }
     $assetType = new TAsset_type();
     if ($assetType->load_by_fk_product($PDOdb, $fk_product)) {
         /* On fabrique de la contenance et non pas une quantité de produit au sens strict
          * Si on fabrique un produit au sens strict, le type d'équipement de ce produit aura une contenance max à 1, donc ça marche pareil
          * En revanche, on a un sac de sable à moitier vide, s'il est réutilisable on va le remplir puis en créer si besoin
          *
          * A penser :	   [1] [2] [3]
          * Périsable :		1	0	1
          * Réutilisable :	0	1	1
          *
          * [1] => on crée de nouveaux équipements
          * [2] => on réutilise
          * [3] => si la qté de l'équipement courant = 0 alors on réutilise
          *
          * Dans le process de la validation de la production, les TO_MAKE doivent pré-séléctionner les équipements possibles à la réutilisation
          * Quand on "Termine" l'OF il faudra prendre la liste des équipements liés pour les remplir puis en créer si nécessaire
          */
         $contenance_max = $assetType->contenance_value;
         $nb_asset_to_create = ceil($qty_to_make / $contenance_max);
         //Qté restante a fabriquer
         $qty_to_make_rest = $qty_to_make;
         for ($i = 0; $i < $nb_asset_to_create; $i++) {
             $TAsset = new TAsset();
             $TAsset->fk_soc = $AssetOf->fk_soc;
             $TAsset->fk_societe_localisation = $conf->global->ASSET_DEFAULT_LOCATION;
             $TAsset->fk_product = $fk_product;
             $TAsset->entity = $conf->entity;
             if (!empty($conf->global->ASSET_DEFAULT_DLUO)) {
                 $TAsset->dluo = strtotime(date('Y-m-d') . ' +' . $conf->global->ASSET_DEFAULT_DLUO . ' days');
             } else {
                 $TAsset->dluo = strtotime(date('Y-m-d'));
             }
             //pre($assetType,true);exit;
             $TAsset->fk_asset_type = $assetType->getId();
             $TAsset->load_asset_type($PDOdb);
             if ($qty_to_make_rest > $TAsset->contenance_value) {
                 $qty_to_make_asset = $TAsset->contenance_value;
             } else {
                 $qty_to_make_asset = $qty_to_make_rest;
             }
             $qty_to_make_rest -= $qty_to_make_asset;
             $TAsset->contenancereel_value = $qty_to_make_asset;
             $TAsset->lot_number = $lot_number;
             if (!empty($conf->global->ASSET_USE_DEFAULT_WAREHOUSE)) {
                 $fk_entrepot = $conf->global->ASSET_DEFAULT_WAREHOUSE_ID_TO_MAKE;
             }
             if (!$fk_entrepot) {
                 exit('ASSET_USE_DEFAULT_WAREHOUSE non définis dans la configuration du module');
             }
             $TAsset->fk_entrepot = $fk_entrepot;
             $TAsset->save($PDOdb, '', '', 0, false, 0, true, $fk_entrepot);
             //Save une première fois pour avoir le serial_number + 2ème save pour mvt de stock
             $this->addAssetLink($TAsset);
         }
         return true;
     } else {
         return false;
     }
 }