/**
  *      Function called when a Dolibarrr business event is done.
  *      All functions "run_trigger" are triggered if file is inside directory htdocs/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
  */
 function run_trigger($action, $object, $user, $langs, $conf)
 {
     global $conf, $db;
     if (!defined('INC_FROM_DOLIBARR')) {
         define('INC_FROM_DOLIBARR', true);
     }
     if ($action == 'SHIPPING_VALIDATE') {
         dol_include_once('/dispatch/config.php');
         dol_include_once('/dispatch/class/dispatchdetail.class.php');
         $PDOdb = new TPDOdb();
         // Pour chaque ligne de l'expédition
         foreach ($object->lines as $line) {
             // Chargement de l'objet detail dispatch relié à la ligne d'expédition
             $dd = new TDispatchDetail();
             $TIdExpeditionDet = TRequeteCore::get_id_from_what_you_want($PDOdb, MAIN_DB_PREFIX . 'expeditiondet', array('fk_expedition' => $object->id, 'fk_origin_line' => $line->fk_origin_line));
             $idExpeditionDet = $TIdExpeditionDet[0];
             //if(!empty($idExpeditionDet) && $dd->loadBy($PDOdb, $idExpeditionDet, 'fk_expeditiondet')) {
             if (!empty($idExpeditionDet)) {
                 $dd->loadLines($PDOdb, $idExpeditionDet);
                 if ($conf->asset->enabled) {
                     // Création des mouvements de stock de flacon
                     foreach ($dd->lines as $detail) {
                         // Création du mouvement de stock standard
                         $poids_destocke = $this->create_flacon_stock_mouvement($PDOdb, $detail, $object->ref, empty($object->fk_soc) ? $object->socid : $object->fk_soc);
                         //$this->create_standard_stock_mouvement($line, $poids_destocke, $object->ref);
                         if ($conf->clinomadic->enabled) {
                             $asset = new TAsset();
                             $asset->load($PDOdb, $detail->fk_asset);
                             $prod = new Product($db);
                             $prod->fetch($asset->fk_product);
                             //Affectation du type d'équipement pour avoir accès aux extrafields équipement
                             $asset->fk_asset_type = $asset->get_asset_type($PDOdb, $prod->id);
                             $asset->load_asset_type($PDOdb);
                             //Localisation client
                             $asset->fk_societe_localisation = $object->socid;
                             if (!empty($object->linkedObjects['commande'][0]->array_options['options_duree_pret'])) {
                                 $asset->etat = 2;
                                 //Prêté
                                 $asset->set_date('date_deb_pret', $object->date_valid);
                                 $asset->set_date('date_fin_pret', strtotime('+' . $object->commande[0]->array_options['options_duree_pret'] . 'year', $object->date_valid));
                             } else {
                                 $asset->etat = 1;
                                 //Vendu
                             }
                             foreach ($object->linkedObjects['commande'][0]->lines as $line) {
                                 if ($line->fk_product == $asset->fk_product) {
                                     $extension_garantie = $line->array_options['options_extension_garantie'];
                                 }
                             }
                             $nb_year_garantie += $prod->array_options['options_duree_garantie_client'];
                             $asset->date_fin_garantie_cli = strtotime('+' . $nb_year_garantie . 'year', $object->date_valid);
                             $asset->date_fin_garantie_cli = strtotime('+' . $extension_garantie . 'year', $asset->date_fin_garantie_cli);
                             $asset->save($PDOdb);
                         }
                     }
                 }
                 //exit;
             }
             /* else { // Pas de détail, on déstocke la quantité comme Dolibarr standard
             				$this->create_standard_stock_mouvement($line, $line->qty, $object->ref);
             			}*/
         }
         dol_syslog("Trigger '" . $this->name . "' for action '{$action}' launched by " . __FILE__ . ". id=" . $object->id);
     }
     return 0;
 }
         $TImport = _addCommandedetLine($PDOdb, $TImport, $commandefourn, $product->ref, $line['numserie'], $line['imei'], $line['firmware'], $line['lot_number'], $line['quantity'] ? $line['quantity'] : 1, $line['quantity_unit'], $line['dluo'], $k, $line['entrepot']);
     }
 }
 if (empty($line['numserie'])) {
     setEventMessage("Pas de numéro de série : impossible de créer l'équipement pour " . $line['ref'] . ". Si vous ne voulez pas sérialiser ce produit, supprimez les lignes de numéro de série et faites une réception simple. ", "errors");
 } else {
     if (!$asset->loadReference($PDOdb, $line['numserie'])) {
         // si inexistant
         //Seulement si nouvelle ligne
         if ($k == -1) {
             _addCommandedetLine($PDOdb, $TImport, $commandefourn, $line['ref'], $line['numserie'], $line['$imei'], $line['$firmware'], $line['lot_number'], $line['quantity'], $line['quantity_unit'], null, null, $line['fk_warehouse']);
         }
         $prod = new Product($db);
         $prod->fetch($line['fk_product']);
         //Affectation du type d'équipement pour avoir accès aux extrafields équipement
         $asset->fk_asset_type = $asset->get_asset_type($PDOdb, $prod->id);
         $asset->load_asset_type($PDOdb);
         //echo $asset->getNextValue($PDOdb);
         $asset->fk_product = $line['fk_product'];
         $asset->serial_number = $line['numserie'] ? $line['numserie'] : $asset->getNextValue($PDOdb);
         $asset->lot_number = $line['lot_number'];
         $asset->contenance_value = $line['quantity'] ? $line['quantity'] : 1;
         $asset->contenancereel_value = $line['quantity'] ? $line['quantity'] : 1;
         $asset->contenancereel_units = $line['quantity_unit'] ? $line['quantity_unit'] : 0;
         $asset->contenance_units = $line['quantity_unit'] ? $line['quantity_unit'] : 0;
         $asset->lot_number = $line['lot_number'];
         $asset->firmware = $line['firmware'];
         $asset->imei = $line['imei'];
         $asset->set_date('dluo', $line['dluo']);
         $asset->entity = $conf->entity;
         //$asset->contenancereel_value = 1;