Merge branch 'develop' of https://github.com/Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
4e97a41612
@ -3,6 +3,7 @@
|
|||||||
* Copyright (C) 2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2011-2012 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2011-2012 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2011-2013 Philippe Grand <philippe.grand@atoo-net.com>
|
* Copyright (C) 2011-2013 Philippe Grand <philippe.grand@atoo-net.com>
|
||||||
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -16,13 +17,13 @@
|
|||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/admin/project.php
|
* \file htdocs/admin/project.php
|
||||||
* \ingroup project
|
* \ingroup project
|
||||||
* \brief Page to setup project module
|
* \brief Page to setup project module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||||
@ -45,7 +46,7 @@ $type='project';
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ($action == 'updateMask')
|
if ($action == 'updateMask')
|
||||||
{
|
{
|
||||||
@ -56,14 +57,14 @@ if ($action == 'updateMask')
|
|||||||
|
|
||||||
if (! $res > 0) $error++;
|
if (! $res > 0) $error++;
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
|
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>";
|
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ($action == 'specimen')
|
else if ($action == 'specimen')
|
||||||
@ -78,7 +79,7 @@ else if ($action == 'specimen')
|
|||||||
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
|
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
|
||||||
foreach($dirmodels as $reldir)
|
foreach($dirmodels as $reldir)
|
||||||
{
|
{
|
||||||
$file=dol_buildpath($reldir."core/modules/project/pdf/pdf_".$modele.".modules.php",0);
|
$file=dol_buildpath($reldir."core/modules/project/pdf/pdf_".$modele.".modules.php",0);
|
||||||
if (file_exists($file))
|
if (file_exists($file))
|
||||||
{
|
{
|
||||||
$filefound=1;
|
$filefound=1;
|
||||||
@ -95,8 +96,8 @@ else if ($action == 'specimen')
|
|||||||
|
|
||||||
if ($module->write_file($project,$langs) > 0)
|
if ($module->write_file($project,$langs) > 0)
|
||||||
{
|
{
|
||||||
header("Location: ".DOL_URL_ROOT."/document.php?modulepart=project&file=SPECIMEN.pdf");
|
header("Location: ".DOL_URL_ROOT."/document.php?modulepart=project&file=SPECIMEN.pdf");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -122,7 +123,7 @@ else if ($action == 'del')
|
|||||||
$ret = delDocumentModel($value, $type);
|
$ret = delDocumentModel($value, $type);
|
||||||
if ($ret > 0)
|
if ($ret > 0)
|
||||||
{
|
{
|
||||||
if ($conf->global->PROJECT_ADDON_PDF == "$value") dolibarr_del_const($db, 'PROJECT_ADDON_PDF',$conf->entity);
|
if ($conf->global->PROJECT_ADDON_PDF == "$value") dolibarr_del_const($db, 'PROJECT_ADDON_PDF',$conf->entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +155,7 @@ else if ($action == 'setmod')
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* View
|
* View
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
|
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
|
||||||
|
|
||||||
@ -179,8 +180,8 @@ dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup"));
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Projects Numbering model
|
* Projects Numbering model
|
||||||
*/
|
*/
|
||||||
|
|
||||||
print_titre($langs->trans("ProjectsNumberingModules"));
|
print_titre($langs->trans("ProjectsNumberingModules"));
|
||||||
|
|
||||||
print '<table class="noborder" width="100%">';
|
print '<table class="noborder" width="100%">';
|
||||||
@ -284,7 +285,7 @@ print '</table><br>';
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Document templates generators
|
* Document templates generators
|
||||||
*/
|
*/
|
||||||
|
|
||||||
print_titre($langs->trans("ProjectsModelModule"));
|
print_titre($langs->trans("ProjectsModelModule"));
|
||||||
|
|
||||||
@ -337,59 +338,80 @@ foreach ($dirmodels as $reldir)
|
|||||||
{
|
{
|
||||||
while (($file = readdir($handle))!==false)
|
while (($file = readdir($handle))!==false)
|
||||||
{
|
{
|
||||||
if (substr($file, dol_strlen($file) -12) == '.modules.php' && substr($file,0,4) == 'pdf_')
|
if (preg_match('/\.modules\.php$/i',$file) && preg_match('/^(pdf_|doc_)/',$file))
|
||||||
{
|
{
|
||||||
$name = substr($file, 4, dol_strlen($file) -16);
|
if (file_exists($dir.'/'.$file))
|
||||||
$classname = substr($file, 0, dol_strlen($file) -12);
|
|
||||||
|
|
||||||
$var=!$var;
|
|
||||||
print "<tr ".$bc[$var].">\n <td>$name";
|
|
||||||
print "</td>\n <td>\n";
|
|
||||||
require_once $dir.$file;
|
|
||||||
$module = new $classname($db);
|
|
||||||
print $module->description;
|
|
||||||
print "</td>\n";
|
|
||||||
|
|
||||||
// Active
|
|
||||||
if (in_array($name, $def))
|
|
||||||
{
|
{
|
||||||
print "<td align=\"center\">\n";
|
$name = substr($file, 4, dol_strlen($file) -16);
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">';
|
$classname = substr($file, 0, dol_strlen($file) -12);
|
||||||
print img_picto($langs->trans("Enabled"),'switch_on');
|
|
||||||
print '</a>';
|
|
||||||
print "</td>";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print "<td align=\"center\">\n";
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
|
|
||||||
print "</td>";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default
|
require_once $dir.'/'.$file;
|
||||||
print "<td align=\"center\">";
|
$module = new $classname($db);
|
||||||
if ($conf->global->PROJECT_ADDON_PDF == "$name")
|
|
||||||
{
|
|
||||||
print img_picto($langs->trans("Default"),'on');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
// Info
|
$modulequalified=1;
|
||||||
$htmltooltip = ''.$langs->trans("Name").': '.$module->name;
|
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0;
|
||||||
$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown"));
|
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0;
|
||||||
$htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
|
||||||
$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
|
||||||
$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo,1,1);
|
|
||||||
print '<td align="center">';
|
|
||||||
$link='<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"),'project').'</a>';
|
|
||||||
print $form->textwithpicto(' '.$link,$htmltooltip,-1,0);
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
print "</tr>\n";
|
if ($modulequalified)
|
||||||
|
{
|
||||||
|
$var=!$var;
|
||||||
|
print '<tr '.$bc[$var].'><td width="100">';
|
||||||
|
print (empty($module->name)?$name:$module->name);
|
||||||
|
print "</td><td>\n";
|
||||||
|
if (method_exists($module,'info')) print $module->info($langs);
|
||||||
|
else print $module->description;
|
||||||
|
print "</td>\n";
|
||||||
|
|
||||||
|
// Active
|
||||||
|
if (in_array($name, $def))
|
||||||
|
{
|
||||||
|
print "<td align=\"center\">\n";
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">';
|
||||||
|
print img_picto($langs->trans("Enabled"),'switch_on');
|
||||||
|
print '</a>';
|
||||||
|
print "</td>";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print "<td align=\"center\">\n";
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
|
||||||
|
print "</td>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default
|
||||||
|
print "<td align=\"center\">";
|
||||||
|
if ($conf->global->PROJECT_ADDON_PDF == "$name")
|
||||||
|
{
|
||||||
|
print img_picto($langs->trans("Default"),'on');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Info
|
||||||
|
$htmltooltip = ''.$langs->trans("Name").': '.$module->name;
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown"));
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
||||||
|
$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo,1,1);
|
||||||
|
|
||||||
|
// Preview
|
||||||
|
print '<td align="center">';
|
||||||
|
if ($module->type == 'pdf')
|
||||||
|
{
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"),'bill').'</a>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print img_object($langs->trans("PreviewNotAvailable"),'generic');
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
print "</tr>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
closedir($handle);
|
closedir($handle);
|
||||||
|
|||||||
@ -162,10 +162,34 @@ if ($action == 'setdefaultduration')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if ($action == 'setusecustomercontactasrecipient')
|
// Define constants for submodules that contains parameters (forms with param1, param2, ... and value1, value2, ...)
|
||||||
|
if ($action == 'setModuleOptions')
|
||||||
{
|
{
|
||||||
dolibarr_set_const($db, "PROPALE_USE_CUSTOMER_CONTACT_AS_RECIPIENT",$_POST["value"],'chaine',0,'',$conf->entity);
|
$post_size=count($_POST);
|
||||||
}*/
|
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
for($i=0;$i < $post_size;$i++)
|
||||||
|
{
|
||||||
|
if (array_key_exists('param'.$i,$_POST))
|
||||||
|
{
|
||||||
|
$param=GETPOST("param".$i,'alpha');
|
||||||
|
$value=GETPOST("value".$i,'alpha');
|
||||||
|
if ($param) $res = dolibarr_set_const($db,$param,$value,'chaine',0,'',$conf->entity);
|
||||||
|
if (! $res > 0) $error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$db->commit();
|
||||||
|
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$db->rollback();
|
||||||
|
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1634,6 +1634,20 @@ class Propal extends CommonObject
|
|||||||
$this->db->rollback();
|
$this->db->rollback();
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||||
|
{
|
||||||
|
// Define output language
|
||||||
|
$outputlangs = $langs;
|
||||||
|
if (! empty($conf->global->MAIN_MULTILANGS))
|
||||||
|
{
|
||||||
|
$outputlangs = new Translate("",$conf);
|
||||||
|
$newlang=(GETPOST('lang_id') ? GETPOST('lang_id') : $this->client->default_lang);
|
||||||
|
$outputlangs->setDefaultLang($newlang);
|
||||||
|
}
|
||||||
|
//$ret=$object->fetch($id); // Reload to get new records
|
||||||
|
propale_pdf_create($this->db, $this, $conf->global->PROPALE_ADDON_PDF_ODT_TOBILL?$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL:$this->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||||
|
}
|
||||||
|
|
||||||
// Appel des triggers
|
// Appel des triggers
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
||||||
@ -1646,6 +1660,21 @@ class Propal extends CommonObject
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||||
|
{
|
||||||
|
// Define output language
|
||||||
|
$outputlangs = $langs;
|
||||||
|
if (! empty($conf->global->MAIN_MULTILANGS))
|
||||||
|
{
|
||||||
|
$outputlangs = new Translate("",$conf);
|
||||||
|
$newlang=(GETPOST('lang_id') ? GETPOST('lang_id') : $this->client->default_lang);
|
||||||
|
$outputlangs->setDefaultLang($newlang);
|
||||||
|
}
|
||||||
|
//$ret=$object->fetch($id); // Reload to get new records
|
||||||
|
propale_pdf_create($this->db, $this, $conf->global->PROPALE_ADDON_PDF_ODT_CLOSED?$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED:$this->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||||
|
}
|
||||||
|
|
||||||
// Appel des triggers
|
// Appel des triggers
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
||||||
$interface=new Interfaces($this->db);
|
$interface=new Interfaces($this->db);
|
||||||
|
|||||||
@ -442,7 +442,7 @@ class Paiement extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add link 'company' in bank_url between invoice and bank transaction (for each invoice concerned by payment)
|
// Add link 'company' in bank_url between invoice and bank transaction (for each invoice concerned by payment)
|
||||||
if (! $error)
|
if (! $error && $label != '(WithdrawalPayment)')
|
||||||
{
|
{
|
||||||
$linkaddedforthirdparty=array();
|
$linkaddedforthirdparty=array();
|
||||||
foreach ($this->amounts as $key => $value) // We should have always same third party but we loop in case of.
|
foreach ($this->amounts as $key => $value) // We should have always same third party but we loop in case of.
|
||||||
|
|||||||
@ -41,18 +41,9 @@ class box_activity extends ModeleBoxes
|
|||||||
var $info_box_head = array();
|
var $info_box_head = array();
|
||||||
var $info_box_contents = array();
|
var $info_box_contents = array();
|
||||||
|
|
||||||
/**
|
// FIXME: Use a cache to save data because this slow down too much main home page. This box slow down too seriously software.
|
||||||
* Constructor
|
// FIXME: Removed number_format (not compatible with all languages)
|
||||||
*/
|
// FIXME: Pb into some status
|
||||||
function __construct($db)
|
|
||||||
{
|
|
||||||
$this->db = $db;
|
|
||||||
|
|
||||||
$this->enabled = 1;
|
|
||||||
// FIXME: Use a cache to save data because this slow down too much main home page. This box slow down too seriously software.
|
|
||||||
// FIXME: Removed number_format (not compatible with all languages)
|
|
||||||
// FIXME: Pb into some status
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Charge les donnees en memoire pour affichage ulterieur
|
* Charge les donnees en memoire pour affichage ulterieur
|
||||||
@ -66,6 +57,7 @@ class box_activity extends ModeleBoxes
|
|||||||
|
|
||||||
$totalMnt = 0;
|
$totalMnt = 0;
|
||||||
$totalnb = 0;
|
$totalnb = 0;
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
|
|
||||||
@ -99,7 +91,6 @@ class box_activity extends ModeleBoxes
|
|||||||
if ($result)
|
if ($result)
|
||||||
{
|
{
|
||||||
$num = $db->num_rows($result);
|
$num = $db->num_rows($result);
|
||||||
$i = 0;
|
|
||||||
while ($i < $num)
|
while ($i < $num)
|
||||||
{
|
{
|
||||||
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"', 'logo' => 'bill');
|
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"', 'logo' => 'bill');
|
||||||
@ -140,7 +131,7 @@ class box_activity extends ModeleBoxes
|
|||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
if ($result)
|
if ($result)
|
||||||
{
|
{
|
||||||
$num = $db->num_rows($result)+$i;
|
$num = $db->num_rows($result) + $i;
|
||||||
$now=dol_now();
|
$now=dol_now();
|
||||||
|
|
||||||
while ($i < $num)
|
while ($i < $num)
|
||||||
@ -195,7 +186,7 @@ class box_activity extends ModeleBoxes
|
|||||||
|
|
||||||
if ($result)
|
if ($result)
|
||||||
{
|
{
|
||||||
$num = $db->num_rows($result)+$i;
|
$num = $db->num_rows($result) + $i;
|
||||||
while ($i < $num)
|
while ($i < $num)
|
||||||
{
|
{
|
||||||
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"','logo' => 'object_order');
|
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"','logo' => 'object_order');
|
||||||
@ -246,7 +237,7 @@ class box_activity extends ModeleBoxes
|
|||||||
|
|
||||||
if ($result)
|
if ($result)
|
||||||
{
|
{
|
||||||
$num = $db->num_rows($result)+$i;
|
$num = $db->num_rows($result) + $i;
|
||||||
while ($i < $num)
|
while ($i < $num)
|
||||||
{
|
{
|
||||||
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"','logo' => 'object_propal');
|
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"','logo' => 'object_propal');
|
||||||
|
|||||||
@ -33,7 +33,7 @@ class ModeleBoxes // Can't be abtract as it is instanciated to build "empty"
|
|||||||
var $error='';
|
var $error='';
|
||||||
var $max=5;
|
var $max=5;
|
||||||
var $enabled=1;
|
var $enabled=1;
|
||||||
|
|
||||||
var $rowid;
|
var $rowid;
|
||||||
var $id;
|
var $id;
|
||||||
var $position;
|
var $position;
|
||||||
|
|||||||
@ -436,7 +436,7 @@ class FileUpload
|
|||||||
{
|
{
|
||||||
file_put_contents($file_path, fopen($uploaded_file, 'r'), FILE_APPEND);
|
file_put_contents($file_path, fopen($uploaded_file, 'r'), FILE_APPEND);
|
||||||
} else {
|
} else {
|
||||||
dol_move_uploaded_file($uploaded_file, $file_path, 1);
|
dol_move_uploaded_file($uploaded_file, $file_path, 1, 0, 0, 0, 'userfile');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -131,7 +131,7 @@ class HookManager
|
|||||||
// Define type of hook ('output', 'returnvalue' or 'addreplace')
|
// Define type of hook ('output', 'returnvalue' or 'addreplace')
|
||||||
$hooktype='output';
|
$hooktype='output';
|
||||||
if (preg_match('/^pdf_/',$method)) $hooktype='returnvalue'; // pdf_xxx except pdf_writelinedesc are returnvalue hooks. When there is 2 hooks of this type, only last one win.
|
if (preg_match('/^pdf_/',$method)) $hooktype='returnvalue'; // pdf_xxx except pdf_writelinedesc are returnvalue hooks. When there is 2 hooks of this type, only last one win.
|
||||||
if ($method == 'doActions' || $method == 'formObjectOptions' || $method == 'pdf_writelinedesc') $hooktype='addreplace';
|
if (in_array($method,array('doActions','formObjectOptions','pdf_writelinedesc','paymentsupplierinvoices'))) $hooktype='addreplace';
|
||||||
|
|
||||||
// Loop on each hook to qualify modules that declared context
|
// Loop on each hook to qualify modules that declared context
|
||||||
$modulealreadyexecuted=array();
|
$modulealreadyexecuted=array();
|
||||||
@ -150,7 +150,7 @@ class HookManager
|
|||||||
// test to avoid to run twice a hook, when a module implements several active contexts
|
// test to avoid to run twice a hook, when a module implements several active contexts
|
||||||
if (in_array($module,$modulealreadyexecuted)) continue;
|
if (in_array($module,$modulealreadyexecuted)) continue;
|
||||||
$modulealreadyexecuted[$module]=$module;
|
$modulealreadyexecuted[$module]=$module;
|
||||||
// Hooks that return int
|
// Hooks that return int (doActions, formObjectOptions, pdf_writelinedesc, paymentsupplierinvoices)
|
||||||
if ($hooktype == 'addreplace')
|
if ($hooktype == 'addreplace')
|
||||||
{
|
{
|
||||||
$resaction += $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
$resaction += $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
||||||
@ -159,7 +159,7 @@ class HookManager
|
|||||||
$error++;
|
$error++;
|
||||||
$this->error=$actionclassinstance->error; $this->errors=array_merge($this->errors, (array) $actionclassinstance->errors);
|
$this->error=$actionclassinstance->error; $this->errors=array_merge($this->errors, (array) $actionclassinstance->errors);
|
||||||
|
|
||||||
// TODO remove this. Change must be inside the method if required
|
// TODO remove this. Change must be inside the method of hook if required
|
||||||
if ($method == 'doActions')
|
if ($method == 'doActions')
|
||||||
{
|
{
|
||||||
if ($action=='add') $action='create';
|
if ($action=='add') $action='create';
|
||||||
@ -170,7 +170,7 @@ class HookManager
|
|||||||
// Generic hooks that return a string (printSearchForm, printLeftBlock, printTopRightMenu, formAddObjectLine, formBuilddocOptions, ...)
|
// Generic hooks that return a string (printSearchForm, printLeftBlock, printTopRightMenu, formAddObjectLine, formBuilddocOptions, ...)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO. this should be done into the method by returning nothing
|
// TODO. this should be done into the method of hook by returning nothing
|
||||||
if (is_array($parameters) && ! empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) continue;
|
if (is_array($parameters) && ! empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) continue;
|
||||||
|
|
||||||
$result = $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
$result = $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
||||||
|
|||||||
@ -931,7 +931,7 @@ class DoliDBMysql
|
|||||||
$sql .= ",".implode(',',$sqluq);
|
$sql .= ",".implode(',',$sqluq);
|
||||||
if($keys != "")
|
if($keys != "")
|
||||||
$sql .= ",".implode(',',$sqlk);
|
$sql .= ",".implode(',',$sqlk);
|
||||||
$sql .=") type=".$type;
|
$sql .=") engine=".$type;
|
||||||
|
|
||||||
dol_syslog($sql,LOG_DEBUG);
|
dol_syslog($sql,LOG_DEBUG);
|
||||||
if(! $this -> query($sql))
|
if(! $this -> query($sql))
|
||||||
|
|||||||
@ -925,7 +925,7 @@ class DoliDBMysqli
|
|||||||
$sql .= ",".implode(',',$sqluq);
|
$sql .= ",".implode(',',$sqluq);
|
||||||
if($keys != "")
|
if($keys != "")
|
||||||
$sql .= ",".implode(',',$sqlk);
|
$sql .= ",".implode(',',$sqlk);
|
||||||
$sql .=") type=".$type;
|
$sql .=") engine=".$type;
|
||||||
|
|
||||||
dol_syslog($sql,LOG_DEBUG);
|
dol_syslog($sql,LOG_DEBUG);
|
||||||
if(! $this -> query($sql))
|
if(! $this -> query($sql))
|
||||||
|
|||||||
@ -649,7 +649,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable
|
|||||||
|
|
||||||
$hookmanager->initHooks(array('fileslib'));
|
$hookmanager->initHooks(array('fileslib'));
|
||||||
|
|
||||||
$parameters=array('filename' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite);
|
$parameters=array('dest_file' => $dest_file, 'src_file' => $src_file, 'file_name' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite);
|
||||||
$reshook=$hookmanager->executeHooks('moveUploadedFile', $parameters, $object);
|
$reshook=$hookmanager->executeHooks('moveUploadedFile', $parameters, $object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1640,10 +1640,11 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo
|
|||||||
* Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1)
|
* Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1)
|
||||||
* @param string $options Add more attribute on img tag (For example 'style="float: right"')
|
* @param string $options Add more attribute on img tag (For example 'style="float: right"')
|
||||||
* @param int $pictoisfullpath If 1, image path is a full path
|
* @param int $pictoisfullpath If 1, image path is a full path
|
||||||
|
* @param int $srconly Return only content of the src attribute of img.
|
||||||
* @return string Return img tag
|
* @return string Return img tag
|
||||||
* @see #img_object, #img_picto_common
|
* @see #img_object, #img_picto_common
|
||||||
*/
|
*/
|
||||||
function img_picto($alt, $picto, $options = '', $pictoisfullpath = false)
|
function img_picto($alt, $picto, $options = '', $pictoisfullpath = false, $srconly=0)
|
||||||
{
|
{
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
@ -1678,7 +1679,8 @@ function img_picto($alt, $picto, $options = '', $pictoisfullpath = false)
|
|||||||
$fullpathpicto = $url.'/'.$path.'/img/'.$picto;
|
$fullpathpicto = $url.'/'.$path.'/img/'.$picto;
|
||||||
}
|
}
|
||||||
|
|
||||||
return '<img src="'.$fullpathpicto.'" border="0" alt="'.dol_escape_htmltag($alt).'" title="'.dol_escape_htmltag($alt).'"'.(! empty($options)?' '.$options:'').'>';
|
if ($srconly) return $fullpathpicto;
|
||||||
|
else return '<img src="'.$fullpathpicto.'" border="0" alt="'.dol_escape_htmltag($alt).'" title="'.dol_escape_htmltag($alt).'"'.(! empty($options)?' '.$options:'').'>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -159,6 +159,12 @@ class modAgenda extends DolibarrModules
|
|||||||
$this->rights[$r][5] = 'delete';
|
$this->rights[$r][5] = 'delete';
|
||||||
$r++;
|
$r++;
|
||||||
|
|
||||||
|
$this->rights[$r][0] = 2414;
|
||||||
|
$this->rights[$r][1] = 'Export actions/tasks of others';
|
||||||
|
$this->rights[$r][2] = 'w';
|
||||||
|
$this->rights[$r][3] = 0;
|
||||||
|
$this->rights[$r][4] = 'export';
|
||||||
|
|
||||||
// Main menu entries
|
// Main menu entries
|
||||||
$this->menu = array(); // List of menus to add
|
$this->menu = array(); // List of menus to add
|
||||||
$r=0;
|
$r=0;
|
||||||
@ -355,12 +361,30 @@ class modAgenda extends DolibarrModules
|
|||||||
//--------
|
//--------
|
||||||
$r=0;
|
$r=0;
|
||||||
|
|
||||||
// $this->export_code[$r] Code unique identifiant l'export (tous modules confondus)
|
$r++;
|
||||||
// $this->export_label[$r] Libelle par defaut si traduction de cle "ExportXXX" non trouvee (XXX = Code)
|
$this->export_code[$r]=$this->rights_class.'_'.$r;
|
||||||
// $this->export_permission[$r] Liste des codes permissions requis pour faire l'export
|
$this->export_label[$r]="Liste des action commerciales de l'agenda";
|
||||||
// $this->export_fields_sql[$r] Liste des champs exportables en codif sql
|
$this->export_permission[$r]=array(array("agenda","export"));
|
||||||
// $this->export_fields_name[$r] Liste des champs exportables en codif traduction
|
$this->export_fields_array[$r]=array('a.id'=>'IdAgenda','a.label'=>'Actions','a.datep'=>'DateActionStart',
|
||||||
// $this->export_sql[$r] Requete sql qui offre les donnees a l'export
|
'a.datea'=>'DateActionEnd','a.percent'=>'PercentDone','a.fk_user_author'=>'ActionAskedBy','a.fk_user_action'=>'ActionAffectedTo',
|
||||||
|
'a.fk_user_done'=>"ActionDoneBy","a.priority"=>"Priority","a.fulldayevent"=>"EventOnFullDay","a.location"=>"Location",
|
||||||
|
"a.fk_soc"=>"Company","a.fk_contact"=>"contact","a.fk_action"=>"Action");
|
||||||
|
|
||||||
|
$this->export_TypeFields_array[$r]=array('a.id'=>'Numeric','a.label'=>'Text','a.datep'=>'Date','a.datep2'=>'Date',
|
||||||
|
'a.datea'=>'Date','a.datea2'=>'Date','a.percent'=>'Numeric','a.fk_user_author'=>'List:user:name','a.fk_user_action'=>'List:user:name',
|
||||||
|
'a.fk_user_done'=>"List:user:name","a.priority"=>"Numeric","a.fulldayevent"=>"Boolean","a.location"=>"Text",
|
||||||
|
"a.fk_soc"=>"List:Societe:nom","a.fk_contact"=>"List:socpeople:name","a.fk_action"=>"List:c_actioncomm:libelle:code");
|
||||||
|
|
||||||
|
$this->export_entities_array[$r]=array('a.id'=>'action','a.label'=>'action','a.datep'=>'action','a.datep2'=>'action',
|
||||||
|
'a.datea'=>'action','a.datea2'=>'action','a.percent'=>'action','a.fk_user_author'=>'action','a.fk_user_action'=>'action',
|
||||||
|
'a.fk_user_done'=>"action","a.priority"=>"action","a.fulldayevent"=>"action","a.location"=>"action",
|
||||||
|
"a.fk_soc"=>"action","a.fk_contact"=>"action","a.fk_action"=>"action");
|
||||||
|
|
||||||
|
$this->export_sql_start[$r]='SELECT DISTINCT ';
|
||||||
|
$this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'actioncomm as a';
|
||||||
|
$this->export_sql_end[$r] .=' Where a.entity = '.$conf->entity;
|
||||||
|
$this->export_sql_end[$r] .=' ORDER BY datep';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -86,6 +86,13 @@ class modProjet extends DolibarrModules
|
|||||||
$this->const[$r][4] = 0;
|
$this->const[$r][4] = 0;
|
||||||
$r++;
|
$r++;
|
||||||
|
|
||||||
|
$r++;
|
||||||
|
$this->const[$r][0] = "PROJECT_ADDON_PDF_ODT_PATH";
|
||||||
|
$this->const[$r][1] = "chaine";
|
||||||
|
$this->const[$r][2] = "DOL_DATA_ROOT/doctemplates/project";
|
||||||
|
$this->const[$r][3] = "";
|
||||||
|
$this->const[$r][4] = 0;
|
||||||
|
|
||||||
// Boxes
|
// Boxes
|
||||||
$this->boxes = array();
|
$this->boxes = array();
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,790 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||||
|
* Copyright (C) 2013 Florian Henry <florian.henry@ope-concept.pro>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* or see http://www.gnu.org/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php
|
||||||
|
* \ingroup project
|
||||||
|
* \brief File of class to build ODT documents for third parties
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/modules/project/modules_project.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
|
||||||
|
if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
|
||||||
|
if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||||
|
if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture-rec.class.php';
|
||||||
|
if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
|
||||||
|
if (! empty($conf->fournisseur->enabled)) require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
|
||||||
|
if (! empty($conf->fournisseur->enabled)) require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
|
||||||
|
if (! empty($conf->contrat->enabled)) require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
|
||||||
|
if (! empty($conf->ficheinter->enabled)) require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
|
||||||
|
if (! empty($conf->deplacement->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/deplacement/class/deplacement.class.php';
|
||||||
|
if (! empty($conf->agenda->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to build documents using ODF templates generator
|
||||||
|
*/
|
||||||
|
class doc_generic_project_odt extends ModelePDFProjects
|
||||||
|
{
|
||||||
|
var $emetteur; // Objet societe qui emet
|
||||||
|
|
||||||
|
var $phpmin = array(5,2,0); // Minimum version of PHP required by module
|
||||||
|
var $version = 'dolibarr';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
*/
|
||||||
|
function __construct($db)
|
||||||
|
{
|
||||||
|
global $conf,$langs,$mysoc;
|
||||||
|
|
||||||
|
$langs->load("main");
|
||||||
|
$langs->load("companies");
|
||||||
|
|
||||||
|
$this->db = $db;
|
||||||
|
$this->name = "ODT templates";
|
||||||
|
$this->description = $langs->trans("DocumentModelOdt");
|
||||||
|
$this->scandir = 'PROJECT_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan
|
||||||
|
|
||||||
|
// Dimension page pour format A4
|
||||||
|
$this->type = 'odt';
|
||||||
|
$this->page_largeur = 0;
|
||||||
|
$this->page_hauteur = 0;
|
||||||
|
$this->format = array($this->page_largeur,$this->page_hauteur);
|
||||||
|
$this->marge_gauche=0;
|
||||||
|
$this->marge_droite=0;
|
||||||
|
$this->marge_haute=0;
|
||||||
|
$this->marge_basse=0;
|
||||||
|
|
||||||
|
$this->option_logo = 1; // Affiche logo
|
||||||
|
$this->option_tva = 0; // Gere option tva COMMANDE_TVAOPTION
|
||||||
|
$this->option_modereg = 0; // Affiche mode reglement
|
||||||
|
$this->option_condreg = 0; // Affiche conditions reglement
|
||||||
|
$this->option_codeproduitservice = 0; // Affiche code produit-service
|
||||||
|
$this->option_multilang = 0; // Dispo en plusieurs langues
|
||||||
|
$this->option_escompte = 0; // Affiche si il y a eu escompte
|
||||||
|
$this->option_credit_note = 0; // Support credit notes
|
||||||
|
$this->option_freetext = 1; // Support add of a personalised text
|
||||||
|
$this->option_draft_watermark = 0; // Support add of a watermark on drafts
|
||||||
|
|
||||||
|
// Recupere emetteur
|
||||||
|
$this->emetteur=$mysoc;
|
||||||
|
if (! $this->emetteur->pays_code) $this->emetteur->pays_code=substr($langs->defaultlang,-2); // Par defaut, si n'etait pas defini
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define array with couple substitution key => substitution value
|
||||||
|
*
|
||||||
|
* @param Object $object Main object to use as data source
|
||||||
|
* @param Translate $outputlangs Lang object to use for output
|
||||||
|
* @return array Array of substitution
|
||||||
|
*/
|
||||||
|
function get_substitutionarray_object($object,$outputlangs)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'object_id'=>$object->id,
|
||||||
|
'object_ref'=>$object->ref,
|
||||||
|
'object_title'=>$object->title,
|
||||||
|
'object_description'=>$object->description,
|
||||||
|
'object_date_creation'=>dol_print_date($object->date_c,'day'),
|
||||||
|
'object_date_modification'=>dol_print_date($object->date_m,'day'),
|
||||||
|
'object_date_start'=>dol_print_date($object->date_start,'day'),
|
||||||
|
'object_date_end'=>dol_print_date($object->date_end,'day'),
|
||||||
|
'object_note_private'=>$object->note_private,
|
||||||
|
'object_note_public'=>$object->note_public,
|
||||||
|
'object_public'=>$object->public,
|
||||||
|
'object_statut'=>html_entity_decode($object->getLibStatut())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define array with couple substitution key => substitution value
|
||||||
|
*
|
||||||
|
* @param array $task Task Object
|
||||||
|
* @param Translate $outputlangs Lang object to use for output
|
||||||
|
* @return array Return a substitution array
|
||||||
|
*/
|
||||||
|
function get_substitutionarray_tasks($task,$outputlangs)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'task_ref'=>$task->ref,
|
||||||
|
'task_fk_project'=>$task->fk_project,
|
||||||
|
'task_projectref'=>$task->projectref,
|
||||||
|
'task_projectlabel'=>$task->projectlabel,
|
||||||
|
'task_label'=>$task->label,
|
||||||
|
'task_description'=>$task->description,
|
||||||
|
'task_fk_parent'=>$task->fk_parent,
|
||||||
|
'task_duration'=>$task->duration,
|
||||||
|
'task_progress'=>$task->progress,
|
||||||
|
'task_public'=>$task->public,
|
||||||
|
'task_date_start'=>dol_print_date($task->date_start,'day'),
|
||||||
|
'task_date_end'=>dol_print_date($task->date_end,'day')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define array with couple substitution key => substitution value
|
||||||
|
*
|
||||||
|
* @param array $contact Contact array
|
||||||
|
* @param Translate $outputlangs Lang object to use for output
|
||||||
|
* @return array Return a substitution array
|
||||||
|
*/
|
||||||
|
function get_substitutionarray_project_contacts($contact,$outputlangs)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'projcontacts_id'=>$contact['id'],
|
||||||
|
'projcontacts_rowid'=>$contact['rowid'],
|
||||||
|
'projcontacts_role'=>$contact['libelle'],
|
||||||
|
'projcontacts_lastname'=>$contact['lastname'],
|
||||||
|
'projcontacts_firstname'=>$contact['firstname'],
|
||||||
|
'projcontacts_fullcivname'=>$contact['fullname'],
|
||||||
|
'projcontacts_socname'=>$contact['socname'],
|
||||||
|
'projcontacts_email'=>$contact['email']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define array with couple substitution key => substitution value
|
||||||
|
*
|
||||||
|
* @param array $file file array
|
||||||
|
* @param Translate $outputlangs Lang object to use for output
|
||||||
|
* @return array Return a substitution array
|
||||||
|
*/
|
||||||
|
function get_substitutionarray_project_file($file,$outputlangs)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'projfile_name'=>$file['name'],
|
||||||
|
'projfile_date'=>dol_print_date($file['date'],'day'),
|
||||||
|
'projfile_size'=>$file['size']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define array with couple substitution key => substitution value
|
||||||
|
*
|
||||||
|
* @param array $refdetail Reference array
|
||||||
|
* @param Translate $outputlangs Lang object to use for output
|
||||||
|
* @return array Return a substitution array
|
||||||
|
*/
|
||||||
|
function get_substitutionarray_project_reference($refdetail,$outputlangs)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'projref_type'=>$refdetail['type'],
|
||||||
|
'projref_ref'=>$refdetail['ref'],
|
||||||
|
'projref_date'=>dol_print_date($refdetail['date'],'day'),
|
||||||
|
'projref_socname'=>$refdetail['socname'],
|
||||||
|
'projref_amountht'=>price($refdetail['amountht'],0,$outputlangs),
|
||||||
|
'projref_amountttc'=>price($refdetail['amountttc'],0,$outputlangs),
|
||||||
|
'projref_status'=>$refdetail['status']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return description of a module
|
||||||
|
*
|
||||||
|
* @param Translate $langs Lang object to use for output
|
||||||
|
* @return string Description
|
||||||
|
*/
|
||||||
|
function info($langs)
|
||||||
|
{
|
||||||
|
global $conf,$langs;
|
||||||
|
|
||||||
|
$langs->load("companies");
|
||||||
|
$langs->load("errors");
|
||||||
|
|
||||||
|
$form = new Form($this->db);
|
||||||
|
|
||||||
|
$texte = $this->description.".<br>\n";
|
||||||
|
$texte.= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||||
|
$texte.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
|
$texte.= '<input type="hidden" name="action" value="setModuleOptions">';
|
||||||
|
$texte.= '<input type="hidden" name="param1" value="PROJECT_ADDON_PDF_ODT_PATH">';
|
||||||
|
$texte.= '<table class="nobordernopadding" width="100%">';
|
||||||
|
|
||||||
|
// List of directories area
|
||||||
|
$texte.= '<tr><td>';
|
||||||
|
$texttitle=$langs->trans("ListOfDirectories");
|
||||||
|
$listofdir=explode(',',preg_replace('/[\r\n]+/',',',trim($conf->global->PROJECT_ADDON_PDF_ODT_PATH)));
|
||||||
|
$listoffiles=array();
|
||||||
|
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)) $texttitle.=img_warning($langs->trans("ErrorDirNotFound",$tmpdir),0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$tmpfiles=dol_dir_list($tmpdir,'files',0,'\.odt');
|
||||||
|
if (count($tmpfiles)) $listoffiles=array_merge($listoffiles,$tmpfiles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$texthelp=$langs->trans("ListOfDirectoriesForModelGenODT");
|
||||||
|
// Add list of substitution keys
|
||||||
|
$texthelp.='<br>'.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'<br>';
|
||||||
|
$texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it
|
||||||
|
|
||||||
|
$texte.= $form->textwithpicto($texttitle,$texthelp,1,'help','',1);
|
||||||
|
$texte.= '<table><tr><td>';
|
||||||
|
$texte.= '<textarea class="flat" cols="60" name="value1">';
|
||||||
|
$texte.=$conf->global->PROJECT_ADDON_PDF_ODT_PATH;
|
||||||
|
$texte.= '</textarea>';
|
||||||
|
$texte.= '</td>';
|
||||||
|
$texte.= '<td align="center"> ';
|
||||||
|
$texte.= '<input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button">';
|
||||||
|
$texte.= '</td>';
|
||||||
|
$texte.= '</tr>';
|
||||||
|
$texte.= '</table>';
|
||||||
|
|
||||||
|
// Scan directories
|
||||||
|
if (count($listofdir)) $texte.=$langs->trans("NumberOfModelFilesFound").': <b>'.count($listoffiles).'</b>';
|
||||||
|
|
||||||
|
$texte.= '</td>';
|
||||||
|
|
||||||
|
|
||||||
|
$texte.= '<td valign="top" rowspan="2">';
|
||||||
|
$texte.= $langs->trans("ExampleOfDirectoriesForModelGen");
|
||||||
|
$texte.= '</td>';
|
||||||
|
$texte.= '</tr>';
|
||||||
|
|
||||||
|
/*$texte.= '<tr>';
|
||||||
|
$texte.= '<td align="center">';
|
||||||
|
$texte.= '<input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button">';
|
||||||
|
$texte.= '</td>';
|
||||||
|
$texte.= '</tr>';*/
|
||||||
|
|
||||||
|
$texte.= '</table>';
|
||||||
|
$texte.= '</form>';
|
||||||
|
|
||||||
|
return $texte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to build a document on disk using the generic odt module.
|
||||||
|
*
|
||||||
|
* @param Commande $object Object source to build document
|
||||||
|
* @param Translate $outputlangs Lang output object
|
||||||
|
* @param string $srctemplatepath Full path of source filename for generator using a template file
|
||||||
|
* @return int 1 if OK, <=0 if KO
|
||||||
|
*/
|
||||||
|
function write_file($object,$outputlangs,$srctemplatepath)
|
||||||
|
{
|
||||||
|
global $user,$langs,$conf,$mysoc;
|
||||||
|
|
||||||
|
if (empty($srctemplatepath))
|
||||||
|
{
|
||||||
|
dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! is_object($outputlangs)) $outputlangs=$langs;
|
||||||
|
$sav_charset_output=$outputlangs->charset_output;
|
||||||
|
$outputlangs->charset_output='UTF-8';
|
||||||
|
|
||||||
|
$outputlangs->load("main");
|
||||||
|
$outputlangs->load("dict");
|
||||||
|
$outputlangs->load("companies");
|
||||||
|
$outputlangs->load("projects");
|
||||||
|
|
||||||
|
if ($conf->projet->dir_output)
|
||||||
|
{
|
||||||
|
// If $object is id instead of object
|
||||||
|
if (! is_object($object))
|
||||||
|
{
|
||||||
|
$id = $object;
|
||||||
|
$object = new Project($this->db);
|
||||||
|
$result=$object->fetch($id);
|
||||||
|
if ($result < 0)
|
||||||
|
{
|
||||||
|
dol_print_error($this->db,$object->error);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$dir = $conf->projet->dir_output;
|
||||||
|
$objectref = dol_sanitizeFileName($object->ref);
|
||||||
|
if (! preg_match('/specimen/i',$objectref)) $dir.= "/" . $objectref;
|
||||||
|
$file = $dir . "/" . $objectref . ".odt";
|
||||||
|
|
||||||
|
if (! file_exists($dir))
|
||||||
|
{
|
||||||
|
if (dol_mkdir($dir) < 0)
|
||||||
|
{
|
||||||
|
$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_exists($dir))
|
||||||
|
{
|
||||||
|
//print "srctemplatepath=".$srctemplatepath; // Src filename
|
||||||
|
$newfile=basename($srctemplatepath);
|
||||||
|
$newfiletmp=preg_replace('/\.odt/i','',$newfile);
|
||||||
|
$newfiletmp=preg_replace('/template_/i','',$newfiletmp);
|
||||||
|
$newfiletmp=preg_replace('/modele_/i','',$newfiletmp);
|
||||||
|
$newfiletmp=$objectref.'_'.$newfiletmp;
|
||||||
|
//$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt';
|
||||||
|
$file=$dir.'/'.$newfiletmp.'.odt';
|
||||||
|
//print "newdir=".$dir;
|
||||||
|
//print "newfile=".$newfile;
|
||||||
|
//print "file=".$file;
|
||||||
|
//print "conf->societe->dir_temp=".$conf->societe->dir_temp;
|
||||||
|
|
||||||
|
dol_mkdir($conf->projet->dir_temp);
|
||||||
|
|
||||||
|
$socobject=$object->thirdparty;
|
||||||
|
|
||||||
|
// Make substitution
|
||||||
|
$substitutionarray=array(
|
||||||
|
'__FROM_NAME__' => $this->emetteur->nom,
|
||||||
|
'__FROM_EMAIL__' => $this->emetteur->email,
|
||||||
|
);
|
||||||
|
complete_substitutions_array($substitutionarray, $langs, $object);
|
||||||
|
|
||||||
|
// Open and load template
|
||||||
|
require_once ODTPHP_PATH.'odf.php';
|
||||||
|
$odfHandler = new odf(
|
||||||
|
$srctemplatepath,
|
||||||
|
array(
|
||||||
|
'PATH_TO_TMP' => $conf->projet->dir_temp,
|
||||||
|
'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
|
||||||
|
'DELIMITER_LEFT' => '{',
|
||||||
|
'DELIMITER_RIGHT' => '}'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
// After construction $odfHandler->contentXml contains content and
|
||||||
|
// [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by
|
||||||
|
// [!-- BEGIN lines --]*[!-- END lines --]
|
||||||
|
//print html_entity_decode($odfHandler->__toString());
|
||||||
|
//print exit;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Make substitutions into odt of user info
|
||||||
|
$tmparray=$this->get_substitutionarray_user($user,$outputlangs);
|
||||||
|
//var_dump($tmparray); exit;
|
||||||
|
foreach($tmparray as $key=>$value)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if (preg_match('/logo$/',$key)) // Image
|
||||||
|
{
|
||||||
|
//var_dump($value);exit;
|
||||||
|
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||||
|
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||||
|
}
|
||||||
|
else // Text
|
||||||
|
{
|
||||||
|
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Make substitutions into odt of mysoc
|
||||||
|
$tmparray=$this->get_substitutionarray_mysoc($mysoc,$outputlangs);
|
||||||
|
//var_dump($tmparray); exit;
|
||||||
|
foreach($tmparray as $key=>$value)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if (preg_match('/logo$/',$key)) // Image
|
||||||
|
{
|
||||||
|
//var_dump($value);exit;
|
||||||
|
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||||
|
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||||
|
}
|
||||||
|
else // Text
|
||||||
|
{
|
||||||
|
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make substitutions into odt of thirdparty
|
||||||
|
$tmparray=$this->get_substitutionarray_thirdparty($socobject,$outputlangs);
|
||||||
|
foreach($tmparray as $key=>$value)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if (preg_match('/logo$/',$key)) // Image
|
||||||
|
{
|
||||||
|
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||||
|
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||||
|
}
|
||||||
|
else // Text
|
||||||
|
{
|
||||||
|
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace tags of object + external modules
|
||||||
|
$tmparray=$this->get_substitutionarray_object($object,$outputlangs);
|
||||||
|
complete_substitutions_array($tmparray, $outputlangs, $object);
|
||||||
|
foreach($tmparray as $key=>$value)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if (preg_match('/logo$/',$key)) // Image
|
||||||
|
{
|
||||||
|
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||||
|
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||||
|
}
|
||||||
|
else // Text
|
||||||
|
{
|
||||||
|
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace tags of lines for tasks
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines = $odfHandler->setSegment('tasks');
|
||||||
|
|
||||||
|
$taskstatic = new Task($this->db);
|
||||||
|
|
||||||
|
// Security check
|
||||||
|
$socid=0;
|
||||||
|
if (!empty($object->fk_soc)) $socid = $object->fk_soc;
|
||||||
|
|
||||||
|
$tasksarray=$taskstatic->getTasksArray(0, 0, $object->id, $socid, 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($tasksarray as $task)
|
||||||
|
{
|
||||||
|
$tmparray=$this->get_substitutionarray_tasks($task,$outputlangs);
|
||||||
|
//complete_substitutions_array($tmparray, $outputlangs, $object, $task, "completesubstitutionarray_lines");
|
||||||
|
foreach($tmparray as $key => $val)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines->setVars($key, $val, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
catch(SegmentException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$listlines->merge();
|
||||||
|
}
|
||||||
|
$odfHandler->mergeSegment($listlines);
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
$this->error=$e->getMessage();
|
||||||
|
dol_syslog($this->error, LOG_WARNING);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace tags of project files
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines = $odfHandler->setSegment('projectfiles');
|
||||||
|
|
||||||
|
$upload_dir = $conf->projet->dir_output.'/'.dol_sanitizeFileName($object->ref);
|
||||||
|
$filearray=dol_dir_list($upload_dir,"files",0,'','\.meta$','name',SORT_ASC,1);
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($filearray as $filedetail)
|
||||||
|
{
|
||||||
|
//dol_syslog(get_class($this).'::ee $filedetail'.var_export($filedetail,true));
|
||||||
|
$tmparray=$this->get_substitutionarray_project_file($filedetail,$outputlangs);
|
||||||
|
|
||||||
|
foreach($tmparray as $key => $val)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines->setVars($key, $val, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
catch(SegmentException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$listlines->merge();
|
||||||
|
}
|
||||||
|
$odfHandler->mergeSegment($listlines);
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
$this->error=$e->getMessage();
|
||||||
|
dol_syslog($this->error, LOG_WARNING);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace tags of lines for contacts
|
||||||
|
$sourcearray=array('internal','external');
|
||||||
|
$contact_arrray=array();
|
||||||
|
foreach ($sourcearray as $source) {
|
||||||
|
$contact_temp=$object->liste_contact(-1,$source);
|
||||||
|
if ((is_array($contact_temp) && count($contact_temp) > 0))
|
||||||
|
{
|
||||||
|
$contact_arrray=array_merge($contact_arrray,$contact_temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((is_array($contact_arrray) && count($contact_arrray) > 0))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines = $odfHandler->setSegment('projectcontacts');
|
||||||
|
|
||||||
|
foreach ($contact_arrray as $contact)
|
||||||
|
{
|
||||||
|
if ($contact['source']=='internal') {
|
||||||
|
$objectdetail=new User($this->db);
|
||||||
|
$objectdetail->fetch($contact['id']);
|
||||||
|
$contact['socname']=$mysoc->name;
|
||||||
|
} elseif ($contact['source']=='external') {
|
||||||
|
$objectdetail=new Contact($this->db);
|
||||||
|
$objectdetail->fetch($contact['id']);
|
||||||
|
|
||||||
|
$soc=new Societe($this->db);
|
||||||
|
$soc->fetch($contact['socid']);
|
||||||
|
$contact['socname']=$soc->name;
|
||||||
|
}
|
||||||
|
$contact['fullname']=$objectdetail->getFullName($outputlangs,1);
|
||||||
|
|
||||||
|
$tmparray=$this->get_substitutionarray_project_contacts($contact,$outputlangs);
|
||||||
|
complete_substitutions_array($tmparray, $outputlangs, $contact, $contact, "completesubstitutionarray_lines");
|
||||||
|
foreach($tmparray as $key => $val)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines->setVars($key, $val, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
catch(SegmentException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$listlines->merge();
|
||||||
|
}
|
||||||
|
$odfHandler->mergeSegment($listlines);
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
$this->error=$e->getMessage();
|
||||||
|
dol_syslog($this->error, LOG_WARNING);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//List of referent
|
||||||
|
|
||||||
|
$listofreferent=array(
|
||||||
|
'propal'=>array(
|
||||||
|
'title'=>"ListProposalsAssociatedProject",
|
||||||
|
'class'=>'Propal',
|
||||||
|
'test'=>$conf->propal->enabled),
|
||||||
|
'order'=>array(
|
||||||
|
'title'=>"ListOrdersAssociatedProject",
|
||||||
|
'class'=>'Commande',
|
||||||
|
'test'=>$conf->commande->enabled),
|
||||||
|
'invoice'=>array(
|
||||||
|
'title'=>"ListInvoicesAssociatedProject",
|
||||||
|
'class'=>'Facture',
|
||||||
|
'test'=>$conf->facture->enabled),
|
||||||
|
'invoice_predefined'=>array(
|
||||||
|
'title'=>"ListPredefinedInvoicesAssociatedProject",
|
||||||
|
'class'=>'FactureRec',
|
||||||
|
'test'=>$conf->facture->enabled),
|
||||||
|
'order_supplier'=>array(
|
||||||
|
'title'=>"ListSupplierOrdersAssociatedProject",
|
||||||
|
'class'=>'CommandeFournisseur',
|
||||||
|
'test'=>$conf->fournisseur->enabled),
|
||||||
|
'invoice_supplier'=>array(
|
||||||
|
'title'=>"ListSupplierInvoicesAssociatedProject",
|
||||||
|
'class'=>'FactureFournisseur',
|
||||||
|
'test'=>$conf->fournisseur->enabled),
|
||||||
|
'contract'=>array(
|
||||||
|
'title'=>"ListContractAssociatedProject",
|
||||||
|
'class'=>'Contrat',
|
||||||
|
'test'=>$conf->contrat->enabled),
|
||||||
|
'intervention'=>array(
|
||||||
|
'title'=>"ListFichinterAssociatedProject",
|
||||||
|
'class'=>'Fichinter',
|
||||||
|
'disableamount'=>1,
|
||||||
|
'test'=>$conf->ficheinter->enabled),
|
||||||
|
'trip'=>array(
|
||||||
|
'title'=>"ListTripAssociatedProject",
|
||||||
|
'class'=>'Deplacement',
|
||||||
|
'disableamount'=>1,
|
||||||
|
'test'=>$conf->deplacement->enabled),
|
||||||
|
'agenda'=>array(
|
||||||
|
'title'=>"ListActionsAssociatedProject",
|
||||||
|
'class'=>'ActionComm',
|
||||||
|
'disableamount'=>1,
|
||||||
|
'test'=>$conf->agenda->enabled)
|
||||||
|
);
|
||||||
|
|
||||||
|
//Inser refenrence
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines = $odfHandler->setSegment('projectrefs');
|
||||||
|
|
||||||
|
foreach ($listofreferent as $keyref => $valueref)
|
||||||
|
{
|
||||||
|
$title=$valueref['title'];
|
||||||
|
$classname=$valueref['class'];
|
||||||
|
$qualified=$valueref['test'];
|
||||||
|
if ($qualified)
|
||||||
|
{
|
||||||
|
$elementarray = $object->get_element_list($keyref);
|
||||||
|
if (count($elementarray)>0 && is_array($elementarray))
|
||||||
|
{
|
||||||
|
$var=true;
|
||||||
|
$total_ht = 0;
|
||||||
|
$total_ttc = 0;
|
||||||
|
$num=count($elementarray);
|
||||||
|
for ($i = 0; $i < $num; $i++)
|
||||||
|
{
|
||||||
|
$ref_array=array();
|
||||||
|
$ref_array['type']=$langs->trans($classname);
|
||||||
|
|
||||||
|
$element = new $classname($this->db);
|
||||||
|
$element->fetch($elementarray[$i]);
|
||||||
|
$element->fetch_thirdparty();
|
||||||
|
|
||||||
|
//Ref object
|
||||||
|
$ref_array['ref']=$element->ref;
|
||||||
|
|
||||||
|
//Date object
|
||||||
|
$dateref=$element->date;
|
||||||
|
if (empty($dateref)) $dateref=$element->datep;
|
||||||
|
if (empty($dateref)) $dateref=$element->date_contrat;
|
||||||
|
$ref_array['date']=$dateref;
|
||||||
|
|
||||||
|
//Soc object
|
||||||
|
if (is_object($element->thirdparty)) {
|
||||||
|
$ref_array['socname']=$element->thirdparty->name;
|
||||||
|
} else {
|
||||||
|
$ref_array['socname']='';
|
||||||
|
}
|
||||||
|
|
||||||
|
//Amount object
|
||||||
|
if (empty($valueref['disableamount'])) {
|
||||||
|
if (!empty($element->total_ht)) {
|
||||||
|
$ref_array['amountht']=$element->total_ht;
|
||||||
|
$ref_array['amountttc']=$element->total_ttc;
|
||||||
|
}else {
|
||||||
|
$ref_array['amountht']=0;
|
||||||
|
$ref_array['amountttc']=0;
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
$ref_array['amountht']='';
|
||||||
|
$ref_array['amountttc']='';
|
||||||
|
}
|
||||||
|
|
||||||
|
$ref_array['status']=html_entity_decode($element->getLibStatut(0));
|
||||||
|
|
||||||
|
$tmparray=$this->get_substitutionarray_project_reference($ref_array,$outputlangs);
|
||||||
|
|
||||||
|
foreach($tmparray as $key => $val)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$listlines->setVars($key, $val, true, 'UTF-8');
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
catch(SegmentException $e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$listlines->merge();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$odfHandler->mergeSegment($listlines);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(OdfException $e)
|
||||||
|
{
|
||||||
|
$this->error=$e->getMessage();
|
||||||
|
dol_syslog($this->error, LOG_WARNING);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write new file
|
||||||
|
//$result=$odfHandler->exportAsAttachedFile('toto');
|
||||||
|
$odfHandler->saveToDisk($file);
|
||||||
|
|
||||||
|
if (! empty($conf->global->MAIN_UMASK))
|
||||||
|
@chmod($file, octdec($conf->global->MAIN_UMASK));
|
||||||
|
|
||||||
|
$odfHandler=null; // Destroy object
|
||||||
|
|
||||||
|
return 1; // Success
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
@ -106,6 +106,12 @@ class doc_generic_proposal_odt extends ModelePDFPropales
|
|||||||
$texte.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
$texte.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
$texte.= '<input type="hidden" name="action" value="setModuleOptions">';
|
$texte.= '<input type="hidden" name="action" value="setModuleOptions">';
|
||||||
$texte.= '<input type="hidden" name="param1" value="PROPALE_ADDON_PDF_ODT_PATH">';
|
$texte.= '<input type="hidden" name="param1" value="PROPALE_ADDON_PDF_ODT_PATH">';
|
||||||
|
if ($conf->global->MAIN_PROPAL_CHOOSE_ODT_DOCUMENT > 0)
|
||||||
|
{
|
||||||
|
$texte.= '<input type="hidden" name="param2" value="PROPALE_ADDON_PDF_ODT_DEFAULT">';
|
||||||
|
$texte.= '<input type="hidden" name="param3" value="PROPALE_ADDON_PDF_ODT_TOBILL">';
|
||||||
|
$texte.= '<input type="hidden" name="param4" value="PROPALE_ADDON_PDF_ODT_CLOSED">';
|
||||||
|
}
|
||||||
$texte.= '<table class="nobordernopadding" width="100%">';
|
$texte.= '<table class="nobordernopadding" width="100%">';
|
||||||
|
|
||||||
// List of directories area
|
// List of directories area
|
||||||
@ -143,8 +149,38 @@ class doc_generic_proposal_odt extends ModelePDFPropales
|
|||||||
$texte.= '</table>';
|
$texte.= '</table>';
|
||||||
|
|
||||||
// Scan directories
|
// Scan directories
|
||||||
if (count($listofdir)) $texte.=$langs->trans("NumberOfModelFilesFound").': <b>'.count($listoffiles).'</b>';
|
if (count($listofdir))
|
||||||
|
{
|
||||||
|
$texte.=$langs->trans("NumberOfModelFilesFound").': <b>'.count($listoffiles).'</b>';
|
||||||
|
|
||||||
|
if ($conf->global->MAIN_PROPAL_CHOOSE_ODT_DOCUMENT > 0)
|
||||||
|
{
|
||||||
|
// Model for creation
|
||||||
|
$liste=ModelePDFPropales::liste_modeles($this->db);
|
||||||
|
$texte.= '<table width="50%;">';
|
||||||
|
$texte.= '<tr>';
|
||||||
|
$texte.= '<td width="60%;">'.$langs->trans("DefaultModelPropalCreate").'</td>';
|
||||||
|
$texte.= '<td colspan="">';
|
||||||
|
$texte.= $form->selectarray('value2',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_DEFAULT);
|
||||||
|
$texte.= "</td></tr>";
|
||||||
|
|
||||||
|
$texte.= '<tr>';
|
||||||
|
$texte.= '<td width="60%;">'.$langs->trans("DefaultModelPropalToBill").'</td>';
|
||||||
|
$texte.= '<td colspan="">';
|
||||||
|
$texte.= $form->selectarray('value3',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL);
|
||||||
|
$texte.= "</td></tr>";
|
||||||
|
$texte.= '<tr>';
|
||||||
|
|
||||||
|
$texte.= '<td width="60%;">'.$langs->trans("DefaultModelPropalClosed").'</td>';
|
||||||
|
$texte.= '<td colspan="">';
|
||||||
|
$texte.= $form->selectarray('value4',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED);
|
||||||
|
$texte.= "</td></tr>";
|
||||||
|
$texte.= '</table>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$texte.= '</td>';
|
$texte.= '</td>';
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -82,6 +82,8 @@ if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->ex
|
|||||||
setEventMessage($object->error,'errors');
|
setEventMessage($object->error,'errors');
|
||||||
$action='';
|
$action='';
|
||||||
}else {
|
}else {
|
||||||
|
if ($object->lastresult > 0) setEventMessage($langs->trans("JobFinished"),'warnings');
|
||||||
|
else setEventMessage($langs->trans("JobFinished"),'mesgs');
|
||||||
$action='';
|
$action='';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,9 +125,9 @@ if ($action=='add') {
|
|||||||
// Save parameters
|
// Save parameters
|
||||||
if ($action=='update') {
|
if ($action=='update') {
|
||||||
$object->id=$id;
|
$object->id=$id;
|
||||||
$object->jobtype=GETPOST('jobtype','alpha');
|
$object->jobtype=GETPOST('jobtype');
|
||||||
$object->label=GETPOST('label','alpha');
|
$object->label=GETPOST('label');
|
||||||
$object->command=GETPOST('command','alpha');
|
$object->command=GETPOST('command');
|
||||||
$object->classesname=GETPOST('classesname','alpha');
|
$object->classesname=GETPOST('classesname','alpha');
|
||||||
$object->priority=GETPOST('priority','int');
|
$object->priority=GETPOST('priority','int');
|
||||||
$object->objectname=GETPOST('objectname','alpha');
|
$object->objectname=GETPOST('objectname','alpha');
|
||||||
@ -194,10 +196,13 @@ if ($action=='inactive') {
|
|||||||
|
|
||||||
llxHeader('',$langs->trans("CronAdd"));
|
llxHeader('',$langs->trans("CronAdd"));
|
||||||
|
|
||||||
if ($action=='edit' || empty($action) || $action=='delete' || $action=='execute') {
|
if ($action=='edit' || empty($action) || $action=='delete' || $action=='execute')
|
||||||
|
{
|
||||||
$head=cron_prepare_head($object);
|
$head=cron_prepare_head($object);
|
||||||
dol_fiche_head($head, 'card', $langs->trans("CronTask"), 0, 'bill');
|
dol_fiche_head($head, 'card', $langs->trans("CronTask"), 0, 'bill');
|
||||||
} elseif ($action=='create') {
|
}
|
||||||
|
elseif ($action=='create')
|
||||||
|
{
|
||||||
print_fiche_titre($langs->trans("CronTask"),'','setup');
|
print_fiche_titre($langs->trans("CronTask"),'','setup');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,8 +256,8 @@ if (empty($object->status) && $action != 'create')
|
|||||||
dol_htmloutput_mesg($langs->trans("CronTaskInactive"),'','warning',1);
|
dol_htmloutput_mesg($langs->trans("CronTaskInactive"),'','warning',1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($action=="create") || ($action=="edit")) {
|
if (($action=="create") || ($action=="edit"))
|
||||||
|
{
|
||||||
print '<form name="cronform" action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
print '<form name="cronform" action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n";
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n";
|
||||||
if (!empty($object->id)) {
|
if (!empty($object->id)) {
|
||||||
@ -565,6 +570,10 @@ if (($action=="create") || ($action=="edit")) {
|
|||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
|
|
||||||
|
dol_fiche_end();
|
||||||
|
|
||||||
|
|
||||||
print "\n\n<div class=\"tabsAction\">\n";
|
print "\n\n<div class=\"tabsAction\">\n";
|
||||||
if (! $user->rights->cron->create) {
|
if (! $user->rights->cron->create) {
|
||||||
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("Edit").'</a>';
|
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("Edit").'</a>';
|
||||||
@ -585,9 +594,15 @@ if (($action=="create") || ($action=="edit")) {
|
|||||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=inactive&id='.$object->id.'">'.$langs->trans("CronStatusInactiveBtn").'</a>';
|
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=inactive&id='.$object->id.'">'.$langs->trans("CronStatusInactiveBtn").'</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((! $user->rights->cron->execute) || (empty($object->status))) {
|
if ((empty($user->rights->cron->execute)))
|
||||||
|
{
|
||||||
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("CronExecute").'</a>';
|
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("CronExecute").'</a>';
|
||||||
} else {
|
}
|
||||||
|
else if (empty($object->status))
|
||||||
|
{
|
||||||
|
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("TaskDisabled")).'">'.$langs->trans("CronExecute").'</a>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=execute&id='.$object->id.'">'.$langs->trans("CronExecute").'</a>';
|
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=execute&id='.$object->id.'">'.$langs->trans("CronExecute").'</a>';
|
||||||
}
|
}
|
||||||
print '<br><br></div>';
|
print '<br><br></div>';
|
||||||
|
|||||||
@ -834,9 +834,12 @@ class Cronjob extends CommonObject
|
|||||||
{
|
{
|
||||||
global $langs, $conf;
|
global $langs, $conf;
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
$now=dol_now();
|
||||||
|
|
||||||
$langs->load('cron');
|
$langs->load('cron');
|
||||||
|
|
||||||
if (empty($userlogin)) {
|
if (empty($userlogin)) {
|
||||||
$this->error="User login is mandatory";
|
$this->error="User login is mandatory";
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
||||||
return -1;
|
return -1;
|
||||||
@ -845,27 +848,59 @@ class Cronjob extends CommonObject
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
|
||||||
$user=new User($this->db);
|
$user=new User($this->db);
|
||||||
$result=$user->fetch('',$userlogin);
|
$result=$user->fetch('',$userlogin);
|
||||||
if ($result<0) {
|
if ($result<0)
|
||||||
|
{
|
||||||
$this->error="User Error:".$user->error;
|
$this->error="User Error:".$user->error;
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
||||||
return -1;
|
return -1;
|
||||||
}else {
|
}
|
||||||
if (empty($user->id)) {
|
else
|
||||||
|
{
|
||||||
|
if (empty($user->id))
|
||||||
|
{
|
||||||
$this->error=" User user login:".$userlogin." do not exists";
|
$this->error=" User user login:".$userlogin." do not exists";
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::run_jobs userlogin:$userlogin", LOG_DEBUG);
|
dol_syslog(get_class($this)."::run_jobs jobtype=".$this->jobtype." userlogin=".$userlogin, LOG_DEBUG);
|
||||||
|
|
||||||
$error=0;
|
|
||||||
$now=dol_now();
|
|
||||||
|
|
||||||
if ($this->jobtype=='method') {
|
// Increase limit of time. Works only if we are not in safe mode
|
||||||
|
$ExecTimeLimit=600;
|
||||||
|
if (!empty($ExecTimeLimit))
|
||||||
|
{
|
||||||
|
$err=error_reporting();
|
||||||
|
error_reporting(0); // Disable all errors
|
||||||
|
//error_reporting(E_ALL);
|
||||||
|
@set_time_limit($ExecTimeLimit); // Need more than 240 on Windows 7/64
|
||||||
|
error_reporting($err);
|
||||||
|
}
|
||||||
|
if (!empty($MemoryLimit))
|
||||||
|
{
|
||||||
|
@ini_set('memory_limit', $MemoryLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Update last run date (to track launch)
|
||||||
|
$this->datelastrun=$now;
|
||||||
|
$this->lastoutput='';
|
||||||
|
$this->lastresult='';
|
||||||
|
$this->nbrun=$this->nbrun+1;
|
||||||
|
$result = $this->update($user);
|
||||||
|
if ($result<0) {
|
||||||
|
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run a method
|
||||||
|
if ($this->jobtype=='method')
|
||||||
|
{
|
||||||
// load classes
|
// load classes
|
||||||
$ret=dol_include_once("/".$this->module_name."/class/".$this->classesname,$this->objectname);
|
$ret=dol_include_once("/".$this->module_name."/class/".$this->classesname,$this->objectname);
|
||||||
if ($ret===false) {
|
if ($ret===false)
|
||||||
|
{
|
||||||
$this->error=$langs->trans('CronCannotLoadClass',$file,$this->objectname);
|
$this->error=$langs->trans('CronCannotLoadClass',$file,$this->objectname);
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
||||||
return -1;
|
return -1;
|
||||||
@ -873,7 +908,8 @@ class Cronjob extends CommonObject
|
|||||||
|
|
||||||
// Load langs
|
// Load langs
|
||||||
$result=$langs->load($this->module_name.'@'.$this->module_name);
|
$result=$langs->load($this->module_name.'@'.$this->module_name);
|
||||||
if ($result<0) {
|
if ($result<0)
|
||||||
|
{
|
||||||
dol_syslog(get_class($this)."::run_jobs Cannot load module langs".$langs->error, LOG_ERR);
|
dol_syslog(get_class($this)."::run_jobs Cannot load module langs".$langs->error, LOG_ERR);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -883,66 +919,89 @@ class Cronjob extends CommonObject
|
|||||||
// Create Object for the call module
|
// Create Object for the call module
|
||||||
$object = new $this->objectname($this->db);
|
$object = new $this->objectname($this->db);
|
||||||
|
|
||||||
|
|
||||||
//Update launch start date
|
|
||||||
$this->datelastrun=$now;
|
|
||||||
$this->nbrun=$this->nbrun+1;
|
|
||||||
$result = $this->update($user);
|
|
||||||
if ($result<0) {
|
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$params_arr = array();
|
$params_arr = array();
|
||||||
$params_arr=explode(", ",$this->params);
|
$params_arr = explode(", ",$this->params);
|
||||||
if (!is_array($params_arr)) {
|
if (!is_array($params_arr))
|
||||||
|
{
|
||||||
$result = call_user_func(array($object, $this->methodename), $this->params);
|
$result = call_user_func(array($object, $this->methodename), $this->params);
|
||||||
}else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$result = call_user_func_array(array($object, $this->methodename), $params_arr);
|
$result = call_user_func_array(array($object, $this->methodename), $params_arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result===false) {
|
if ($result===false)
|
||||||
|
{
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$object->error, LOG_ERR);
|
dol_syslog(get_class($this)."::run_jobs ".$object->error, LOG_ERR);
|
||||||
return -1;
|
return -1;
|
||||||
}else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$this->lastoutput=var_export($result,true);
|
$this->lastoutput=var_export($result,true);
|
||||||
$this->lastresult=var_export($result,true);
|
$this->lastresult=var_export($result,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($this->jobtype=='command') {
|
|
||||||
dol_syslog(get_class($this)."::run_jobs system:".$this->command, LOG_DEBUG);
|
|
||||||
$output_arr=array();
|
|
||||||
|
|
||||||
//Update launch start date
|
|
||||||
$this->datelastrun=$now;
|
|
||||||
$this->nbrun=$this->nbrun+1;
|
|
||||||
$result = $this->update($user);
|
|
||||||
if ($result<0) {
|
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
exec($this->command, $output_arr,$retval);
|
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::run_jobs output_arr:".var_export($output_arr,true), LOG_DEBUG);
|
|
||||||
|
|
||||||
$this->lastoutput='';
|
|
||||||
if (is_array($output_arr) && count($output_arr)>0) {
|
|
||||||
foreach($output_arr as $val) {
|
|
||||||
$this->lastoutput.=$val."\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->lastresult=$retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Update result date
|
// Run a command line
|
||||||
$this->datelastresult=$now;
|
if ($this->jobtype=='command')
|
||||||
|
{
|
||||||
|
$command=escapeshellcmd($this->command);
|
||||||
|
$command.=" 2>&1";
|
||||||
|
dol_mkdir($conf->cronjob->dir_temp);
|
||||||
|
$outputfile=$conf->cronjob->dir_temp.'/cronjob.'.$userlogin.'.out';
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::run_jobs system:".$command, LOG_DEBUG);
|
||||||
|
$output_arr=array();
|
||||||
|
|
||||||
|
$execmethod=(empty($conf->global->MAIN_EXEC_USE_POPEN)?1:2); // 1 or 2
|
||||||
|
if ($execmethod == 1)
|
||||||
|
{
|
||||||
|
exec($command, $output_arr, $retval);
|
||||||
|
}
|
||||||
|
if ($execmethod == 2)
|
||||||
|
{
|
||||||
|
$ok=0;
|
||||||
|
$handle = fopen($outputfile, 'w');
|
||||||
|
if ($handle)
|
||||||
|
{
|
||||||
|
dol_syslog("Run command ".$command);
|
||||||
|
$handlein = popen($command, 'r');
|
||||||
|
while (!feof($handlein))
|
||||||
|
{
|
||||||
|
$read = fgets($handlein);
|
||||||
|
fwrite($handle,$read);
|
||||||
|
$output_arr[]=$read;
|
||||||
|
}
|
||||||
|
pclose($handlein);
|
||||||
|
fclose($handle);
|
||||||
|
}
|
||||||
|
if (! empty($conf->global->MAIN_UMASK)) @chmod($outputfile, octdec($conf->global->MAIN_UMASK));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::run_jobs output_arr:".var_export($output_arr,true), LOG_DEBUG);
|
||||||
|
|
||||||
|
|
||||||
|
// Update with result
|
||||||
|
$this->lastoutput='';
|
||||||
|
if (is_array($output_arr) && count($output_arr)>0)
|
||||||
|
{
|
||||||
|
foreach($output_arr as $val)
|
||||||
|
{
|
||||||
|
$this->lastoutput.=$val."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->lastresult=$retval;
|
||||||
|
$this->datelastresult=dol_now();
|
||||||
$result = $this->update($user);
|
$result = $this->update($user);
|
||||||
if ($result<0) {
|
if ($result < 0)
|
||||||
|
{
|
||||||
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
|
||||||
return -1;
|
return -1;
|
||||||
}else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -146,9 +146,9 @@ print $langs->trans('CronWaitingJobs');
|
|||||||
print "</h2></p>";
|
print "</h2></p>";
|
||||||
|
|
||||||
if (count($object->lines)>0) {
|
if (count($object->lines)>0) {
|
||||||
|
|
||||||
print '<table width="100%" cellspacing="0" cellpadding="4" class="border">';
|
print '<table width="100%" cellspacing="0" cellpadding="4" class="border">';
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
$arg_url='&page='.$page.'&status='.$status.'&search_label='.$search_label;
|
$arg_url='&page='.$page.'&status='.$status.'&search_label='.$search_label;
|
||||||
print_liste_field_titre($langs->trans("CronLabel"),$_SERVEUR['PHP_SELF'],"t.label","",$arg_url,'',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans("CronLabel"),$_SERVEUR['PHP_SELF'],"t.label","",$arg_url,'',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans("CronTask"),'','',"",$arg_url,'',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans("CronTask"),'','',"",$arg_url,'',$sortfield,$sortorder);
|
||||||
@ -161,15 +161,15 @@ if (count($object->lines)>0) {
|
|||||||
print_liste_field_titre($langs->trans("CronLastResult"),$_SERVEUR['PHP_SELF'],"t.lastresult","",$arg_url,'',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans("CronLastResult"),$_SERVEUR['PHP_SELF'],"t.lastresult","",$arg_url,'',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans("CronLastOutput"),$_SERVEUR['PHP_SELF'],"t.lastoutput","",$arg_url,'',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans("CronLastOutput"),$_SERVEUR['PHP_SELF'],"t.lastoutput","",$arg_url,'',$sortfield,$sortorder);
|
||||||
print '<td></td>';
|
print '<td></td>';
|
||||||
|
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
print '<form method="get" action="'.$url_form.'" name="search_form">'."\n";
|
print '<form method="get" action="'.$url_form.'" name="search_form">'."\n";
|
||||||
print '<input type="hidden" name="status" value="'.$status.'" >';
|
print '<input type="hidden" name="status" value="'.$status.'" >';
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print '<td class="liste_titre">';
|
print '<td class="liste_titre">';
|
||||||
print '<input type="text" class="flat" name="search_label" value="'.$search_label.'" size="10">';
|
print '<input type="text" class="flat" name="search_label" value="'.$search_label.'" size="10">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
@ -186,30 +186,30 @@ if (count($object->lines)>0) {
|
|||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="image" class="liste_titre" name="button_removefilter" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/searchclear.png" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
|
print '<input type="image" class="liste_titre" name="button_removefilter" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/searchclear.png" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
print '</from>';
|
print '</from>';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Boucler sur chaque job
|
// Boucler sur chaque job
|
||||||
$style='impair';
|
$style='impair';
|
||||||
foreach($object->lines as $line){
|
foreach($object->lines as $line){
|
||||||
// title profil
|
// title profil
|
||||||
if ($style=='pair') {$style='impair';}
|
if ($style=='pair') {$style='impair';}
|
||||||
else {$style='pair';}
|
else {$style='pair';}
|
||||||
|
|
||||||
print '<tr class="'.$style.'">';
|
print '<tr class="'.$style.'">';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->label)) {
|
if(!empty($line->label)) {
|
||||||
print '<a href="'.dol_buildpath('/cron/cron/card.php',1).'?id='.$line->id.'">'.$line->label.'</a>';
|
print '<a href="'.DOL_URL_ROOT.'/cron/card.php?id='.$line->id.'">'.$line->label.'</a>';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
print $langs->trans('CronNone');
|
print $langs->trans('CronNone');
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if ($line->jobtype=='method') {
|
if ($line->jobtype=='method') {
|
||||||
print $langs->trans('CronModule').':'.$line->module_name.'<BR>';
|
print $langs->trans('CronModule').':'.$line->module_name.'<BR>';
|
||||||
@ -219,7 +219,7 @@ if (count($object->lines)>0) {
|
|||||||
if(!empty($line->params)) {
|
if(!empty($line->params)) {
|
||||||
print '<BR/>'.$langs->trans('CronArgs').':'. $line->params;
|
print '<BR/>'.$langs->trans('CronArgs').':'. $line->params;
|
||||||
}
|
}
|
||||||
|
|
||||||
}elseif ($line->jobtype=='command') {
|
}elseif ($line->jobtype=='command') {
|
||||||
print $langs->trans('CronCommand').':'. dol_trunc($line->command);
|
print $langs->trans('CronCommand').':'. dol_trunc($line->command);
|
||||||
if(!empty($line->params)) {
|
if(!empty($line->params)) {
|
||||||
@ -227,55 +227,55 @@ if (count($object->lines)>0) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->datestart)) {print dol_print_date($line->datestart,'dayhourtext');} else {print $langs->trans('CronNone');}
|
if(!empty($line->datestart)) {print dol_print_date($line->datestart,'dayhour');} else {print $langs->trans('CronNone');}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->dateend)) {print dol_print_date($line->dateend,'dayhourtext');} else {print $langs->trans('CronNone');}
|
if(!empty($line->dateend)) {print dol_print_date($line->dateend,'dayhour');} else {print $langs->trans('CronNone');}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->datelastrun)) {print dol_print_date($line->datelastrun,'dayhourtext');} else {print $langs->trans('CronNone');}
|
if(!empty($line->datelastrun)) {print dol_print_date($line->datelastrun,'dayhour');} else {print $langs->trans('CronNone');}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->datenextrun)) {print dol_print_date($line->datenextrun,'dayhourtext');} else {print $langs->trans('CronNone');}
|
if(!empty($line->datenextrun)) {print dol_print_date($line->datenextrun,'dayhour');} else {print $langs->trans('CronNone');}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if($line->unitfrequency == "60") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Minutes');
|
if($line->unitfrequency == "60") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Minutes');
|
||||||
if($line->unitfrequency == "3600") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Hours');
|
if($line->unitfrequency == "3600") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Hours');
|
||||||
if($line->unitfrequency == "86400") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Days');
|
if($line->unitfrequency == "86400") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Days');
|
||||||
if($line->unitfrequency == "604800") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Weeks');
|
if($line->unitfrequency == "604800") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Weeks');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->nbrun)) {print $line->nbrun;} else {print '0';}
|
if(!empty($line->nbrun)) {print $line->nbrun;} else {print '0';}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->lastresult)) {print dol_trunc($line->lastresult);} else {print $langs->trans('CronNone');}
|
if(!empty($line->lastresult)) {print dol_trunc($line->lastresult);} else {print $langs->trans('CronNone');}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if(!empty($line->lastoutput)) {print dol_trunc(nl2br($line->lastoutput),100);} else {print $langs->trans('CronNone');}
|
if(!empty($line->lastoutput)) {print dol_trunc(nl2br($line->lastoutput),100);} else {print $langs->trans('CronNone');}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td>';
|
print '<td align="center">';
|
||||||
if ($user->rights->cron->delete) {
|
if ($user->rights->cron->delete) {
|
||||||
print "<a href=\"".dol_buildpath('/cron/cron/list.php',1)."?id=".$line->id."&status=".$status."&action=delete\" title=\"".$langs->trans('CronDelete')."\"><img src=\"".dol_buildpath('/cron/img/delete.png',1)."\" alt=\"".$langs->trans('CronDelete')."\" /></a>";
|
print "<a href=\"".$_SERVER["PHP_SELF"]."?id=".$line->id."&status=".$status."&action=delete\" title=\"".$langs->trans('CronDelete')."\">".img_delete()."</a> ";
|
||||||
} else {
|
} else {
|
||||||
print "<a href=\"#\" title=\"".$langs->trans('NotEnoughPermissions')."\"><img src=\"".dol_buildpath('/cron/img/delete.png',1)."\" alt=\"".$langs->trans('NotEnoughPermissions')."\" /></a>";
|
print "<a href=\"#\" title=\"".$langs->trans('NotEnoughPermissions')."\">".img_delete()."</a> ";
|
||||||
}
|
}
|
||||||
if ($user->rights->cron->execute) {
|
if ($user->rights->cron->execute) {
|
||||||
print "<a href=\"".dol_buildpath('/cron/cron/list.php',1)."?id=".$line->id."&status=".$status."&action=execute\" title=\"".$langs->trans('CronExecute')."\"><img src=\"".dol_buildpath('/cron/img/execute.png',1)."\" alt=\"".$langs->trans('CronExecute')."\" /></a>";
|
print "<a href=\"".$_SERVER["PHP_SELF"]."?id=".$line->id."&status=".$status."&action=execute\" title=\"".$langs->trans('CronExecute')."\">".img_picto('',"play")."</a>";
|
||||||
} else {
|
} else {
|
||||||
print "<a href=\"#\" title=\"".$langs->trans('NotEnoughPermissions')."\"><img src=\"".dol_buildpath('/cron/img/execute.png',1)."\" alt=\"".$langs->trans('NotEnoughPermissions')."\" /></a>";
|
print "<a href=\"#\" title=\"".$langs->trans('NotEnoughPermissions')."\">".img_picto('',"execute")."</a>";
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
print '</table>';
|
print '</table>';
|
||||||
@ -283,13 +283,22 @@ if (count($object->lines)>0) {
|
|||||||
print $langs->trans('CronNoJobs');
|
print $langs->trans('CronNoJobs');
|
||||||
}
|
}
|
||||||
|
|
||||||
print "\n\n<div class=\"tabsAction\">\n";
|
print "\n<div class=\"tabsAction\">\n";
|
||||||
if (! $user->rights->cron->create) {
|
|
||||||
|
if (! $user->rights->cron->create)
|
||||||
|
{
|
||||||
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("New").'</a>';
|
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("New").'</a>';
|
||||||
} else {
|
|
||||||
print '<a class="butAction" href="'.dol_buildpath('/cron/card.php',1).'?action=create">'.$langs->trans("New").'</a>';
|
|
||||||
}
|
}
|
||||||
print '<br><br></div>';
|
else
|
||||||
|
{
|
||||||
|
print '<a class="butAction" href="'.DOL_URL_ROOT.'/cron/card.php?action=create">'.$langs->trans("New").'</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print '<br>';
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
$db->close();
|
|
||||||
|
$db->close();
|
||||||
|
?>
|
||||||
@ -1166,24 +1166,66 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a detail line from database
|
* Delete a detail line from database
|
||||||
*
|
*
|
||||||
* @param int $rowid Id of line to delete
|
* @param int $rowid Id of line to delete
|
||||||
* @return void
|
* @param int $notrigger 1=Does not execute triggers, 0= execute triggers
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
function deleteline($rowid)
|
function deleteline($rowid, $notrigger=0)
|
||||||
{
|
{
|
||||||
// Supprime ligne
|
global $user, $langs, $conf;
|
||||||
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'facture_fourn_det ';
|
|
||||||
$sql .= ' WHERE rowid = '.$rowid.';';
|
if (! $rowid) $rowid=$this->id;
|
||||||
$resql = $this->db->query($sql);
|
|
||||||
if (! $resql)
|
dol_syslog(get_class($this)."::delete rowid=".$rowid, LOG_DEBUG);
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
if (! $error && ! $notrigger)
|
||||||
{
|
{
|
||||||
dol_print_error($this->db);
|
// Appel des triggers
|
||||||
|
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
|
||||||
|
$interface=new Interfaces($this->db);
|
||||||
|
$result=$interface->run_triggers('LINEBILL_SUPPLIER_DELETE',$this,$user,$langs,$conf);
|
||||||
|
if ($result < 0) {
|
||||||
|
$error++; $this->errors=$interface->errors;
|
||||||
|
}
|
||||||
|
// Fin appel triggers
|
||||||
}
|
}
|
||||||
// Mise a jour prix facture
|
|
||||||
$this->update_price();
|
if (! $error)
|
||||||
return 1;
|
{
|
||||||
|
// Supprime ligne
|
||||||
|
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'facture_fourn_det ';
|
||||||
|
$sql.= ' WHERE rowid = '.$rowid;
|
||||||
|
dol_syslog(get_class($this)."::delete sql=".$sql, LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (! $resql)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
$this->error=$this->db->lasterror();
|
||||||
|
dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
// Mise a jour prix facture
|
||||||
|
$this->update_price();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$this->db->commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1305,7 +1347,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$result.=$lien.($max?dol_trunc($this->ref,$max):$this->ref).$lienfin;
|
$result.=$lien.($max?dol_trunc($this->ref,$max):$this->ref).$lienfin;
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renvoie la reference de facture suivante non utilisee en fonction du modele
|
* Renvoie la reference de facture suivante non utilisee en fonction du modele
|
||||||
* de numerotation actif defini dans INVOICE_SUPPLIER_ADDON_NUMBER
|
* de numerotation actif defini dans INVOICE_SUPPLIER_ADDON_NUMBER
|
||||||
|
|||||||
@ -90,12 +90,12 @@ if ($_POST["action"] == 'dispatch' && $user->rights->fournisseur->commande->rece
|
|||||||
global $conf, $langs, $user;
|
global $conf, $langs, $user;
|
||||||
// Appel des triggers
|
// Appel des triggers
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
||||||
$interface=new Interfaces($this->db);
|
$interface=new Interfaces($db);
|
||||||
$result_trigger=$interface->run_triggers('ORDER_SUPPLIER_DISPATCH',$this,$user,$langs,$conf);
|
$result_trigger=$interface->run_triggers('ORDER_SUPPLIER_DISPATCH',$commande,$user,$langs,$conf);
|
||||||
if ($result_trigger < 0) { $error++; $this->errors=$interface->errors; }
|
if ($result_trigger < 0) { $error++; $commande->errors=$interface->errors; }
|
||||||
// Fin appel triggers
|
// Fin appel triggers
|
||||||
|
|
||||||
$this->db->commit();
|
$db->commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result > 0)
|
if ($result > 0)
|
||||||
|
|||||||
@ -749,7 +749,7 @@ if ($action == 'send' && ! $_POST['addfile'] && ! $_POST['removedfile'] && ! $_P
|
|||||||
{
|
{
|
||||||
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)); // Must not contain "
|
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)); // Must not contain "
|
||||||
setEventMessage($mesg);
|
setEventMessage($mesg);
|
||||||
|
|
||||||
$error=0;
|
$error=0;
|
||||||
|
|
||||||
// Initialisation donnees
|
// Initialisation donnees
|
||||||
@ -1177,7 +1177,8 @@ if ($action == 'create')
|
|||||||
if (1==2 && ! empty($conf->global->PRODUCT_SHOW_WHEN_CREATE))
|
if (1==2 && ! empty($conf->global->PRODUCT_SHOW_WHEN_CREATE))
|
||||||
{
|
{
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print '<td> </td><td>'.$langs->trans('Label').'</td>';
|
print '<td> </td>';
|
||||||
|
print '<td>'.$langs->trans('Label').'</td>';
|
||||||
print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
|
print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
|
||||||
print '<td align="right">'.$langs->trans('VAT').'</td>';
|
print '<td align="right">'.$langs->trans('VAT').'</td>';
|
||||||
print '<td align="right">'.$langs->trans('Qty').'</td>';
|
print '<td align="right">'.$langs->trans('Qty').'</td>';
|
||||||
@ -1201,7 +1202,7 @@ if ($action == 'create')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Other options
|
// Other options
|
||||||
$parameters=array();
|
$parameters=array('colspan' => ' colspan="6"');
|
||||||
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
|
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
|
||||||
|
|
||||||
// Bouton "Create Draft"
|
// Bouton "Create Draft"
|
||||||
@ -1571,7 +1572,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Other options
|
// Other options
|
||||||
$parameters=array('colspan' => ' colspan="3"');
|
$parameters=array('colspan' => ' colspan="4"');
|
||||||
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
|
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
@ -1736,6 +1737,12 @@ else
|
|||||||
// Show range
|
// Show range
|
||||||
print_date_range($date_start,$date_end);
|
print_date_range($date_start,$date_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_object($hookmanager))
|
||||||
|
{
|
||||||
|
$parameters=array('fk_parent_line'=>$line->fk_parent_line, 'line'=>$object->lines[$i],'var'=>$var,'num'=>$num,'i'=>$i);
|
||||||
|
$reshook=$hookmanager->executeHooks('formViewProductSupplierOptions',$parameters,$object,$action);
|
||||||
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
// VAT
|
// VAT
|
||||||
@ -1808,7 +1815,7 @@ else
|
|||||||
if (is_object($hookmanager))
|
if (is_object($hookmanager))
|
||||||
{
|
{
|
||||||
$parameters=array();
|
$parameters=array();
|
||||||
$reshook=$hookmanager->executeHooks('formCreateProductOptions',$parameters,$object,$action);
|
$reshook=$hookmanager->executeHooks('formCreateSupplierProductOptions',$parameters,$object,$action);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Editor wysiwyg
|
// Editor wysiwyg
|
||||||
@ -2036,7 +2043,7 @@ else
|
|||||||
* Show mail form
|
* Show mail form
|
||||||
*/
|
*/
|
||||||
if ($action == 'presend')
|
if ($action == 'presend')
|
||||||
{
|
{
|
||||||
$ref = dol_sanitizeFileName($object->ref);
|
$ref = dol_sanitizeFileName($object->ref);
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
$fileparams = dol_most_recent_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($object->id,2).$ref, preg_quote($object->ref,'/'));
|
$fileparams = dol_most_recent_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($object->id,2).$ref, preg_quote($object->ref,'/'));
|
||||||
@ -2092,12 +2099,12 @@ else
|
|||||||
$formmail->substit['__SIGNATURE__']=$user->signature;
|
$formmail->substit['__SIGNATURE__']=$user->signature;
|
||||||
$formmail->substit['__PERSONALIZED__']='';
|
$formmail->substit['__PERSONALIZED__']='';
|
||||||
$formmail->substit['__CONTACTCIVNAME__']='';
|
$formmail->substit['__CONTACTCIVNAME__']='';
|
||||||
|
|
||||||
//Find the good contact adress
|
//Find the good contact adress
|
||||||
$custcontact='';
|
$custcontact='';
|
||||||
$contactarr=array();
|
$contactarr=array();
|
||||||
$contactarr=$object->liste_contact(-1,'external');
|
$contactarr=$object->liste_contact(-1,'external');
|
||||||
|
|
||||||
if (is_array($contactarr) && count($contactarr)>0) {
|
if (is_array($contactarr) && count($contactarr)>0) {
|
||||||
foreach($contactarr as $contact) {
|
foreach($contactarr as $contact) {
|
||||||
if ($contact['libelle']==$langs->trans('TypeContact_invoice_supplier_external_BILLING')) {
|
if ($contact['libelle']==$langs->trans('TypeContact_invoice_supplier_external_BILLING')) {
|
||||||
@ -2107,12 +2114,12 @@ else
|
|||||||
$custcontact=$contactstatic->getFullName($langs,1);
|
$custcontact=$contactstatic->getFullName($langs,1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($custcontact)) {
|
if (!empty($custcontact)) {
|
||||||
$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
|
$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tableau des parametres complementaires
|
// Tableau des parametres complementaires
|
||||||
$formmail->param['action']='send';
|
$formmail->param['action']='send';
|
||||||
$formmail->param['models']='invoice_supplier_send';
|
$formmail->param['models']='invoice_supplier_send';
|
||||||
|
|||||||
@ -185,8 +185,8 @@ $form=new Form($db);
|
|||||||
|
|
||||||
if ($action == 'create' || $action == 'add_paiement')
|
if ($action == 'create' || $action == 'add_paiement')
|
||||||
{
|
{
|
||||||
$facture = new FactureFournisseur($db);
|
$object = new FactureFournisseur($db);
|
||||||
$facture->fetch($facid);
|
$object->fetch($facid);
|
||||||
|
|
||||||
$datefacture=dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
|
$datefacture=dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
|
||||||
$dateinvoice=($datefacture==''?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0):$datefacture);
|
$dateinvoice=($datefacture==''?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0):$datefacture);
|
||||||
@ -248,91 +248,98 @@ if ($action == 'create' || $action == 'add_paiement')
|
|||||||
}
|
}
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
/*
|
|
||||||
* Autres factures impayees
|
|
||||||
*/
|
|
||||||
$sql = 'SELECT f.rowid as facid, f.rowid as ref, f.facnumber, f.total_ht, f.total_ttc, f.datef as df';
|
|
||||||
$sql.= ', SUM(pf.amount) as am';
|
|
||||||
$sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as f';
|
|
||||||
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid';
|
|
||||||
$sql.= " WHERE f.entity = ".$conf->entity;
|
|
||||||
$sql.= ' AND f.fk_soc = '.$facture->socid;
|
|
||||||
$sql.= ' AND f.paye = 0';
|
|
||||||
$sql.= ' AND f.fk_statut = 1'; // Statut=0 => non validee, Statut=2 => annulee
|
|
||||||
$sql.= ' GROUP BY f.rowid, f.facnumber, f.total_ht, f.total_ttc, f.datef';
|
|
||||||
$resql = $db->query($sql);
|
|
||||||
if ($resql)
|
|
||||||
{
|
|
||||||
$num = $db->num_rows($resql);
|
|
||||||
if ($num > 0)
|
|
||||||
{
|
|
||||||
$i = 0;
|
|
||||||
print '<br>';
|
|
||||||
|
|
||||||
print $langs->trans('Invoices').'<br>';
|
$parameters=array('facid'=>$facid, 'ref'=>$ref, 'objcanvas'=>$objcanvas);
|
||||||
print '<table class="noborder" width="100%">';
|
$reshook=$hookmanager->executeHooks('paymentsupplierinvoices',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
||||||
print '<tr class="liste_titre">';
|
$error=$hookmanager->error; $errors=$hookmanager->errors;
|
||||||
print '<td>'.$langs->trans('Ref').'</td>';
|
if (empty($reshook))
|
||||||
print '<td>'.$langs->trans('RefSupplier').'</td>';
|
{
|
||||||
print '<td align="center">'.$langs->trans('Date').'</td>';
|
/*
|
||||||
print '<td align="right">'.$langs->trans('AmountTTC').'</td>';
|
* Autres factures impayees
|
||||||
print '<td align="right">'.$langs->trans('AlreadyPaid').'</td>';
|
*/
|
||||||
print '<td align="right">'.$langs->trans('RemainderToPay').'</td>';
|
$sql = 'SELECT f.rowid as facid, f.rowid as ref, f.facnumber, f.total_ht, f.total_ttc, f.datef as df';
|
||||||
print '<td align="center">'.$langs->trans('Amount').'</td>';
|
$sql.= ', SUM(pf.amount) as am';
|
||||||
print '</tr>';
|
$sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as f';
|
||||||
|
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid';
|
||||||
|
$sql.= " WHERE f.entity = ".$conf->entity;
|
||||||
|
$sql.= ' AND f.fk_soc = '.$object->socid;
|
||||||
|
$sql.= ' AND f.paye = 0';
|
||||||
|
$sql.= ' AND f.fk_statut = 1'; // Statut=0 => non validee, Statut=2 => annulee
|
||||||
|
$sql.= ' GROUP BY f.rowid, f.facnumber, f.total_ht, f.total_ttc, f.datef';
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$num = $db->num_rows($resql);
|
||||||
|
if ($num > 0)
|
||||||
|
{
|
||||||
|
$i = 0;
|
||||||
|
print '<br>';
|
||||||
|
|
||||||
$var=True;
|
print $langs->trans('Invoices').'<br>';
|
||||||
$total=0;
|
print '<table class="noborder" width="100%">';
|
||||||
$total_ttc=0;
|
print '<tr class="liste_titre">';
|
||||||
$totalrecu=0;
|
print '<td>'.$langs->trans('Ref').'</td>';
|
||||||
while ($i < $num)
|
print '<td>'.$langs->trans('RefSupplier').'</td>';
|
||||||
{
|
print '<td align="center">'.$langs->trans('Date').'</td>';
|
||||||
$objp = $db->fetch_object($resql);
|
print '<td align="right">'.$langs->trans('AmountTTC').'</td>';
|
||||||
$var=!$var;
|
print '<td align="right">'.$langs->trans('AlreadyPaid').'</td>';
|
||||||
print '<tr '.$bc[$var].'>';
|
print '<td align="right">'.$langs->trans('RemainderToPay').'</td>';
|
||||||
print '<td><a href="fiche.php?facid='.$objp->facid.'">'.img_object($langs->trans('ShowBill'),'bill').' '.$objp->ref;
|
print '<td align="center">'.$langs->trans('Amount').'</td>';
|
||||||
print '</a></td>';
|
print '</tr>';
|
||||||
print '<td>'.$objp->facnumber.'</td>';
|
|
||||||
if ($objp->df > 0 )
|
$var=True;
|
||||||
{
|
$total=0;
|
||||||
print '<td align="center">';
|
$total_ttc=0;
|
||||||
print dol_print_date($db->jdate($objp->df)).'</td>';
|
$totalrecu=0;
|
||||||
}
|
while ($i < $num)
|
||||||
else
|
{
|
||||||
{
|
$objp = $db->fetch_object($resql);
|
||||||
print '<td align="center"><b>!!!</b></td>';
|
$var=!$var;
|
||||||
}
|
print '<tr '.$bc[$var].'>';
|
||||||
print '<td align="right">'.price($objp->total_ttc).'</td>';
|
print '<td><a href="fiche.php?facid='.$objp->facid.'">'.img_object($langs->trans('ShowBill'),'bill').' '.$objp->ref;
|
||||||
print '<td align="right">'.price($objp->am).'</td>';
|
print '</a></td>';
|
||||||
print '<td align="right">'.price($objp->total_ttc - $objp->am).'</td>';
|
print '<td>'.$objp->facnumber.'</td>';
|
||||||
print '<td align="center">';
|
if ($objp->df > 0 )
|
||||||
$namef = 'amount_'.$objp->facid;
|
{
|
||||||
print '<input type="text" size="8" name="'.$namef.'" value="'.GETPOST($namef).'">';
|
print '<td align="center">';
|
||||||
print "</td></tr>\n";
|
print dol_print_date($db->jdate($objp->df)).'</td>';
|
||||||
$total+=$objp->total_ht;
|
}
|
||||||
$total_ttc+=$objp->total_ttc;
|
else
|
||||||
$totalrecu+=$objp->am;
|
{
|
||||||
$i++;
|
print '<td align="center"><b>!!!</b></td>';
|
||||||
}
|
}
|
||||||
if ($i > 1)
|
print '<td align="right">'.price($objp->total_ttc).'</td>';
|
||||||
{
|
print '<td align="right">'.price($objp->am).'</td>';
|
||||||
// Print total
|
print '<td align="right">'.price($objp->total_ttc - $objp->am).'</td>';
|
||||||
print '<tr class="liste_total">';
|
print '<td align="center">';
|
||||||
print '<td colspan="3" align="left">'.$langs->trans('TotalTTC').':</td>';
|
$namef = 'amount_'.$objp->facid;
|
||||||
print '<td align="right"><b>'.price($total_ttc).'</b></td>';
|
print '<input type="text" size="8" name="'.$namef.'" value="'.GETPOST($namef).'">';
|
||||||
print '<td align="right"><b>'.price($totalrecu).'</b></td>';
|
print "</td></tr>\n";
|
||||||
print '<td align="right"><b>'.price($total_ttc - $totalrecu).'</b></td>';
|
$total+=$objp->total_ht;
|
||||||
print '<td align="center"> </td>';
|
$total_ttc+=$objp->total_ttc;
|
||||||
print "</tr>\n";
|
$totalrecu+=$objp->am;
|
||||||
}
|
$i++;
|
||||||
print "</table>\n";
|
}
|
||||||
}
|
if ($i > 1)
|
||||||
$db->free($resql);
|
{
|
||||||
}
|
// Print total
|
||||||
else
|
print '<tr class="liste_total">';
|
||||||
{
|
print '<td colspan="3" align="left">'.$langs->trans('TotalTTC').':</td>';
|
||||||
dol_print_error($db);
|
print '<td align="right"><b>'.price($total_ttc).'</b></td>';
|
||||||
}
|
print '<td align="right"><b>'.price($totalrecu).'</b></td>';
|
||||||
|
print '<td align="right"><b>'.price($total_ttc - $totalrecu).'</b></td>';
|
||||||
|
print '<td align="center"> </td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
}
|
||||||
|
print "</table>\n";
|
||||||
|
}
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// print '<tr><td colspan="3" align="center">';
|
// print '<tr><td colspan="3" align="center">';
|
||||||
print '<center><br><input type="checkbox" checked="checked" name="closepaidinvoices"> '.$langs->trans("ClosePaidInvoicesAutomatically");
|
print '<center><br><input type="checkbox" checked="checked" name="closepaidinvoices"> '.$langs->trans("ClosePaidInvoicesAutomatically");
|
||||||
|
|||||||
BIN
htdocs/install/doctemplates/project/template_project.odt
Executable file
BIN
htdocs/install/doctemplates/project/template_project.odt
Executable file
Binary file not shown.
BIN
htdocs/install/doctemplates/project/template_task_summary.odt
Executable file
BIN
htdocs/install/doctemplates/project/template_task_summary.odt
Executable file
Binary file not shown.
@ -400,7 +400,7 @@ if (! $error && $db->connected && $action == "set")
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
$srcroot=$main_dir.'/install/doctemplates';
|
$srcroot=$main_dir.'/install/doctemplates';
|
||||||
$destroot=$main_data_dir.'/doctemplates';
|
$destroot=$main_data_dir.'/doctemplates';
|
||||||
$docs=array('thirdparties' => 'thirdparty', 'proposals' => 'proposal', 'orders' => 'order', 'invoices' => 'invoice');
|
$docs=array('thirdparties' => 'thirdparty', 'proposals' => 'proposal', 'orders' => 'order', 'invoices' => 'invoice', 'projects' => 'project');
|
||||||
foreach($docs as $cursordir => $cursorfile)
|
foreach($docs as $cursordir => $cursorfile)
|
||||||
{
|
{
|
||||||
$src=$srcroot.'/'.$cursordir.'/template_'.$cursorfile.'.odt';
|
$src=$srcroot.'/'.$cursordir.'/template_'.$cursorfile.'.odt';
|
||||||
|
|||||||
@ -237,7 +237,7 @@ if ($action == "set" || empty($action) || preg_match('/upgrade/i',$action))
|
|||||||
dolibarr_install_syslog('install/etape5.php Activate module file='.$file);
|
dolibarr_install_syslog('install/etape5.php Activate module file='.$file);
|
||||||
$res=dol_include_once("/core/modules/".$file);
|
$res=dol_include_once("/core/modules/".$file);
|
||||||
|
|
||||||
$res=Activate($modtoactivatenew,1);
|
$res=activateModule($modtoactivatenew,1);
|
||||||
if (! $result) print 'ERROR in activating module file='.$file;
|
if (! $result) print 'ERROR in activating module file='.$file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -421,4 +421,4 @@ clearstatcache();
|
|||||||
dolibarr_install_syslog("--- install/etape5.php Dolibarr setup finished", LOG_INFO);
|
dolibarr_install_syslog("--- install/etape5.php Dolibarr setup finished", LOG_INFO);
|
||||||
|
|
||||||
pFooter(1,$setuplang);
|
pFooter(1,$setuplang);
|
||||||
?>
|
?>
|
||||||
|
|||||||
@ -1,5 +1,22 @@
|
|||||||
# Dolibarr language file - en_US - cron
|
# Dolibarr language file - en_US - cron
|
||||||
CHARSET=UTF-8
|
CHARSET=UTF-8
|
||||||
|
Module2310Name=Cron
|
||||||
|
Module2310Desc=Scheduled task management
|
||||||
|
|
||||||
|
#
|
||||||
|
# About page
|
||||||
|
#
|
||||||
|
About = About
|
||||||
|
CronAbout = About Cron
|
||||||
|
CronAboutPage = Cron about page
|
||||||
|
|
||||||
|
#
|
||||||
|
# Right
|
||||||
|
#
|
||||||
|
Permission23101 = Read Scheduled task
|
||||||
|
Permission23102 = Create/update Scheduled task
|
||||||
|
Permission23103 = Delete Scheduled task
|
||||||
|
Permission23104 = Execute Scheduled task
|
||||||
|
|
||||||
#
|
#
|
||||||
# Admin
|
# Admin
|
||||||
@ -12,6 +29,14 @@ FileToLaunchCronJobs=Command to launch cron jobs
|
|||||||
CronExplainHowToRunUnix=On Unix environement you should use crontab to run Command line each minutes
|
CronExplainHowToRunUnix=On Unix environement you should use crontab to run Command line each minutes
|
||||||
CronExplainHowToRunWin=On Microsoft(tm) Windows environement you can use Scheduled task tools to run Command line each minutes
|
CronExplainHowToRunWin=On Microsoft(tm) Windows environement you can use Scheduled task tools to run Command line each minutes
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Menu
|
||||||
|
#
|
||||||
|
CronListActive= List of active jobs
|
||||||
|
CronListInactive= List of disabled jobs
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Page list
|
# Page list
|
||||||
#
|
#
|
||||||
|
|||||||
@ -96,3 +96,6 @@ TypeContact_propal_external_CUSTOMER=Customer contact following-up proposal
|
|||||||
# Document models
|
# Document models
|
||||||
DocModelAzurDescription=A complete proposal model (logo...)
|
DocModelAzurDescription=A complete proposal model (logo...)
|
||||||
DocModelJauneDescription=Jaune proposal model
|
DocModelJauneDescription=Jaune proposal model
|
||||||
|
DefaultModelPropalCreate=Default model creation
|
||||||
|
DefaultModelPropalToBill=Default template when closing a business proposal (to be invoiced)
|
||||||
|
DefaultModelPropalClosed=Default template when closing a business proposal (unbilled)
|
||||||
|
|||||||
@ -97,4 +97,7 @@ TypeContact_propal_external_CUSTOMER=Contact client suivi propale
|
|||||||
DocModelAzurDescription=Modèle de propositions commerciales complet (logo...)
|
DocModelAzurDescription=Modèle de propositions commerciales complet (logo...)
|
||||||
DocModelJauneDescription=Modèle de proposition Jaune
|
DocModelJauneDescription=Modèle de proposition Jaune
|
||||||
Numbershort=N°
|
Numbershort=N°
|
||||||
|
DefaultModelPropalCreate=Modèle par défaut à la création
|
||||||
|
DefaultModelPropalToBill=Modèle par défaut lors de la cloture d'une proposition commerciale (à facturer)
|
||||||
|
DefaultModelPropalClosed=Modèle par défaut lors de la cloture d'une proposition commerciale (non facturée)
|
||||||
|
|
||||||
|
|||||||
@ -1075,6 +1075,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
|
|||||||
print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ckeditor.js"></script>'."\n";
|
print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ckeditor.js"></script>'."\n";
|
||||||
}
|
}
|
||||||
// jQuery File Upload
|
// jQuery File Upload
|
||||||
|
/*
|
||||||
if (! empty($conf->global->MAIN_USE_JQUERY_FILEUPLOAD) || (defined('REQUIRE_JQUERY_FILEUPLOAD') && constant('REQUIRE_JQUERY_FILEUPLOAD')))
|
if (! empty($conf->global->MAIN_USE_JQUERY_FILEUPLOAD) || (defined('REQUIRE_JQUERY_FILEUPLOAD') && constant('REQUIRE_JQUERY_FILEUPLOAD')))
|
||||||
{
|
{
|
||||||
print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/template/tmpl.min.js"></script>'."\n";
|
print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/template/tmpl.min.js"></script>'."\n";
|
||||||
@ -1086,6 +1087,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
|
|||||||
print '<!-- The XDomainRequest Transport is included for cross-domain file deletion for IE8+ -->'."\n";
|
print '<!-- The XDomainRequest Transport is included for cross-domain file deletion for IE8+ -->'."\n";
|
||||||
print '<!--[if gte IE 8]><script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/fileupload/js/cors/jquery.xdr-transport.js"></script><![endif]-->'."\n";
|
print '<!--[if gte IE 8]><script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/fileupload/js/cors/jquery.xdr-transport.js"></script><![endif]-->'."\n";
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// jQuery DataTables
|
// jQuery DataTables
|
||||||
if (! empty($conf->global->MAIN_USE_JQUERY_DATATABLES) || (defined('REQUIRE_JQUERY_DATATABLES') && constant('REQUIRE_JQUERY_DATATABLES')))
|
if (! empty($conf->global->MAIN_USE_JQUERY_DATATABLES) || (defined('REQUIRE_JQUERY_DATATABLES') && constant('REQUIRE_JQUERY_DATATABLES')))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
/* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
/* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
* Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
* Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -260,7 +261,7 @@ class Project extends CommonObject
|
|||||||
if (empty($id) && empty($ref)) return -1;
|
if (empty($id) && empty($ref)) return -1;
|
||||||
|
|
||||||
$sql = "SELECT rowid, ref, title, description, public, datec";
|
$sql = "SELECT rowid, ref, title, description, public, datec";
|
||||||
$sql.= ", tms, dateo, datee, fk_soc, fk_user_creat, fk_statut, note_private, note_public";
|
$sql.= ", tms, dateo, datee, fk_soc, fk_user_creat, fk_statut, note_private, note_public,model_pdf";
|
||||||
$sql.= " FROM " . MAIN_DB_PREFIX . "projet";
|
$sql.= " FROM " . MAIN_DB_PREFIX . "projet";
|
||||||
if (! empty($id))
|
if (! empty($id))
|
||||||
{
|
{
|
||||||
@ -298,6 +299,7 @@ class Project extends CommonObject
|
|||||||
$this->user_author_id = $obj->fk_user_creat;
|
$this->user_author_id = $obj->fk_user_creat;
|
||||||
$this->public = $obj->public;
|
$this->public = $obj->public;
|
||||||
$this->statut = $obj->fk_statut;
|
$this->statut = $obj->fk_statut;
|
||||||
|
$this->modelpdf = $obj->model_pdf;
|
||||||
|
|
||||||
$this->db->free($resql);
|
$this->db->free($resql);
|
||||||
|
|
||||||
|
|||||||
BIN
htdocs/theme/amarok/img/play.png
Normal file
BIN
htdocs/theme/amarok/img/play.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 836 B |
BIN
htdocs/theme/auguria/img/play.png
Normal file
BIN
htdocs/theme/auguria/img/play.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 836 B |
BIN
htdocs/theme/bureau2crea/img/play.png
Normal file
BIN
htdocs/theme/bureau2crea/img/play.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 836 B |
BIN
htdocs/theme/cameleo/img/play.png
Normal file
BIN
htdocs/theme/cameleo/img/play.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 836 B |
BIN
htdocs/theme/eldy/img/play.png
Normal file
BIN
htdocs/theme/eldy/img/play.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 836 B |
Loading…
Reference in New Issue
Block a user