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; } }