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