/** * Function called when a Dolibarrr business event is done. * All functions "run_trigger" are triggered if file * is inside directory core/triggers * * @param string $action Event action code * @param Object $object Object * @param User $user Object user * @param Translate $langs Object langs * @param conf $conf Object conf * @return int <0 if KO, 0 if no triggered ran, >0 if OK */ public function run_trigger($action, $object, $user, $langs, $conf) { if ($action === 'ORDER_VALIDATE') { global $conf, $db; if ($conf->global->CREATE_OF_ON_ORDER_VALIDATE) { define('INC_FROM_DOLIBARR', true); dol_include_once('/product/class/product.class.php'); dol_include_once('/of/config.php'); dol_include_once('/of/class/ordre_fabrication_asset.class.php'); $PDOdb = new TPDOdb(); foreach ($object->lines as $line) { // Uniquement si c'est un produit if (!empty($line->fk_product) && $line->fk_product_type == 0) { // On charge le produit pour vérifier son stock $prod = new Product($db); $prod->fetch($line->fk_product); $prod->load_stock(); if ($prod->stock_reel < $line->qty) { $assetOF = new TAssetOF(); $assetOF->fk_commande = $_REQUEST['id']; $assetOF->fk_soc = $object->socid; $assetOF->addLine($PDOdb, $line->fk_product, 'TO_MAKE', $line->qty); $assetOF->save($PDOdb); } } } } } elseif ($action === 'ORDER_CANCEL') { if ($conf->global->DELETE_OF_ON_ORDER_CANCEL) { define('INC_FROM_DOLIBARR', true); dol_include_once('/of/config.php'); dol_include_once('/of/class/ordre_fabrication_asset.class.php'); $PDOdb = new TPDOdb(); // On récupère les identifiants des of créés à partir de cette commande $TID_OF_command = TAssetOF::getTID_OF_command($_REQUEST['id']); foreach ($TID_OF_command as $id_of) { $asset = new TAssetOF(); $asset->load($PDOdb, $id_of); if ($asset->status == "DRAFT" || $asset->status == "VALID") { $asset->delete($PDOdb); } } } } elseif ($action === 'TASK_TIMESPENT_CREATE') { if ($conf->workstation->enabled) { define('INC_FROM_DOLIBARR', true); dol_include_once('/of/config.php'); dol_include_once('/of/class/ordre_fabrication_asset.class.php'); $PDOdb = new TPDOdb(); $PDOdb->Execute("SELECT rowid \n\t\t\t\t\t\tFROM " . MAIN_DB_PREFIX . "asset_workstation_of \n\t\t\t\t\t\tWHERE fk_project_task=" . $object->id); if ($obj = $PDOdb->Get_line()) { $wsof = new TAssetWorkstationOF(); $wsof->load($PDOdb, $obj->rowid); $wsof->nb_hour_real = ($object->duration_effective + $object->timespent_duration) / 3600; // Parce que Dolibarr mets le THM à jour après la création de la tâche :/ $sql = "UPDATE " . MAIN_DB_PREFIX . "projet_task_time"; $sql .= " SET thm = (SELECT thm FROM " . MAIN_DB_PREFIX . "user WHERE rowid = " . $object->timespent_fk_user . ")"; // set average hour rate of user $sql .= " WHERE rowid = " . $object->timespent_id; $object->db->query($sql); $wsof->db =& $object->db; $wsof->save($PDOdb); } } } elseif ($action === 'ORDERSUPPLIER_ADD_LIVRAISON') { global $db; if ($conf->of->enabled) { define('INC_FROM_DOLIBARR', true); dol_include_once('/of/config.php'); dol_include_once('/of/class/ordre_fabrication_asset.class.php'); $resql = $db->query('SELECT fk_statut FROM llx_commande_fournisseur WHERE rowid = ' . $_REQUEST['id']); $res = $db->fetch_object($resql); if ($res->fk_statut == 5) { // La livraison est totale //On cherche l'OF lié $resql = $db->query("SELECT fk_source \n\t\t\t\t\t\t\t\t\t\t\tFROM " . MAIN_DB_PREFIX . "element_element \n\t\t\t\t\t\t\t\t\t\t\tWHERE fk_target = " . $_REQUEST['id'] . " \n\t\t\t\t\t\t\t\t\t\t\t\tAND sourcetype = 'ordre_fabrication' \n\t\t\t\t\t\t\t\t\t\t\t\tAND targettype = 'order_supplier'"); $res = $db->fetch_object($resql); $id_of = $res->fk_source; if ($id_of > 0) { $of = new TAssetOF(); $of->load($PDOdb, $id_of); if ($of->status != 'CLOSE') { $of->closeOF($PDOdb); setEventMessage($langs->trans('OFAttachedClosedAutomatically', '<a href="' . dol_buildpath('/of/fiche_of.php?id=' . $id_of, 2) . '">' . $of->numero . '</a>')); } } } } } return 0; }