function createOfAndCommandesFourn(&$PDOdb) { global $db, $user; dol_include_once("fourn/class/fournisseur.commande.class.php"); $TabOF = array(); $TabOF[] = $this->rowid; $this->getListeOFEnfants($PDOdb, $TabOF); // Boucle pour chaque OF de l'arbre foreach ($TabOF as $idOf) { // On charge l'OF $assetOF = new TAssetOF(); $assetOF->load($PDOdb, $idOf); // Boucle pour chaque produit de l'OF foreach ($assetOF->TAssetOFLine as $ofLigne) { //pre($ofLigne,true); // On cherche le produit "TO_MAKE" if ($ofLigne->type == "TO_MAKE") { //pre($ofLigne,true); exit; if ($ofLigne->fk_product_fournisseur_price > 0) { // Fournisseur externe // On récupère la ligne prix fournisseur correspondante $sql = "SELECT rowid, fk_soc, fk_product, price, compose_fourni, quantity, ref_fourn"; $sql .= " FROM " . MAIN_DB_PREFIX . "product_fournisseur_price"; $sql .= " WHERE rowid = " . $ofLigne->fk_product_fournisseur_price; $resql = $db->query($sql); $res = $db->fetch_object($resql); // Si fabrication interne if ($res->compose_fourni) { // On charge le produit "TO_MAKE" $prod = new Product($db); $prod->fetch($ofLigne->fk_product); $prod->load_stock(); $stockProd = 0; // On récupère son stock foreach ($prod->stock_warehouse as $stock) { $stockProd += $stock->real; } // S'il y a suffisemment de stock, on destocke // Sinon, commande fournisseur : if ($stockProd < $ofLigne->qty_needed) { $this->addCommandeFourn($PDOdb, $ofLigne, $res); } else { // Suffisemment de stock, donc destockage : $assetOF->openOF($PDOdb); } } elseif (!$res->compose_fourni) { //Commande Fournisseur $this->addCommandeFourn($PDOdb, $ofLigne, $res); // On récupère les OF enfants pour les supprimer $TabIdEnfantsDirects = $assetOF->getEnfantsDirects(); foreach ($TabIdEnfantsDirects as $idOF) { $assetOF->removeChild("TAssetOF", $idOF); } //Suppression des lignes NEEDED puisque inutiles $assetOF->delLineNeeded($PDOdb); $assetOF->unsetChildDeleted = true; $assetOF->save($PDOdb); // On casse la boucle break; } } else { // Fournisseur interne (Bourguignon) [PH - 14/04/15 - FIXME c'est pas que pour bourguignon ?] if ($ofLigne->fk_product_fournisseur_price == -1) { // Sortie de stock, kill OF enfants $TabIdEnfantsDirects = $assetOF->getEnfantsDirects(); foreach ($TabIdEnfantsDirects as $idOF) { $assetOF->removeChild("TAssetOF", $idOF); } $assetOF->save($PDOdb); // On casse la boucle break; } elseif ($ofLigne->fk_product_fournisseur_price == -2) { // Fabrication interne //[PH] FIXME - pourquoi on destock maintenant ? On valide tt juste l'OF $prod = new Product($db); $prod->fetch($ofLigne->fk_product); $prod->load_stock(); $stockProd = 0; // On récupère son stock foreach ($prod->stock_warehouse as $stock) { $stockProd += $stock->real; } // S'il y a sufisemment de stock, on destocke if ($stockProd >= $ofLigne->qty_needed) { //$assetOF->openOF($PDOdb); $assetOF->status = 'VALID'; } } } } } } }