예제 #1
0
 /**
  *	Delete invoice
  *
  *	@param     	int		$rowid      	Id of invoice to delete. If empty, we delete current instance of invoice
  *	@param		int		$notrigger		1=Does not execute triggers, 0= execute triggers
  *	@return		int						<0 if KO, >0 if OK
  */
 function delete($rowid = 0, $notrigger = 0)
 {
     global $user, $langs, $conf;
     require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php";
     if (!$rowid) {
         $rowid = $this->id;
     }
     dol_syslog(get_class($this) . "::delete rowid=" . $rowid, LOG_DEBUG);
     // TODO Test if there is at least on payment. If yes, refuse to delete.
     $error = 0;
     $this->db->begin();
     if (!$error && !$notrigger) {
         // Appel des triggers
         include_once DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php";
         $interface = new Interfaces($this->db);
         $result = $interface->run_triggers('BILL_DELETE', $this, $user, $langs, $conf);
         if ($result < 0) {
             $error++;
             $this->errors = $interface->errors;
         }
         // Fin appel triggers
     }
     if (!$error) {
         // Delete linked object
         $res = $this->deleteObjectLinked();
         if ($res < 0) {
             $error++;
         }
     }
     if (!$error) {
         // If invoice was converted into a discount not yet consumed, we remove discount
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . 'societe_remise_except';
         $sql .= ' WHERE fk_facture_source = ' . $rowid;
         $sql .= ' AND fk_facture_line IS NULL';
         $resql = $this->db->query($sql);
         // If invoice has consumned discounts
         $this->fetch_lines();
         $list_rowid_det = array();
         foreach ($this->lines as $key => $invoiceline) {
             $list_rowid_det[] = $invoiceline->rowid;
         }
         // Consumned discounts are freed
         if (count($list_rowid_det)) {
             $sql = 'UPDATE ' . MAIN_DB_PREFIX . 'societe_remise_except';
             $sql .= ' SET fk_facture = NULL, fk_facture_line = NULL';
             $sql .= ' WHERE fk_facture_line IN (' . join(',', $list_rowid_det) . ')';
             dol_syslog(get_class($this) . "::delete sql=" . $sql);
             if (!$this->db->query($sql)) {
                 $this->error = $this->db->error() . " sql=" . $sql;
                 dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
                 $this->db->rollback();
                 return -5;
             }
         }
         // Delete invoice line
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . 'facturedet WHERE fk_facture = ' . $rowid;
         if ($this->db->query($sql) && $this->delete_linked_contact()) {
             $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . 'facture WHERE rowid = ' . $rowid;
             $resql = $this->db->query($sql);
             if ($resql) {
                 // On efface le repertoire de pdf provisoire
                 $ref = dol_sanitizeFileName($this->ref);
                 if ($conf->facture->dir_output) {
                     $dir = $conf->facture->dir_output . "/" . $ref;
                     $file = $conf->facture->dir_output . "/" . $ref . "/" . $ref . ".pdf";
                     if (file_exists($file)) {
                         $ret = dol_delete_preview($this);
                         if (!dol_delete_file($file, 0, 0, 0, $this)) {
                             $this->error = $langs->trans("ErrorCanNotDeleteFile", $file);
                             $this->db->rollback();
                             return 0;
                         }
                     }
                     if (file_exists($dir)) {
                         if (!dol_delete_dir_recursive($dir)) {
                             $this->error = $langs->trans("ErrorCanNotDeleteDir", $dir);
                             $this->db->rollback();
                             return 0;
                         }
                     }
                 }
                 $this->db->commit();
                 return 1;
             } else {
                 $this->error = $this->db->lasterror() . " sql=" . $sql;
                 dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
                 $this->db->rollback();
                 return -6;
             }
         } else {
             $this->error = $this->db->lasterror() . " sql=" . $sql;
             dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
             $this->db->rollback();
             return -4;
         }
     } else {
         $this->error = $this->db->lasterror();
         dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
         $this->db->rollback();
         return -2;
     }
 }
예제 #2
0
 /**
  *	Delete invoice
  *
  *	@param     	int		$rowid      	Id of invoice to delete. If empty, we delete current instance of invoice
  *	@param		int		$notrigger		1=Does not execute triggers, 0= execute triggers
  *	@param		int		$idwarehouse	Id warehouse to use for stock change.
  *	@return		int						<0 if KO, >0 if OK
  */
 function delete($rowid = 0, $notrigger = 0, $idwarehouse = -1)
 {
     global $user, $langs, $conf;
     require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
     if (empty($rowid)) {
         $rowid = $this->id;
     }
     dol_syslog(get_class($this) . "::delete rowid=" . $rowid, LOG_DEBUG);
     // TODO Test if there is at least one payment. If yes, refuse to delete.
     $error = 0;
     $this->db->begin();
     if (!$error && !$notrigger) {
         // Call trigger
         $result = $this->call_trigger('BILL_DELETE', $user);
         if ($result < 0) {
             $error++;
         }
         // End call triggers
     }
     // Removed extrafields
     if (!$error) {
         $result = $this->deleteExtraFields();
         if ($result < 0) {
             $error++;
             dol_syslog(get_class($this) . "::delete error deleteExtraFields " . $this->error, LOG_ERR);
         }
     }
     if (!$error) {
         // Delete linked object
         $res = $this->deleteObjectLinked();
         if ($res < 0) {
             $error++;
         }
     }
     if (!$error) {
         // If invoice was converted into a discount not yet consumed, we remove discount
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . 'societe_remise_except';
         $sql .= ' WHERE fk_facture_source = ' . $rowid;
         $sql .= ' AND fk_facture_line IS NULL';
         $resql = $this->db->query($sql);
         // If invoice has consumned discounts
         $this->fetch_lines();
         $list_rowid_det = array();
         foreach ($this->lines as $key => $invoiceline) {
             $list_rowid_det[] = $invoiceline->rowid;
         }
         // Consumned discounts are freed
         if (count($list_rowid_det)) {
             $sql = 'UPDATE ' . MAIN_DB_PREFIX . 'societe_remise_except';
             $sql .= ' SET fk_facture = NULL, fk_facture_line = NULL';
             $sql .= ' WHERE fk_facture_line IN (' . join(',', $list_rowid_det) . ')';
             dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
             if (!$this->db->query($sql)) {
                 $this->error = $this->db->error() . " sql=" . $sql;
                 $this->db->rollback();
                 return -5;
             }
         }
         // If we decrement stock on invoice validation, we increment
         if ($this->type != self::TYPE_DEPOSIT && $result >= 0 && !empty($conf->stock->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_BILL) && $idwarehouse != -1) {
             require_once DOL_DOCUMENT_ROOT . '/product/stock/class/mouvementstock.class.php';
             $langs->load("agenda");
             $num = count($this->lines);
             for ($i = 0; $i < $num; $i++) {
                 if ($this->lines[$i]->fk_product > 0) {
                     $mouvP = new MouvementStock($this->db);
                     $mouvP->origin =& $this;
                     // We decrease stock for product
                     if ($this->type == self::TYPE_CREDIT_NOTE) {
                         $result = $mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceDeleteDolibarr", $this->ref));
                     } else {
                         $result = $mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, 0, $langs->trans("InvoiceDeleteDolibarr", $this->ref));
                     }
                     // we use 0 for price, to not change the weighted average value
                 }
             }
         }
         // Delete invoice line
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . 'facturedet WHERE fk_facture = ' . $rowid;
         dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
         if ($this->db->query($sql) && $this->delete_linked_contact()) {
             $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . 'facture WHERE rowid = ' . $rowid;
             dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
             $resql = $this->db->query($sql);
             if ($resql) {
                 // On efface le repertoire de pdf provisoire
                 $ref = dol_sanitizeFileName($this->ref);
                 if ($conf->facture->dir_output && !empty($this->ref)) {
                     $dir = $conf->facture->dir_output . "/" . $ref;
                     $file = $conf->facture->dir_output . "/" . $ref . "/" . $ref . ".pdf";
                     if (file_exists($file)) {
                         $ret = dol_delete_preview($this);
                         if (!dol_delete_file($file, 0, 0, 0, $this)) {
                             $this->error = $langs->trans("ErrorCanNotDeleteFile", $file);
                             $this->db->rollback();
                             return 0;
                         }
                     }
                     if (file_exists($dir)) {
                         if (!dol_delete_dir_recursive($dir)) {
                             $this->error = $langs->trans("ErrorCanNotDeleteDir", $dir);
                             $this->db->rollback();
                             return 0;
                         }
                     }
                 }
                 $this->db->commit();
                 return 1;
             } else {
                 $this->error = $this->db->lasterror() . " sql=" . $sql;
                 $this->db->rollback();
                 return -6;
             }
         } else {
             $this->error = $this->db->lasterror() . " sql=" . $sql;
             $this->db->rollback();
             return -4;
         }
     } else {
         $this->db->rollback();
         return -2;
     }
 }
예제 #3
0
 /**
  *	Delete proposal
  *
  *	@param	User	$user        	Object user that delete
  *	@param	int		$notrigger		1=Does not execute triggers, 0= execuete triggers
  *	@return	int						1 if ok, otherwise if error
  */
 function delete($user, $notrigger = 0)
 {
     global $conf, $langs;
     require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php";
     $error = 0;
     $this->db->begin();
     if (!$error && !$notrigger) {
         // Call triggers
         include_once DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php";
         $interface = new Interfaces($this->db);
         $result = $interface->run_triggers('PROPAL_DELETE', $this, $user, $langs, $conf);
         if ($result < 0) {
             $error++;
             $this->errors = $interface->errors;
         }
         // End call triggers
     }
     if (!$error) {
         $sql = "DELETE FROM " . MAIN_DB_PREFIX . "propaldet WHERE fk_propal = " . $this->id;
         if ($this->db->query($sql)) {
             $sql = "DELETE FROM " . MAIN_DB_PREFIX . "propal WHERE rowid = " . $this->id;
             if ($this->db->query($sql)) {
                 // Delete linked object
                 $res = $this->deleteObjectLinked();
                 if ($res < 0) {
                     $error++;
                 }
                 // Delete linked contacts
                 $res = $this->delete_linked_contact();
                 if ($res < 0) {
                     $error++;
                 }
                 if (!$error) {
                     // We remove directory
                     $ref = dol_sanitizeFileName($this->ref);
                     if ($conf->propal->dir_output) {
                         $dir = $conf->propal->dir_output . "/" . $ref;
                         $file = $dir . "/" . $ref . ".pdf";
                         if (file_exists($file)) {
                             dol_delete_preview($this);
                             if (!dol_delete_file($file, 0, 0, 0, $this)) {
                                 $this->error = 'ErrorFailToDeleteFile';
                                 $this->db->rollback();
                                 return 0;
                             }
                         }
                         if (file_exists($dir)) {
                             $res = @dol_delete_dir_recursive($dir);
                             if (!$res) {
                                 $this->error = 'ErrorFailToDeleteDir';
                                 $this->db->rollback();
                                 return 0;
                             }
                         }
                     }
                 }
                 if (!$error) {
                     dol_syslog(get_class($this) . "::delete {$this->id} by {$user->id}", LOG_DEBUG);
                     $this->db->commit();
                     return 1;
                 } else {
                     $this->error = $this->db->lasterror();
                     dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
                     $this->db->rollback();
                     return 0;
                 }
             } else {
                 $this->error = $this->db->lasterror();
                 dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
                 $this->db->rollback();
                 return -3;
             }
         } else {
             $this->error = $this->db->lasterror();
             dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
             $this->db->rollback();
             return -2;
         }
     } else {
         $this->error = $this->db->lasterror();
         dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
         $this->db->rollback();
         return -1;
     }
 }
예제 #4
0
 /**
  *	Delete proposal
  *
  *	@param	User	$user        	Object user that delete
  *	@param	int		$notrigger		1=Does not execute triggers, 0= execuete triggers
  *	@return	int						1 if ok, otherwise if error
  */
 function delete($user, $notrigger = 0)
 {
     global $conf, $langs;
     require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
     $error = 0;
     $this->db->begin();
     if (!$notrigger) {
         // Call trigger
         $result = $this->call_trigger('PROPAL_DELETE', $user);
         if ($result < 0) {
             $error++;
         }
         // End call triggers
     }
     if (!$error) {
         $sql = "DELETE FROM " . MAIN_DB_PREFIX . "propaldet WHERE fk_propal = " . $this->id;
         if ($this->db->query($sql)) {
             $sql = "DELETE FROM " . MAIN_DB_PREFIX . "propal WHERE rowid = " . $this->id;
             if ($this->db->query($sql)) {
                 // Delete linked object
                 $res = $this->deleteObjectLinked();
                 if ($res < 0) {
                     $error++;
                 }
                 // Delete linked contacts
                 $res = $this->delete_linked_contact();
                 if ($res < 0) {
                     $error++;
                 }
                 if (!$error) {
                     // We remove directory
                     $ref = dol_sanitizeFileName($this->ref);
                     if ($conf->propal->dir_output && !empty($this->ref)) {
                         $dir = $conf->propal->dir_output . "/" . $ref;
                         $file = $dir . "/" . $ref . ".pdf";
                         if (file_exists($file)) {
                             dol_delete_preview($this);
                             if (!dol_delete_file($file, 0, 0, 0, $this)) {
                                 $this->error = 'ErrorFailToDeleteFile';
                                 $this->errors = array('ErrorFailToDeleteFile');
                                 $this->db->rollback();
                                 return 0;
                             }
                         }
                         if (file_exists($dir)) {
                             $res = @dol_delete_dir_recursive($dir);
                             if (!$res) {
                                 $this->error = 'ErrorFailToDeleteDir';
                                 $this->errors = array('ErrorFailToDeleteDir');
                                 $this->db->rollback();
                                 return 0;
                             }
                         }
                     }
                 }
                 // Removed extrafields
                 if (!$error) {
                     if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) {
                         $result = $this->deleteExtraFields();
                         if ($result < 0) {
                             $error++;
                             $errorflag = -4;
                             dol_syslog(get_class($this) . "::delete erreur " . $errorflag . " " . $this->error, LOG_ERR);
                         }
                     }
                 }
                 if (!$error) {
                     dol_syslog(get_class($this) . "::delete " . $this->id . " by " . $user->id, LOG_DEBUG);
                     $this->db->commit();
                     return 1;
                 } else {
                     $this->error = $this->db->lasterror();
                     $this->db->rollback();
                     return 0;
                 }
             } else {
                 $this->error = $this->db->lasterror();
                 $this->db->rollback();
                 return -3;
             }
         } else {
             $this->error = $this->db->lasterror();
             $this->db->rollback();
             return -2;
         }
     } else {
         $this->db->rollback();
         return -1;
     }
 }
예제 #5
0
 /**
  *	Delete the customer order
  *
  *	@param	User	$user		User object
  *	@param	int		$notrigger	1=Does not execute triggers, 0= execuete triggers
  * 	@return	int					<=0 if KO, >0 if OK
  */
 function delete($user, $notrigger = 0)
 {
     global $conf, $langs;
     require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
     $error = 0;
     $this->db->begin();
     if (!$error && !$notrigger) {
         // Call trigger
         $result = $this->call_trigger('ORDER_DELETE', $user);
         if ($result < 0) {
             $error++;
         }
         // End call triggers
     }
     //TODO: Check for error after each action. If one failed we rollback, don't waste time to do action if previous fail
     if (!$error) {
         // Delete order details
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . "commandedet WHERE fk_commande = " . $this->id;
         dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
         if (!$this->db->query($sql)) {
             $error++;
             $this->errors[] = $this->db->lasterror();
         }
         // Delete order
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . "commande WHERE rowid = " . $this->id;
         dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
         if (!$this->db->query($sql)) {
             $error++;
             $this->errors[] = $this->db->lasterror();
         }
         // Delete linked object
         $res = $this->deleteObjectLinked();
         if ($res < 0) {
             $error++;
         }
         // Delete linked contacts
         $res = $this->delete_linked_contact();
         if ($res < 0) {
             $error++;
         }
         // Remove extrafields
         if (!$error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) {
             $result = $this->deleteExtraFields();
             if ($result < 0) {
                 $error++;
                 dol_syslog(get_class($this) . "::delete error -4 " . $this->error, LOG_ERR);
             }
         }
         // On efface le repertoire de pdf provisoire
         $comref = dol_sanitizeFileName($this->ref);
         if ($conf->commande->dir_output && !empty($this->ref)) {
             $dir = $conf->commande->dir_output . "/" . $comref;
             $file = $conf->commande->dir_output . "/" . $comref . "/" . $comref . ".pdf";
             if (file_exists($file)) {
                 dol_delete_preview($this);
                 if (!dol_delete_file($file, 0, 0, 0, $this)) {
                     $this->db->rollback();
                     return 0;
                 }
             }
             if (file_exists($dir)) {
                 if (!dol_delete_dir_recursive($dir)) {
                     $this->error = $langs->trans("ErrorCanNotDeleteDir", $dir);
                     $this->db->rollback();
                     return 0;
                 }
             }
         }
     }
     if (!$error) {
         dol_syslog(get_class($this) . "::delete {$this->id} by {$user->id}", LOG_DEBUG);
         $this->db->commit();
         return 1;
     } else {
         foreach ($this->errors as $errmsg) {
             dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR);
             $this->error .= $this->error ? ', ' . $errmsg : $errmsg;
         }
         $this->db->rollback();
         return -1 * $error;
     }
 }
예제 #6
0
/**
 *  Create a document onto disk according to template module.
 *
 *	@param	DoliDB		$db  			Database handler
 *	@param  Object		$object			Object invoice
 *	@param	string		$modele			Force template to use ('' to not force)
 *	@param	Translate	$outputlangs	objet lang a utiliser pour traduction
 *  @param  int			$hidedetails    Hide details of lines
 *  @param  int			$hidedesc       Hide description
 *  @param  int			$hideref        Hide ref
 *  @param  HookManager	$hookmanager	Hook manager instance
 *	@return int        					<0 if KO, >0 if OK
 */
function facture_pdf_create($db, $object, $modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $hookmanager = false)
{
    global $conf, $user, $langs;
    $langs->load("bills");
    $error = 0;
    // Increase limit for PDF build
    $err = error_reporting();
    error_reporting(0);
    @set_time_limit(120);
    error_reporting($err);
    $srctemplatepath = '';
    // Positionne le modele sur le nom du modele a utiliser
    if (!dol_strlen($modele)) {
        if (!empty($conf->global->FACTURE_ADDON_PDF)) {
            $modele = $conf->global->FACTURE_ADDON_PDF;
        } else {
            $modele = 'crabe';
        }
    }
    // If selected modele is a filename template (then $modele="modelname:filename")
    $tmp = explode(':', $modele, 2);
    if (!empty($tmp[1])) {
        $modele = $tmp[0];
        $srctemplatepath = $tmp[1];
    }
    // Search template files
    $file = '';
    $classname = '';
    $filefound = 0;
    $dirmodels = array('/');
    if (is_array($conf->modules_parts['models'])) {
        $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
    }
    foreach ($dirmodels as $reldir) {
        foreach (array('doc', 'pdf') as $prefix) {
            $file = $prefix . "_" . $modele . ".modules.php";
            // On verifie l'emplacement du modele
            $file = dol_buildpath($reldir . "core/modules/facture/doc/" . $file, 0);
            if (file_exists($file)) {
                $filefound = 1;
                $classname = $prefix . '_' . $modele;
                break;
            }
        }
        if ($filefound) {
            break;
        }
    }
    // Charge le modele
    if ($filefound) {
        require_once $file;
        $obj = new $classname($db);
        // We save charset_output to restore it because write_file can change it if needed for
        // output format that does not support UTF8.
        $sav_charset_output = $outputlangs->charset_output;
        if ($obj->write_file($object, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref, $hookmanager) > 0) {
            $outputlangs->charset_output = $sav_charset_output;
            // We delete old preview
            require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php";
            dol_delete_preview($object);
            // Success in building document. We build meta file.
            dol_meta_create($object);
            // Appel des triggers
            include_once DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php";
            $interface = new Interfaces($db);
            $result = $interface->run_triggers('BILL_BUILDDOC', $object, $user, $langs, $conf);
            if ($result < 0) {
                $error++;
                $this->errors = $interface->errors;
            }
            // Fin appel triggers
            return 1;
        } else {
            $outputlangs->charset_output = $sav_charset_output;
            dol_print_error($db, "facture_pdf_create Error: " . $obj->error);
            return -1;
        }
    } else {
        dol_print_error('', $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $file));
        return -1;
    }
}
예제 #7
0
 /**
  *	Delete intervetnion
  *
  *	@param      User	$user			Object user who delete
  *	@param		int		$notrigger		Disable trigger
  *	@return		int						<0 if KO, >0 if OK
  */
 function delete($user, $notrigger = 0)
 {
     global $conf, $langs;
     require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
     $error = 0;
     $this->db->begin();
     // Delete linked object
     $res = $this->deleteObjectLinked();
     if ($res < 0) {
         $error++;
     }
     // Delete linked contacts
     $res = $this->delete_linked_contact();
     if ($res < 0) {
         $this->error = 'ErrorFailToDeleteLinkedContact';
         $error++;
     }
     if ($error) {
         $this->db->rollback();
         return -1;
     }
     $sql = "DELETE FROM " . MAIN_DB_PREFIX . "fichinterdet";
     $sql .= " WHERE fk_fichinter = " . $this->id;
     dol_syslog("Fichinter::delete", LOG_DEBUG);
     if ($this->db->query($sql)) {
         $sql = "DELETE FROM " . MAIN_DB_PREFIX . "fichinter";
         $sql .= " WHERE rowid = " . $this->id;
         $sql .= " AND entity = " . $conf->entity;
         dol_syslog("Fichinter::delete", LOG_DEBUG);
         if ($this->db->query($sql)) {
             // Remove directory with files
             $fichinterref = dol_sanitizeFileName($this->ref);
             if ($conf->ficheinter->dir_output) {
                 $dir = $conf->ficheinter->dir_output . "/" . $fichinterref;
                 $file = $conf->ficheinter->dir_output . "/" . $fichinterref . "/" . $fichinterref . ".pdf";
                 if (file_exists($file)) {
                     dol_delete_preview($this);
                     if (!dol_delete_file($file, 0, 0, 0, $this)) {
                         $this->error = $langs->trans("ErrorCanNotDeleteFile", $file);
                         return 0;
                     }
                 }
                 if (file_exists($dir)) {
                     if (!dol_delete_dir_recursive($dir)) {
                         $this->error = $langs->trans("ErrorCanNotDeleteDir", $dir);
                         return 0;
                     }
                 }
             }
             if (!$notrigger) {
                 // Call trigger
                 $result = $this->call_trigger('FICHINTER_DELETE', $user);
                 if ($result < 0) {
                     $error++;
                     $this->db->rollback();
                     return -1;
                 }
                 // End call triggers
             }
             $this->db->commit();
             return 1;
         } else {
             $this->error = $this->db->lasterror();
             $this->db->rollback();
             return -2;
         }
     } else {
         $this->error = $this->db->lasterror();
         $this->db->rollback();
         return -1;
     }
 }
/**
 *	Cree un don sur disque en fonction du modele de DON_ADDON_PDF
 *
 *	@param	DoliDB		$db  			Databse handler
 *	@param	int			$id				Id donation
 *	@param	string		$message		Message
 *	@param	string		$modele			Force le modele a utiliser ('' par defaut)
 *	@param	Translate	$outputlangs	Object langs
 *  @param  int			$hidedetails    Hide details of lines
 *  @param  int			$hidedesc       Hide description
 *  @param  int			$hideref        Hide ref
 *	@return int         				0 if KO, 1 if OK
 */
function don_create($db, $id, $message, $modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0)
{
    global $conf, $langs;
    $langs->load("bills");
    $eror = 0;
    // Increase limit for PDF build
    $err = error_reporting();
    error_reporting(0);
    @set_time_limit(120);
    error_reporting($err);
    $srctemplatepath = '';
    // Set template to use
    if (!dol_strlen($modele)) {
        if (!empty($conf->global->DON_ADDON_MODEL)) {
            $modele = $conf->global->DON_ADDON_MODEL;
        } else {
            print $langs->trans("Error") . " " . $langs->trans("Error_DON_ADDON_MODEL_NotDefined");
            return 0;
        }
    }
    // If selected modele is a filename template (then $modele="modelname:filename")
    $tmp = explode(':', $modele, 2);
    if (!empty($tmp[1])) {
        $modele = $tmp[0];
        $srctemplatepath = $tmp[1];
    }
    // Search template files
    $file = '';
    $classname = '';
    $filefound = 0;
    $dirmodels = array('/');
    if (is_array($conf->modules_parts['models'])) {
        $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
    }
    foreach ($dirmodels as $reldir) {
        foreach (array('html', 'doc', 'pdf') as $prefix) {
            $file = $prefix . "_" . preg_replace('/^html_/', '', $modele) . ".modules.php";
            // On verifie l'emplacement du modele
            $file = dol_buildpath($reldir . "core/modules/dons/" . $file, 0);
            if (file_exists($file)) {
                $filefound = 1;
                $classname = $prefix . '_' . $modele;
                break;
            }
        }
        if ($filefound) {
            break;
        }
    }
    // Charge le modele
    if ($filefound) {
        require_once $file;
        $object = new Don($db);
        $object->fetch($id);
        $classname = $modele;
        $obj = new $classname($db);
        // We save charset_output to restore it because write_file can change it if needed for
        // output format that does not support UTF8.
        $sav_charset_output = $outputlangs->charset_output;
        if ($obj->write_file($object, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref) > 0) {
            $outputlangs->charset_output = $sav_charset_output;
            // we delete preview files
            require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
            dol_delete_preview($object);
            return 1;
        } else {
            $outputlangs->charset_output = $sav_charset_output;
            dol_syslog("Erreur dans don_create");
            dol_print_error($db, $obj->error);
            return 0;
        }
    } else {
        print $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $file);
        return 0;
    }
}
예제 #9
0
/**
 *	Cree un don sur disque en fonction du modele de DON_ADDON_PDF
 *
 *	@param	DoliDB		$db  			Databse handler
 *	@param	int			$id				Id donation
 *	@param	string		$message		Message
 *	@param	string		$modele			Force le modele a utiliser ('' par defaut)
 *	@param	Translate	$outputlangs	Object langs
 *	@return int         				0 if KO, 1 if OK
 */
function don_create($db, $id, $message, $modele, $outputlangs)
{
    global $conf, $langs;
    $langs->load("bills");
    $dir = DOL_DOCUMENT_ROOT . "/core/modules/dons/";
    // Set template to use
    if (!dol_strlen($modele)) {
        if ($conf->global->DON_ADDON_MODEL) {
            $modele = $conf->global->DON_ADDON_MODEL;
        } else {
            print $langs->trans("Error") . " " . $langs->trans("Error_DON_ADDON_MODEL_NotDefined");
            return 0;
        }
    }
    // Charge le modele
    $file = $modele . ".modules.php";
    if (file_exists($dir . $file)) {
        $object = new Don($db);
        $object->fetch($id);
        require_once $dir . $file;
        $classname = $modele;
        $module = new $classname($db);
        // We save charset_output to restore it because write_file can change it if needed for
        // output format that does not support UTF8.
        $sav_charset_output = $outputlangs->charset_output;
        if ($module->write_file($object, $outputlangs) > 0) {
            $outputlangs->charset_output = $sav_charset_output;
            // we delete preview files
            require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php";
            dol_delete_preview($object);
            return 1;
        } else {
            $outputlangs->charset_output = $sav_charset_output;
            dol_syslog("Erreur dans don_create");
            dol_print_error($db, $module->error);
            return 0;
        }
    } else {
        print $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $dir . $file);
        return 0;
    }
}
예제 #10
0
 /**
  * Common function for all objects extending CommonObject for generating documents
  *
  * @param 	string 		$modelspath 	Relative folder where generators are placed
  * @param 	string 		$modele 		Generator to use. Caller must set it to obj->modelpdf or GETPOST('modelpdf') for example.
  * @param 	Translate 	$outputlangs 	Language to use
  * @param 	int 		$hidedetails 	1 to hide details. 0 by default
  * @param 	int 		$hidedesc 		1 to hide product description. 0 by default
  * @param 	int 		$hideref 		1 to hide product reference. 0 by default
  * @return 	int 						>0 if OK, <0 if KO
  */
 protected function commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref)
 {
     global $conf, $langs;
     $srctemplatepath = '';
     // Increase limit for PDF build
     $err = error_reporting();
     error_reporting(0);
     @set_time_limit(120);
     error_reporting($err);
     // If selected model is a filename template (then $modele="modelname" or "modelname:filename")
     $tmp = explode(':', $modele, 2);
     if (!empty($tmp[1])) {
         $modele = $tmp[0];
         $srctemplatepath = $tmp[1];
     }
     // Search template files
     $file = '';
     $classname = '';
     $filefound = 0;
     $dirmodels = array('/');
     if (is_array($conf->modules_parts['models'])) {
         $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
     }
     foreach ($dirmodels as $reldir) {
         foreach (array('doc', 'pdf') as $prefix) {
             $file = $prefix . "_" . $modele . ".modules.php";
             // On verifie l'emplacement du modele
             $file = dol_buildpath($reldir . $modelspath . $file, 0);
             if (file_exists($file)) {
                 $filefound = 1;
                 $classname = $prefix . '_' . $modele;
                 break;
             }
         }
         if ($filefound) {
             break;
         }
     }
     // If generator was found
     if ($filefound) {
         require_once $file;
         $obj = new $classname($this->db);
         // If generator is ODT, we must have srctemplatepath defined, if not we set it.
         if ($obj->type == 'odt' && empty($srctemplatepath)) {
             $varfortemplatedir = $obj->scandir;
             if ($varfortemplatedir && !empty($conf->global->{$varfortemplatedir})) {
                 $dirtoscan = $conf->global->{$varfortemplatedir};
                 $listoffiles = array();
                 // Now we add first model found in directories scanned
                 $listofdir = explode(',', $dirtoscan);
                 foreach ($listofdir as $key => $tmpdir) {
                     $tmpdir = trim($tmpdir);
                     $tmpdir = preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir);
                     if (!$tmpdir) {
                         unset($listofdir[$key]);
                         continue;
                     }
                     if (is_dir($tmpdir)) {
                         $tmpfiles = dol_dir_list($tmpdir, 'files', 0, '\\.od(s|t)$', '', 'name', SORT_ASC, 0);
                         if (count($tmpfiles)) {
                             $listoffiles = array_merge($listoffiles, $tmpfiles);
                         }
                     }
                 }
                 if (count($listoffiles)) {
                     foreach ($listoffiles as $record) {
                         $srctemplatepath = $record['fullname'];
                         break;
                     }
                 }
             }
             if (empty($srctemplatepath)) {
                 $this->error = 'ErrorGenerationAskedForOdtTemplateWithSrcFileNotDefined';
                 return -1;
             }
         }
         if ($obj->type == 'odt' && !empty($srctemplatepath)) {
             if (!dol_is_file($srctemplatepath)) {
                 $this->error = 'ErrorGenerationAskedForOdtTemplateWithSrcFileNotFound';
                 return -1;
             }
         }
         // We save charset_output to restore it because write_file can change it if needed for
         // output format that does not support UTF8.
         $sav_charset_output = $outputlangs->charset_output;
         if ($obj->write_file($this, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref) > 0) {
             $outputlangs->charset_output = $sav_charset_output;
             // We delete old preview
             require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
             dol_delete_preview($this);
             // Success in building document. We build meta file.
             dol_meta_create($this);
             return 1;
         } else {
             $outputlangs->charset_output = $sav_charset_output;
             dol_print_error($this->db, "Error generating document for " . __CLASS__ . ". Error: " . $obj->error, $obj->errors);
             return -1;
         }
     } else {
         $this->error = $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $file);
         dol_print_error('', $this->error);
         return -1;
     }
 }
예제 #11
0
/**
 *  Create an intervention document on disk using template defined into FICHEINTER_ADDON_PDF
 *
 *  @param	DoliDB		$db  			objet base de donnee
 *  @param	Object		$object			Object fichinter
 *  @param	string		$modele			force le modele a utiliser ('' par defaut)
 *  @param	Translate	$outputlangs	objet lang a utiliser pour traduction
 *  @param  int			$hidedetails    Hide details of lines
 *  @param  int			$hidedesc       Hide description
 *  @param  int			$hideref        Hide ref
 *  @return int         				0 if KO, 1 if OK
 */
function fichinter_create($db, $object, $modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0)
{
    global $conf, $langs, $user;
    $langs->load("ficheinter");
    $error = 0;
    $srctemplatepath = '';
    // Positionne modele sur le nom du modele de fichinter a utiliser
    if (!dol_strlen($modele)) {
        if (!empty($conf->global->FICHEINTER_ADDON_PDF)) {
            $modele = $conf->global->FICHEINTER_ADDON_PDF;
        } else {
            $modele = 'soleil';
        }
    }
    // If selected modele is a filename template (then $modele="modelname:filename")
    $tmp = explode(':', $modele, 2);
    if (!empty($tmp[1])) {
        $modele = $tmp[0];
        $srctemplatepath = $tmp[1];
    }
    // Search template files
    $file = '';
    $classname = '';
    $filefound = 0;
    $dirmodels = array('/');
    if (is_array($conf->modules_parts['models'])) {
        $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
    }
    foreach ($dirmodels as $reldir) {
        foreach (array('doc', 'pdf') as $prefix) {
            $file = $prefix . "_" . $modele . ".modules.php";
            // On verifie l'emplacement du modele
            $file = dol_buildpath($reldir . "core/modules/fichinter/doc/" . $file, 0);
            if (file_exists($file)) {
                $filefound = 1;
                $classname = $prefix . '_' . $modele;
                break;
            }
        }
        if ($filefound) {
            break;
        }
    }
    // Charge le modele
    if ($filefound) {
        require_once $file;
        $obj = new $classname($db);
        // We save charset_output to restore it because write_file can change it if needed for
        // output format that does not support UTF8.
        $sav_charset_output = $outputlangs->charset_output;
        if ($obj->write_file($object, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref) > 0) {
            $outputlangs->charset_output = $sav_charset_output;
            // We delete old preview
            require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
            dol_delete_preview($object);
            return 1;
        } else {
            $outputlangs->charset_output = $sav_charset_output;
            dol_print_error($db, "fichinter_pdf_create Error: " . $obj->error);
            return 0;
        }
    } else {
        print $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $file);
        return 0;
    }
}
/**
 *	Create object on disk
 *
 *	@param	DoliDB		$db  			objet base de donnee
 *	@param	Object		$object			object delivery
 *	@param	string		$modele			force le modele a utiliser ('' to not force)
 *	@param	Translate	$outputlangs	objet lang a utiliser pour traduction
 *  @return int         				0 if KO, 1 if OK
 */
function delivery_order_pdf_create($db, $object, $modele, $outputlangs = '')
{
    global $conf, $user, $langs;
    $langs->load("deliveries");
    $error = 0;
    $srctemplatepath = '';
    // Positionne modele sur le nom du modele de bon de livraison a utiliser
    if (!dol_strlen($modele)) {
        if (!empty($conf->global->LIVRAISON_ADDON_PDF)) {
            $modele = $conf->global->LIVRAISON_ADDON_PDF;
        } else {
            $modele = 'typhon';
        }
    }
    // If selected modele is a filename template (then $modele="modelname:filename")
    $tmp = explode(':', $modele, 2);
    if (!empty($tmp[1])) {
        $modele = $tmp[0];
        $srctemplatepath = $tmp[1];
    }
    // Search template files
    $file = '';
    $classname = '';
    $filefound = 0;
    $dirmodels = array('/');
    if (is_array($conf->modules_parts['models'])) {
        $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
    }
    foreach ($dirmodels as $reldir) {
        foreach (array('doc', 'pdf') as $prefix) {
            $file = $prefix . "_" . $modele . ".modules.php";
            // On verifie l'emplacement du modele
            $file = dol_buildpath($reldir . "core/modules/livraison/pdf/" . $file, 0);
            if (file_exists($file)) {
                $filefound = 1;
                $classname = $prefix . '_' . $modele;
                break;
            }
        }
        if ($filefound) {
            break;
        }
    }
    // Charge le modele
    if ($filefound) {
        require_once $file;
        $obj = new $classname($db);
        // We save charset_output to restore it because write_file can change it if needed for
        // output format that does not support UTF8.
        $sav_charset_output = $outputlangs->charset_output;
        if ($obj->write_file($object, $outputlangs) > 0) {
            $outputlangs->charset_output = $sav_charset_output;
            // we delete preview files
            require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
            dol_delete_preview($object);
            // Appel des triggers
            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
            $interface = new Interfaces($db);
            $result = $interface->run_triggers('DELIVERY_BUILDDOC', $object, $user, $langs, $conf);
            if ($result < 0) {
                $error++;
                $obj->errors = $interface->errors;
            }
            // Fin appel triggers
            return 1;
        } else {
            $outputlangs->charset_output = $sav_charset_output;
            dol_syslog("Erreur dans delivery_order_pdf_create");
            dol_print_error($db, $obj->error);
            return 0;
        }
    } else {
        print $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $file);
        return 0;
    }
}
/**
 *	Create a document onto disk according to template model.
 *
 *	@param	    DoliDB		$db  			Database handler
 *	@param	    Object		$object			Object supplier invoice
 *	@param	    string		$modele			Force template to use ('' to not force)
 *	@param		Translate	$outputlangs	Object lang a utiliser pour traduction
 *  @param      int			$hidedetails    Hide details of lines
 *  @param      int			$hidedesc       Hide description
 *  @param      int			$hideref        Hide ref
 *  @return     int         				0 if KO, 1 if OK
 */
function supplier_invoice_pdf_create($db, $object, $modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0)
{
    global $conf, $user, $langs;
    $langs->load("suppliers");
    $error = 0;
    // Increase limit for PDF build
    $err = error_reporting();
    error_reporting(0);
    @set_time_limit(120);
    error_reporting($err);
    $srctemplatepath = '';
    // Set the model on the model name to use
    if (!dol_strlen($modele)) {
        if (!empty($conf->global->INVOICE_SUPPLIER_ADDON_PDF)) {
            $modele = $conf->global->INVOICE_SUPPLIER_ADDON_PDF;
        } else {
            $modele = 'canelle';
        }
    }
    // If selected modele is a filename template (then $modele="modelname:filename")
    $tmp = explode(':', $modele, 2);
    if (!empty($tmp[1])) {
        $modele = $tmp[0];
        $srctemplatepath = $tmp[1];
    }
    // Search template files
    $file = '';
    $classname = '';
    $filefound = 0;
    $dirmodels = array('/');
    if (is_array($conf->modules_parts['models'])) {
        $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
    }
    foreach ($dirmodels as $reldir) {
        foreach (array('doc', 'pdf') as $prefix) {
            $file = $prefix . "_" . $modele . ".modules.php";
            // We checked the location of the model
            $file = dol_buildpath($reldir . "core/modules/supplier_invoice/pdf/" . $file, 0);
            if (file_exists($file)) {
                $filefound = 1;
                $classname = $prefix . '_' . $modele;
                break;
            }
        }
        if ($filefound) {
            break;
        }
    }
    // Load the model
    if ($filefound) {
        require_once $file;
        $obj = new $classname($db, $object);
        // We save charset_output to restore it because write_file can change it if needed for
        // output format that does not support UTF8.
        $sav_charset_output = $outputlangs->charset_output;
        if ($obj->write_file($object, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref) > 0) {
            $outputlangs->charset_output = $sav_charset_output;
            // we delete preview files
            require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
            dol_delete_preview($object);
            // Calls triggers
            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
            $interface = new Interfaces($db);
            $result = $interface->run_triggers('BILL_SUPPLIER_BUILDDOC', $object, $user, $langs, $conf);
            if ($result < 0) {
                $error++;
                $obj->errors = $interface->errors;
            }
            // End calls triggers
            return 1;
        } else {
            $outputlangs->charset_output = $sav_charset_output;
            dol_syslog("Erreur dans supplier_invoice_pdf_create");
            dol_print_error($db, $obj->error);
            return 0;
        }
    } else {
        if (!$conf->global->INVOICE_SUPPLIER_ADDON_PDF) {
            print $langs->trans("Error") . " " . $langs->trans("Error_INVOICE_SUPPLIER_ADDON_PDF_NotDefined");
        } else {
            print $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $file);
        }
        return 0;
    }
}
예제 #14
0
 /**
  *	Delete the customer order
  *
  *	@param	User	$user		User object
  *	@param	int		$notrigger	1=Does not execute triggers, 0= execuete triggers
  * 	@return	int					<=0 if KO, >0 if OK
  */
 function delete($user, $notrigger = 0)
 {
     global $conf, $langs;
     require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php";
     $error = 0;
     $this->db->begin();
     if (!$error && !$notrigger) {
         // Appel des triggers
         include_once DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php";
         $interface = new Interfaces($this->db);
         $result = $interface->run_triggers('ORDER_DELETE', $this, $user, $langs, $conf);
         if ($result < 0) {
             $error++;
             $this->errors = $interface->errors;
         }
         // Fin appel triggers
     }
     if (!$error) {
         // Delete order details
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . "commandedet WHERE fk_commande = " . $this->id;
         dol_syslog(get_class($this) . "::delete sql=" . $sql);
         if (!$this->db->query($sql)) {
             dol_syslog(get_class($this) . "::delete error", LOG_ERR);
             $error++;
         }
         // Delete order
         $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . "commande WHERE rowid = " . $this->id;
         dol_syslog(get_class($this) . "::delete sql=" . $sql, LOG_DEBUG);
         if (!$this->db->query($sql)) {
             dol_syslog(get_class($this) . "::delete error", LOG_ERR);
             $error++;
         }
         // Delete linked object
         $res = $this->deleteObjectLinked();
         if ($res < 0) {
             $error++;
         }
         // Delete linked contacts
         $res = $this->delete_linked_contact();
         if ($res < 0) {
             $error++;
         }
         // On efface le repertoire de pdf provisoire
         $comref = dol_sanitizeFileName($this->ref);
         if ($conf->commande->dir_output) {
             $dir = $conf->commande->dir_output . "/" . $comref;
             $file = $conf->commande->dir_output . "/" . $comref . "/" . $comref . ".pdf";
             if (file_exists($file)) {
                 dol_delete_preview($this);
                 if (!dol_delete_file($file, 0, 0, 0, $this)) {
                     $this->error = $langs->trans("ErrorCanNotDeleteFile", $file);
                     $this->db->rollback();
                     return 0;
                 }
             }
             if (file_exists($dir)) {
                 if (!dol_delete_dir_recursive($dir)) {
                     $this->error = $langs->trans("ErrorCanNotDeleteDir", $dir);
                     $this->db->rollback();
                     return 0;
                 }
             }
         }
     }
     if (!$error) {
         dol_syslog(get_class($this) . "::delete {$this->id} by {$user->id}", LOG_DEBUG);
         $this->db->commit();
         return 1;
     } else {
         $this->error = $this->db->lasterror();
         dol_syslog(get_class($this) . "::delete " . $this->error, LOG_ERR);
         $this->db->rollback();
         return -1;
     }
 }
예제 #15
0
 /**
  * Common function for all objects extending CommonObject for generating documents
  *
  * @param 	string 		$modelspath Relative folder where models are placed
  * @param 	string 		$modele Model to use
  * @param 	Translate 	$outputlangs Language to use
  * @param 	int 		$hidedetails 1 to hide details. 0 by default
  * @param 	int 		$hidedesc 1 to hide product description. 0 by default
  * @param 	int 		$hideref 1 to hide product reference. 0 by default
  * @return 	int 		1 if OK -1 if KO
  */
 protected function commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref)
 {
     global $conf, $langs;
     $srctemplatepath = '';
     // Increase limit for PDF build
     $err = error_reporting();
     error_reporting(0);
     @set_time_limit(120);
     error_reporting($err);
     // If selected modele is a filename template (then $modele="modelname:filename")
     $tmp = explode(':', $modele, 2);
     if (!empty($tmp[1])) {
         $modele = $tmp[0];
         $srctemplatepath = $tmp[1];
     }
     // Search template files
     $file = '';
     $classname = '';
     $filefound = 0;
     $dirmodels = array('/');
     if (is_array($conf->modules_parts['models'])) {
         $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
     }
     foreach ($dirmodels as $reldir) {
         foreach (array('doc', 'pdf') as $prefix) {
             $file = $prefix . "_" . $modele . ".modules.php";
             // On verifie l'emplacement du modele
             $file = dol_buildpath($reldir . $modelspath . $file, 0);
             if (file_exists($file)) {
                 $filefound = 1;
                 $classname = $prefix . '_' . $modele;
                 break;
             }
         }
         if ($filefound) {
             break;
         }
     }
     // Charge le modele
     if ($filefound) {
         require_once $file;
         $obj = new $classname($this->db);
         //$obj->message = $message;
         // We save charset_output to restore it because write_file can change it if needed for
         // output format that does not support UTF8.
         $sav_charset_output = $outputlangs->charset_output;
         if ($obj->write_file($this, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref) > 0) {
             $outputlangs->charset_output = $sav_charset_output;
             // We delete old preview
             require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
             dol_delete_preview($this);
             // Success in building document. We build meta file.
             dol_meta_create($this);
             return 1;
         } else {
             $outputlangs->charset_output = $sav_charset_output;
             dol_print_error($this->db, "Error generating document for " . __CLASS__ . ". Error: " . $obj->error);
             return -1;
         }
     } else {
         dol_print_error('', $langs->trans("Error") . " " . $langs->trans("ErrorFileDoesNotExists", $file));
         return -1;
     }
 }